Definitions/Def_AlgebraicGeometry_TwoAffineOpenCoverKaehler.lean
Kähler differentials as two-chart Čech sections, with functoriality
The module has three layers. First, for commutative rings with A an R-algebra and B an S-algebra, a ring homomorphism \tau\colon R\to S and a ring homomorphism \varphi\colon A\to B with \varphi\circ(R\to A)=(S\to B)\circ\tau determine a \tau-semilinear map KaehlerDifferential.mapOfRingHom \Omega_{A/R}\to\Omega_{B/S}, obtained from Mathlib's functorial map for the algebra and tower structures that the given square provides; its characteristic properties are \mathrm{d}a\mapsto \mathrm{d}\varphi(a), a\cdot\omega\mapsto\varphi(a)\cdot (image of \omega), hence a\,\mathrm{d}a'\mapsto\varphi(a)\,\mathrm{d}\varphi(a'). An extensionality lemma — two additive maps out of \Omega_{A/R} agreeing on all a\,\mathrm{d}a' are equal, since the elements \mathrm{d}a' generate — yields: independence of the construction from the chosen \tau when \varphi is fixed, the identity case, compatibility with composition of squares, and agreement with KaehlerDifferential.map when \varphi is the structure map.
Second, for a two-chart cover \mathcal U=(A_0,A_1,A_{01};\rho_0,\rho_1) of R-algebras, TwoChartCech.Cover.kaehler is the Sections datum with modules \Omega_{A_0/R}, \Omega_{A_1/R}, \Omega_{A_{01}/R} and restriction maps induced by \rho_0,\rho_1; its Čech differential sends (\mathrm{d}s_0,\mathrm{d}s_1) to \mathrm{d} of the structure-sheaf Čech difference \rho_1s_1-\rho_0s_0.
Third, for a scheme X with a cover \mathcal V by two affine opens with affine intersection and a morphism c\colon X\to\operatorname{Spec}R, kaehlerSections is this datum for the chart algebras \Gamma(X,U_0), \Gamma(X,U_1), \Gamma(X,U_0\cap U_1). A HomOver f over \tau gives ring maps on the three chart rings (via appLE) commuting with the structure maps, hence \tau-semilinear maps on differentials which commute with the two restrictions and with the Čech differential; consequently f induces semilinear maps kaehlerH0map on the kernel and kaehlerH1map on the quotient by the image. These are functorial: identities act as identities and composition is respected, and the base-change and stage morphisms give maps kaehlerH0baseChangeMap, kaehlerH1baseChangeMap, kaehlerH0stageMap, kaehlerH1stageMap satisfying the expected triangle, identity and composition identities, proved by comparing the underlying scheme morphisms.
Relation to Mathlib
KaehlerDifferential.mapOfRingHom repackages Mathlib's KaehlerDifferential.map, which needs the algebra and scalar-tower structures as instances, into a semilinear map attached to a commuting square of bare ring homomorphisms, so that restriction and base-change maps on a cover need not be registered as instances; the two-chart Cover/Sections formalism and the Čech H^0, H^1 built from it are the project's own.
Where it is used
These constructions supply the Čech model of H^0 and H^1 of the sheaf of relative differentials on a scheme covered by two affine opens, together with its variance in the base, which is what the relative Picard and Néron-model infrastructure of the curve side of the argument operates on.
References
- R. Hartshorne, Algebraic Geometry, Graduate Texts in Mathematics 52, Springer, 1977, Chapter II.8 and III.4
- A. Grothendieck and J. Dieudonné, Éléments de géométrie algébrique IV, §16, Publ. Math. IHÉS 32 (1967)
- H. Matsumura, Commutative Ring Theory, Cambridge Studies in Advanced Mathematics 8, Cambridge University Press, 1986, Chapter 9
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 452 lines
- 80 declarations
- used in the statements of 51 theorems and imported by 55 proofs
- imports 1 definition modules
Source file: Definitions/Def_AlgebraicGeometry_TwoAffineOpenCoverKaehler.lean
Declarations
- def
KaehlerDifferential.mapOfRingHom - theorem
KaehlerDifferential.mapOfRingHom_D - theorem
KaehlerDifferential.mapOfRingHom_smul - theorem
KaehlerDifferential.mapOfRingHom_smul_D - theorem
KaehlerDifferential.addMonoidHom_ext_smul_D - theorem
KaehlerDifferential.mapOfRingHom_congr - theorem
KaehlerDifferential.mapOfRingHom_id - theorem
KaehlerDifferential.mapOfRingHom_comp_apply - theorem
KaehlerDifferential.mapOfRingHom_apply_eq_map - theorem
TwoChartCech.Cover.ρ0_comp_algebraMap_eq_comp_id - theorem
TwoChartCech.Cover.ρ1_comp_algebraMap_eq_comp_id - def
TwoChartCech.Cover.kaehler - theorem
TwoChartCech.Cover.kaehler_M0 - theorem
TwoChartCech.Cover.kaehler_M1 - theorem
TwoChartCech.Cover.kaehler_M01 - theorem
TwoChartCech.Cover.kaehler_r0_smul_D - theorem
TwoChartCech.Cover.kaehler_r1_smul_D - theorem
TwoChartCech.Cover.kaehler_r0_D - theorem
TwoChartCech.Cover.kaehler_r1_D - theorem
TwoChartCech.Cover.kaehler_cechDiff_D - abbrev
AlgebraicGeometry.Scheme.TwoAffineOpenCover.kaehlerSections - def
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.ringHom0 - def
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.ringHom1 - def
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.ringHom01 - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.ringHom0_apply - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.ringHom1_apply - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.ringHom01_apply - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.ringHom0_comp_algebraMap - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.ringHom1_comp_algebraMap - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.ringHom01_comp_algebraMap - def
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerMap0 - def
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerMap1 - def
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerMap01 - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerMap0_smul_D - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerMap1_smul_D - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerMap01_smul_D - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerMap01_r0 - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerMap01_r1 - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerMap01_cechDiff - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.range_kaehler_cechDiff_le_comap - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerMap_mem_H0 - def
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerH0map - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerH0map_apply_coe - def
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerH1map - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerH1map_mk - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerMap0_congr - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerMap1_congr - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerMap01_congr - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerH0map_congr - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.kaehlerH1map_congr - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.id_appLE - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.id_ringHom0 - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.id_ringHom1 - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.id_ringHom01 - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.id_kaehlerMap0 - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.id_kaehlerMap1 - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.id_kaehlerMap01 - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.id_kaehlerH0map - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.id_kaehlerH1map - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.comp_ringHom0 - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.comp_ringHom1 - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.comp_ringHom01 - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.comp_kaehlerMap0 - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.comp_kaehlerMap1 - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.comp_kaehlerMap01 - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.comp_kaehlerH0map - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.comp_kaehlerH1map - abbrev
AlgebraicGeometry.Scheme.TwoAffineOpenCover.kaehlerH0baseChangeMap - abbrev
AlgebraicGeometry.Scheme.TwoAffineOpenCover.kaehlerH1baseChangeMap - abbrev
AlgebraicGeometry.Scheme.TwoAffineOpenCover.kaehlerH0stageMap - abbrev
AlgebraicGeometry.Scheme.TwoAffineOpenCover.kaehlerH1stageMap - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.stage_comp_baseChange_hom - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.stage_id_hom - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.stage_comp_stage_hom - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.kaehlerH0stageMap_kaehlerH0baseChangeMap - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.kaehlerH1stageMap_kaehlerH1baseChangeMap - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.kaehlerH0stageMap_id - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.kaehlerH1stageMap_id - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.kaehlerH0stageMap_comp - theorem
AlgebraicGeometry.Scheme.TwoAffineOpenCover.kaehlerH1stageMap_comp
Source
import Definitions.Def_AlgebraicGeometry_TwoAffineOpenCoverH1BaseChange set_option autoImplicit false noncomputable section open scoped TensorProduct universe u v namespace KaehlerDifferential variable {R : Type*} {S : Type*} {A : Type*} {B : Type*} [CommRing R] [CommRing S] [CommRing A] [CommRing B] [Algebra R A] [Algebra S B] def mapOfRingHom (τ : R →+* S) (φ : A →+* B) (h : φ.comp (algebraMap R A) = (algebraMap S B).comp τ) : Ω[A⁄R] →ₛₗ[τ] Ω[B⁄S] := letI : Algebra R S := τ.toAlgebra letI : Algebra A B := φ.toAlgebra letI : Algebra R B := ((algebraMap S B).comp τ).toAlgebra haveI : IsScalarTower R S B := IsScalarTower.of_algebraMap_eq fun _ => rfl haveI : IsScalarTower R A B := IsScalarTower.of_algebraMap_eq fun r => (RingHom.congr_fun h r).symm haveI : SMulCommClass S A B := ⟨fun s a b => by rw [Algebra.smul_def, Algebra.smul_def, Algebra.smul_def, Algebra.smul_def]; exact mul_left_comm _ _ _⟩ { toFun := KaehlerDifferential.map R S A B map_add' := map_add _ map_smul' := fun r ω => by rw [← IsScalarTower.algebraMap_smul A r ω, LinearMap.map_smul, ← IsScalarTower.algebraMap_smul B (algebraMap R A r), ← IsScalarTower.algebraMap_smul B (τ r)] exact congrArg (· • _) (RingHom.congr_fun h r) } variable (τ : R →+* S) (φ : A →+* B) (h : φ.comp (algebraMap R A) = (algebraMap S B).comp τ) @[simp] theorem mapOfRingHom_D (a : A) : mapOfRingHom τ φ h (D R A a) = D S B (φ a) := letI : Algebra R S := τ.toAlgebra letI : Algebra A B := φ.toAlgebra letI : Algebra R B := ((algebraMap S B).comp τ).toAlgebra haveI : IsScalarTower R S B := IsScalarTower.of_algebraMap_eq fun _ => rfl haveI : IsScalarTower R A B := IsScalarTower.of_algebraMap_eq fun r => (RingHom.congr_fun h r).symm haveI : SMulCommClass S A B := ⟨fun s a b => by rw [Algebra.smul_def, Algebra.smul_def, Algebra.smul_def, Algebra.smul_def]; exact mul_left_comm _ _ _⟩ KaehlerDifferential.map_D R S A B a theorem mapOfRingHom_smul (a : A) (ω : Ω[A⁄R]) : mapOfRingHom τ φ h (a • ω) = φ a • mapOfRingHom τ φ h ω := letI : Algebra R S := τ.toAlgebra letI : Algebra A B := φ.toAlgebra letI : Algebra R B := ((algebraMap S B).comp τ).toAlgebra haveI : IsScalarTower R S B := IsScalarTower.of_algebraMap_eq fun _ => rfl haveI : IsScalarTower R A B := IsScalarTower.of_algebraMap_eq fun r => (RingHom.congr_fun h r).symm haveI : SMulCommClass S A B := ⟨fun s a b => by rw [Algebra.smul_def, Algebra.smul_def, Algebra.smul_def, Algebra.smul_def]; exact mul_left_comm _ _ _⟩ ((KaehlerDifferential.map R S A B).map_smul a ω).trans (IsScalarTower.algebraMap_smul B a _).symm theorem mapOfRingHom_smul_D (a a' : A) : mapOfRingHom τ φ h (a • D R A a') = φ a • D S B (φ a') := by rw [mapOfRingHom_smul, mapOfRingHom_D] omit [Algebra S B] in theorem addMonoidHom_ext_smul_D {M : Type*} [AddCommGroup M] {f g : Ω[A⁄R] →+ M} (hfg : ∀ a a' : A, f (a • D R A a') = g (a • D R A a')) : f = g := by ext ω have hω : ω ∈ Submodule.span A (Set.range (D R A)) := by rw [KaehlerDifferential.span_range_derivation]; exact Submodule.mem_top obtain ⟨c, rfl⟩ := (Finsupp.mem_span_range_iff_exists_finsupp).mp hω simp only [Finsupp.sum, map_sum, hfg] theorem mapOfRingHom_congr {τ τ' : R →+* S} {φ φ' : A →+* B} (hφ : φ = φ') (h : φ.comp (algebraMap R A) = (algebraMap S B).comp τ) (h' : φ'.comp (algebraMap R A) = (algebraMap S B).comp τ') (ω : Ω[A⁄R]) : mapOfRingHom τ φ h ω = mapOfRingHom τ' φ' h' ω := by subst hφ have key := addMonoidHom_ext_smul_D (f := (mapOfRingHom τ φ h).toAddMonoidHom) (g := (mapOfRingHom τ' φ h').toAddMonoidHom) (fun a a' => by change mapOfRingHom τ φ h (a • D R A a') = mapOfRingHom τ' φ h' (a • D R A a') rw [mapOfRingHom_smul_D, mapOfRingHom_smul_D]) exact DFunLike.congr_fun key ω omit [Algebra S B] in theorem mapOfRingHom_id (h : (RingHom.id A).comp (algebraMap R A) = (algebraMap R A).comp (RingHom.id R)) (ω : Ω[A⁄R]) : mapOfRingHom (RingHom.id R) (RingHom.id A) h ω = ω := by have key := addMonoidHom_ext_smul_D (f := (mapOfRingHom (RingHom.id R) (RingHom.id A) h).toAddMonoidHom) (g := AddMonoidHom.id _) (fun a a' => by change mapOfRingHom (RingHom.id R) (RingHom.id A) h (a • D R A a') = a • D R A a' rw [mapOfRingHom_smul_D]; rfl) exact DFunLike.congr_fun key ω theorem mapOfRingHom_comp_apply {T : Type*} {C : Type*} [CommRing T] [CommRing C] [Algebra T C] (υ : S →+* T) (ψ : B →+* C) (h₂ : ψ.comp (algebraMap S B) = (algebraMap T C).comp υ) (h₃ : (ψ.comp φ).comp (algebraMap R A) = (algebraMap T C).comp (υ.comp τ)) (ω : Ω[A⁄R]) : mapOfRingHom υ ψ h₂ (mapOfRingHom τ φ h ω) = mapOfRingHom (υ.comp τ) (ψ.comp φ) h₃ ω := by have key := addMonoidHom_ext_smul_D (f := (mapOfRingHom υ ψ h₂).toAddMonoidHom.comp (mapOfRingHom τ φ h).toAddMonoidHom) (g := (mapOfRingHom (υ.comp τ) (ψ.comp φ) h₃).toAddMonoidHom) (fun a a' => by change mapOfRingHom υ ψ h₂ (mapOfRingHom τ φ h (a • D R A a')) = mapOfRingHom (υ.comp τ) (ψ.comp φ) h₃ (a • D R A a') rw [mapOfRingHom_smul_D, mapOfRingHom_smul_D, mapOfRingHom_smul_D]; rfl) exact DFunLike.congr_fun key ω theorem mapOfRingHom_apply_eq_map [Algebra R S] [Algebra A B] [Algebra R B] [IsScalarTower R A B] [IsScalarTower R S B] [SMulCommClass S A B] (hφ : algebraMap A B = φ) (ω : Ω[A⁄R]) : mapOfRingHom τ φ h ω = KaehlerDifferential.map R S A B ω := by have key := addMonoidHom_ext_smul_D (f := (mapOfRingHom τ φ h).toAddMonoidHom) (g := (KaehlerDifferential.map R S A B).toAddMonoidHom) (fun a a' => by change mapOfRingHom τ φ h (a • D R A a') = KaehlerDifferential.map R S A B (a • D R A a') rw [mapOfRingHom_smul_D, LinearMap.map_smul, KaehlerDifferential.map_D, ← IsScalarTower.algebraMap_smul B a, hφ]) exact DFunLike.congr_fun key ω end KaehlerDifferential namespace TwoChartCech.Cover variable {R : Type u} [CommRing R] (𝒰 : Cover.{u, v} R) theorem ρ0_comp_algebraMap_eq_comp_id : 𝒰.ρ0.toRingHom.comp (algebraMap R 𝒰.A0) = (algebraMap R 𝒰.A01).comp (RingHom.id R) := RingHom.ext fun r => 𝒰.ρ0.commutes r theorem ρ1_comp_algebraMap_eq_comp_id : 𝒰.ρ1.toRingHom.comp (algebraMap R 𝒰.A1) = (algebraMap R 𝒰.A01).comp (RingHom.id R) := RingHom.ext fun r => 𝒰.ρ1.commutes r @[reducible] def kaehler : Sections.{u, v, v} 𝒰 where M0 := Ω[𝒰.A0⁄R] M1 := Ω[𝒰.A1⁄R] M01 := Ω[𝒰.A01⁄R] r0 := KaehlerDifferential.mapOfRingHom (RingHom.id R) 𝒰.ρ0.toRingHom 𝒰.ρ0_comp_algebraMap_eq_comp_id r1 := KaehlerDifferential.mapOfRingHom (RingHom.id R) 𝒰.ρ1.toRingHom 𝒰.ρ1_comp_algebraMap_eq_comp_id r0_smul a m := KaehlerDifferential.mapOfRingHom_smul _ _ 𝒰.ρ0_comp_algebraMap_eq_comp_id a m r1_smul a m := KaehlerDifferential.mapOfRingHom_smul _ _ 𝒰.ρ1_comp_algebraMap_eq_comp_id a m theorem kaehler_M0 : 𝒰.kaehler.M0 = Ω[𝒰.A0⁄R] := rfl theorem kaehler_M1 : 𝒰.kaehler.M1 = Ω[𝒰.A1⁄R] := rfl theorem kaehler_M01 : 𝒰.kaehler.M01 = Ω[𝒰.A01⁄R] := rfl theorem kaehler_r0_smul_D (a s : 𝒰.A0) : 𝒰.kaehler.r0 (a • KaehlerDifferential.D R 𝒰.A0 s) = 𝒰.ρ0 a • KaehlerDifferential.D R 𝒰.A01 (𝒰.ρ0 s) := KaehlerDifferential.mapOfRingHom_smul_D _ _ 𝒰.ρ0_comp_algebraMap_eq_comp_id a s theorem kaehler_r1_smul_D (a s : 𝒰.A1) : 𝒰.kaehler.r1 (a • KaehlerDifferential.D R 𝒰.A1 s) = 𝒰.ρ1 a • KaehlerDifferential.D R 𝒰.A01 (𝒰.ρ1 s) := KaehlerDifferential.mapOfRingHom_smul_D _ _ 𝒰.ρ1_comp_algebraMap_eq_comp_id a s theorem kaehler_r0_D (s : 𝒰.A0) : 𝒰.kaehler.r0 (KaehlerDifferential.D R 𝒰.A0 s) = KaehlerDifferential.D R 𝒰.A01 (𝒰.ρ0 s) := KaehlerDifferential.mapOfRingHom_D _ _ 𝒰.ρ0_comp_algebraMap_eq_comp_id s theorem kaehler_r1_D (s : 𝒰.A1) : 𝒰.kaehler.r1 (KaehlerDifferential.D R 𝒰.A1 s) = KaehlerDifferential.D R 𝒰.A01 (𝒰.ρ1 s) := KaehlerDifferential.mapOfRingHom_D _ _ 𝒰.ρ1_comp_algebraMap_eq_comp_id s theorem kaehler_cechDiff_D (s₀ : 𝒰.A0) (s₁ : 𝒰.A1) : 𝒰.kaehler.cechDiff (KaehlerDifferential.D R 𝒰.A0 s₀, KaehlerDifferential.D R 𝒰.A1 s₁) = KaehlerDifferential.D R 𝒰.A01 (𝒰.structureSheaf.cechDiff (s₀, s₁)) := by rw [Sections.cechDiff_apply, Sections.cechDiff_apply, kaehler_r0_D, kaehler_r1_D, map_sub, lineBundle_r1_apply, lineBundle_r0_apply, Units.val_one, one_mul] end TwoChartCech.Cover namespace AlgebraicGeometry.Scheme.TwoAffineOpenCover open CategoryTheory CategoryTheory.Limits variable {R : Type u} [CommRing R] {X : Scheme.{u}} (𝒱 : X.TwoAffineOpenCover) (c : X ⟶ Spec (.of R)) abbrev kaehlerSections : TwoChartCech.Sections (𝒱.cover c) := (𝒱.cover c).kaehler namespace HomOver variable {S : Type u} [CommRing S] {τ : R →+* S} {𝒱} {c} {Y : Scheme.{u}} {𝒲 : Y.TwoAffineOpenCover} {c' : Y ⟶ Spec (.of S)} (f : HomOver τ 𝒱 c 𝒲 c') def ringHom0 : (𝒱.cover c).A0 →+* (𝒲.cover c').A0 := (f.hom.appLE 𝒱.U0 𝒲.U0 f.U0_le).hom def ringHom1 : (𝒱.cover c).A1 →+* (𝒲.cover c').A1 := (f.hom.appLE 𝒱.U1 𝒲.U1 f.U1_le).hom def ringHom01 : (𝒱.cover c).A01 →+* (𝒲.cover c').A01 := (f.hom.appLE (𝒱.U0 ⊓ 𝒱.U1) (𝒲.U0 ⊓ 𝒲.U1) f.inf_le).hom theorem ringHom0_apply (x : (𝒱.cover c).A0) : f.ringHom0 x = f.map0 x := rfl theorem ringHom1_apply (x : (𝒱.cover c).A1) : f.ringHom1 x = f.map1 x := rfl theorem ringHom01_apply (x : (𝒱.cover c).A01) : f.ringHom01 x = f.map01 x := rfl theorem ringHom0_comp_algebraMap : f.ringHom0.comp (algebraMap R (𝒱.cover c).A0) = (algebraMap S (𝒲.cover c').A0).comp τ := RingHom.ext fun r => f.appLE_algebraMap f.U0_le r theorem ringHom1_comp_algebraMap : f.ringHom1.comp (algebraMap R (𝒱.cover c).A1) = (algebraMap S (𝒲.cover c').A1).comp τ := RingHom.ext fun r => f.appLE_algebraMap f.U1_le r theorem ringHom01_comp_algebraMap : f.ringHom01.comp (algebraMap R (𝒱.cover c).A01) = (algebraMap S (𝒲.cover c').A01).comp τ := RingHom.ext fun r => f.appLE_algebraMap f.inf_le r def kaehlerMap0 : Ω[(𝒱.cover c).A0⁄R] →ₛₗ[τ] Ω[(𝒲.cover c').A0⁄S] := KaehlerDifferential.mapOfRingHom τ f.ringHom0 f.ringHom0_comp_algebraMap def kaehlerMap1 : Ω[(𝒱.cover c).A1⁄R] →ₛₗ[τ] Ω[(𝒲.cover c').A1⁄S] := KaehlerDifferential.mapOfRingHom τ f.ringHom1 f.ringHom1_comp_algebraMap def kaehlerMap01 : Ω[(𝒱.cover c).A01⁄R] →ₛₗ[τ] Ω[(𝒲.cover c').A01⁄S] := KaehlerDifferential.mapOfRingHom τ f.ringHom01 f.ringHom01_comp_algebraMap theorem kaehlerMap0_smul_D (a s : (𝒱.cover c).A0) : f.kaehlerMap0 (a • KaehlerDifferential.D R _ s) = f.map0 a • KaehlerDifferential.D S _ (f.map0 s) := KaehlerDifferential.mapOfRingHom_smul_D _ _ f.ringHom0_comp_algebraMap a s theorem kaehlerMap1_smul_D (a s : (𝒱.cover c).A1) : f.kaehlerMap1 (a • KaehlerDifferential.D R _ s) = f.map1 a • KaehlerDifferential.D S _ (f.map1 s) := KaehlerDifferential.mapOfRingHom_smul_D _ _ f.ringHom1_comp_algebraMap a s theorem kaehlerMap01_smul_D (a s : (𝒱.cover c).A01) : f.kaehlerMap01 (a • KaehlerDifferential.D R _ s) = f.map01 a • KaehlerDifferential.D S _ (f.map01 s) := KaehlerDifferential.mapOfRingHom_smul_D _ _ f.ringHom01_comp_algebraMap a s theorem kaehlerMap01_r0 (ω : Ω[(𝒱.cover c).A0⁄R]) : f.kaehlerMap01 ((𝒱.kaehlerSections c).r0 ω) = (𝒲.kaehlerSections c').r0 (f.kaehlerMap0 ω) := by have key := KaehlerDifferential.addMonoidHom_ext_smul_D (f := f.kaehlerMap01.toAddMonoidHom.comp (𝒱.kaehlerSections c).r0.toAddMonoidHom) (g := (𝒲.kaehlerSections c').r0.toAddMonoidHom.comp f.kaehlerMap0.toAddMonoidHom) (fun a s => by change f.kaehlerMap01 ((𝒱.kaehlerSections c).r0 (a • KaehlerDifferential.D R _ s)) = (𝒲.kaehlerSections c').r0 (f.kaehlerMap0 (a • KaehlerDifferential.D R _ s)) rw [TwoChartCech.Cover.kaehler_r0_smul_D, kaehlerMap01_smul_D, kaehlerMap0_smul_D, TwoChartCech.Cover.kaehler_r0_smul_D, f.map01_ρ0, f.map01_ρ0]) exact DFunLike.congr_fun key ω theorem kaehlerMap01_r1 (ω : Ω[(𝒱.cover c).A1⁄R]) : f.kaehlerMap01 ((𝒱.kaehlerSections c).r1 ω) = (𝒲.kaehlerSections c').r1 (f.kaehlerMap1 ω) := by have key := KaehlerDifferential.addMonoidHom_ext_smul_D (f := f.kaehlerMap01.toAddMonoidHom.comp (𝒱.kaehlerSections c).r1.toAddMonoidHom) (g := (𝒲.kaehlerSections c').r1.toAddMonoidHom.comp f.kaehlerMap1.toAddMonoidHom) (fun a s => by change f.kaehlerMap01 ((𝒱.kaehlerSections c).r1 (a • KaehlerDifferential.D R _ s)) = (𝒲.kaehlerSections c').r1 (f.kaehlerMap1 (a • KaehlerDifferential.D R _ s)) rw [TwoChartCech.Cover.kaehler_r1_smul_D, kaehlerMap01_smul_D, kaehlerMap1_smul_D, TwoChartCech.Cover.kaehler_r1_smul_D, f.map01_ρ1, f.map01_ρ1]) exact DFunLike.congr_fun key ω theorem kaehlerMap01_cechDiff (s : Ω[(𝒱.cover c).A0⁄R] × Ω[(𝒱.cover c).A1⁄R]) : f.kaehlerMap01 ((𝒱.kaehlerSections c).cechDiff s) = (𝒲.kaehlerSections c').cechDiff (f.kaehlerMap0 s.1, f.kaehlerMap1 s.2) := by rw [TwoChartCech.Sections.cechDiff_apply, TwoChartCech.Sections.cechDiff_apply, map_sub, kaehlerMap01_r0, kaehlerMap01_r1] theorem range_kaehler_cechDiff_le_comap : LinearMap.range (𝒱.kaehlerSections c).cechDiff ≤ (LinearMap.range (𝒲.kaehlerSections c').cechDiff).comap f.kaehlerMap01 := by rintro _ ⟨s, rfl⟩ rw [Submodule.mem_comap, kaehlerMap01_cechDiff] exact LinearMap.mem_range_self _ _ theorem kaehlerMap_mem_H0 (x : (𝒱.kaehlerSections c).H0) : (f.kaehlerMap0 x.val.1, f.kaehlerMap1 x.val.2) ∈ (𝒲.kaehlerSections c').H0 := by rw [LinearMap.mem_ker, ← kaehlerMap01_cechDiff, LinearMap.mem_ker.mp x.2, map_zero] def kaehlerH0map : (𝒱.kaehlerSections c).H0 →ₛₗ[τ] (𝒲.kaehlerSections c').H0 where toFun x := ⟨(f.kaehlerMap0 x.val.1, f.kaehlerMap1 x.val.2), f.kaehlerMap_mem_H0 x⟩ map_add' x y := by apply Subtype.ext change (f.kaehlerMap0 (x.val.1 + y.val.1), f.kaehlerMap1 (x.val.2 + y.val.2)) = (f.kaehlerMap0 x.val.1 + f.kaehlerMap0 y.val.1, f.kaehlerMap1 x.val.2 + f.kaehlerMap1 y.val.2) rw [map_add, map_add] map_smul' r x := by apply Subtype.ext change (f.kaehlerMap0 (r • x.val.1), f.kaehlerMap1 (r • x.val.2)) = (τ r • f.kaehlerMap0 x.val.1, τ r • f.kaehlerMap1 x.val.2) rw [LinearMap.map_smulₛₗ, LinearMap.map_smulₛₗ] theorem kaehlerH0map_apply_coe (x : (𝒱.kaehlerSections c).H0) : (f.kaehlerH0map x).val = (f.kaehlerMap0 x.val.1, f.kaehlerMap1 x.val.2) := rfl def kaehlerH1map : (𝒱.kaehlerSections c).H1 →ₛₗ[τ] (𝒲.kaehlerSections c').H1 := Submodule.mapQ _ _ f.kaehlerMap01 f.range_kaehler_cechDiff_le_comap theorem kaehlerH1map_mk (η : Ω[(𝒱.cover c).A01⁄R]) : f.kaehlerH1map (Submodule.Quotient.mk η) = Submodule.Quotient.mk (f.kaehlerMap01 η) := rfl section Functoriality variable {τ' : R →+* S} {T : Type u} [CommRing T] {υ : S →+* T} {Z : Scheme.{u}} {𝒳 : Z.TwoAffineOpenCover} {c'' : Z ⟶ Spec (.of T)} theorem kaehlerMap0_congr {f : HomOver τ 𝒱 c 𝒲 c'} {g : HomOver τ' 𝒱 c 𝒲 c'} (hfg : f.hom = g.hom) (ω : Ω[(𝒱.cover c).A0⁄R]) : f.kaehlerMap0 ω = g.kaehlerMap0 ω := by obtain ⟨fh, _, _, _⟩ := f; obtain ⟨gh, _, _, _⟩ := g; cases hfg exact KaehlerDifferential.mapOfRingHom_congr rfl _ _ ω theorem kaehlerMap1_congr {f : HomOver τ 𝒱 c 𝒲 c'} {g : HomOver τ' 𝒱 c 𝒲 c'} (hfg : f.hom = g.hom) (ω : Ω[(𝒱.cover c).A1⁄R]) : f.kaehlerMap1 ω = g.kaehlerMap1 ω := by obtain ⟨fh, _, _, _⟩ := f; obtain ⟨gh, _, _, _⟩ := g; cases hfg exact KaehlerDifferential.mapOfRingHom_congr rfl _ _ ω theorem kaehlerMap01_congr {f : HomOver τ 𝒱 c 𝒲 c'} {g : HomOver τ' 𝒱 c 𝒲 c'} (hfg : f.hom = g.hom) (ω : Ω[(𝒱.cover c).A01⁄R]) : f.kaehlerMap01 ω = g.kaehlerMap01 ω := by obtain ⟨fh, _, _, _⟩ := f; obtain ⟨gh, _, _, _⟩ := g; cases hfg exact KaehlerDifferential.mapOfRingHom_congr rfl _ _ ω theorem kaehlerH0map_congr {f : HomOver τ 𝒱 c 𝒲 c'} {g : HomOver τ' 𝒱 c 𝒲 c'} (hfg : f.hom = g.hom) (x : (𝒱.kaehlerSections c).H0) : f.kaehlerH0map x = g.kaehlerH0map x := Subtype.ext (Prod.ext (kaehlerMap0_congr hfg _) (kaehlerMap1_congr hfg _)) theorem kaehlerH1map_congr {f : HomOver τ 𝒱 c 𝒲 c'} {g : HomOver τ' 𝒱 c 𝒲 c'} (hfg : f.hom = g.hom) (x : (𝒱.kaehlerSections c).H1) : f.kaehlerH1map x = g.kaehlerH1map x := by induction x using Submodule.Quotient.induction_on with | H η => rw [kaehlerH1map_mk, kaehlerH1map_mk, kaehlerMap01_congr hfg] theorem id_appLE (U : X.Opens) (h : U ≤ (𝟙 X : X ⟶ X) ⁻¹ᵁ U) : (𝟙 X : X ⟶ X).appLE U U h = 𝟙 _ := by change (𝟙 X : X ⟶ X).app _ ≫ X.presheaf.map _ = _ rw [Scheme.Hom.id_app] erw [Category.id_comp] exact (congrArg X.presheaf.map (Subsingleton.elim _ _)).trans (X.presheaf.map_id _) theorem id_ringHom0 : (HomOver.id 𝒱 c).ringHom0 = RingHom.id _ := by change ((𝟙 X : X ⟶ X).appLE 𝒱.U0 𝒱.U0 _).hom = _; rw [id_appLE]; rfl theorem id_ringHom1 : (HomOver.id 𝒱 c).ringHom1 = RingHom.id _ := by change ((𝟙 X : X ⟶ X).appLE 𝒱.U1 𝒱.U1 _).hom = _; rw [id_appLE]; rfl theorem id_ringHom01 : (HomOver.id 𝒱 c).ringHom01 = RingHom.id _ := by change ((𝟙 X : X ⟶ X).appLE (𝒱.U0 ⊓ 𝒱.U1) (𝒱.U0 ⊓ 𝒱.U1) _).hom = _; rw [id_appLE]; rfl theorem id_kaehlerMap0 (ω : Ω[(𝒱.cover c).A0⁄R]) : (HomOver.id 𝒱 c).kaehlerMap0 ω = ω := (KaehlerDifferential.mapOfRingHom_congr id_ringHom0 _ (by ext; rfl) ω).trans (KaehlerDifferential.mapOfRingHom_id _ ω) theorem id_kaehlerMap1 (ω : Ω[(𝒱.cover c).A1⁄R]) : (HomOver.id 𝒱 c).kaehlerMap1 ω = ω := (KaehlerDifferential.mapOfRingHom_congr id_ringHom1 _ (by ext; rfl) ω).trans (KaehlerDifferential.mapOfRingHom_id _ ω) theorem id_kaehlerMap01 (ω : Ω[(𝒱.cover c).A01⁄R]) : (HomOver.id 𝒱 c).kaehlerMap01 ω = ω := (KaehlerDifferential.mapOfRingHom_congr id_ringHom01 _ (by ext; rfl) ω).trans (KaehlerDifferential.mapOfRingHom_id _ ω) theorem id_kaehlerH0map (x : (𝒱.kaehlerSections c).H0) : (HomOver.id 𝒱 c).kaehlerH0map x = x := Subtype.ext (Prod.ext (id_kaehlerMap0 _) (id_kaehlerMap1 _)) theorem id_kaehlerH1map (x : (𝒱.kaehlerSections c).H1) : (HomOver.id 𝒱 c).kaehlerH1map x = x := by induction x using Submodule.Quotient.induction_on with | H η => rw [kaehlerH1map_mk, id_kaehlerMap01] theorem comp_ringHom0 (g : HomOver υ 𝒲 c' 𝒳 c'') (f : HomOver τ 𝒱 c 𝒲 c') : (g.comp f).ringHom0 = g.ringHom0.comp f.ringHom0 := by change ((g.hom ≫ f.hom).appLE 𝒱.U0 𝒳.U0 _).hom = ((f.hom.appLE 𝒱.U0 𝒲.U0 f.U0_le) ≫ (g.hom.appLE 𝒲.U0 𝒳.U0 g.U0_le)).hom rw [Scheme.Hom.appLE_comp_appLE] theorem comp_ringHom1 (g : HomOver υ 𝒲 c' 𝒳 c'') (f : HomOver τ 𝒱 c 𝒲 c') : (g.comp f).ringHom1 = g.ringHom1.comp f.ringHom1 := by change ((g.hom ≫ f.hom).appLE 𝒱.U1 𝒳.U1 _).hom = ((f.hom.appLE 𝒱.U1 𝒲.U1 f.U1_le) ≫ (g.hom.appLE 𝒲.U1 𝒳.U1 g.U1_le)).hom rw [Scheme.Hom.appLE_comp_appLE] theorem comp_ringHom01 (g : HomOver υ 𝒲 c' 𝒳 c'') (f : HomOver τ 𝒱 c 𝒲 c') : (g.comp f).ringHom01 = g.ringHom01.comp f.ringHom01 := by change ((g.hom ≫ f.hom).appLE (𝒱.U0 ⊓ 𝒱.U1) (𝒳.U0 ⊓ 𝒳.U1) _).hom = ((f.hom.appLE (𝒱.U0 ⊓ 𝒱.U1) (𝒲.U0 ⊓ 𝒲.U1) f.inf_le) ≫ (g.hom.appLE (𝒲.U0 ⊓ 𝒲.U1) (𝒳.U0 ⊓ 𝒳.U1) g.inf_le)).hom rw [Scheme.Hom.appLE_comp_appLE] theorem comp_kaehlerMap0 (g : HomOver υ 𝒲 c' 𝒳 c'') (f : HomOver τ 𝒱 c 𝒲 c') (ω : Ω[(𝒱.cover c).A0⁄R]) : (g.comp f).kaehlerMap0 ω = g.kaehlerMap0 (f.kaehlerMap0 ω) := (KaehlerDifferential.mapOfRingHom_congr (comp_ringHom0 g f) _ (by rw [← comp_ringHom0]; exact (g.comp f).ringHom0_comp_algebraMap) ω).trans (KaehlerDifferential.mapOfRingHom_comp_apply _ _ _ _ _ _ _ ω).symm theorem comp_kaehlerMap1 (g : HomOver υ 𝒲 c' 𝒳 c'') (f : HomOver τ 𝒱 c 𝒲 c') (ω : Ω[(𝒱.cover c).A1⁄R]) : (g.comp f).kaehlerMap1 ω = g.kaehlerMap1 (f.kaehlerMap1 ω) := (KaehlerDifferential.mapOfRingHom_congr (comp_ringHom1 g f) _ (by rw [← comp_ringHom1]; exact (g.comp f).ringHom1_comp_algebraMap) ω).trans (KaehlerDifferential.mapOfRingHom_comp_apply _ _ _ _ _ _ _ ω).symm theorem comp_kaehlerMap01 (g : HomOver υ 𝒲 c' 𝒳 c'') (f : HomOver τ 𝒱 c 𝒲 c') (ω : Ω[(𝒱.cover c).A01⁄R]) : (g.comp f).kaehlerMap01 ω = g.kaehlerMap01 (f.kaehlerMap01 ω) := (KaehlerDifferential.mapOfRingHom_congr (comp_ringHom01 g f) _ (by rw [← comp_ringHom01]; exact (g.comp f).ringHom01_comp_algebraMap) ω).trans (KaehlerDifferential.mapOfRingHom_comp_apply _ _ _ _ _ _ _ ω).symm theorem comp_kaehlerH0map (g : HomOver υ 𝒲 c' 𝒳 c'') (f : HomOver τ 𝒱 c 𝒲 c') (x : (𝒱.kaehlerSections c).H0) : (g.comp f).kaehlerH0map x = g.kaehlerH0map (f.kaehlerH0map x) := Subtype.ext (Prod.ext (comp_kaehlerMap0 g f _) (comp_kaehlerMap1 g f _)) theorem comp_kaehlerH1map (g : HomOver υ 𝒲 c' 𝒳 c'') (f : HomOver τ 𝒱 c 𝒲 c') (x : (𝒱.kaehlerSections c).H1) : (g.comp f).kaehlerH1map x = g.kaehlerH1map (f.kaehlerH1map x) := by induction x using Submodule.Quotient.induction_on with | H η => rw [kaehlerH1map_mk, kaehlerH1map_mk, kaehlerH1map_mk, comp_kaehlerMap01] end Functoriality end HomOver section BaseChange variable (A : Type u) [CommRing A] [Algebra R A] {B : Type u} [CommRing B] [Algebra R B] abbrev kaehlerH0baseChangeMap : (𝒱.kaehlerSections c).H0 →ₛₗ[algebraMap R A] ((𝒱.pullback c A).kaehlerSections (pullback.snd c (specMap R A))).H0 := (HomOver.baseChange 𝒱 c A).kaehlerH0map abbrev kaehlerH1baseChangeMap : (𝒱.kaehlerSections c).H1 →ₛₗ[algebraMap R A] ((𝒱.pullback c A).kaehlerSections (pullback.snd c (specMap R A))).H1 := (HomOver.baseChange 𝒱 c A).kaehlerH1map variable {A} in abbrev kaehlerH0stageMap (g : A →ₐ[R] B) : ((𝒱.pullback c A).kaehlerSections (pullback.snd c (specMap R A))).H0 →ₛₗ[g.toRingHom] ((𝒱.pullback c B).kaehlerSections (pullback.snd c (specMap R B))).H0 := (HomOver.stage 𝒱 c g).kaehlerH0map variable {A} in abbrev kaehlerH1stageMap (g : A →ₐ[R] B) : ((𝒱.pullback c A).kaehlerSections (pullback.snd c (specMap R A))).H1 →ₛₗ[g.toRingHom] ((𝒱.pullback c B).kaehlerSections (pullback.snd c (specMap R B))).H1 := (HomOver.stage 𝒱 c g).kaehlerH1map variable {A} {B' : Type u} [CommRing B'] [Algebra R B'] theorem stage_comp_baseChange_hom (g : A →ₐ[R] B) : ((HomOver.stage 𝒱 c g).comp (HomOver.baseChange 𝒱 c A)).hom = (HomOver.baseChange 𝒱 c B).hom := baseChangeSnd_fst c (RelPicard.LFP.stageHom R g) theorem stage_id_hom : (HomOver.stage 𝒱 c (AlgHom.id R A)).hom = (HomOver.id (𝒱.pullback c A) (pullback.snd c (specMap R A))).hom := by change RelPicard.baseChangeSnd c _ = 𝟙 _ rw [← RelPicard.baseChangeSnd_id c (specMap R A)] congr 1 apply Subtype.ext change Spec.map (CommRingCat.ofHom (RingHom.id A)) = 𝟙 _ exact Spec.map_id _ theorem stage_comp_stage_hom (g : A →ₐ[R] B) (g' : B →ₐ[R] B') : ((HomOver.stage 𝒱 c g').comp (HomOver.stage 𝒱 c g)).hom = (HomOver.stage 𝒱 c (g'.comp g)).hom := by change RelPicard.baseChangeSnd c _ ≫ RelPicard.baseChangeSnd c _ = RelPicard.baseChangeSnd c _ rw [RelPicard.baseChangeSnd_comp] congr 1 apply Subtype.ext change Spec.map _ ≫ Spec.map _ = Spec.map _ rw [← Spec.map_comp] rfl theorem kaehlerH0stageMap_kaehlerH0baseChangeMap (g : A →ₐ[R] B) (x : (𝒱.kaehlerSections c).H0) : kaehlerH0stageMap 𝒱 c g (kaehlerH0baseChangeMap 𝒱 c A x) = kaehlerH0baseChangeMap 𝒱 c B x := by change (HomOver.stage 𝒱 c g).kaehlerH0map ((HomOver.baseChange 𝒱 c A).kaehlerH0map x) = (HomOver.baseChange 𝒱 c B).kaehlerH0map x rw [← HomOver.comp_kaehlerH0map] exact HomOver.kaehlerH0map_congr (stage_comp_baseChange_hom 𝒱 c g) x theorem kaehlerH1stageMap_kaehlerH1baseChangeMap (g : A →ₐ[R] B) (x : (𝒱.kaehlerSections c).H1) : kaehlerH1stageMap 𝒱 c g (kaehlerH1baseChangeMap 𝒱 c A x) = kaehlerH1baseChangeMap 𝒱 c B x := by change (HomOver.stage 𝒱 c g).kaehlerH1map ((HomOver.baseChange 𝒱 c A).kaehlerH1map x) = (HomOver.baseChange 𝒱 c B).kaehlerH1map x rw [← HomOver.comp_kaehlerH1map] exact HomOver.kaehlerH1map_congr (stage_comp_baseChange_hom 𝒱 c g) x theorem kaehlerH0stageMap_id (x : ((𝒱.pullback c A).kaehlerSections (pullback.snd c (specMap R A))).H0) : kaehlerH0stageMap 𝒱 c (AlgHom.id R A) x = x := (HomOver.kaehlerH0map_congr (stage_id_hom 𝒱 c) x).trans (HomOver.id_kaehlerH0map x) theorem kaehlerH1stageMap_id (x : ((𝒱.pullback c A).kaehlerSections (pullback.snd c (specMap R A))).H1) : kaehlerH1stageMap 𝒱 c (AlgHom.id R A) x = x := (HomOver.kaehlerH1map_congr (stage_id_hom 𝒱 c) x).trans (HomOver.id_kaehlerH1map x) theorem kaehlerH0stageMap_comp (g : A →ₐ[R] B) (g' : B →ₐ[R] B') (x : ((𝒱.pullback c A).kaehlerSections (pullback.snd c (specMap R A))).H0) : kaehlerH0stageMap 𝒱 c g' (kaehlerH0stageMap 𝒱 c g x) = kaehlerH0stageMap 𝒱 c (g'.comp g) x := by change (HomOver.stage 𝒱 c g').kaehlerH0map ((HomOver.stage 𝒱 c g).kaehlerH0map x) = (HomOver.stage 𝒱 c (g'.comp g)).kaehlerH0map x rw [← HomOver.comp_kaehlerH0map] exact HomOver.kaehlerH0map_congr (stage_comp_stage_hom 𝒱 c g g') x theorem kaehlerH1stageMap_comp (g : A →ₐ[R] B) (g' : B →ₐ[R] B') (x : ((𝒱.pullback c A).kaehlerSections (pullback.snd c (specMap R A))).H1) : kaehlerH1stageMap 𝒱 c g' (kaehlerH1stageMap 𝒱 c g x) = kaehlerH1stageMap 𝒱 c (g'.comp g) x := by change (HomOver.stage 𝒱 c g').kaehlerH1map ((HomOver.stage 𝒱 c g).kaehlerH1map x) = (HomOver.stage 𝒱 c (g'.comp g)).kaehlerH1map x rw [← HomOver.comp_kaehlerH1map] exact HomOver.kaehlerH1map_congr (stage_comp_stage_hom 𝒱 c g g') x end BaseChange end AlgebraicGeometry.Scheme.TwoAffineOpenCover end
Statements phrased using this module (51)
- Global 1-forms of the ℤ₍ₚ₎-model versus p-integral cusp forms
ModularCurve.exists_linearEquiv_kaehlerH0_baseChange_intLattice_of_ratCurveModel_of_cuspSection_compat_of_neZero872 below · depth 24 - Chart rings of a mathbf Z₍ₚ₎-model embed into ̄ F_N
ModularCurve.exists_ringHom_cover_modularFunctionFieldBar_of_ratCurveModel_of_neZero2 below · depth 24 - Hecke adjunction for the integral Serre pairing, sectional charts
ModularCurve.serrePairingInt_deformationClass_heckeGen_eq_of_isCompletionAlong_of_res_eq_heckeDiffBar365 below · depth 24 - Norm–pull-back endomorphism acts by trace on Čech H¹
AlgebraicGeometry.RelPicard.IsDeformationClassMap.exists_cechH1ToH1_germ_eq_traceAlong_of_classifies_normModule_pullback_of_mono129 below · depth 25 - Čech H⁰(Ω¹) and H¹(𝒪): freeness and base change
AlgebraicGeometry.Scheme.TwoAffineOpenCover.exists_free_finrank_kaehlerH0_eq_finrank_structureSheafH1_and_baseChange_of_smoothOfRelativeDimension_one233 below · depth 25 - Degeneracy roof at the generic fibre: function-field Hecke correspondence
ModularCurve.exists_functionField_degeneracyRoof_kaehlerToFunctionField_eq_correspondence_of_res_eq_heckeDiffBar208 below · depth 25 - Integral weight-two cusp forms as relative differentials on the model
ModularCurve.exists_kaehlerH0_coeffMap_diffQExpBar_eq_qExpansion_of_mem_intLattice_of_ratCurveModel_of_cuspSection_compat_of_neZero456 below · depth 25 - Integrality of q-expansions of global 1-forms on a ℤ₍ₚ₎-model
ModularCurve.exists_powerSeries_diffQExpBar_eq_ofPowerSeries_map_of_kaehlerH0_of_ratCurveModel_of_cuspSection_compat_of_neZero349 below · depth 25 - Global differentials injected into Ω_̄ F_N/ℚ̄
ModularCurve.kaehlerH0_res_injective_of_injective_chartMap_of_neZero1 below · depth 25 - Global 1-forms restrict to regular differentials on ℚ̄(X₀(N))
ModularCurve.res_mem_regularDifferentialsBar_of_chartMap_of_neZero170 below · depth 25 - Tangent action of a norm-pull-back endomorphism over a field
AlgebraicGeometry.RelPicard.IsDeformationClassMap.exists_cechH1ToH1_germ_eq_traceAlong_of_classifies_normModule_pullback_of_field74 below · depth 26 - Moduli description of an endomorphism transported to the base change
AlgebraicGeometry.RelPicard.RepresentsRelSubPic.nonempty_poincare_pullbackAlong_iso_rigidify_normModule_baseChange58 below · depth 26 - Residues commute with pull-back along a morphism over τ
AlgebraicGeometry.Scheme.TwoAffineOpenCover.HomOver.residue_kaehlerMap010 below · depth 26 - Base change of the two-chart Čech complex of Ω¹
AlgebraicGeometry.Scheme.TwoAffineOpenCover.exists_baseChangeIsos_kaehlerSections1 below · depth 26 - Finiteness of Čech H⁰ and H¹ of Ω¹ for proper morphisms
AlgebraicGeometry.Scheme.TwoAffineOpenCover.finite_H0_H1_kaehlerSections58 below · depth 26 - h⁰(Ω¹)=h¹(𝒪) for a smooth proper geometrically integral curve
AlgebraicGeometry.Scheme.TwoAffineOpenCover.finrank_kaehlerSections_H0_eq_finrank_structureSheafSections_H1_of_geometricallyIntegral127 below · depth 26 - Flatness of Ω_{A_i/R} for a two-chart affine cover
AlgebraicGeometry.Scheme.TwoAffineOpenCover.flat_kaehlerDifferential_cover_of_smooth0 below · depth 26 - Freeness and base change for Čech H⁰ of differentials
AlgebraicGeometry.Scheme.TwoAffineOpenCover.free_kaehlerH0_of_isReduced_of_finrank_ker_fibre_const3 below · depth 26 - p-saturation of global differentials via q-expansions
ModularCurve.exists_eq_smul_of_diffQExpBar_eq_ofPowerSeries_smul_of_kaehlerH0_of_ratCurveModel_of_cuspSection_compat_of_neZero366 below · depth 26 - Degeneracy roof at q over the generic fibre
ModularCurve.exists_functionField_degeneracyRoof_lift_of_ratCurveModel4 below · depth 26 - Generic restriction of a global 1-form factors through the cusp stalk
ModularCurve.exists_kaehlerDifferential_stalk_and_ringHom_res_eq_mapOfRingHom_cuspSection_of_ratCurveModel_compat_of_neZero2 below · depth 26 - p-power multiple of an integral weight-2 cusp form as a differential
ModularCurve.exists_pow_smul_kaehlerH0_coeffMap_diffQExpBar_eq_qExpansion_of_mem_intLattice_of_ratCurveModel_of_cuspSection_compat_of_neZero322 below · depth 26 - Integral q-expansions of germs at the cusp of a ℤ₍ₚ₎-model
ModularCurve.exists_powerSeries_map_eq_ffEquiv_symm_stalkMap_stalkSpecializes_cuspSection_of_ratCurveModel_compat_of_neZero346 below · depth 26 - Function field of the geometric generic fibre is ℚ̄F_N
ModularCurve.exists_ringEquiv_functionField_pullback_comp_baseToFunctionField_eq_and_germToFunctionField_eq_chartMap_of_neZero2 below · depth 26 - Residue package for the two legs of the T_q degeneracy roof
ModularCurve.functionField_residuePackage_degeneracyRoof_of_finiteAlong85 below · depth 26 - Geometric generic fibre of a ℤ₍ₚ₎-model of X₀(N) is integral
ModularCurve.isIntegral_pullback_and_nonempty_of_chartMap_of_neZero7 below · depth 26 - Generic-fibre degeneracy roof for Hecke action on differentials
ModularCurve.kaehlerToFunctionField_eq_correspondence_degeneracyRoof_of_res_eq_heckeDiffBar161 below · depth 26 - Residues along Laurent charts commute with base change
TwoChartCech.Cover.LaurentChart.residue_mapOfRingHom0 below · depth 26 - Residue vanishes on forms pulled back from the first chart
TwoChartCech.Cover.LaurentChart.residue_r00 below · depth 26 - Čech H⁰ of Ω¹ on a two-chart cover equals the genus
AlgebraicCurve.finite_and_finrank_kaehlerSections_H0_eq_genusFF_of_isAlgClosed109 below · depth 27 - Divisibility by varpi from one germ on a smooth curve family
AlgebraicGeometry.exists_eq_smul_kaehlerH0_of_germ_eq_smul_of_isIntegral_fibre_of_smoothOfRelativeDimension_one6 below · depth 27 - Integral q-parameter at the cusp of a ℤ₍ₚ₎-model
ModularCurve.exists_algHom_retraction_param_stalk_cuspSection_ffEquiv_symm_eq_ofPowerSeries_isUnit_coeff_one_of_ratCurveModel_compat_of_neZero342 below · depth 27 - Germs at the cusp with p-divisible q-expansion are p-divisible
ModularCurve.exists_eq_germ_mul_of_ffEquiv_symm_stalkMap_stalkSpecializes_eq_ofPowerSeries_smul_cuspSection_of_ratCurveModel_compat_of_neZero3 below · depth 27 - Regular differentials spanned by restrictions of global 1-forms
ModularCurve.mem_span_range_res_of_mem_regularDifferentialsBar_of_chartMap_of_neZero172 below · depth 27 - Dividing a Čech 0-cocycle of Kähler differentials by varpi
AlgebraicGeometry.Scheme.TwoAffineOpenCover.exists_eq_smul_kaehlerH0_and_val_eq_of_val_eq_smul0 below · depth 28 - Divisibility of a Čech 1-form by varpi transfers between charts
AlgebraicGeometry.exists_eq_smul_chart_of_eq_smul_chart_of_mem_kaehlerH0_of_isIntegral_fibre_of_smoothOfRelativeDimension_one2 below · depth 28 - Chart divisibility by varpi of differentials from germ divisibility
AlgebraicGeometry.exists_eq_smul_chart_of_mapOfRingHom_germ_eq_smul_of_isIntegral_fibre_of_smoothOfRelativeDimension_one2 below · depth 28 - Germ of varpi generates a non-zero prime in each stalk on the special fibre
AlgebraicGeometry.isPrime_span_germ_and_ne_zero_of_isIntegral_fibre_of_smoothOfRelativeDimension_one0 below · depth 28 - Invertibility of j at generic-fibre points over the cusp
ModularCurve.exists_isUnit_stalk_ffEquiv_symm_stalkMap_genericPoint_eq_jq_of_specializes_cuspSection_of_ratCurveModel_compat_of_neZero288 below · depth 28 - Cusp parameter has q-expansion 1/j up to a unit
ModularCurve.exists_isUnit_stalk_ffEquiv_symm_stalkMap_mul_stalkSpecializes_eq_jq_inv_cuspSection_of_ratCurveModel_compat_of_neZero8 below · depth 28 - Modular invariant j as a unit along the special fibre
ModularCurve.exists_notMem_span_germ_and_ffEquiv_symm_stalkMap_stalkSpecializes_eq_jq_mul_cuspSection_of_ratCurveModel_compat_of_neZero323 below · depth 28 - Uniqueness of the place over the cusp ∞ after base change
ModularCurve.eq_cuspInftyBar_of_comap_toSubring_eq_cuspInftyFull0 below · depth 29 - Vertical order of j at the cusp section's special point
ModularCurve.exists_int_notMem_span_germ_and_ffEquiv_symm_stalkMap_stalkSpecializes_eq_jq_mul_zpow_mul_cuspSection_of_ratCurveModel_compat_of_neZero4 below · depth 29 - Valuation-ring lift of a ℚ̄-point along a specialisation
ModularCurve.exists_liesOverPrime_schemeHomOver_comp_eq_base_closedPoint_eq_of_specializes0 below · depth 29 - No pole of j along the special fibre at the cusp
ModularCurve.false_of_ffEquiv_symm_stalkMap_stalkSpecializes_eq_jq_mul_pow_mul_cuspSection_of_ratCurveModel_compat_of_neZero309 below · depth 29 - No zero of j along the special fibre
ModularCurve.false_of_pow_mul_ffEquiv_symm_stalkMap_stalkSpecializes_eq_jq_mul_cuspSection_of_ratCurveModel_compat_of_neZero319 below · depth 29 - Finitely many zeros and poles of ̄ j on the special fibre
ModularCurve.false_of_infinite_setOf_ord_pointEquivPlace_jqModC_ne_zero_cuspSection_of_ratCurveModel_compat_of_neZero113 below · depth 30 - An open set containing infinitely many κ-points of the special fibre
ModularCurve.infinite_setOf_base_closedPoint_mem_of_fromSpecStalk_span_germ_mem_cuspSection_of_ratCurveModel_compat_of_neZero47 below · depth 30 - Pole of ̄ j at the reduction of an A-point
ModularCurve.ord_apply_pointEquivPlace_jqModC_neg_of_stalkClosedPointTo_mem_maximalIdeal_of_ffEquiv_symm_stalkMap_eq_jq_inv_cuspSection_of_ratCurveModel_compat_of_neZero277 below · depth 30 - An A-point with j∈mathfrak m_A reduces to a zero of ̄ j
ModularCurve.ord_apply_pointEquivPlace_jqModC_pos_of_stalkClosedPointTo_mem_maximalIdeal_of_ffEquiv_symm_stalkMap_eq_jq_cuspSection_of_ratCurveModel_compat_of_neZero287 below · depth 30 - Geometric function field identification is base change of the rational one
ModularCurve.coe_ffEquiv_symm_stalkMap_eq_coeffEmb_ffEquiv_symm_of_galoisCompat_of_placeCompat44 below · depth 31