ArtinSchreierTheory.exists_additive_primitive_of_zmod_two_cocycle
A prime-field two-cocycle has a locally constant primitive with values in the separable Galois extension.
Source context 4 commands
Surrounding namespaces, section variables, and local commands at this declaration.
namespace ArtinSchreierTheory
universe u v
variable {K : Type u} {Ω : Type v} [Field K] [Field Ω] [Algebra K Ω] [IsGalois K Ω]
variable (p : ℕ) [Fact p.Prime] [CharP Ω p]Lean source · full declaration
theorem exists_additive_primitive_of_zmod_two_cocycle
(z : Gal(Ω/K) → Gal(Ω/K) → ZMod p)
(hz : ∀ σ τ υ : Gal(Ω/K),
z σ (τ * υ) + z τ υ = z (σ * τ) υ + z σ τ)
(hlc : IsLocallyConstant (fun x : Gal(Ω/K) × Gal(Ω/K) => z x.1 x.2)) :
∃ b : Gal(Ω/K) → Ω, IsLocallyConstant b ∧
∀ σ τ : Gal(Ω/K), σ (b τ) - b (σ * τ) + b σ =
(ZMod.castHom (dvd_refl p) Ω) (z σ τ) := by
classical
obtain ⟨E, zE, hvalue⟩ := GaloisCohomology.exists_finiteGalois_factor_continuous_pair
(fun x : Gal(Ω/K) × Gal(Ω/K) => z x.1 x.2) hlc.continuous
let r : Gal(Ω/K) →* Gal(E/K) := AlgEquiv.restrictNormalHom E
have hr : Function.Surjective r := AlgEquiv.restrictNormalHom_surjective Ω
have hzE (σ τ υ : Gal(E/K)) :
zE σ (τ * υ) + zE τ υ = zE (σ * τ) υ + zE σ τ := by
obtain ⟨σ', rfl⟩ := hr σ
obtain ⟨τ', rfl⟩ := hr τ
obtain ⟨υ', rfl⟩ := hr υ
rw [← map_mul, ← map_mul]
exact (congrArg₂ (· + ·) (hvalue σ' (τ' * υ')) (hvalue τ' υ')).trans
((hz σ' τ' υ').trans
(congrArg₂ (· + ·) (hvalue (σ' * τ') υ') (hvalue σ' τ')).symm)
let φE : ZMod p →+* E := ZMod.castHom (dvd_refl p) E
have hfix (σ : Gal(E/K)) (x : ZMod p) : σ (φE x) = φE x := by
simp only [φE, ZMod.castHom_apply, ZMod.cast_eq_val, map_natCast]
have hcE (σ τ υ : Gal(E/K)) :
φE (zE σ (τ * υ)) + σ (φE (zE τ υ)) =
φE (zE (σ * τ) υ) + φE (zE σ τ) := by
rw [hfix, ← map_add, ← map_add, hzE]
obtain ⟨bE, hbE⟩ := GaloisCohomology.additiveH2_finite
(fun σ τ : Gal(E/K) => φE (zE σ τ)) hcE
let b : Gal(Ω/K) → Ω := fun σ => (bE (r σ) : Ω)
have hrlc : IsLocallyConstant r :=
(IsLocallyConstant.iff_continuous r).mpr
(InfiniteGalois.restrictNormalHom_continuous E.toIntermediateField)
refine ⟨b, hrlc.comp (fun τ : Gal(E/K) => (bE τ : Ω)), ?_⟩
intro σ τ
have hφ (x : ZMod p) :
((φE x : E) : Ω) = (ZMod.castHom (dvd_refl p) Ω) x := by
obtain ⟨a, rfl⟩ := ZMod.intCast_surjective x
rw [map_intCast, map_intCast]
rfl
have h := congrArg (fun x : E => (x : Ω)) (hbE (r σ) (r τ))
change ((r σ) (bE (r τ)) : Ω) - (bE (r σ * r τ) : Ω) +
(bE (r σ) : Ω) = ((φE (zE (r σ) (r τ)) : E) : Ω) at h
rw [AlgEquiv.restrictNormalHom_apply, ← map_mul, hφ, hvalue] at h
exact h