The Hodge Conjecture Formalization

3. Cycles and cohomology with support🔗

3.1. Cycles are indexed by generic points🔗

The coheight of a point x of a scheme is the codimension of its closure \overline{\{x\}}, an irreducible closed subset with generic point x. A codimension-p cycle is a locally finite integer combination of points of coheight p. The formalization uses this description throughout, in place of a separate type of subvarieties.

def codimensionCycleSubgroup (X : Scheme.{u}) (p : ) : AddSubgroup (AlgebraicCycle X ) where carrier c := x, c x 0 coheight x = p zero_mem' x hx := (hx rfl).elim add_mem' := X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x:X✝.lefthx:coheight x = p✝n:X:Schemep: {a b : AlgebraicCycle X }, (a fun c (x : X), c x 0 coheight x = p) (b fun c (x : X), c x 0 coheight x = p) a + b fun c (x : X), c x 0 coheight x = p X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x✝:X✝.lefthx✝:coheight x = p✝n:X:Schemep:a:AlgebraicCycle X b:AlgebraicCycle X ha:a fun c (x : X), c x 0 coheight x = phb:b fun c (x : X), c x 0 coheight x = px:Xhx:(a + b) x 0coheight x = p X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x✝:X✝.lefthx✝:coheight x = p✝n:X:Schemep:a:AlgebraicCycle X b:AlgebraicCycle X ha:a fun c (x : X), c x 0 coheight x = phb:b fun c (x : X), c x 0 coheight x = px:Xhx:(a + b) x 0hax:a x = 0coheight x = pX✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x✝:X✝.lefthx✝:coheight x = p✝n:X:Schemep:a:AlgebraicCycle X b:AlgebraicCycle X ha:a fun c (x : X), c x 0 coheight x = phb:b fun c (x : X), c x 0 coheight x = px:Xhx:(a + b) x 0hax:¬a x = 0coheight x = p X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x✝:X✝.lefthx✝:coheight x = p✝n:X:Schemep:a:AlgebraicCycle X b:AlgebraicCycle X ha:a fun c (x : X), c x 0 coheight x = phb:b fun c (x : X), c x 0 coheight x = px:Xhx:(a + b) x 0hax:a x = 0coheight x = p exact hb x (X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x✝:X✝.lefthx✝:coheight x = p✝n:X:Schemep:a:AlgebraicCycle X b:AlgebraicCycle X ha:a fun c (x : X), c x 0 coheight x = phb:b fun c (x : X), c x 0 coheight x = px:Xhx:(a + b) x 0hax:a x = 0b x 0 All goals completed! 🐙) X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x✝:X✝.lefthx✝:coheight x = p✝n:X:Schemep:a:AlgebraicCycle X b:AlgebraicCycle X ha:a fun c (x : X), c x 0 coheight x = phb:b fun c (x : X), c x 0 coheight x = px:Xhx:(a + b) x 0hax:¬a x = 0coheight x = p All goals completed! 🐙 neg_mem' := X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x:X✝.lefthx:coheight x = p✝n:X:Schemep: {x : AlgebraicCycle X }, (x fun c (x : X), c x 0 coheight x = p) -x fun c (x : X), c x 0 coheight x = p X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x✝:X✝.lefthx✝:coheight x = p✝n:X:Schemep:a:AlgebraicCycle X ha:a fun c (x : X), c x 0 coheight x = px:Xhx:(-a) x 0coheight x = p X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x✝:X✝.lefthx✝:coheight x = p✝n:X:Schemep:a:AlgebraicCycle X ha:a fun c (x : X), c x 0 coheight x = px:Xhx:(-a) x 0h:a x = 0(-a) x = 0 X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x✝:X✝.lefthx✝:coheight x = p✝n:X:Schemep:a:AlgebraicCycle X ha:a fun c (x : X), c x 0 coheight x = px:Xhx:(-a) x 0h:a x = 0-a x = 0 All goals completed! 🐙 noncomputable def codimensionCycleSubgroup.single {X : Scheme.{u}} {p : } (x : X) (hx : coheight x = p) (n : ) : codimensionCycleSubgroup X p := X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x✝:X✝.lefthx✝:coheight x✝ = p✝n✝:X:Schemep:x:Xhx:coheight x = pn:(codimensionCycleSubgroup X p) classical exact Function.locallyFinsuppWithin.single x n, X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x✝:X✝.lefthx✝:coheight x✝ = p✝n✝:X:Schemep:x:Xhx:coheight x = pn:Function.locallyFinsuppWithin.single x n codimensionCycleSubgroup X p X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x✝:X✝.lefthx✝:coheight x✝ = p✝n✝:X:Schemep:x:Xhx:coheight x = pn:y:Xhy:(Function.locallyFinsuppWithin.single x n) y 0coheight y = p X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x✝:X✝.lefthx✝:coheight x✝ = p✝n✝:X:Schemep:x:Xhx:coheight x = pn:y:Xhy:(Function.locallyFinsuppWithin.single x n) y 0h:y = xcoheight y = pX✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x✝:X✝.lefthx✝:coheight x✝ = p✝n✝:X:Schemep:x:Xhx:coheight x = pn:y:Xhy:(Function.locallyFinsuppWithin.single x n) y 0h:¬y = xcoheight y = p X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x✝:X✝.lefthx✝:coheight x✝ = p✝n✝:X:Schemep:x:Xhx:coheight x = pn:y:Xhy:(Function.locallyFinsuppWithin.single x n) y 0h:y = xcoheight y = p All goals completed! 🐙 X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p✝:x✝:X✝.lefthx✝:coheight x✝ = p✝n✝:X:Schemep:x:Xhx:coheight x = pn:y:Xhy:(Function.locallyFinsuppWithin.single x n) y 0h:¬y = xcoheight y = p All goals completed! 🐙

3.2. The support of a subvariety🔗

For a point x of X.left, cycleComponent X.left x is the reduced closed subscheme with underlying space \overline{\{x\}}, and cycleComponentι is its closed immersion into X.left. The support of the subvariety in X(\mathbb C) is the preimage of \overline{\{x\}} under the map from complex points to scheme points, and it is closed in the analytic topology.

def cycleComponent (X : Scheme) (x : X) : Scheme := (Scheme.IdealSheafData.vanishingIdeal (X := X) closure {x}, isClosed_closure).subscheme def cycleComponentι (X : Scheme) (x : X) : cycleComponent X x X := (Scheme.IdealSheafData.vanishingIdeal (X := X) closure {x}, isClosed_closure).subschemeι def cycleComponentSupport (X : Over (Spec )) [IsIntegral X.left] [Smooth X.hom] [IsProjective X.hom] (x : X.left) : Set (ComplexPoint X) := Point.underlying ⁻¹' closure {x} AlgebraicGeometry.isClosed_cycleComponentSupport (X : Over (Spec (CommRingCat.of ))) [AlgebraicGeometry.IsIntegral X.left] [Smooth X.hom] [IsProjective X.hom] (x : X.left) : IsClosed (cycleComponentSupport X x)#check AlgebraicGeometry.isClosed_cycleComponentSupport

Only the ambient variety is assumed smooth. A subvariety may be singular, and the construction of its class in the next section handles that case from the start.

3.3. Cohomology with support🔗

Let Z\subseteq X(\mathbb C) be closed, with open complement j:U\hookrightarrow X(\mathbb C). Cohomology with support in Z sits in the distinguished triangle

R\Gamma_Z(X,\mathbb Q_X)\longrightarrow R\Gamma(X,\mathbb Q_X) \longrightarrow R\Gamma(U,\mathbb Q_U)\xrightarrow{+1}.

The formalization builds the first term as a homotopy fibre. It resolves the constant sheaf \underline{\mathbb Q}_U injectively, pushes the resolution forward along j, maps \underline{\mathbb Q}_X to the result, and takes the mapping cone shifted by -1. Hypercohomology of this complex is H^n_Z(X;\mathbb Q), and the connecting map of the triangle is forgetSupport, the map H^n_Z(X;\mathbb Q)\to H^n(X;\mathbb Q).

abbrev rationalCohomologyWithSupportComplex (X : Over (Spec )) (Z : Set (ComplexPoint X)) : CochainComplex (AnalyticAdditiveSheaf X) := CochainComplex.mappingCone (rationalRestrictionComplexInt X Z) abbrev RationalCohomologyWithSupport (X : Over (Spec )) (Z : Set (ComplexPoint X)) (n : ) : Type 1 := Hypercohomology X (rationalCohomologyWithSupportComplex X Z) (n - 1) def forgetSupport (X : Over (Spec )) (Z : Set (ComplexPoint X)) (n : ) : RationalCohomologyWithSupport X Z n →+ H^n(X; ) where toFun α := α.comp (forgetSupportShiftedHom X Z) (X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p:x:X✝.lefthx:coheight x = pn✝:X:Over (Spec (CommRingCat.of ))Z:Set (ComplexPoint X)n:α:RationalCohomologyWithSupport X Z n1 + (n - 1) = n All goals completed! 🐙) map_zero' := X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p:x:X✝.lefthx:coheight x = pn✝:X:Over (Spec (CommRingCat.of ))Z:Set (ComplexPoint X)n:Localization.SmallShiftedHom.comp 0 (forgetSupportShiftedHom X Z) = 0 X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p:x:X✝.lefthx:coheight x = pn✝:X:Over (Spec (CommRingCat.of ))Z:Set (ComplexPoint X)n:(Localization.SmallShiftedHom.equiv (analyticQuasiIsomorphisms X) DerivedCategory.Q) (Localization.SmallShiftedHom.comp 0 (forgetSupportShiftedHom X Z) ) = (Localization.SmallShiftedHom.equiv (analyticQuasiIsomorphisms X) DerivedCategory.Q) 0 All goals completed! 🐙 map_add' α β := X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p:x:X✝.lefthx:coheight x = pn✝:X:Over (Spec (CommRingCat.of ))Z:Set (ComplexPoint X)n:α:RationalCohomologyWithSupport X Z nβ:RationalCohomologyWithSupport X Z nLocalization.SmallShiftedHom.comp (α + β) (forgetSupportShiftedHom X Z) = Localization.SmallShiftedHom.comp α (forgetSupportShiftedHom X Z) + Localization.SmallShiftedHom.comp β (forgetSupportShiftedHom X Z) X✝:Over (Spec (CommRingCat.of ))inst✝²:AlgebraicGeometry.IsIntegral X✝.leftinst✝¹:Smooth X✝.hominst✝:IsProjective X✝.homd:p:x:X✝.lefthx:coheight x = pn✝:X:Over (Spec (CommRingCat.of ))Z:Set (ComplexPoint X)n:α:RationalCohomologyWithSupport X Z nβ:RationalCohomologyWithSupport X Z n(Localization.SmallShiftedHom.equiv (analyticQuasiIsomorphisms X) DerivedCategory.Q) (Localization.SmallShiftedHom.comp (α + β) (forgetSupportShiftedHom X Z) ) = (Localization.SmallShiftedHom.equiv (analyticQuasiIsomorphisms X) DerivedCategory.Q) (Localization.SmallShiftedHom.comp α (forgetSupportShiftedHom X Z) + Localization.SmallShiftedHom.comp β (forgetSupportShiftedHom X Z) ) All goals completed! 🐙

For the triangle and the exact sequence of a pair see Goresky, §§7.14–7.15; for the derived-functor description see the Stacks Project, §20.21.