Keep the averaging calculation on an abstract module. The actual logarithm image supplies the inclusion and injectivity only once at the public boundary.
Source context 3 commands
Surrounding namespaces, section variables, and local commands at this declaration.
namespace LocalFieldTheory.DiscreteValuationField.MultiplicativeIntegerValuation
universe u w
variable {K : Type u} [Field K] [CharZero K]
{Γ : Type w} [Group Γ] [Fintype Γ]theorem representation_eq_self_of_log_image_of_action_sub_prime_divisible
(v : _root_.Valuation K (WithZero (Multiplicative ℤ)))
[ValuationTheory.DiscreteValuationField.Valuation.IsCompleteDiscrete v]
(p : ℕ) [Fact p.Prime] [CharP (IsLocalRing.ResidueField v.valuationSubring) p]
{M : Type*} [hMAdd : AddCommGroup M] [hMModule : Module ℤ_[p] M]
(ρ : Representation ℤ_[p] Γ M) (ι : M →+ K) (hι : Function.Injective ι)
(hlog : ∀ x : M, ι x ∈
Set.range (fun u => (principalUnitLogOfMixedChar v p u).toAdd))
(hcard : p.Coprime (Fintype.card Γ))
(hdiv : ∀ (g : Γ) (x : M), ∃ y : M, ρ g x - x = (p : ℤ_[p]) • y) :
∀ (g : Γ) (x : M), ρ g x = x := by
have hunit : IsUnit (Fintype.card Γ : ℤ_[p]) :=
PadicInt.isUnit_iff.mpr (PadicInt.norm_natCast_eq_one_iff.mpr hcard)
let : Invertible (Fintype.card Γ : ℤ_[p]) := hunit.invertible
let J : AddSubgroup K := (LinearMap.ker ρ.averageMap).toAddSubgroup.map ι
have hJlog : (J : Set K) ⊆
Set.range (fun u => (principalUnitLogOfMixedChar v p u).toAdd) := by
rintro b ⟨x, _hx, rfl⟩
exact hlog x
have hJdiv : ∀ b : K, b ∈ J → ∃ c : K, c ∈ J ∧ p • c = b := by
rintro b ⟨x, hx, rfl⟩
obtain ⟨y, hy, hpy⟩ :=
averageMap_ker_divisible_of_action_sub_divisible ρ (p : ℤ_[p]) hdiv x hx
refine ⟨ι y, ⟨y, hy, rfl⟩, ?_⟩
rw [← map_nsmul, ← Nat.cast_smul_eq_nsmul ℤ_[p], hpy]
have hJ : J = ⊥ :=
addSubgroup_eq_bot_of_principalUnitLog_image_of_p_divisible v p J hJlog hJdiv
have hker (x : M) (hx : ρ.averageMap x = 0) : x = 0 := by
apply hι
have hxJ : ι x ∈ J := ⟨x, hx, rfl⟩
rw [hJ, AddSubgroup.mem_bot] at hxJ
exact hxJ.trans ι.map_zero.symm
have havg (x : M) : ρ.averageMap x = x := by
apply (sub_eq_zero.mp (hker (x - ρ.averageMap x) ?_)).symm
rw [map_sub, ρ.averageMap_id (ρ.averageMap x) (ρ.averageMap_invariant x), sub_self]
intro g x
rw [← havg x]
exact ρ.averageMap_invariant x g