The Hodge Conjecture Formalization

2. Hodge classes🔗

2.1. The variety and its complex points🔗

We begin with the definition of a projective morphism of schemes.

class IsProjective {X T : Scheme.{w}} (f : X T) : Prop where /-- A finite-dimensional projective presentation exists. -/ nonempty_presentation : Nonempty (Presentation f)

A point of a scheme over \operatorname{Spec}R with values in R is a morphism over \operatorname{Spec}R; the complex points are the case R=\mathbb C. Each has an underlying scheme point.

abbrev Point (R : Type) [CommRing R] (X : Over (Spec R)) := Over.mk (𝟙 (Spec R)) X abbrev ComplexPoint (X : Over (Spec )) := Point X noncomputable def Point.underlying {R : Type} [CommRing R] [IsLocalRing R] {X : Over (Spec R)} (z : Point R X) : X.left := z.stalkData.1

The analytic topology is glued from affine charts. Over an affine open U, evaluating regular functions embeds the points above U into \operatorname{Hom}(\Gamma(U),R) with the topology of pointwise convergence, and the analytic topology is the finest topology for which all these charts are continuous. It is generated by the sets on which a local regular function takes values in a prescribed open subset of R; for R=\mathbb C this is the usual analytic topology.

Definition `Guide.Hodge.D24.Point.chartTopology` of class type is semireducible. Most type class instances should be instance-reducible, so consider marking this definition with `@[instance_reducible]`. If it is intentionally semireducible, this warning can be disabled with `set_option warn.classDefReducibility false`.noncomputable def Point.chartTopology {R : Type} [CommRing R] [IsLocalRing R] {X : Over (Spec R)} [TopologicalSpace R] (U : X.left.Opens) : TopologicalSpace (OverOpen (X := X) U) := .induced (evaluationHom U) inferInstance noncomputable instance Point.analyticTopology {R : Type} [CommRing R] [IsLocalRing R] {X : Over (Spec R)} [TopologicalSpace R] : TopologicalSpace (Point R X) := U : X.left.affineOpens, .coinduced (Subtype.val : OverOpen (X := X) U.1 _) (chartTopology U.1) AlgebraicGeometry.Point.analyticTopology_eq_generateFrom {R : Type} [CommRing R] [IsLocalRing R] {X : Over (Spec (CommRingCat.of R))} [TopologicalSpace R] [ContinuousMul R] [IsOpenUnits R] : Point.analyticTopology = generateFrom Point.analyticSubbasis#check AlgebraicGeometry.Point.analyticTopology_eq_generateFrom

The dimension of X is the Krull dimension of its underlying space, as a natural number.

def dim (X : Type*) [TopologicalSpace X] [IrreducibleSpace X] : := ((topologicalKrullDim X).unbotD 0).toNat

2.2. The holomorphic de Rham complex🔗

Let X be a smooth complex scheme. The formalization works on the space X(\mathbb C) of its complex points with the analytic topology. Holomorphic differential forms on this space are first assembled into presheaves, and exterior differentiation makes them a complex of presheaves

\mathcal O_X \xrightarrow{d} \Omega_X^1 \xrightarrow{d} \Omega_X^2 \xrightarrow{d}\cdots.

Sheafifying degree by degree gives the holomorphic de Rham complex, indexed by the natural numbers: its terms are the sheaves of holomorphic forms and its differentials the exterior derivatives, both constructed in HodgeConjecture/Definitions/AlgebraicGeometry/Hodge/HolomorphicDeRham.lean.

def holomorphicDeRhamComplex (X : Over (Spec )) (d : ) [SmoothOfRelativeDimension d X.hom] : CochainComplex (TopCat.Sheaf AddCommGrpCat (TopCat.of (ComplexPoint X))) := CochainComplex.of (holomorphicDeRhamSheaf X d) (holomorphicDeRhamSheafDifferential X d) (fun 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:Over (Spec (CommRingCat.of ))d:inst✝:SmoothOfRelativeDimension d X.homp:holomorphicDeRhamSheafDifferential X d p holomorphicDeRhamSheafDifferential X d (p + 1) = 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:Over (Spec (CommRingCat.of ))d:inst✝:SmoothOfRelativeDimension d X.homp:J:GrothendieckTopology (Opens (TopCat.of (ComplexPoint X))) := Opens.grothendieckTopology (TopCat.of (ComplexPoint X))holomorphicDeRhamSheafDifferential X d p holomorphicDeRhamSheafDifferential X d (p + 1) = 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:Over (Spec (CommRingCat.of ))d:inst✝:SmoothOfRelativeDimension d X.homp:J:GrothendieckTopology (Opens (TopCat.of (ComplexPoint X))) := Opens.grothendieckTopology (TopCat.of (ComplexPoint X))(presheafToSheaf J AddCommGrpCat).map (holomorphicDeRhamDifferential X d p) (presheafToSheaf J AddCommGrpCat).map (holomorphicDeRhamDifferential X d (p + 1)) = 0 All goals completed! 🐙)

Extending by zero to the integers gives the version used from now on, because the shifts used later act on \mathbb Z-indexed complexes.

def holomorphicDeRhamComplexInt (X : Over (Spec )) [IsIntegral X.left] [Smooth X.hom] : CochainComplex (TopCat.Sheaf AddCommGrpCat (ComplexPoint X)) := (holomorphicDeRhamComplex X (dim X.left)).extend ComplexShape.embeddingUpNat

Constant functions give a morphism to the de Rham complex from the constant sheaf \underline{\mathbb C}_X, placed in degree zero.

def constantsToHolomorphicDeRhamComplexInt (X : Over (Spec )) [IsIntegral X.left] [Smooth X.hom] : constantComplexSheafComplexInt X holomorphicDeRhamComplexInt X := HomologicalComplex.extendMap (constantsToHolomorphicDeRhamComplex X (dim X.left)) ComplexShape.embeddingUpNat

The instance below is the holomorphic Poincaré lemma:

AlgebraicGeometry.ComplexPoint.constantsToHolomorphicDeRhamComplexInt_quasiIso (X : Over (Spec (CommRingCat.of ))) [AlgebraicGeometry.IsIntegral X.left] [Smooth X.hom] : QuasiIso (constantsToHolomorphicDeRhamComplexInt X)#check AlgebraicGeometry.ComplexPoint.constantsToHolomorphicDeRhamComplexInt_quasiIso

It says that, on stalks, a closed holomorphic form of positive degree is exact, and the closed holomorphic functions are the locally constant ones, so

\underline{\mathbb C}_X \longrightarrow \Omega_X^\bullet

is a quasi-isomorphism. This is the analytic de Rham theorem in the form used below. Goresky's notes, §3.10, explain how the Poincaré lemma exhibits the de Rham complex as a resolution of the constant sheaf and thereby computes its cohomology.

2.3. Cohomology as morphisms in the derived category🔗

For a complex of sheaves K^\bullet on X(\mathbb C), hypercohomology is defined as a group of morphisms in the derived category,

\mathbb H^n(X,K^\bullet) =\operatorname{Hom}_{D(X)}(\underline{\mathbb Z}_X,K^\bullet[n]),

where \underline{\mathbb Z}_X is the constant sheaf in degree zero. The derived category is never constructed: Mathlib's Localization.SmallShiftedHom provides these morphism groups in the localization of complexes at quasi-isomorphisms without choosing a model for it. Rational cohomology and de Rham cohomology are the cases K^\bullet=\underline{\mathbb Q}_X and K^\bullet=\Omega_X^\bullet.

def Hypercohomology (X : Over (Spec )) (K : CochainComplex (AnalyticAdditiveSheaf X) ) (n : ) : Type 1 := Localization.SmallShiftedHom.{1} (analyticQuasiIsomorphisms X) (constantIntegerSheafComplexInt X) K n

Cohomology with coefficients in a field K is the case of the constant sheaf K, and it is written with the notation H^n(X;K):

example (K : Type) [Field K] (X : Over (Spec )) (n : ) : H^n(X; K) = Hypercohomology X (constantFieldSheafComplexInt K X) n := rfl abbrev DeRhamHypercohomology (X : Over (Spec )) [IsIntegral X.left] [Smooth X.hom] (n : ) : Type 1 := Hypercohomology X (holomorphicDeRhamComplexInt X) n def fieldToDeRhamCohomologyLinear (K : Type) [Field K] [Algebra K ] (X : Over (Spec )) [IsIntegral X.left] [Smooth X.hom] (n : ) : H^n(X; K) →ₗ[K] DeRhamHypercohomology X n where toFun := fieldToDeRhamCohomology K X n map_add' := (fieldToDeRhamCohomology K X n).map_add map_smul' := fieldToDeRhamCohomology_smul K X n

The comparison map H^n(X;\mathbb Q)\to H^n_{\mathrm{dR}}(X) is induced by the composite \underline{\mathbb Q}_X\to\underline{\mathbb C}_X\to\Omega_X^\bullet. It is \mathbb Q-linear and injective; injectivity combines the quasi-isomorphism above with the injectivity of extending scalars from \mathbb Q to \mathbb C. Nothing more is needed, since Hodge classes are defined as a preimage along this map.

2.4. The Hodge filtration🔗

The Hodge filtration comes from the stupid truncation of the de Rham complex,

F^p\Omega_X^\bullet=\sigma_{\ge p}\Omega_X^\bullet =[0\to\cdots\to0\to\Omega_X^p\to\Omega_X^{p+1}\to\cdots].

Its inclusion into \Omega_X^\bullet induces a map on hypercohomology, and F^pH^n_{\mathrm{dR}}(X) is the image of that map. This is the standard definition; compare the Stacks Project, §50.7, and Deligne's article, p. 51, where the same truncated complex appears.

def hodgeFilteredDeRhamComplex (X : Over (Spec )) [IsIntegral X.left] [Smooth X.hom] (p : ) : CochainComplex (AnalyticAdditiveSheaf X) := (holomorphicDeRhamComplexInt X).stupidTrunc (ComplexShape.embeddingUpIntGE p) def hodgeFilteredDeRhamInclusion (X : Over (Spec )) [IsIntegral X.left] [Smooth X.hom] (p : ) : hodgeFilteredDeRhamComplex X p holomorphicDeRhamComplexInt X := HomologicalComplex.stupidTruncInclusion (holomorphicDeRhamComplexInt X) (ComplexShape.embeddingUpIntGE p) def filteredToDeRhamCohomology (X : Over (Spec )) [IsIntegral X.left] [Smooth X.hom] (p n : ) : FilteredDeRhamHypercohomology X p n →+ DeRhamHypercohomology X n := hypercohomologyMap X (hodgeFilteredDeRhamInclusion X p) n def hodgeFiltrationComplexSubmodule (X : Over (Spec )) [IsIntegral X.left] [Smooth X.hom] (p n : ) : Submodule (DeRhamHypercohomology X n) where carrier := hodgeFiltration X p n zero_mem' := (hodgeFiltration X p n).zero_mem add_mem' := (hodgeFiltration X p n).add_mem smul_mem' := fun c _ h => hodgeFiltration_complex_smul_mem X p n c h

The image is a priori an additive subgroup. Compatibility with complex scalars is proved, and hodgeFiltrationComplexSubmodule bundles the image as a \mathbb C-subspace, which restricts to a subspace over any coefficient field contained in \mathbb C. Two sanity checks are also proved: F^0 is all of H^n_{\mathrm{dR}}(X), and F^p=0 for p>\dim X. Both are used later — the first is what makes every degree-zero class a Hodge class, the second is what makes the conjecture vacuous above the dimension.

AlgebraicGeometry.ComplexPoint.hodgeFiltrationComplexSubmodule_zero_eq_top (X : Over (Spec (CommRingCat.of ))) [AlgebraicGeometry.IsIntegral X.left] [Smooth X.hom] (n : ) : hodgeFiltrationComplexSubmodule X 0 n = #check AlgebraicGeometry.ComplexPoint.hodgeFiltrationComplexSubmodule_zero_eq_top AlgebraicGeometry.ComplexPoint.hodgeFiltration_eq_bot_of_lt (X : Over (Spec (CommRingCat.of ))) [AlgebraicGeometry.IsIntegral X.left] [Smooth X.hom] {p : } (hp : (dim X.left) < p) (n : ) : hodgeFiltration X p n = #check AlgebraicGeometry.ComplexPoint.hodgeFiltration_eq_bot_of_lt

2.5. Complex conjugation and the Hodge pieces🔗

The Hodge pieces H^{p,q} are defined by the identity

H^{p,q}=F^p\cap\overline{F^q},

which holds in any pure Hodge structure and needs no Hodge decomposition theorem. Complex conjugation is not \mathbb C-linear, so it does not act on the holomorphic de Rham complex. It acts on the constant sheaf \underline{\mathbb C}_X by conjugating coefficients, and it is transported to de Rham cohomology across the comparison isomorphism of the first subsection.

def conjConstantComplexPresheaf (X : Over (Spec )) : constantComplexAddCommGrpPresheaf X constantComplexAddCommGrpPresheaf X where app _ := AddCommGrpCat.ofHom (starRingEnd ).toAddMonoidHom naturality {U V} i := 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 ))U:(Opens (TopCat.of (ComplexPoint X)))ᵒᵖV:(Opens (TopCat.of (ComplexPoint X)))ᵒᵖi:U V(constantComplexAddCommGrpPresheaf X).map i AddCommGrpCat.ofHom (starRingEnd ).toAddMonoidHom = AddCommGrpCat.ofHom (starRingEnd ).toAddMonoidHom (constantComplexAddCommGrpPresheaf X).map i 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 ))U:(Opens (TopCat.of (ComplexPoint X)))ᵒᵖV:(Opens (TopCat.of (ComplexPoint X)))ᵒᵖi:U Vx:((constantComplexAddCommGrpPresheaf X).obj U)(AddCommGrpCat.Hom.hom ((constantComplexAddCommGrpPresheaf X).map i AddCommGrpCat.ofHom (starRingEnd ).toAddMonoidHom)) x = (AddCommGrpCat.Hom.hom (AddCommGrpCat.ofHom (starRingEnd ).toAddMonoidHom (constantComplexAddCommGrpPresheaf X).map i)) x All goals completed! 🐙 def conjConstantComplexSheafComplexInt (X : Over (Spec )) : constantComplexSheafComplexInt X constantComplexSheafComplexInt X := HomologicalComplex.extendMap (conjConstantComplexComplex X) ComplexShape.embeddingUpNat def complexConstantCohomologyDeRhamAddEquiv (X : Over (Spec )) [IsIntegral X.left] [Smooth X.hom] (n : ) : ComplexConstantCohomology X n ≃+ DeRhamHypercohomology X n := { complexConstantCohomologyDeRhamEquiv X n with map_add' := fun α β 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 ))inst✝¹:AlgebraicGeometry.IsIntegral X.leftinst✝:Smooth X.homn:α:ComplexConstantCohomology X nβ:ComplexConstantCohomology X n(complexConstantCohomologyDeRhamEquiv X n).toFun (α + β) = (complexConstantCohomologyDeRhamEquiv X n).toFun α + (complexConstantCohomologyDeRhamEquiv X n).toFun β 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 ))inst✝¹:AlgebraicGeometry.IsIntegral X.leftinst✝:Smooth X.homn:α:ComplexConstantCohomology X nβ:ComplexConstantCohomology X n(hypercohomologyMap X (constantsToHolomorphicDeRhamComplexInt X) n) (α + β) = (hypercohomologyMap X (constantsToHolomorphicDeRhamComplexInt X) n) α + (hypercohomologyMap X (constantsToHolomorphicDeRhamComplexInt X) n) β All goals completed! 🐙 } def deRhamConj (X : Over (Spec )) [IsIntegral X.left] [Smooth X.hom] (n : ) : DeRhamHypercohomology X n →+ DeRhamHypercohomology X n := ((complexConstantCohomologyDeRhamAddEquiv X n).toAddMonoidHom).comp ((hypercohomologyMap X (conjConstantComplexSheafComplexInt X) n).comp (complexConstantCohomologyDeRhamAddEquiv X n).symm.toAddMonoidHom)

The result is an involution and is conjugate-linear, so it can be bundled as a semilinear map; \overline{F^q} is then the preimage of F^q under it.

AlgebraicGeometry.ComplexPoint.deRhamConj_involutive (X : Over (Spec (CommRingCat.of ))) [AlgebraicGeometry.IsIntegral X.left] [Smooth X.hom] (n : ) : Function.Involutive (deRhamConj X n)#check AlgebraicGeometry.ComplexPoint.deRhamConj_involutive AlgebraicGeometry.ComplexPoint.deRhamConj_smul (X : Over (Spec (CommRingCat.of ))) [AlgebraicGeometry.IsIntegral X.left] [Smooth X.hom] (n : ) (c : ) (α : DeRhamHypercohomology X n) : (deRhamConj X n) (c α) = (starRingEnd ) c (deRhamConj X n) α#check AlgebraicGeometry.ComplexPoint.deRhamConj_smul def deRhamConjSemilinear (X : Over (Spec )) [IsIntegral X.left] [Smooth X.hom] (n : ) : DeRhamHypercohomology X n →ₛₗ[starRingEnd ] DeRhamHypercohomology X n where toFun := deRhamConj X n map_add' := (deRhamConj X n).map_add map_smul' := deRhamConj_smul X n def conjHodgeFiltrationComplexSubmodule (X : Over (Spec )) [IsIntegral X.left] [Smooth X.hom] (p n : ) : Submodule (DeRhamHypercohomology X n) := (hodgeFiltrationComplexSubmodule X p n).comap (deRhamConjSemilinear X n) def hodgePiece (X : Over (Spec )) [IsIntegral X.left] [Smooth X.hom] (p q n : ) : Submodule (DeRhamHypercohomology X n) := hodgeFiltrationComplexSubmodule X p n conjHodgeFiltrationComplexSubmodule X q n

The degree n is an independent index, as for the filtration; when p+q=n this is the usual (p,q) piece.

2.6. Hodge classes🔗

The Hodge classes of degree 2p with coefficients in a field K\subseteq\mathbb C are the classes whose de Rham image lies in the (p,p) piece:

\operatorname{Hdg}^p(X;K) =\{\alpha\in H^{2p}(X;K):\alpha_{\mathrm{dR}}\in H^{p,p}\}.

In Lean this is the preimage of hodgePiece under the comparison map, and the notation Hdg^p(; X) abbreviates the case K=\mathbb Q.

def hodgeClasses (K : Type) [Field K] [Algebra K ] (X : Over (Spec )) [IsIntegral X.left] [Smooth X.hom] (p : ) : Submodule K (H^(2 * p)(X; K)) := ((hodgePiece X p p (2 * p)).restrictScalars K).comap (fieldToDeRhamCohomologyLinear K X (2 * p))

The cohomology of X is not equipped with a pure Hodge structure in the formalization; that would require the Hodge decomposition. The (p,p) piece is instead defined directly by the formula above, which is why the conjugation had to be constructed.

The two sanity checks on the filtration pass to the Hodge classes: every degree-zero class is a Hodge class, and there are none above the dimension. These are the two ends of the conjecture that the repository settles; see What the repository proves about the statement.

AlgebraicGeometry.ComplexPoint.hodgeClasses_zero_eq_top (K : Type) [Field K] [Algebra K ] (X : Over (Spec (CommRingCat.of ))) [AlgebraicGeometry.IsIntegral X.left] [Smooth X.hom] : Hdg^0(K; X) = #check AlgebraicGeometry.ComplexPoint.hodgeClasses_zero_eq_top AlgebraicGeometry.ComplexPoint.hodgeClasses_eq_bot_of_lt (K : Type) [Field K] [Algebra K ] (X : Over (Spec (CommRingCat.of ))) [AlgebraicGeometry.IsIntegral X.left] [Smooth X.hom] {p : } (hp : dim X.left < p) : Hdg^p(K; X) = #check AlgebraicGeometry.ComplexPoint.hodgeClasses_eq_bot_of_lt

2.7. Why the filtration alone suffices over the rationals🔗

Deligne states the conjecture with the condition \alpha_{\mathrm{dR}}\in F^p alone, p. 46, and over \mathbb Q the two conditions agree. When complex conjugation fixes K, a K-rational class is its own conjugate, so lying in F^p already forces lying in \overline{F^p}. The first lemma below proves this for any such K; the second specializes it to \mathbb Q, the coefficient field of the conjecture.

AlgebraicGeometry.ComplexPoint.hodgeClasses_eq_comap_hodgeFiltrationComplexSubmodule (K : Type) [Field K] [Algebra K ] (X : Over (Spec (CommRingCat.of ))) [AlgebraicGeometry.IsIntegral X.left] [Smooth X.hom] (hK : (q : K), (starRingEnd ) ((algebraMap K ) q) = (algebraMap K ) q) (p : ) : Hdg^p(K; X) = Submodule.comap (fieldToDeRhamCohomologyLinear K X (2 * p)) (Submodule.restrictScalars K (hodgeFiltrationComplexSubmodule X (↑p) (2 * p)))#check AlgebraicGeometry.ComplexPoint.hodgeClasses_eq_comap_hodgeFiltrationComplexSubmodule AlgebraicGeometry.ComplexPoint.hodgeClasses_rat_eq_comap_hodgeFiltrationComplexSubmodule (X : Over (Spec (CommRingCat.of ))) [AlgebraicGeometry.IsIntegral X.left] [Smooth X.hom] (p : ) : Hdg^p(; X) = Submodule.comap (fieldToDeRhamCohomologyLinear X (2 * p)) (Submodule.restrictScalars (hodgeFiltrationComplexSubmodule X (↑p) (2 * p)))#check AlgebraicGeometry.ComplexPoint.hodgeClasses_rat_eq_comap_hodgeFiltrationComplexSubmodule

The same argument in an abstract pure Hodge structure of weight 2p is the lemma below, from HodgeConjecture/Lemmas/LinearAlgebra/HodgeStructure.lean: conjugation fixes rational vectors and exchanges H^{a,b} with H^{b,a}, so a rational vector in F^p=\bigoplus_{a\ge p}H^{a,2p-a} also lies in \overline{F^p}=\bigoplus_{b\ge p}H^{2p-b,b}, and the only summand common to both is H^{p,p}.

HodgeStructure.Pure.ofBase_mem_filtration_iff.{u} {V : Type u} [AddCommGroup V] [Module V] (p : ) (H : HodgeStructure.Pure V (2 * p)) (x : V) : (HodgeStructure.ofBase V) x H.filtration p (HodgeStructure.ofBase V) x H.piece p p#check HodgeStructure.Pure.ofBase_mem_filtration_iff

The conjugation condition cannot be dropped for other coefficient fields. Let E be the elliptic curve \mathbb C/(\mathbb Z+\mathbb Z i). The periods of dz are 1 and i, so dz is a \mathbb Q(i)-rational class spanning H^{1,0}(E), and on E\times E the class \mathrm{pr}_1^*dz\wedge\mathrm{pr}_2^*dz is \mathbb Q(i)-rational of type (2,0). It lies in F^1H^2 but not in H^{1,1}, so a definition by F^p alone would count it as a Hodge class of codimension one, although no algebraic class can reach it.