@@ -5,9 +5,10 @@ Authors: Judith Ludwig, Christian Merten
55-/
66module
77
8+ public import Mathlib.Algebra.DirectSum.Basic
9+ public import Mathlib.LinearAlgebra.SModEq.Pointwise
810public import Mathlib.RingTheory.AdicCompletion.Basic
911public 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. -/
201205def congr (f : M ≃ₗ[R] N) :
202206 AdicCompletion I M ≃ₗ[AdicCompletion I R] AdicCompletion I N :=
@@ -360,4 +364,102 @@ end Pi
360364
361365end 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+
363438end 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]
0 commit comments