Skip to content

Commit 63a90fe

Browse files
committed
feat(RingTheory/Perfectoid): Fontaine's theta map is surjective (#26384)
This PR continues the work from #22332. Original PR: #22332 In this file, we show that when R is p-adically complete and Frob : R/p -> R/p is surjective, Fontaine's theta map is surjective. Co-authored-by: Jiedong Jiang <emailboxofjjd@163.com>
1 parent 3128d20 commit 63a90fe

File tree

9 files changed

+236
-3
lines changed

9 files changed

+236
-3
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4719,6 +4719,7 @@ public import Mathlib.LinearAlgebra.RootSystem.RootPositive
47194719
public import Mathlib.LinearAlgebra.RootSystem.WeylGroup
47204720
public import Mathlib.LinearAlgebra.SModEq
47214721
public import Mathlib.LinearAlgebra.SModEq.Basic
4722+
public import Mathlib.LinearAlgebra.SModEq.Pointwise
47224723
public import Mathlib.LinearAlgebra.Semisimple
47234724
public import Mathlib.LinearAlgebra.SesquilinearForm
47244725
public import Mathlib.LinearAlgebra.SesquilinearForm.Basic

Mathlib/Algebra/Module/Submodule/Basic.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,11 @@ theorem toAddSubgroup_le : p.toAddSubgroup ≤ p'.toAddSubgroup ↔ p ≤ p' :=
137137
theorem toAddSubgroup_mono : Monotone (toAddSubgroup : Submodule R M → AddSubgroup M) :=
138138
toAddSubgroup_strictMono.monotone
139139

140+
@[simp]
141+
theorem toAddSubgroup_toAddSubmonoid (p : Submodule R M) :
142+
p.toAddSubgroup.toAddSubmonoid = p.toAddSubmonoid :=
143+
rfl
144+
140145
@[gcongr]
141146
protected alias ⟨_, _root_.GCongr.Submodule.toAddSubgroup_le⟩ := Submodule.toAddSubgroup_le
142147

Mathlib/LinearAlgebra/SModEq/Basic.lean

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ open Submodule
2121
open Polynomial
2222

2323
variable {R : Type*} [Ring R]
24+
variable {S : Type*} [Ring S]
2425
variable {A : Type*} [CommRing A]
25-
variable {M : Type*} [AddCommGroup M] [Module R M] (U U₁ U₂ : Submodule R M)
26+
variable {M : Type*} [AddCommGroup M] [Module R M] [Module S M] (U U₁ U₂ : Submodule R M)
2627
variable {x x₁ x₂ y y₁ y₂ z z₁ z₂ : M}
2728
variable {N : Type*} [AddCommGroup N] [Module R N] (V V₁ V₂ : Submodule R N)
2829

@@ -54,6 +55,11 @@ theorem bot : x ≡ y [SMOD (⊥ : Submodule R M)] ↔ x = y := by
5455
theorem mono (HU : U₁ ≤ U₂) (hxy : x ≡ y [SMOD U₁]) : x ≡ y [SMOD U₂] :=
5556
(Submodule.Quotient.eq U₂).2 <| HU <| (Submodule.Quotient.eq U₁).1 hxy
5657

58+
lemma of_toAddSubgroup_le {U : Submodule R M} {V : Submodule S M}
59+
(h : U.toAddSubgroup ≤ V.toAddSubgroup) {x y : M} (hxy : x ≡ y [SMOD U]) : x ≡ y [SMOD V] := by
60+
simp only [SModEq, Submodule.Quotient.eq] at hxy ⊢
61+
exact h hxy
62+
5763
@[refl]
5864
protected theorem refl (x : M) : x ≡ x [SMOD U] :=
5965
@rfl _ _
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/-
2+
Copyright (c) 2025 Jiedong Jiang. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Jiedong Jiang
5+
-/
6+
module
7+
8+
public import Mathlib.Algebra.Algebra.Operations
9+
public import Mathlib.LinearAlgebra.SModEq.Basic
10+
11+
/-!
12+
# Pointwise lemmas for modular equivalence
13+
14+
In this file, we record more lemmas about `SModEq` on elements
15+
of modules or rings.
16+
-/
17+
18+
@[expose] public section
19+
20+
open Submodule
21+
22+
open Polynomial
23+
24+
variable {R : Type*} [Ring R] {I : Ideal R}
25+
variable {M : Type*} [AddCommGroup M] [Module R M] {U : Submodule R M}
26+
variable {x y : M}
27+
28+
namespace SModEq
29+
30+
/--
31+
A variant of `SModEq.smul`, where the scalar belongs to an ideal.
32+
-/
33+
theorem smul' (hxy : x ≡ y [SMOD U])
34+
{c : R} (hc : c ∈ I) : c • x ≡ c • y [SMOD (I • U)] := by
35+
rw [SModEq.sub_mem] at hxy ⊢
36+
rw [← smul_sub]
37+
exact smul_mem_smul hc hxy
38+
39+
end SModEq

Mathlib/RingTheory/AdicCompletion/Basic.lean

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,32 @@ theorem IsHausdorff.eq_iff_smodEq [IsHausdorff I M] {x y : M} :
7171
apply IsHausdorff.haus' (I := I) (x - y)
7272
simpa [SModEq.sub_mem] using h
7373

74+
theorem IsHausdorff.map_algebraMap_iff [CommRing S] [Algebra R S] :
75+
IsHausdorff (I.map (algebraMap R S)) S ↔ IsHausdorff I S := by
76+
simp only [isHausdorff_iff, smul_eq_mul, Ideal.mul_top, Ideal.smul_top_eq_map]
77+
congr!
78+
simp only [← Ideal.map_pow]
79+
rfl
80+
81+
theorem IsHausdorff.of_map [CommRing S] [Module S M] {J : Ideal S} [Algebra R S]
82+
[IsScalarTower R S M] (hIJ : I.map (algebraMap R S) ≤ J) [IsHausdorff J M] :
83+
IsHausdorff I M := by
84+
refine ⟨fun x h ↦ IsHausdorff.haus ‹_› x fun n ↦ ?_⟩
85+
apply SModEq.of_toAddSubgroup_le
86+
(U := (I ^ n • ⊤ : Submodule R M)) (V := (J ^ n • ⊤ : Submodule S M))
87+
· rw [← AddSubgroup.toAddSubmonoid_le]
88+
simp only [Submodule.toAddSubgroup_toAddSubmonoid, Submodule.smul_toAddSubmonoid,
89+
Submodule.top_toAddSubmonoid]
90+
rw [AddSubmonoid.smul_le]
91+
intro r hr m _
92+
rw [← algebraMap_smul S r m]
93+
apply AddSubmonoid.smul_mem_smul
94+
· have := Ideal.mem_map_of_mem (algebraMap R S) hr
95+
simp only [Ideal.map_pow] at this
96+
apply Ideal.pow_right_mono (I := I.map (algebraMap R S)) hIJ n this
97+
· trivial
98+
· exact h n
99+
74100
variable (I) in
75101
theorem IsHausdorff.funext {M : Type*} [IsHausdorff I N] {f g : M → N}
76102
(h : ∀ n m, Submodule.Quotient.mk (p := (I ^ n • ⊤ : Submodule R N)) (f m) =

Mathlib/RingTheory/AdicCompletion/Functoriality.lean

Lines changed: 103 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ Authors: Judith Ludwig, Christian Merten
55
-/
66
module
77

8+
public import Mathlib.Algebra.DirectSum.Basic
9+
public import Mathlib.LinearAlgebra.SModEq.Pointwise
810
public import Mathlib.RingTheory.AdicCompletion.Basic
911
public import Mathlib.RingTheory.AdicCompletion.Algebra
10-
public import Mathlib.Algebra.DirectSum.Basic
1112

1213
/-!
1314
# Functoriality of adic completions
@@ -197,6 +198,9 @@ theorem map_zero : map I (0 : M →ₗ[R] N) = 0 := by
197198
ext
198199
simp
199200

201+
theorem map_of (f : M →ₗ[R] N) (x : M) : map I f (of I M x) = of I N (f x) :=
202+
rfl
203+
200204
/-- A linear equiv induces a linear equiv on adic completions. -/
201205
def congr (f : M ≃ₗ[R] N) :
202206
AdicCompletion I M ≃ₗ[AdicCompletion I R] AdicCompletion I N :=
@@ -360,4 +364,102 @@ end Pi
360364

361365
end Families
362366

367+
open Submodule
368+
369+
variable {I}
370+
371+
theorem exists_smodEq_pow_add_one_smul {f : M →ₗ[R] N}
372+
(h : Function.Surjective (mkQ (I • ⊤) ∘ₗ f)) {y : N} {n : ℕ}
373+
(hy : y ∈ (I ^ n • ⊤ : Submodule R N)) :
374+
∃ x ∈ (I ^ n • ⊤ : Submodule R M), f x ≡ y [SMOD (I ^ (n + 1) • ⊤ : Submodule R N)] := by
375+
induction hy using smul_induction_on' with
376+
| smul r hr y _ =>
377+
obtain ⟨x, hx⟩ := h (mkQ _ y)
378+
use r • x, smul_mem_smul hr mem_top
379+
simp only [coe_comp, Function.comp_apply, mkQ_apply, ← SModEq.def, map_smul] at ⊢ hx
380+
rw [pow_succ, ← smul_smul]
381+
exact SModEq.smul' hx hr
382+
| add y1 hy1 y2 hy2 ih1 ih2 =>
383+
obtain ⟨x1, hx1, hx1'⟩ := ih1
384+
obtain ⟨x2, hx2, hx2'⟩ := ih2
385+
use x1 + x2, add_mem hx1 hx2
386+
simp only [map_add]
387+
exact SModEq.add hx1' hx2'
388+
389+
theorem exists_smodEq_pow_smul_top_and_smodEq_pow_add_one_smul_top {f : M →ₗ[R] N}
390+
(h : Function.Surjective (mkQ (I • ⊤) ∘ₗ f)) {x : M} {y : N} {n : ℕ}
391+
(hxy : f x ≡ y [SMOD (I ^ n • ⊤ : Submodule R N)]) :
392+
∃ x' : M, x ≡ x' [SMOD (I ^ n • ⊤ : Submodule R M)] ∧
393+
f x' ≡ y [SMOD (I ^ (n + 1) • ⊤ : Submodule R N)] := by
394+
obtain ⟨z, hz, hz'⟩ :=
395+
exists_smodEq_pow_add_one_smul h (y := y - f x) (SModEq.sub_mem.mp hxy.symm)
396+
use x + z
397+
constructor
398+
· simpa [SModEq.sub_mem]
399+
· simpa [SModEq.sub_mem, sub_sub_eq_add_sub, add_comm] using hz'
400+
401+
theorem exists_smodEq_pow_smul_top_and_mkQ_eq {f : M →ₗ[R] N}
402+
(h : Function.Surjective (mkQ (I • ⊤) ∘ₗ f)) {x : M} {n : ℕ}
403+
{y : N ⧸ (I ^ n • ⊤ : Submodule R N)} {y' : N ⧸ (I ^ (n + 1) • ⊤ : Submodule R N)}
404+
(hyy' : factor (pow_smul_top_le I N n.le_succ) y' = y) (hxy : mkQ _ (f x) = y) :
405+
∃ x' : M, x ≡ x' [SMOD (I ^ n • ⊤ : Submodule R M)] ∧ mkQ _ (f x') = y' := by
406+
obtain ⟨y0, hy0⟩ := mkQ_surjective _ y'
407+
have : f x ≡ y0 [SMOD (I ^ n • ⊤ : Submodule R N)] := by
408+
rw [SModEq, ← mkQ_apply, ← mkQ_apply, ← factor_mk (pow_smul_top_le I N n.le_succ) y0,
409+
hy0, hyy', hxy]
410+
obtain ⟨x', hxx', hx'y0⟩ :=
411+
exists_smodEq_pow_smul_top_and_smodEq_pow_add_one_smul_top h this
412+
use x', hxx'
413+
rwa [mkQ_apply, hx'y0]
414+
415+
theorem map_surjective_of_mkQ_comp_surjective {f : M →ₗ[R] N}
416+
(h : Function.Surjective (mkQ (I • ⊤) ∘ₗ f)) : Function.Surjective (map I f) := by
417+
intro y
418+
suffices h : ∃ x : ℕ → M, ∀ n, x n ≡ x (n + 1) [SMOD (I ^ n • ⊤ : Submodule R M)] ∧
419+
Submodule.Quotient.mk (f (x n)) = eval I _ n y by
420+
obtain ⟨x, hx⟩ := h
421+
use AdicCompletion.mk I M ⟨x, fun h ↦
422+
eq_factor_of_eq_factor_succ (fun _ _ ↦ pow_smul_top_le I M) _ (fun n ↦ (hx n).1) h⟩
423+
ext n
424+
simp [hx n]
425+
let x : (n : ℕ) → {m : M // Submodule.Quotient.mk (f m) = eval I _ n y} := fun n ↦ by
426+
induction n with
427+
| zero =>
428+
use 0
429+
apply_fun (Submodule.Quotient.equiv (I ^ 0 • ⊤) ⊤ (.refl R N) (by simp)).toEquiv
430+
exact Subsingleton.elim _ _
431+
| succ n xn =>
432+
choose z hz using exists_smodEq_pow_smul_top_and_mkQ_eq h
433+
(y' := eval _ _ (n + 1) y) (by simp) xn.2
434+
exact ⟨z, hz.2
435+
exact ⟨fun n ↦ (x n).val, fun n ↦ ⟨(Classical.choose_spec (exists_smodEq_pow_smul_top_and_mkQ_eq
436+
h (y' := eval I _ (n + 1) y) (by simp) (x n).2)).1, (x n).property⟩⟩
437+
363438
end AdicCompletion
439+
440+
open AdicCompletion Submodule
441+
442+
variable {I}
443+
444+
theorem surjective_of_mkQ_comp_surjective [IsPrecomplete I M] [IsHausdorff I N]
445+
{f : M →ₗ[R] N} (h : Function.Surjective (mkQ (I • ⊤) ∘ₗ f)) : Function.Surjective f := by
446+
intro y
447+
obtain ⟨x', hx'⟩ := AdicCompletion.map_surjective_of_mkQ_comp_surjective h (of I N y)
448+
obtain ⟨x, hx⟩ := of_surjective I M x'
449+
use x
450+
rwa [← of_inj (I := I), ← map_of, hx]
451+
452+
variable {S : Type*} [CommRing S] (f : R →+* S)
453+
454+
theorem surjective_of_mk_map_comp_surjective [IsPrecomplete I R] [haus : IsHausdorff (I.map f) S]
455+
(h : Function.Surjective ((Ideal.Quotient.mk (I.map f)).comp f)) :
456+
Function.Surjective f := by
457+
let _ := f.toAlgebra
458+
let fₗ := (Algebra.ofId R S).toLinearMap
459+
change Function.Surjective ((restrictScalars R (I.map f)).mkQ ∘ₗ fₗ) at h
460+
have : I • ⊤ = restrictScalars R (Ideal.map f I) := by
461+
simp only [Ideal.smul_top_eq_map, restrictScalars_inj]
462+
rfl
463+
have _ := IsHausdorff.map_algebraMap_iff.mp haus
464+
apply surjective_of_mkQ_comp_surjective (I := I) (f := fₗ)
465+
rwa [Ideal.smul_top_eq_map]

Mathlib/RingTheory/Perfection.lean

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,28 @@ theorem coeff_iterate_frobeniusEquiv_symm (f : Ring.Perfection R p) (n m : ℕ)
183183
| succ m ih =>
184184
simp [ih, ← add_assoc]
185185

186+
theorem coeff_surjective (h : Function.Surjective (frobenius R p)) (n : ℕ) :
187+
Function.Surjective (Perfection.coeff R p n) := by
188+
intro x
189+
refine ⟨⟨fun m ↦ if h : n ≤ m then ?_ else x ^ p ^ (n - m), ?_⟩, ?_⟩
190+
· induction h using Nat.leRec with
191+
| refl =>
192+
exact x
193+
| le_succ_of_le hle xk =>
194+
choose x hx using h xk
195+
use x
196+
· intro m
197+
obtain (h1 | h1 | h1) : n ≤ m ∨ n = m + 1 ∨ ¬ n ≤ m + 1 := by cutsat
198+
· have h1' : n ≤ m + 1 := by cutsat
199+
simp only [h1', ↓reduceDIte, h1, Nat.leRec_succ, ← frobenius_def]
200+
exact Classical.choose_spec (h _)
201+
· subst h1
202+
simp [← frobenius_def]
203+
· have h1' : ¬ n ≤ m := by cutsat
204+
have : n - m = (n - (m + 1)) + 1 := by cutsat
205+
simp [h1, h1', this, pow_succ, pow_mul]
206+
· simp
207+
186208
variable (R p)
187209

188210
/-- Given rings `R` and `S` of characteristic `p`, with `R` being perfect,

Mathlib/RingTheory/Perfectoid/FontaineTheta.lean

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Jiedong Jiang
55
-/
66
module
77

8+
public import Mathlib.RingTheory.AdicCompletion.Functoriality
89
public import Mathlib.RingTheory.AdicCompletion.RingHom
910
public import Mathlib.RingTheory.Perfectoid.Untilt
1011
public import Mathlib.RingTheory.WittVector.TeichmullerSeries
@@ -16,9 +17,13 @@ homomorphism from the Witt vector `𝕎 R♭` of the tilt of a perfectoid ring `
1617
to `R` itself. Our definition of `θ` does not require that `R` is perfectoid in the first place.
1718
We only need `R` to be `p`-adically complete.
1819
19-
## Main definitions
20+
## Main Definitions
2021
* `fontaineTheta` : Fontaine's θ map, which is a ring homomorphism from `𝕎 R♭` to `R`.
2122
23+
## Main Theorems
24+
* `fontaineTheta_teichmuller` : `θ([x])` is the untilt of `x`.
25+
* `fontaineTheta_surjective` : Fontaine's θ map is surjective.
26+
2227
## TODO
2328
Establish that our definition (explicit construction of `θ mod p ^ n`) agrees with the
2429
deformation-theoretic approach via the cotangent complex, as in
@@ -182,3 +187,26 @@ theorem fontaineTheta_teichmuller (x : R♭) : fontaineTheta R p (teichmuller p
182187
· simp [SModEq, mk_pow_fontaineTheta]
183188

184189
end WittVector
190+
191+
variable [Fact ¬IsUnit (p : R)] [IsAdicComplete (span {(p : R)}) R]
192+
193+
/-- If the Frobenius map is surjective on `R/pR`, then the Fontaine's θ map is surjective. -/
194+
theorem surjective_fontaineTheta (hF : Function.Surjective (frobenius (ModP R p) p)) :
195+
Function.Surjective (fontaineTheta R p) := by
196+
have : Ideal.map (fontaineTheta R p) (span {(p : 𝕎 R♭)}) = 𝔭 := by
197+
simp [map_span]
198+
have _ : IsHausdorff ((span {(p : 𝕎 R♭)}).map (fontaineTheta R p)) R := by
199+
rw [this]
200+
infer_instance
201+
apply surjective_of_mk_map_comp_surjective (fontaineTheta R p) (I := span {(p : 𝕎 R♭)})
202+
simp only [RingHom.coe_comp]
203+
suffices h : Function.Surjective (Ideal.Quotient.mk 𝔭 ∘ fontaineTheta R p) by
204+
rwa [Ideal.map_span, Set.image_singleton, map_natCast]
205+
have : Ideal.Quotient.mk 𝔭 ∘ fontaineTheta R p = (fun x ↦
206+
PreTilt.coeff 0 x) ∘ fun (x : 𝕎 R♭) ↦ (x.coeff 0) := by
207+
ext
208+
simp [mk_fontaineTheta]
209+
rw [this]
210+
apply Function.Surjective.comp
211+
· exact Perfection.coeff_surjective hF 0
212+
· exact WittVector.coeff_surjective 0

Mathlib/RingTheory/WittVector/Defs.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ theorem ext {x y : 𝕎 R} (h : ∀ n, x.coeff n = y.coeff n) : x = y := by
8080
simp only at h
8181
simp [funext_iff, h]
8282

83+
theorem coeff_surjective (n : ℕ) :
84+
Function.Surjective (fun (x : 𝕎 R) ↦ x.coeff n) :=
85+
fun x ↦ ⟨(mk p fun _ ↦ x), rfl⟩
86+
8387
variable (p)
8488

8589
@[simp]

0 commit comments

Comments
 (0)