The actual image Λ_K = log(U_K) is both open and closed in the additive group of the complete field.
Source context 4 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
namespace Yamaguchi26AbfaithfulGalois
open LocalFieldTheory.DiscreteValuationField.MultiplicativeIntegerValuation
universe utheorem principal_unit_log_image_open_closed
{K : Type u} [Field K] [CharZero K]
(v : Valuation K (WithZero (Multiplicative ℤ)))
[ValuationTheory.DiscreteValuationField.Valuation.IsCompleteDiscrete v]
(p : ℕ) [Fact p.Prime]
[CharP (IsLocalRing.ResidueField v.valuationSubring) p] :
letI : Valued K (WithZero (Multiplicative ℤ)) := Valued.mk' v
let Λ : Set K := Set.range
(fun u : LocalFieldTheory.DiscreteValuationField.CompleteDVF.higherPrincipalUnitGroup
(completeDVFOfWithZeroValuation v) 1 =>
(principalUnitLogOfMixedChar v p u).toAdd)
IsOpen Λ ∧ IsClosed Λ := by
let : Valued K (WithZero (Multiplicative ℤ)) := Valued.mk' v
let f : Additive
(LocalFieldTheory.DiscreteValuationField.CompleteDVF.higherPrincipalUnitGroup
(completeDVFOfWithZeroValuation v) 1) →+ K :=
(principalUnitLogOfMixedChar v p).toAdditiveLeft
let L : AddSubgroup K := f.range
have hp : (p : K) ≠ 0 := Nat.cast_ne_zero.mpr (Fact.out : p.Prime).ne_zero
let e : K ≃ₜ K := Homeomorph.mulLeft₀ ((p : K) ^ 2) (pow_ne_zero 2 hp)
let B : Set K := e '' (v.valuationSubring : Set K)
have hBopen : IsOpen B :=
e.isOpen_image.mpr (show IsOpen (v.valuationSubring : Set K) from
Valued.isOpen_valuationSubring K)
have h0B : (0 : K) ∈ B := by
refine ⟨0, (v.valuationSubring).zero_mem, ?_⟩
change (p : K) ^ 2 * 0 = 0
exact mul_zero _
have hBsub : B ⊆ (L : Set K) := by
intro y hy
obtain ⟨a, ha, rfl⟩ := hy
obtain ⟨u, hu⟩ := exists_principalUnit_log_eq_natCast_sq_mul v p
(⟨a, ha⟩ : v.valuationSubring)
apply AddMonoidHom.mem_range.mpr
refine ⟨Additive.ofMul u, ?_⟩
change (principalUnitLogOfMixedChar v p u).toAdd = (p : K) ^ 2 * a
exact hu
have hLopen : IsOpen (L : Set K) :=
AddSubgroup.isOpen_of_mem_nhds L
(Filter.mem_of_superset (hBopen.mem_nhds h0B) hBsub)
have hLclosed : IsClosed (L : Set K) := AddSubgroup.isClosed_of_isOpen L hLopen
change IsOpen (L : Set K) ∧ IsClosed (L : Set K)
exact ⟨hLopen, hLclosed⟩