Definitions/Def_AlgebraicCurve_SemistableChartsComap.lean
Transport of component charts and annuli along field automorphisms
Throughout, L is a field, A \subseteq L a valuation subring, F an extension field of L, \bar F an extension of the residue field of A, and \sigma an L-algebra automorphism of F. The module first records how the (pointwise) action of \sigma on places of F/L interacts with the valuation-theoretic data attached to a place v: f lies in the valuation subring of \sigma \cdot v exactly when \sigma^{-1} f lies in that of v (equivalently \sigma f \in \sigma\cdot v iff f \in v, and f \in \sigma^{-1}\cdot v iff \sigma f \in v); (\sigma\cdot v).\mathrm{ord}\, f = v.\mathrm{ord}(\sigma^{-1} f); \sigma\cdot v is rational over L (i.e. L \to its residue field is surjective) iff v is; the residue of \sigma f at \sigma\cdot v corresponds to the residue of f at v under the induced isomorphism of residue fields; and, for rational v, the evaluation maps satisfy (\sigma\cdot v)(\sigma f) = v(f), equivalently (\sigma\cdot v)(f) = v(\sigma^{-1} f).
On this basis, ComponentChart.comap transports a component chart C (a valuation subring \mathcal O_C of F prolonging A, a surjective residue map \mathcal O_C \to \bar F with kernel the maximal ideal and compatible with A \to \bar A, a set of places of F/L, a finite set of nodes among places of \bar F, a reduction map on places, together with its pointwise-compatibility and divisor-pushforward axioms) to the chart with integers \sigma^{-1}(\mathcal O_C), residue f \mapsto \overline{\sigma f}, domain \{P : \sigma\cdot P \in C.\mathrm{dom}\}, reduction P \mapsto C.\mathrm{placeMap}(\sigma\cdot P) and the same nodes; all chart axioms are re-proved for this data, including the surjectivity and kernel statements for the transported residue map, which are also isolated as separate lemmas. Similarly Annulus.comap transports an annulus to the one with domain \{P : \sigma\cdot P \in \mathrm{dom}\}, parameter \sigma^{-1} of the original parameter and unchanged modulus, its existence-and-uniqueness, \mathrm{ord}-of-difference and unit-principle fields being verified through the place lemmas above. Attachment of an annulus to a chart at a node x (namely: x is a node, the parameter lies in the chart's integers with residue of order 1 at x, and a slope condition on all f with nonzero residue and vanishing order on the annulus) is preserved in both directions, giving isAttached_comap_iff. Finally, iterated transport is computed: transporting along \sigma and then along \sigma^{-1} returns the original integers, domain, parameter, reduction map and residues.
Relation to Mathlib
Place, ComponentChart and Annulus are the project's own notions; the transport is built from Mathlib's pointwise action of algebra automorphisms on valuation subrings, ValuationSubring.comap, and the functoriality of IsLocalRing.ResidueField under ring isomorphisms.
Where it is used
These transports are used in the treatment of semistable reduction of curves over valuation rings, where an automorphism of the function field over the constant field permutes the data describing the components and the annuli joining them, so that one component chart with its annuli and attachments yields the charts and annuli of its images.
References
- P. Deligne and M. Rapoport, Les schémas de modules de courbes elliptiques, in: Modular Functions of One Variable II, Lecture Notes in Mathematics 349, Springer, 1973, 143–316
- O. Zariski and P. Samuel, Commutative Algebra II, Van Nostrand, 1960
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 359 lines
- 49 declarations
- used in the statements of 7 theorems and imported by 48 proofs
- imports 1 definition modules
Source file: Definitions/Def_AlgebraicCurve_SemistableChartsComap.lean
Declarations
- theorem
AlgebraicCurve.Place.Transport.mem_smul_iff - theorem
AlgebraicCurve.Place.Transport.mem_smul_iff' - theorem
AlgebraicCurve.Place.Transport.mem_inv_smul_iff - theorem
AlgebraicCurve.Place.Transport.ord_smul' - theorem
AlgebraicCurve.Place.Transport.ord_inv_smul - theorem
AlgebraicCurve.Place.Transport.isRational_smul_iff - theorem
AlgebraicCurve.Place.Transport.residue_smul - theorem
AlgebraicCurve.Place.Transport.evalAt_smul - theorem
AlgebraicCurve.Place.Transport.evalAt_smul_symm - theorem
AlgebraicCurve.Place.Transport.evalAt_symm - theorem
AlgebraicCurve.Place.Transport.smul_inv_smul' - theorem
AlgebraicCurve.Place.Transport.inv_smul_smul' - def
AlgebraicCurve.ComponentChart.comapIntegers - theorem
AlgebraicCurve.ComponentChart.mem_comapIntegers - def
AlgebraicCurve.ComponentChart.comapIntegersEquiv - theorem
AlgebraicCurve.ComponentChart.coe_comapIntegersEquiv - def
AlgebraicCurve.ComponentChart.comapResidue - theorem
AlgebraicCurve.ComponentChart.comapResidue_apply - theorem
AlgebraicCurve.ComponentChart.comapResidue_surjective - theorem
AlgebraicCurve.ComponentChart.ker_comapResidue - theorem
AlgebraicCurve.ComponentChart.comapResidue_algebraMap - def
AlgebraicCurve.ComponentChart.comap - theorem
AlgebraicCurve.ComponentChart.comap_integers - theorem
AlgebraicCurve.ComponentChart.mem_comap_integers - theorem
AlgebraicCurve.ComponentChart.comap_dom - theorem
AlgebraicCurve.ComponentChart.mem_comap_dom - theorem
AlgebraicCurve.ComponentChart.comap_nodes - theorem
AlgebraicCurve.ComponentChart.comap_placeMap - theorem
AlgebraicCurve.ComponentChart.comap_residue_apply - theorem
AlgebraicCurve.Annulus.evalAt_symm_param - def
AlgebraicCurve.Annulus.comap - theorem
AlgebraicCurve.Annulus.comap_dom - theorem
AlgebraicCurve.Annulus.mem_comap_dom - theorem
AlgebraicCurve.Annulus.comap_param - theorem
AlgebraicCurve.Annulus.comap_modulus - theorem
AlgebraicCurve.Annulus.IsAttached.comap - theorem
AlgebraicCurve.Annulus.IsAttached.of_comap - theorem
AlgebraicCurve.Annulus.isAttached_comap_iff - theorem
AlgebraicCurve.Annulus.mem_comap_comap_dom - theorem
AlgebraicCurve.Annulus.comap_comap_param - theorem
AlgebraicCurve.Annulus.mem_comap_symm_dom - theorem
AlgebraicCurve.Annulus.comap_symm_param - theorem
AlgebraicCurve.ComponentChart.mem_comap_comap_integers - theorem
AlgebraicCurve.ComponentChart.mem_comap_comap_dom - theorem
AlgebraicCurve.ComponentChart.comap_comap_placeMap - theorem
AlgebraicCurve.ComponentChart.mem_comap_symm_integers - theorem
AlgebraicCurve.ComponentChart.mem_comap_symm_dom - theorem
AlgebraicCurve.ComponentChart.comap_symm_placeMap - theorem
AlgebraicCurve.ComponentChart.comap_symm_residue_apply
Source
import Definitions.Def_AlgebraicCurve_SemistableCharts set_option maxHeartbeats 200000 set_option synthInstance.maxHeartbeats 20000 set_option autoImplicit false noncomputable section open IsLocalRing namespace AlgebraicCurve open scoped Pointwise namespace Place.Transport variable {K F : Type*} [Field K] [Field F] [Algebra K F] (σ : F ≃ₐ[K] F) (v : Place K F) theorem mem_smul_iff (f : F) : f ∈ (σ • v).toValuationSubring ↔ σ.symm f ∈ v.toValuationSubring := by rw [smul_toValuationSubring, ValuationSubring.mem_pointwise_smul_iff_inv_smul_mem, AlgEquiv.smul_def, AlgEquiv.aut_inv] theorem mem_smul_iff' (f : F) : σ f ∈ (σ • v).toValuationSubring ↔ f ∈ v.toValuationSubring := by rw [mem_smul_iff, AlgEquiv.symm_apply_apply] theorem mem_inv_smul_iff (f : F) : f ∈ (σ⁻¹ • v).toValuationSubring ↔ σ f ∈ v.toValuationSubring := by rw [mem_smul_iff, AlgEquiv.aut_inv, AlgEquiv.symm_symm] theorem ord_smul' (f : F) : (σ • v).ord f = v.ord (σ.symm f) := by conv_lhs => rw [← AlgEquiv.apply_symm_apply σ f] exact ord_smul σ v (σ.symm f) theorem ord_inv_smul (f : F) : (σ⁻¹ • v).ord f = v.ord (σ f) := by rw [ord_smul', AlgEquiv.aut_inv, AlgEquiv.symm_symm] theorem isRational_smul_iff : (σ • v).IsRational ↔ v.IsRational := by unfold IsRational have h : (algebraMap K (σ • v).ResidueField) = (smulResidueAlgEquiv σ v).toAlgHom.toRingHom.comp (algebraMap K v.ResidueField) := by ext a; simp rw [h, RingHom.coe_comp] constructor · intro hs have : Function.Surjective ((smulResidueAlgEquiv σ v).symm ∘ ((smulResidueAlgEquiv σ v).toAlgHom.toRingHom ∘ algebraMap K v.ResidueField)) := (smulResidueAlgEquiv σ v).symm.surjective.comp hs convert this using 1 ext a; simp · intro hs exact (smulResidueAlgEquiv σ v).surjective.comp hs theorem residue_smul {f : F} (hf : f ∈ v.toValuationSubring) (hf' : σ f ∈ (σ • v).toValuationSubring) : IsLocalRing.residue (σ • v).toValuationSubring ⟨σ f, hf'⟩ = smulResidueAlgEquiv σ v (IsLocalRing.residue v.toValuationSubring ⟨f, hf⟩) := by have h1 : (⟨σ f, hf'⟩ : (σ • v).toValuationSubring) = smulRingEquiv σ v.toValuationSubring ⟨f, hf⟩ := Subtype.ext rfl rw [h1] show _ = IsLocalRing.ResidueField.mapEquiv (smulRingEquiv σ v.toValuationSubring) _ rw [IsLocalRing.ResidueField.mapEquiv_apply, IsLocalRing.ResidueField.map_residue] rfl theorem evalAt_smul (hv : v.IsRational) (f : F) : (σ • v).evalAt (σ f) = v.evalAt f := by by_cases hf : f ∈ v.toValuationSubring · have hf' : σ f ∈ (σ • v).toValuationSubring := (mem_smul_iff' σ v f).mpr hf rw [(σ • v).evalAt_of_mem hf', residue_smul σ v hf hf', ← v.algebraMap_evalAt hv hf, AlgEquiv.commutes, residueInv_algebraMap] · have hf' : σ f ∉ (σ • v).toValuationSubring := fun h => hf ((mem_smul_iff' σ v f).mp h) rw [Place.evalAt, Place.evalAt, dif_neg hf, dif_neg hf'] theorem evalAt_smul_symm (hv : v.IsRational) (f : F) : (σ • v).evalAt f = v.evalAt (σ.symm f) := by conv_lhs => rw [← AlgEquiv.apply_symm_apply σ f] exact evalAt_smul σ v hv _ theorem evalAt_symm (hv : v.IsRational) (f : F) : v.evalAt (σ.symm f) = (σ • v).evalAt f := (evalAt_smul_symm σ v hv f).symm theorem smul_inv_smul' (P : Place K F) : σ • σ⁻¹ • P = P := smul_inv_smul σ P theorem inv_smul_smul' (P : Place K F) : σ⁻¹ • σ • P = P := inv_smul_smul σ P end Place.Transport namespace ComponentChart variable {L : Type*} [Field L] {A : ValuationSubring L} {F : Type*} [Field F] [Algebra L F] {Fbar : Type*} [Field Fbar] [Algebra (ResidueField A) Fbar] (σ : F ≃ₐ[L] F) (C : ComponentChart A F Fbar) def comapIntegers : ValuationSubring F := C.integers.comap σ.toAlgHom.toRingHom @[simp] theorem mem_comapIntegers (f : F) : f ∈ comapIntegers σ C ↔ σ f ∈ C.integers := Iff.rfl def comapIntegersEquiv : comapIntegers σ C ≃+* C.integers where toFun x := ⟨σ x, x.2⟩ invFun y := ⟨σ.symm y, by simp [mem_comapIntegers]⟩ left_inv x := Subtype.ext (σ.symm_apply_apply x) right_inv y := Subtype.ext (σ.apply_symm_apply y) map_mul' x y := Subtype.ext (map_mul σ (x : F) (y : F)) map_add' x y := Subtype.ext (map_add σ (x : F) (y : F)) @[simp] theorem coe_comapIntegersEquiv (x : comapIntegers σ C) : ((comapIntegersEquiv σ C x : C.integers) : F) = σ x := rfl def comapResidue : comapIntegers σ C →+* Fbar := C.residue.comp (comapIntegersEquiv σ C).toRingHom @[simp] theorem comapResidue_apply (x : comapIntegers σ C) : comapResidue σ C x = C.residue ⟨σ x, x.2⟩ := rfl theorem comapResidue_surjective : Function.Surjective (comapResidue σ C) := C.residue_surjective.comp (comapIntegersEquiv σ C).surjective theorem ker_comapResidue : RingHom.ker (comapResidue σ C) = maximalIdeal (comapIntegers σ C) := by ext x rw [RingHom.mem_ker, comapResidue, RingHom.comp_apply, ← RingHom.mem_ker, C.ker_residue, IsLocalRing.mem_maximalIdeal, IsLocalRing.mem_maximalIdeal, mem_nonunits_iff, mem_nonunits_iff] exact (MulEquiv.isUnit_map (comapIntegersEquiv σ C).toMulEquiv).not theorem comapResidue_algebraMap (a : A) : comapResidue σ C ⟨algebraMap L F a, by rw [mem_comapIntegers, AlgEquiv.commutes]; exact (C.algebraMap_mem_iff a).mpr a.2⟩ = algebraMap (ResidueField A) Fbar (IsLocalRing.residue A a) := by rw [comapResidue_apply, ← C.residue_algebraMap a] congr 1 exact Subtype.ext (AlgEquiv.commutes σ a) def comap : ComponentChart A F Fbar where integers := comapIntegers σ C residue := comapResidue σ C dom := {P | σ • P ∈ C.dom} nodes := C.nodes placeMap P := C.placeMap (σ • P) algebraMap_mem_iff x := by rw [mem_comapIntegers, AlgEquiv.commutes]; exact C.algebraMap_mem_iff x residue_surjective := comapResidue_surjective σ C ker_residue := ker_comapResidue σ C residue_algebraMap a := comapResidue_algebraMap σ C a exists_smul_mem f hf := by obtain ⟨c, h, hres⟩ := C.exists_smul_mem (σ f) (by simpa using hf) refine ⟨c, by rw [mem_comapIntegers, map_smul]; exact h, ?_⟩ rw [comapResidue_apply] convert hres using 2 exact Subtype.ext (map_smul σ c f) placeMap_not_mem_nodes P hP := C.placeMap_not_mem_nodes (σ • P) hP pointwise P hP hrat f hf hreg := by have hrat' : (σ • P).IsRational := (Place.Transport.isRational_smul_iff σ P).mpr hrat have hreg' : ∀ w ∈ C.dom, C.placeMap w = C.placeMap (σ • P) → σ f ∈ w.toValuationSubring := by intro w hw hpw have hw1 : σ • σ⁻¹ • w ∈ C.dom := by rwa [smul_inv_smul] have h := hreg (σ⁻¹ • w) hw1 (by show C.placeMap (σ • σ⁻¹ • w) = C.placeMap (σ • P); rw [smul_inv_smul, hpw]) rwa [Place.Transport.mem_inv_smul_iff] at h obtain ⟨hm, h, heq⟩ := C.pointwise (σ • P) hP hrat' (σ f) hf hreg' have e := Place.Transport.evalAt_smul σ P hrat f refine ⟨hm, e ▸ h, ?_⟩ have hsub : (⟨P.evalAt f, e ▸ h⟩ : A) = ⟨(σ • P).evalAt (σ f), h⟩ := Subtype.ext e.symm rw [hsub] exact heq mapDomain_placeMap f hf D hD hD0 Q hQ := by have hmap : Finsupp.mapDomain (fun P => C.placeMap (σ • P)) D = Finsupp.mapDomain C.placeMap (σ • D) := by rw [Divisor.smul_def, ← Finsupp.mapDomain_comp]; rfl rw [hmap] have key := C.mapDomain_placeMap ⟨σ (f : F), f.2⟩ (by simpa [comapResidue_apply] using hf) (σ • D) (fun P hP => by rw [Divisor.smul_apply, hD (σ⁻¹ • P) (show σ • σ⁻¹ • P ∈ C.dom by rwa [smul_inv_smul]), Place.Transport.ord_inv_smul]) (fun P hP => by rw [Divisor.smul_apply] exact hD0 _ (fun h => hP (by rwa [Set.mem_setOf_eq, smul_inv_smul] at h))) Q hQ rw [key, comapResidue_apply] @[simp] theorem comap_integers : (C.comap σ).integers = comapIntegers σ C := rfl @[simp] theorem mem_comap_integers (f : F) : f ∈ (C.comap σ).integers ↔ σ f ∈ C.integers := Iff.rfl @[simp] theorem comap_dom : (C.comap σ).dom = {P | σ • P ∈ C.dom} := rfl theorem mem_comap_dom (P : Place L F) : P ∈ (C.comap σ).dom ↔ σ • P ∈ C.dom := Iff.rfl @[simp] theorem comap_nodes : (C.comap σ).nodes = C.nodes := rfl @[simp] theorem comap_placeMap (P : Place L F) : (C.comap σ).placeMap P = C.placeMap (σ • P) := rfl @[simp] theorem comap_residue_apply (x : (C.comap σ).integers) : (C.comap σ).residue x = C.residue ⟨σ (x : F), x.2⟩ := rfl end ComponentChart namespace Annulus variable {L : Type*} [Field L] {A : ValuationSubring L} {F : Type*} [Field F] [Algebra L F] (σ : F ≃ₐ[L] F) (An : Annulus A F) theorem evalAt_symm_param {P : Place L F} (hP : σ • P ∈ An.dom) : P.evalAt (σ.symm An.param) = (σ • P).evalAt An.param := by have hrat : P.IsRational := (Place.Transport.isRational_smul_iff σ P).mp (An.mem_dom _ hP).1 rw [Place.Transport.evalAt_smul_symm σ P hrat] def comap : Annulus A F where dom := {P | σ • P ∈ An.dom} param := σ.symm An.param modulus := An.modulus modulus_mem := An.modulus_mem mem_dom P hP := by obtain ⟨hrat, hmem, hval, hne, hmod⟩ := An.mem_dom (σ • P) hP have hratP : P.IsRational := (Place.Transport.isRational_smul_iff σ P).mp hrat refine ⟨hratP, (Place.Transport.mem_smul_iff σ P An.param).mp hmem, ?_, ?_, ?_⟩ <;> rw [Place.Transport.evalAt_symm σ P hratP] exacts [hval, hne, hmod] existsUnique_evalAt_eq c hc hc0 hmod := by obtain ⟨P₀, ⟨hP₀, hval⟩, huniq⟩ := An.existsUnique_evalAt_eq c hc hc0 hmod refine ⟨σ⁻¹ • P₀, ⟨?_, ?_⟩, ?_⟩ · show σ • σ⁻¹ • P₀ ∈ An.dom; rwa [smul_inv_smul] · have hrat : (σ⁻¹ • P₀).IsRational := by rw [← Place.Transport.isRational_smul_iff σ, smul_inv_smul]; exact (An.mem_dom _ hP₀).1 rw [Place.Transport.evalAt_symm σ _ hrat, smul_inv_smul]; exact hval · rintro P ⟨hP, hPval⟩ have hrat : P.IsRational := (Place.Transport.isRational_smul_iff σ P).mp (An.mem_dom _ hP).1 rw [Place.Transport.evalAt_symm σ P hrat] at hPval have := huniq (σ • P) ⟨hP, hPval⟩ rw [← this, inv_smul_smul] ord_param_sub P hP := by have hrat : P.IsRational := (Place.Transport.isRational_smul_iff σ P).mp (An.mem_dom _ hP).1 have h := An.ord_param_sub (σ • P) hP rw [Place.Transport.ord_smul', map_sub, AlgEquiv.commutes] at h rw [Place.Transport.evalAt_symm σ P hrat] exact h unit_principle f hf0 hord := by have hord' : ∀ P₀ ∈ An.dom, P₀.ord (σ f) = 0 := by intro P₀ hP₀ have h := hord (σ⁻¹ • P₀) (show σ • σ⁻¹ • P₀ ∈ An.dom by rwa [smul_inv_smul]) rwa [Place.Transport.ord_inv_smul] at h obtain ⟨m, c, hc, H⟩ := An.unit_principle (σ f) (by simpa using hf0) hord' refine ⟨m, c, hc, fun P hP => ?_⟩ have hrat : P.IsRational := (Place.Transport.isRational_smul_iff σ P).mp (An.mem_dom _ hP).1 obtain ⟨h, hu⟩ := H (σ • P) hP have key : P.evalAt f * c⁻¹ * P.evalAt (σ.symm An.param) ^ (-m) = (σ • P).evalAt (σ f) * c⁻¹ * (σ • P).evalAt An.param ^ (-m) := by rw [Place.Transport.evalAt_smul σ P hrat, Place.Transport.evalAt_symm σ P hrat] refine ⟨key ▸ h, ?_⟩ have hsub : (⟨_, key ▸ h⟩ : A) = ⟨_, h⟩ := Subtype.ext key rw [hsub]; exact hu @[simp] theorem comap_dom : (An.comap σ).dom = {P | σ • P ∈ An.dom} := rfl theorem mem_comap_dom (P : Place L F) : P ∈ (An.comap σ).dom ↔ σ • P ∈ An.dom := Iff.rfl @[simp] theorem comap_param : (An.comap σ).param = σ.symm An.param := rfl @[simp] theorem comap_modulus : (An.comap σ).modulus = An.modulus := rfl variable {Fbar : Type*} [Field Fbar] [Algebra (ResidueField A) Fbar] theorem IsAttached.comap {C : ComponentChart A F Fbar} {x : Place (ResidueField A) Fbar} (h : An.IsAttached C x) : (An.comap σ).IsAttached (C.comap σ) x := by obtain ⟨hx, hz, hord, hslope⟩ := h have hz' : σ.symm An.param ∈ (C.comap σ).integers := by rw [ComponentChart.mem_comap_integers, AlgEquiv.apply_symm_apply]; exact hz refine ⟨hx, hz', ?_, ?_⟩ · rw [ComponentChart.comap_residue_apply] convert hord using 3 exact Subtype.ext (σ.apply_symm_apply An.param) · intro f hf hres hordf P hP have hres' : C.residue ⟨σ f, hf⟩ ≠ 0 := by rwa [ComponentChart.comap_residue_apply] at hres have hordf' : ∀ P₀ ∈ An.dom, P₀.ord (σ f) = 0 := by intro P₀ hP₀ have h := hordf (σ⁻¹ • P₀) (show σ • σ⁻¹ • P₀ ∈ An.dom by rwa [smul_inv_smul]) rwa [Place.Transport.ord_inv_smul] at h have hrat : P.IsRational := (Place.Transport.isRational_smul_iff σ P).mp (An.mem_dom _ hP).1 obtain ⟨h, hu⟩ := hslope (σ f) hf hres' hordf' (σ • P) hP have key : P.evalAt f * P.evalAt (σ.symm An.param) ^ (-(x.ord ((C.comap σ).residue ⟨f, hf⟩))) = (σ • P).evalAt (σ f) * (σ • P).evalAt An.param ^ (-(x.ord (C.residue ⟨σ f, hf⟩))) := by rw [Place.Transport.evalAt_smul σ P hrat, Place.Transport.evalAt_symm σ P hrat, ComponentChart.comap_residue_apply] refine ⟨key ▸ h, ?_⟩ convert hu using 1 exact Subtype.ext key theorem IsAttached.of_comap {C : ComponentChart A F Fbar} {x : Place (ResidueField A) Fbar} (h : (An.comap σ).IsAttached (C.comap σ) x) : An.IsAttached C x := by obtain ⟨hx, hz', hord', hslope'⟩ := h have hz : An.param ∈ C.integers := by have := hz'; rw [ComponentChart.mem_comap_integers, comap_param, AlgEquiv.apply_symm_apply] at this; exact this refine ⟨hx, hz, ?_, ?_⟩ · rw [ComponentChart.comap_residue_apply] at hord' convert hord' using 3 exact Subtype.ext (σ.apply_symm_apply An.param).symm · intro f hf hres hordf P hP have hf' : σ.symm f ∈ (C.comap σ).integers := by rw [ComponentChart.mem_comap_integers, AlgEquiv.apply_symm_apply]; exact hf have hres' : (C.comap σ).residue ⟨σ.symm f, hf'⟩ ≠ 0 := by rw [ComponentChart.comap_residue_apply] convert hres using 2 exact Subtype.ext (σ.apply_symm_apply f) have hordf' : ∀ Q ∈ (An.comap σ).dom, Q.ord (σ.symm f) = 0 := by intro Q hQ rw [← Place.Transport.ord_smul' σ Q f] exact hordf (σ • Q) hQ have hPQ : σ⁻¹ • P ∈ (An.comap σ).dom := by show σ • σ⁻¹ • P ∈ An.dom; rwa [smul_inv_smul] have hrat : (σ⁻¹ • P).IsRational := by rw [← Place.Transport.isRational_smul_iff σ, smul_inv_smul]; exact (An.mem_dom _ hP).1 obtain ⟨h, hu⟩ := hslope' (σ.symm f) hf' hres' hordf' (σ⁻¹ • P) hPQ have e1 : (σ⁻¹ • P).evalAt (σ.symm f) = P.evalAt f := by rw [Place.Transport.evalAt_symm σ _ hrat, smul_inv_smul] have e2 : (σ⁻¹ • P).evalAt (An.comap σ).param = P.evalAt An.param := by rw [comap_param, Place.Transport.evalAt_symm σ _ hrat, smul_inv_smul] have e3 : x.ord ((C.comap σ).residue ⟨σ.symm f, hf'⟩) = x.ord (C.residue ⟨f, hf⟩) := by rw [ComponentChart.comap_residue_apply] congr 2 exact Subtype.ext (σ.apply_symm_apply f) have key : P.evalAt f * P.evalAt An.param ^ (-(x.ord (C.residue ⟨f, hf⟩))) = (σ⁻¹ • P).evalAt (σ.symm f) * (σ⁻¹ • P).evalAt (An.comap σ).param ^ (-(x.ord ((C.comap σ).residue ⟨σ.symm f, hf'⟩))) := by rw [e1, e2, e3] refine ⟨key ▸ h, ?_⟩ convert hu using 1 exact Subtype.ext key theorem isAttached_comap_iff {C : ComponentChart A F Fbar} {x : Place (ResidueField A) Fbar} : (An.comap σ).IsAttached (C.comap σ) x ↔ An.IsAttached C x := ⟨IsAttached.of_comap σ An, IsAttached.comap σ An⟩ theorem mem_comap_comap_dom (τ : F ≃ₐ[L] F) (P : Place L F) : P ∈ ((An.comap σ).comap τ).dom ↔ σ • τ • P ∈ An.dom := Iff.rfl theorem comap_comap_param (τ : F ≃ₐ[L] F) : ((An.comap σ).comap τ).param = τ.symm (σ.symm An.param) := rfl theorem mem_comap_symm_dom (P : Place L F) : P ∈ ((An.comap σ).comap σ.symm).dom ↔ P ∈ An.dom := by rw [mem_comap_comap_dom] show σ • σ⁻¹ • P ∈ An.dom ↔ P ∈ An.dom rw [smul_inv_smul] theorem comap_symm_param : ((An.comap σ).comap σ.symm).param = An.param := by rw [comap_comap_param, AlgEquiv.symm_symm, AlgEquiv.apply_symm_apply] end Annulus namespace ComponentChart variable {L : Type*} [Field L] {A : ValuationSubring L} {F : Type*} [Field F] [Algebra L F] {Fbar : Type*} [Field Fbar] [Algebra (ResidueField A) Fbar] (σ τ : F ≃ₐ[L] F) (C : ComponentChart A F Fbar) theorem mem_comap_comap_integers (f : F) : f ∈ ((C.comap σ).comap τ).integers ↔ σ (τ f) ∈ C.integers := Iff.rfl theorem mem_comap_comap_dom (P : Place L F) : P ∈ ((C.comap σ).comap τ).dom ↔ σ • τ • P ∈ C.dom := Iff.rfl theorem comap_comap_placeMap (P : Place L F) : ((C.comap σ).comap τ).placeMap P = C.placeMap (σ • τ • P) := rfl theorem mem_comap_symm_integers (f : F) : f ∈ ((C.comap σ).comap σ.symm).integers ↔ f ∈ C.integers := by rw [mem_comap_comap_integers, AlgEquiv.apply_symm_apply] theorem mem_comap_symm_dom (P : Place L F) : P ∈ ((C.comap σ).comap σ.symm).dom ↔ P ∈ C.dom := by rw [mem_comap_comap_dom] show σ • σ⁻¹ • P ∈ C.dom ↔ P ∈ C.dom rw [smul_inv_smul] theorem comap_symm_placeMap (P : Place L F) : ((C.comap σ).comap σ.symm).placeMap P = C.placeMap P := by rw [comap_comap_placeMap] show C.placeMap (σ • σ⁻¹ • P) = C.placeMap P rw [smul_inv_smul] theorem comap_symm_residue_apply (f : F) (hf : f ∈ ((C.comap σ).comap σ.symm).integers) (hf' : f ∈ C.integers) : ((C.comap σ).comap σ.symm).residue ⟨f, hf⟩ = C.residue ⟨f, hf'⟩ := by rw [comap_residue_apply, comap_residue_apply] congr 1 exact Subtype.ext (σ.apply_symm_apply f) end ComponentChart end AlgebraicCurve end
Statements phrased using this module (7)
- Transport of a fibre parameter along a field automorphism
AlgebraicCurve.ComponentChart.comap_fibreParam_laws0 below · depth 23 - Centre dichotomy for valuation rings over a component chart
AlgebraicCurve.ComponentChart.eq_integers_or_existsUnique_isCentre_of_forall_tubeBounded_mem_of_regular0 below · depth 23 - Positivity of ord_Q of a reduction is σ-invariant
AlgebraicCurve.ComponentChart.ord_residue_pos_iff_of_isCentre_of_comap_eq0 below · depth 23 - Residues of tube-bounded chart functions form a subalgebra
AlgebraicCurve.ComponentChart.exists_tubeBounded_residue_eq_of_mem_adjoin0 below · depth 24 - Component chart integers localise the tube-bounded ring
AlgebraicCurve.ComponentChart.forall_tubeBounded_mem_integers_and_exists_mul_eq_of_not_mem_dom92 below · depth 24 - Fricke image of a pole-free unit reduces to a nonzero constant
ModularCurve.ComponentChart.exists_residue_frickeInvolutionBar_eq_algebraMap_of_forall_pole_eq_cuspInftyBar561 below · depth 24 - Vanishing of the Fricke transform at a supersingular node
ModularCurve.ComponentChart.residue_frickeInvolutionBar_eq_zero_of_hasValue_zero_of_forall_pole_eq_cuspInftyBar562 below · depth 24