@@ -600,26 +600,210 @@ theorem adicValued_apply' (x : WithVal (v.valuation K)) :
600600
601601variable (K)
602602
603- /-- The completion of `K` with respect to its `v`-adic valuation. -/
604- abbrev adicCompletion := (v.valuation K).Completion
603+ /-- The completion of `K` with respect to its `v`-adic valuation, defined as a one-field structure
604+ wrapping the uniform-space completion `(v.valuation K).Completion`. -/
605+ structure adicCompletion where
606+ /-- Wrap an element of the underlying completion `(v.valuation K).Completion` into
607+ `adicCompletion`. -/
608+ ofCompletion ::
609+ /-- The underlying element of the completion `(v.valuation K).Completion`. -/
610+ toCompletion : (v.valuation K).Completion
611+
612+ namespace adicCompletion
613+
614+ open UniformSpace MonoidWithZeroHom MonoidWithZeroHom.ValueGroup₀ Filter Topology Valuation
615+
616+ /-- `adicCompletion.toCompletion` and `adicCompletion.ofCompletion` as an equivalence. -/
617+ @[simps]
618+ def equivCompletion : adicCompletion K v ≃ (v.valuation K).Completion where
619+ toFun := toCompletion
620+ invFun := ofCompletion
621+ left_inv _ := rfl
622+ right_inv _ := rfl
623+
624+ noncomputable instance : Field (adicCompletion K v) := fast_instance% (equivCompletion K v).field
625+
626+ /-- `adicCompletion.toCompletion` as a ring isomorphism onto the underlying completion. -/
627+ @ [simps! apply]
628+ def equiv : adicCompletion K v ≃+* (v.valuation K).Completion where
629+ toEquiv := equivCompletion K v
630+ map_mul' _ _ := rfl
631+ map_add' _ _ := rfl
632+
633+ @[simp] lemma toCompletion_ofCompletion (x : (v.valuation K).Completion) :
634+ toCompletion (ofCompletion x : adicCompletion K v) = x := rfl
635+ @[simp] lemma ofCompletion_toCompletion (x : adicCompletion K v) :
636+ ofCompletion x.toCompletion = x := rfl
637+
638+ @[simp] lemma toCompletion_zero : (0 : adicCompletion K v).toCompletion = 0 := rfl
639+ @[simp] lemma toCompletion_one : (1 : adicCompletion K v).toCompletion = 1 := rfl
640+ @[simp] lemma toCompletion_add (x y : adicCompletion K v) :
641+ (x + y).toCompletion = x.toCompletion + y.toCompletion := rfl
642+ @[simp] lemma toCompletion_mul (x y : adicCompletion K v) :
643+ (x * y).toCompletion = x.toCompletion * y.toCompletion := rfl
644+
645+ theorem toCompletion_surjective : Function.Surjective (toCompletion (K := K) (v := v)) :=
646+ (equivCompletion K v).surjective
647+
648+ theorem ofCompletion_surjective : Function.Surjective (ofCompletion (K := K) (v := v)) :=
649+ (equivCompletion K v).symm.surjective
650+
651+ noncomputable instance : UniformSpace (adicCompletion K v) := .comap toCompletion inferInstance
652+
653+ theorem isUniformInducing_toCompletion :
654+ IsUniformInducing (toCompletion (K := K) (v := v)) := ⟨rfl⟩
655+
656+ instance : IsUniformAddGroup (adicCompletion K v) :=
657+ IsUniformInducing.isUniformAddGroup (equiv K v).toRingHom (isUniformInducing_toCompletion K v)
658+
659+ /-- The `v`-adic valuation on `adicCompletion K v`, transported from the completion along `equiv`.
660+ -/
661+ noncomputable def valuation : Valuation (adicCompletion K v) ℤᵐ⁰ :=
662+ Valued.v.comap (equiv K v).toRingHom
663+
664+ theorem valueGroup_eq :
665+ valueGroup (.ofClass (valuation K v)) =
666+ valueGroup (.ofClass (Valued.v : Valuation (v.valuation K).Completion ℤᵐ⁰)) := by
667+ simp [valuation, valueGroup, valueMonoid, ← (toCompletion_surjective K v).range_comp]; rfl
668+
669+ /-- The multiplicative equivalence between the value group of the completion's valuation, pulled
670+ back along `equiv`, and that of the completion. -/
671+ def valueGroupEquiv :
672+ valueGroup (.ofClass (valuation K v)) ≃*
673+ valueGroup (.ofClass (Valued.v : Valuation (v.valuation K).Completion ℤᵐ⁰)) where
674+ __ := Equiv.setCongr (by rw [valueGroup_eq K v])
675+ map_mul' _ _ := rfl
676+
677+ @[simp] theorem coe_valueGroupEquiv (a : valueGroup (.ofClass (valuation K v))) :
678+ ((valueGroupEquiv K v a : _) : ℤᵐ⁰ˣ) = a := rfl
679+
680+ /-- The order-preserving multiplicative equivalence between the `ValueGroup₀` of the completion's
681+ valuation, pulled back along `equiv`, and that of the completion. -/
682+ noncomputable def valueGroupOrderIso :
683+ ValueGroup₀ (.ofClass (valuation K v)) ≃*o
684+ ValueGroup₀ (.ofClass (Valued.v : Valuation (v.valuation K).Completion ℤᵐ⁰)) where
685+ toFun := WithZero.map' (valueGroupEquiv K v)
686+ invFun := WithZero.map' (valueGroupEquiv K v).symm
687+ left_inv x := by match x with | 0 => simp | .coe a => simp
688+ right_inv y := by match y with | 0 => simp | .coe b => simp
689+ map_mul' := by simp
690+ map_le_map_iff' {a b} := by
691+ match a, b with
692+ | 0 , 0 => simp
693+ | 0 , .coe _ => simp
694+ | .coe _, 0 => simp
695+ | .coe a, .coe b => simp [← Subtype.coe_le_coe]
696+
697+ @[simp] theorem coe_valueGroupOrderIso_coe (a : valueGroup (.ofClass (valuation K v))) :
698+ valueGroupOrderIso K v (a : ValueGroup₀ _) = (valueGroupEquiv K v a : ValueGroup₀ _) := by
699+ simp [valueGroupOrderIso]
700+
701+ theorem embedding_valueGroupOrderIso (g : ValueGroup₀ (.ofClass (valuation K v))) :
702+ embedding (valueGroupOrderIso K v g) = embedding g := by
703+ match g with
704+ | 0 => simp [valueGroupOrderIso]
705+ | .coe a => simp [coe_valueGroupOrderIso_coe, embedding_apply, coe_valueGroupEquiv]
706+
707+ theorem valueGroupOrderIso_restrict (x : adicCompletion K v) :
708+ valueGroupOrderIso K v ((valuation K v).restrict x) =
709+ Valued.v.restrict (toCompletion x) := by
710+ apply embedding_strictMono.injective
711+ rw [embedding_valueGroupOrderIso, embedding_restrict, embedding_restrict]; rfl
712+
713+ noncomputable instance : Valued (adicCompletion K v) ℤᵐ⁰ where
714+ v := valuation K v
715+ is_topological_valuation s := by
716+ rw [(isUniformInducing_toCompletion K v).isInducing.nhds_eq_comap 0 , toCompletion_zero,
717+ Filter.mem_comap]
718+ refine ⟨fun ⟨t, ht, hts⟩ ↦ ?_, fun ⟨γ, hγ⟩ ↦ ?_⟩
719+ · obtain ⟨δ, hδ⟩ := Valued.mem_nhds_zero.1 ht
720+ refine ⟨Units.mapEquiv (valueGroupOrderIso K v).symm.toMulEquiv δ, fun x hx ↦ hts (hδ ?_)⟩
721+ rw [Set.mem_setOf_eq] at hx ⊢
722+ simpa [← map_lt_map_iff (valueGroupOrderIso K v), valueGroupOrderIso_restrict] using hx
723+ · refine ⟨{y | Valued.v.restrict y < ↑(Units.mapEquiv (valueGroupOrderIso K v).toMulEquiv γ)},
724+ ?_, fun x hx ↦ hγ ?_⟩
725+ · rw [Valued.mem_nhds_zero]
726+ exact ⟨Units.mapEquiv (valueGroupOrderIso K v).toMulEquiv γ, subset_rfl⟩
727+ · rw [Set.mem_setOf_eq, ← map_lt_map_iff (valueGroupOrderIso K v),
728+ valueGroupOrderIso_restrict]
729+ simpa using hx
730+
731+ noncomputable instance : CompleteSpace (adicCompletion K v) :=
732+ ((isUniformInducing_toCompletion K v).completeSpace_congr (toCompletion_surjective K v)).mpr
733+ inferInstance
734+
735+ /-- Coercion of an element of `WithVal (v.valuation K)` into the adic completion. -/
736+ instance : Coe (WithVal (v.valuation K)) (adicCompletion K v) where
737+ coe x := ofCompletion (x : (v.valuation K).Completion)
738+
739+ /-- Coercion of an element of `K` into the adic completion. -/
740+ instance (priority := 99 ) : Coe K (adicCompletion K v) where
741+ coe k := ofCompletion (k : (v.valuation K).Completion)
742+
743+ @[simp] lemma coe_toCompletion (k : K) :
744+ (↑k : adicCompletion K v).toCompletion = (k : (v.valuation K).Completion) := rfl
745+
746+ theorem valuedAdicCompletion_def {x : adicCompletion K v} :
747+ Valued.v x = Valued.extensionValuation x.toCompletion := rfl
748+
749+ @[simp] theorem valued_toCompletion (x : adicCompletion K v) :
750+ Valued.v x.toCompletion = Valued.v x := rfl
751+
752+ @[simp] theorem valued_ofCompletion (y : (v.valuation K).Completion) :
753+ Valued.v (ofCompletion y : adicCompletion K v) = Valued.v y := rfl
754+
755+ theorem valued_coe (k : K) :
756+ Valued.v (↑k : adicCompletion K v) = v.valuation K k := by
757+ simp
758+
759+ @[ext] theorem ext {x y : adicCompletion K v} (h : x.toCompletion = y.toCompletion) : x = y := by
760+ cases x; cases y; exact congrArg ofCompletion h
761+
762+ @[norm_cast] lemma coe_zero : ((0 : K) : adicCompletion K v) = 0 := by
763+ apply adicCompletion.ext; simp
764+ @[norm_cast] lemma coe_one : ((1 : K) : adicCompletion K v) = 1 := by
765+ apply adicCompletion.ext; simp
766+ @[norm_cast] lemma coe_add (x y : K) :
767+ ((x + y : K) : adicCompletion K v) = ↑x + ↑y := by
768+ apply adicCompletion.ext; simp [UniformSpace.Completion.coe_add]
769+ @[norm_cast] lemma coe_mul (x y : K) :
770+ ((x * y : K) : adicCompletion K v) = ↑x * ↑y := by
771+ apply adicCompletion.ext; simp [UniformSpace.Completion.coe_mul]
772+
773+ /-- `toCompletion` as a uniform-space isomorphism onto the underlying completion. -/
774+ def uniformEquiv : adicCompletion K v ≃ᵤ (v.valuation K).Completion where
775+ toEquiv := equivCompletion K v
776+ uniformContinuous_toFun := uniformContinuous_comap
777+ uniformContinuous_invFun :=
778+ (isUniformInducing_toCompletion K v).uniformContinuous_iff.mpr uniformContinuous_id
779+
780+ theorem continuous_toCompletion : Continuous (toCompletion (K := K) (v := v)) :=
781+ (uniformEquiv K v).continuous
605782
606- theorem valuedAdicCompletion_def {x : v.adicCompletion K} :
607- Valued.v x = Valued.extensionValuation x := rfl
783+ theorem continuous_ofCompletion : Continuous (ofCompletion (K := K) (v := v)) :=
784+ (uniformEquiv K v).symm.continuous
785+
786+ instance : T0Space (adicCompletion K v) :=
787+ (uniformEquiv K v).toHomeomorph.isEmbedding.t0Space
788+
789+ end adicCompletion
608790
609791lemma valuedAdicCompletion_surjective :
610- Function.Surjective (Valued.v : (v.adicCompletion K) → ℤᵐ⁰) :=
611- Valued.valuedCompletion_surjective_iff.mpr <| .of_comp (v.valuation_surjective K)
792+ Function.Surjective (Valued.v : (v.adicCompletion K) → ℤᵐ⁰) := by
793+ have h : Function.Surjective (Valued.v : (v.valuation K).Completion → ℤᵐ⁰) :=
794+ Valued.valuedCompletion_surjective_iff.mpr <| .of_comp (v.valuation_surjective K)
795+ exact h.comp (adicCompletion.toCompletion_surjective K v)
612796
613797lemma adicCompletion_valueGroup_eq : MonoidWithZeroHom.valueGroup (.ofClass (Valued.v
614798 (R := adicCompletion K v))) =
615799 MonoidWithZeroHom.valueGroup (.ofClass (valuation K v)) := by
616800 ext n
617- simp only [MonoidWithZeroHom.mem_valueGroup_iff_of_comm, ne_eq, map_eq_zero]
618- refine ⟨fun ⟨a, ha0, x, hx⟩ ↦ ?_, fun ⟨a, ha0, x, hx⟩ ↦ ⟨a, by simp [ha0], x, by simpa using hx⟩⟩
801+ simp only [MonoidWithZeroHom.mem_valueGroup_iff_of_comm, ne_eq, MonoidWithZeroHom.coe_ofClass]
802+ refine ⟨fun ⟨a, ha0, x, hx⟩ ↦ ?_, fun ⟨a, ha0, x, hx⟩ ↦
803+ ⟨↑a, by simpa using ha0, ↑x, by simpa using hx⟩⟩
619804 obtain ⟨b, hb⟩ := valuation_surjective K v (Valued.v a)
620805 obtain ⟨y, hy⟩ := valuation_surjective K v (Valued.v x)
621- refine ⟨b, ?_, y, by simpa [hb, hy] using hx⟩
622- rwa [← ne_eq, ← (valuation K v).ne_zero_iff, hb, Valuation.ne_zero_iff]
806+ exact ⟨b, by rw [hb]; exact ha0, y, by rw [hb, hy]; exact hx⟩
623807
624808/-- The ring of integers of `adicCompletion`. -/
625809def adicCompletionIntegers : ValuationSubring (v.adicCompletion K) :=
@@ -655,9 +839,10 @@ instance adicValued.uniformContinuousConstSMul :
655839 exact (Ring.uniformContinuousConstSMul (WithVal <| v.valuation K)).uniformContinuous_const_smul _
656840
657841open UniformSpace in
658- instance : Algebra S (v.adicCompletion K) where
842+ /-- The `S`-algebra structure on the underlying completion. -/
843+ noncomputable instance instAlgebraCompletion : Algebra S ((v.valuation K).Completion) where
659844 toSMul := Completion.instSMul _ _
660- algebraMap := Completion.coeRingHom.comp (algebraMap _ _ )
845+ algebraMap := Completion.coeRingHom.comp (algebraMap S (WithVal (v.valuation K)) )
661846 commutes' r x := by
662847 induction x using Completion.induction_on with
663848 | hp =>
@@ -671,22 +856,48 @@ instance : Algebra S (v.adicCompletion K) where
671856 simp [Algebra.smul_def, Completion.algebraMap_def, WithVal.algebraMap_right_apply,
672857 Completion.coeRingHom]
673858
859+ noncomputable instance : Algebra S (v.adicCompletion K) :=
860+ fast_instance% (adicCompletion.equivCompletion K v).algebra S
861+
862+ theorem algebraMap_adicCompletion_toCompletion (r : S) :
863+ (algebraMap S (v.adicCompletion K) r).toCompletion =
864+ algebraMap S ((v.valuation K).Completion) r := rfl
865+
866+ instance {S₀ : Type*} [CommSemiring S₀] [Algebra S₀ S] [Algebra S₀ K] [IsScalarTower S₀ S K] :
867+ IsScalarTower S₀ S ((v.valuation K).Completion) :=
868+ .of_algebraMap_eq fun x ↦ by
869+ exact congrArg (UniformSpace.Completion.coeRingHom (α := WithVal (v.valuation K)))
870+ (IsScalarTower.algebraMap_apply S₀ S (WithVal (v.valuation K)) x)
871+
872+ instance {S₀ : Type*} [CommSemiring S₀] [Algebra S₀ S] [Algebra S₀ K] [IsScalarTower S₀ S K] :
873+ IsScalarTower S₀ S (v.adicCompletion K) :=
874+ .of_algebraMap_eq fun x ↦ by
875+ apply adicCompletion.ext
876+ rw [algebraMap_adicCompletion_toCompletion, algebraMap_adicCompletion_toCompletion,
877+ IsScalarTower.algebraMap_apply S₀ S ((v.valuation K).Completion)]
878+
674879theorem coe_smul_adicCompletion (r : S) (x : WithVal (v.valuation K)) :
675- (↑(r • x) : v.adicCompletion K) = r • (↑x : v.adicCompletion K) :=
676- UniformSpace.Completion.coe_smul r x
880+ (↑(r • x) : v.adicCompletion K) = r • (↑x : v.adicCompletion K) := by
881+ apply adicCompletion.ext
882+ exact UniformSpace.Completion.coe_smul r x
677883
678884theorem algebraMap_adicCompletion : ⇑(algebraMap S <| v.adicCompletion K) = (↑) ∘ algebraMap S K :=
679885 rfl
680886
681887variable {R} in
682- theorem denseRange_algebraMap : DenseRange (algebraMap K (v.adicCompletion K)) :=
683- UniformSpace.Completion.denseRange_coe.comp (WithVal.equiv _).symm.surjective.denseRange
684- (UniformSpace.Completion.continuous_coe _)
888+ theorem denseRange_algebraMap : DenseRange (algebraMap K (v.adicCompletion K)) := by
889+ rw [algebraMap_adicCompletion]
890+ exact (adicCompletion.ofCompletion_surjective K v).denseRange.comp
891+ (UniformSpace.Completion.denseRange_coe.comp (WithVal.equiv _).symm.surjective.denseRange
892+ (UniformSpace.Completion.continuous_coe _))
893+ (adicCompletion.continuous_ofCompletion K v)
685894
686895end Algebra
687896
688897theorem coe_algebraMap_mem (r : R) : ↑((algebraMap R K) r) ∈ adicCompletionIntegers K v := by
689- rw [mem_adicCompletionIntegers, Valued.valuedCompletion_apply]
898+ rw [mem_adicCompletionIntegers]
899+ change Valued.v (↑((algebraMap R K) r) : adicCompletion K v).toCompletion ≤ 1
900+ rw [Valued.valuedCompletion_apply]
690901 simpa using v.valuation_le_one _
691902
692903instance : Algebra R (v.adicCompletionIntegers K) where
@@ -702,11 +913,11 @@ instance : Algebra R (v.adicCompletionIntegers K) where
702913 map_one' := by ext; simp
703914 map_mul' x y := by
704915 ext
705- simp only [map_mul, UniformSpace.Completion.coe_mul, MulMemClass.mk_mul_mk ]
916+ simp [map_mul, UniformSpace.Completion.coe_mul]
706917 map_zero' := by ext; simp
707918 map_add' x y := by
708919 ext
709- simp only [map_add, UniformSpace.Completion.coe_add, AddMemClass.mk_add_mk ] }
920+ simp [map_add, UniformSpace.Completion.coe_add] }
710921 commutes' r x := by
711922 rw [mul_comm]
712923 smul_def' r x := by
@@ -730,14 +941,16 @@ open scoped algebraMap in -- to make the coercions from `R` fire
730941/-- The valuation on the completion agrees with the global valuation on elements of the
731942integer ring. -/
732943theorem valuedAdicCompletion_eq_valuation (r : R) :
733- Valued.v (r : v.adicCompletion K) = v.valuation K r :=
734- Valued.valuedCompletion_apply _
944+ Valued.v (r : v.adicCompletion K) = v.valuation K r := by
945+ rw [← adicCompletion.valued_toCompletion]
946+ exact Valued.valuedCompletion_apply _
735947
736948variable {R K} in
737949/-- The valuation on the completion agrees with the global valuation on elements of the field. -/
738950theorem valuedAdicCompletion_eq_valuation' (k : K) :
739- Valued.v (k : v.adicCompletion K) = v.valuation K k :=
740- Valued.valuedCompletion_apply _
951+ Valued.v (k : v.adicCompletion K) = v.valuation K k := by
952+ rw [← adicCompletion.valued_toCompletion]
953+ exact Valued.valuedCompletion_apply _
741954
742955variable {R K} in
743956open scoped algebraMap in -- to make the coercion from `R` fire
0 commit comments