Prove2Me
Navigate
DiscoverFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

Galois symbol (F×)n→Hn(F,Z/2)(F^\times)^n \to H^n(F,\mathbb{Z}/2)(F×)n→Hn(F,Z/2)

Definition
MilnorConjecture_GaloisSymbol

by vatsj · Sep 24, 2026 · Mathlib 0df444a (Lean v4.33.1)

algebragalois-cohomologykummer-theory

Let FFF be a field with char⁡F≠2\operatorname{char} F \neq 2charF=2, FsepF^{\mathrm{sep}}Fsep a separable closure and GF=Gal⁡(Fsep/F)G_F = \operatorname{Gal}(F^{\mathrm{sep}}/F)GF​=Gal(Fsep/F) with its Krull topology. Write Hn(F,Z/2)=Hctsn(GF,Z/2)H^n(F,\mathbb{Z}/2) = H^n_{\mathrm{cts}}(G_F,\mathbb{Z}/2)Hn(F,Z/2)=Hctsn​(GF​,Z/2) for continuous cohomology with trivial coefficients Z/2≅μ2\mathbb{Z}/2 \cong \mu_2Z/2≅μ2​.

For a∈F×a \in F^\timesa∈F× fix a square root a∈Fsep\sqrt a \in F^{\mathrm{sep}}a​∈Fsep. The Kummer character is

χa(σ)={0σ(a)=a,1otherwise,\chi_a(\sigma) = \begin{cases}0 & \sigma(\sqrt a) = \sqrt a,\\ 1 & \text{otherwise,}\end{cases}χa​(σ)={01​σ(a​)=a​,otherwise,​

a continuous homomorphism GF→Z/2G_F\to\mathbb{Z}/2GF​→Z/2 representing the Kummer class δa∈H1(F,μ2)\delta a \in H^1(F,\mu_2)δa∈H1(F,μ2​) (the boundary of the Kummer sequence). For a1,…,an∈F×a_1,\dots,a_n\in F^\timesa1​,…,an​∈F×, the Galois symbol is the class of the homogeneous cocycle

(x0,…,xn)⟼∏j=1n(χaj(xj)−χaj(xj−1))  ∈  Hn(F,Z/2),(x_0,\dots,x_n) \longmapsto \prod_{j=1}^{n}\bigl(\chi_{a_j}(x_j) - \chi_{a_j}(x_{j-1})\bigr) \;\in\; H^n(F,\mathbb{Z}/2),(x0​,…,xn​)⟼j=1∏n​(χaj​​(xj​)−χaj​​(xj−1​))∈Hn(F,Z/2),

the homogeneous form of (σ1,…,σn)↦χa1(σ1)⋯χan(σn)(\sigma_1,\dots,\sigma_n)\mapsto \chi_{a_1}(\sigma_1)\cdots\chi_{a_n}(\sigma_n)(σ1​,…,σn​)↦χa1​​(σ1​)⋯χan​​(σn​), i.e. the cup product δa1∪⋯∪δan\delta a_1 \cup \cdots \cup \delta a_nδa1​∪⋯∪δan​. For n=0n = 0n=0 it is the class of the constant 111.

These are exactly the values of the norm residue homomorphism on symbols.

Formalization Note H F n, kummerChar a and galoisSymbol a are sorry-free; continuity, additivity, invariance and the cocycle identity are proved in the file. The class does not depend on the choice of a\sqrt aa​, since χa\chi_aχa​ does not.

Definition code
import Mathlib
import Definitions.Def_MilnorConjecture_HomogeneousCochains

/-!
# The Galois symbol `(F^×)ⁿ → Hⁿ(F, ℤ/2)`

For a field `F` with `2 ≠ 0` in `F`, write `F^sep` for its separable closure and
`G_F = Gal(F^sep/F)` for the absolute Galois group with its Krull topology. For `a ∈ F^×` fix a
square root `√a ∈ F^sep` and let `χ_a : G_F → ℤ/2` be the Kummer character,
`χ_a(σ) = 0` if `σ(√a) = √a` and `χ_a(σ) = 1` otherwise.

The Galois symbol of `(a₁, …, aₙ)` is the class in `Hⁿ_cts(G_F, ℤ/2)` of the homogeneous
cocycle `(x₀, …, xₙ) ↦ ∏ⱼ (χ_{aⱼ}(xⱼ) - χ_{aⱼ}(xⱼ₋₁))`, which is the homogeneous form of the
inhomogeneous cocycle `(σ₁, …, σₙ) ↦ χ_{a₁}(σ₁) ⋯ χ_{aₙ}(σₙ)`, i.e. of the cup product
`δa₁ ∪ ⋯ ∪ δaₙ` of Kummer classes.
-/

namespace MilnorConjecture

section Cochain

variable {G R : Type*} [CommRing R]

/-- Function-level homogeneous coboundary `(δf)(y) = ∑ᵢ (-1)ⁱ f(y ∘ ∂ᵢ)`. -/
def fcob {m : ℕ} (f : (Fin m → G) → R) (y : Fin (m + 1) → G) : R :=
  ∑ i : Fin (m + 1), (-1 : R) ^ (i : ℕ) * f (y ∘ i.succAbove)

/-- `(x₀, …, xₙ) ↦ ∏ⱼ (χⱼ(xⱼ) - χⱼ(xⱼ₋₁))` for functions `χ₁, …, χₙ : G → R`. -/
def prodCochain {n : ℕ} (χ : Fin n → G → R) (x : Fin (n + 1) → G) : R :=
  ∏ j : Fin n, (χ j (x j.succ) - χ j (x j.castSucc))

lemma prodCochain_succ {n : ℕ} (χ : Fin (n + 1) → G → R) (x : Fin (n + 2) → G) :
    prodCochain χ x = (χ 0 (x 1) - χ 0 (x 0)) * prodCochain (Fin.tail χ) (Fin.tail x) := by
  rw [prodCochain, Fin.prod_univ_succ]
  rfl

/-- Leibniz rule for multiplying by the coboundary of a `0`-cochain:
`δ(δχ · Ψ) = -(δχ · δΨ)`. -/
lemma fcob_mul_tail {m : ℕ} (χ : G → R) (Ψ : (Fin (m + 1) → G) → R) (y : Fin (m + 3) → G) :
    fcob (fun x : Fin (m + 2) → G ↦ (χ (x 1) - χ (x 0)) * Ψ (Fin.tail x)) y =
      -((χ (y 1) - χ (y 0)) * fcob Ψ (Fin.tail y)) := by
  simp only [fcob]
  rw [Fin.sum_univ_succ, Fin.sum_univ_succ, Fin.sum_univ_succ (n := m + 1), mul_add, neg_add,
    ← add_assoc]
  congr 1
  · have h1 : (Fin.succ 0 : Fin (m + 3)).succAbove 1 = 2 := by
      rw [show (1 : Fin (m + 2)) = Fin.succ 0 from rfl, Fin.succ_succAbove_succ]; rfl
    have h2 : Fin.tail (y ∘ (Fin.succ 0 : Fin (m + 3)).succAbove) = fun i ↦ y i.succ.succ := by
      funext i
      simp only [Fin.tail, Function.comp_apply, Fin.succ_succAbove_succ, Fin.succAbove_zero]
    simp only [Function.comp_apply, h1, h2, Fin.succ_succAbove_zero, Fin.succAbove_zero]
    have e3 : Fin.tail (y ∘ Fin.succ) = fun i ↦ y i.succ.succ := rfl
    have e4 : Fin.tail y ∘ Fin.succ = fun i ↦ y i.succ.succ := rfl
    rw [Fin.succ_one_eq_two, Fin.succ_zero_eq_one, e3, e4]
    simp only [Fin.val_one, Fin.val_zero, pow_one, pow_zero, one_mul]
    ring
  · rw [Finset.mul_sum, ← Finset.sum_neg_distrib]
    refine Finset.sum_congr rfl fun j _ ↦ ?_
    have h0 : (y ∘ j.succ.succ.succAbove) 0 = y 0 := by simp
    have h1 : (y ∘ j.succ.succ.succAbove) 1 = y 1 := by
      rw [Function.comp_apply, ← Fin.succ_zero_eq_one, Fin.succ_succAbove_succ,
        Fin.succ_succAbove_zero, Fin.succ_zero_eq_one]
    have h2 : Fin.tail (y ∘ j.succ.succ.succAbove) = Fin.tail y ∘ j.succ.succAbove := by
      funext i
      simp only [Fin.tail, Function.comp_apply, Fin.succ_succAbove_succ]
    rw [h0, h1, h2]
    simp only [Fin.val_succ]
    ring

lemma fcob_prodCochain {n : ℕ} (χ : Fin n → G → R) (y : Fin (n + 2) → G) :
    fcob (prodCochain χ) y = 0 := by
  induction n with
  | zero => simp [fcob, prodCochain, Fin.sum_univ_two]
  | succ n ih =>
    have : prodCochain χ =
        fun x ↦ (χ 0 (x 1) - χ 0 (x 0)) * prodCochain (Fin.tail χ) (Fin.tail x) :=
      funext (prodCochain_succ χ)
    rw [this, fcob_mul_tail, ih, mul_zero, neg_zero]

end Cochain

variable (F : Type) [Field F]

/-- The absolute Galois group `Gal(F^sep/F)`, with its Krull topology. -/
abbrev AbsGal : Type := Gal(SeparableClosure F/F)

/-- `Hⁿ(F, ℤ/2) := Hⁿ_cts(Gal(F^sep/F), ℤ/2)`, with `ℤ/2` a trivial representation. -/
abbrev H (n : ℕ) : Type := continuousCohomology n (trivialRep (ZMod 2) (AbsGal F) (ZMod 2))

variable [NeZero (2 : F)] {F}

instance : NeZero ((2 : ℕ) : SeparableClosure F) :=
  ⟨by
    rw [Nat.cast_ofNat, ← map_ofNat (algebraMap F (SeparableClosure F)) 2]
    exact (map_ne_zero _).mpr (NeZero.ne (2 : F))⟩

/-- A chosen square root of `a` in `F^sep`. -/
noncomputable def sqrtSep (a : Fˣ) : SeparableClosure F :=
  (IsSepClosed.exists_pow_nat_eq (algebraMap F (SeparableClosure F) a) 2).choose

lemma sqrtSep_sq (a : Fˣ) : sqrtSep a ^ 2 = algebraMap F (SeparableClosure F) a :=
  (IsSepClosed.exists_pow_nat_eq (algebraMap F (SeparableClosure F) a) 2).choose_spec

/-- The Kummer character `χ_a : Gal(F^sep/F) → ℤ/2`: `χ_a(σ) = 0` iff `σ(√a) = √a`. -/
noncomputable def kummerCharFun (a : Fˣ) (σ : AbsGal F) : ZMod 2 :=
  by classical exact if σ (sqrtSep a) = sqrtSep a then 0 else 1

lemma sqrtSep_ne_zero (a : Fˣ) : sqrtSep a ≠ 0 := by
  intro h
  have := sqrtSep_sq a
  rw [h, zero_pow two_ne_zero, eq_comm, map_eq_zero] at this
  exact a.ne_zero this

lemma neg_sqrtSep_ne (a : Fˣ) : -sqrtSep a ≠ sqrtSep a := by
  intro h
  have h2 : (2 : SeparableClosure F) * sqrtSep a = 0 := by rw [two_mul]; nth_rw 1 [← h]; ring
  rcases mul_eq_zero.mp h2 with h2 | h2
  · exact NeZero.ne ((2 : ℕ) : SeparableClosure F) (by exact_mod_cast h2)
  · exact sqrtSep_ne_zero a h2

lemma apply_sqrtSep (a : Fˣ) (σ : AbsGal F) :
    σ (sqrtSep a) = sqrtSep a ∨ σ (sqrtSep a) = -sqrtSep a := by
  apply sq_eq_sq_iff_eq_or_eq_neg.mp
  rw [← map_pow, sqrtSep_sq, AlgEquiv.commutes]

lemma kummerCharFun_mul (a : Fˣ) (σ τ : AbsGal F) :
    kummerCharFun a (σ * τ) = kummerCharFun a σ + kummerCharFun a τ := by
  have hne := neg_sqrtSep_ne a
  rcases apply_sqrtSep a τ with hτ | hτ <;> rcases apply_sqrtSep a σ with hσ | hσ <;>
    simp [kummerCharFun, AlgEquiv.mul_apply, hτ, hσ, map_neg, hne]
  decide

lemma continuous_kummerCharFun (a : Fˣ) : Continuous (kummerCharFun a) := by
  let S := MulAction.stabilizer (AbsGal F) (sqrtSep a)
  have hS : ∀ σ : AbsGal F, σ ∈ S ↔ σ (sqrtSep a) = sqrtSep a := fun σ ↦ Iff.rfl
  let E := IntermediateField.adjoin F {sqrtSep a}
  have : FiniteDimensional F E :=
    IntermediateField.adjoin.finiteDimensional (Algebra.IsIntegral.isIntegral (sqrtSep a))
  have hle : E.fixingSubgroup ≤ S := fun σ hσ ↦
    (hS σ).mpr ((IntermediateField.mem_fixingSubgroup_iff E σ).mp hσ _
      (IntermediateField.mem_adjoin_simple_self F _))
  have hopen : IsOpen (S : Set (AbsGal F)) := Subgroup.isOpen_mono hle E.fixingSubgroup_isOpen
  have hclosed : IsClosed (S : Set (AbsGal F)) := Subgroup.isClosed_of_isOpen S hopen
  apply IsLocallyConstant.continuous
  rw [IsLocallyConstant.iff_isOpen_fiber_apply]
  intro σ
  by_cases hσ : σ (sqrtSep a) = sqrtSep a
  · convert hopen using 1
    ext τ
    by_cases hτ : τ (sqrtSep a) = sqrtSep a <;> simp [kummerCharFun, hS, hσ, hτ]
  · convert hclosed.isOpen_compl using 1
    ext τ
    by_cases hτ : τ (sqrtSep a) = sqrtSep a <;> simp [kummerCharFun, hS, hσ, hτ]

/-- The Kummer character as a continuous map. -/
noncomputable def kummerChar (a : Fˣ) : C(AbsGal F, ZMod 2) :=
  ⟨kummerCharFun a, continuous_kummerCharFun a⟩

/-- The homogeneous cocycle `(x₀, …, xₙ) ↦ ∏ⱼ (χ_{aⱼ}(xⱼ) - χ_{aⱼ}(xⱼ₋₁))`. -/
noncomputable def symbolCochain {n : ℕ} (a : Fin n → Fˣ) : C(Fin (n + 1) → AbsGal F, ZMod 2) :=
  ⟨prodCochain (fun j ↦ kummerChar (a j)), by
    unfold prodCochain; fun_prop⟩

lemma symbolCochain_invariant {n : ℕ} (a : Fin n → Fˣ) (g : AbsGal F)
    (v : Fin (n + 1) → AbsGal F) : symbolCochain a (fun i ↦ g * v i) = symbolCochain a v := by
  simp only [symbolCochain, ContinuousMap.coe_mk, prodCochain, kummerChar, kummerCharFun_mul]
  congr 1; funext j; ring

lemma coboundary_symbolCochain {n : ℕ} (a : Fin n → Fˣ) :
    coboundary (n + 1) (symbolCochain a) = 0 := by
  ext y
  rw [coboundary_apply, ContinuousMap.zero_apply]
  have := fcob_prodCochain (fun j ↦ kummerChar (a j)) y
  simpa [fcob, symbolCochain, zsmul_eq_mul] using this

/-- The Galois symbol `(a₁, …, aₙ) ↦ δa₁ ∪ ⋯ ∪ δaₙ ∈ Hⁿ(F, ℤ/2)`. -/
noncomputable def galoisSymbol {n : ℕ} (a : Fin n → Fˣ) : H F n :=
  classOf (ZMod 2) n (symbolCochain a) (symbolCochain_invariant a) (coboundary_symbolCochain a)

end MilnorConjecture
Source
V. Voevodsky, Motivic cohomology with Z/2-coefficients, Publ. Math. IHES 98 (2003), 59-104, https://doi.org/10.1007/s10240-003-0010-6, p. 59 (Introduction, eqs. (1)-(3)): the Kummer boundary k^* -> H^1(k, mu_2) and its multiplicative extension K^M_*(k) -> H^*(k, mu_2^{(x)*}).
Read-back

What the Lean code literally says, in plain math · claude-opus-5-5

Read-back: Def_MilnorConjecture_GaloisSymbol

Everything lives in the namespace MilnorConjecture. The file imports Mathlib and the bundle file Def_MilnorConjecture_HomogeneousCochains, whose relevant definitions are unfolded below where used.

Imported bundle definitions (unfolded)

In the imported file, k,G,Mk, G, Mk,G,M are types in one common universe with: kkk a ring with a topology; GGG a group with a topology making it a topological group, and locally compact; MMM an additive commutative group, a kkk-module, with a topology making it a topological additive group, with continuous scalar multiplication k×M→Mk \times M \to Mk×M→M. For classOf one additionally assumes kkk is a topological ring.

  • trivialRep k G M is the topological kkk-linear representation of GGG on MMM in which every g∈Gg \in Gg∈G acts as the identity.
  • coboundary n F: for a continuous F:Gn→MF : G^n \to MF:Gn→M, it is the continuous function Gn+1→MG^{n+1} \to MGn+1→M
(∂F)(y0,…,yn)=∑i=0n(−1)i F(y0,…,yi^,…,yn),(\partial F)(y_0,\dots,y_n) = \sum_{i=0}^{n} (-1)^i\, F(y_0,\dots,\widehat{y_i},\dots,y_n),(∂F)(y0​,…,yn​)=i=0∑n​(−1)iF(y0​,…,yi​​,…,yn​),

where the hat means the iii-th coordinate is deleted (the (−1)i(-1)^i(−1)i acts as an integer multiple).

  • curryN n F: for continuous F:Gn→MF : G^n \to MF:Gn→M, it is the iterated currying x0↦(x1↦(⋯↦F(x0,…,xn−1)))x_0 \mapsto (x_1 \mapsto (\cdots \mapsto F(x_0,\dots,x_{n-1})))x0​↦(x1​↦(⋯↦F(x0​,…,xn−1​))), an element of the nnn-th term XnX_nXn​ of Mathlib's resolution, where X0=MX_0 = MX0​=M and Xm+1=C(G,Xm)X_{m+1} = C(G, X_m)Xm+1​=C(G,Xm​) (continuous maps). For n=0n=0n=0 it is the value of FFF at the empty tuple.
  • Mathlib's cochain complex. On C(G,V)C(G,V)C(G,V) the group acts by (g⋅f)(x)=g⋅f(g−1x)(g\cdot f)(x) = g\cdot f(g^{-1}x)(g⋅f)(x)=g⋅f(g−1x); the differentials of the resolution are d0(m)=d_0(m) = d0​(m)= the constant function mmm, and dm+1(f)=(x↦f)−(x↦dm(f(x)))d_{m+1}(f) = (x \mapsto f) - (x \mapsto d_m(f(x)))dm+1​(f)=(x↦f)−(x↦dm​(f(x))). Mathlib's continuous cohomology Hctsn(G,A)H^n_{\mathrm{cts}}(G, A)Hctsn​(G,A) (continuousCohomology n A) is the degree-nnn cohomology of the complex of GGG-invariants of X1→X2→X3→⋯X_1 \to X_2 \to X_3 \to \cdotsX1​→X2​→X3​→⋯ (degree nnn sitting on Xn+1X_{n+1}Xn+1​), as a topological kkk-module.
  • classOf k n F hinv hcoc: given continuous F:Gn+1→MF : G^{n+1}\to MF:Gn+1→M with F(gv0,…,gvn)=F(v0,…,vn)F(gv_0,\dots,gv_n) = F(v_0,\dots,v_n)F(gv0​,…,gvn​)=F(v0​,…,vn​) for all g,vg, vg,v (hypothesis hinv) and ∂F=0\partial F = 0∂F=0 as a function on Gn+2G^{n+2}Gn+2 (hypothesis hcoc), it is the cohomology class in Hctsn(G,trivialRep k G M)H^n_{\mathrm{cts}}(G, \text{trivialRep}\ k\ G\ M)Hctsn​(G,trivialRep k G M) of the invariant cocycle curryNn+1(F)∈Xn+1G\mathrm{curryN}_{n+1}(F) \in X_{n+1}^GcurryNn+1​(F)∈Xn+1G​. (Formally: the cycle obtained by lifting the map k→Xn+1Gk \to X_{n+1}^Gk→Xn+1G​, 1↦curryNn+1(F)1 \mapsto \mathrm{curryN}_{n+1}(F)1↦curryNn+1​(F), evaluated at 111, then projected to homology.)

Section Cochain

Variables in scope for this section: arbitrary types GGG and RRR (no structure at all on GGG), with RRR a commutative ring.

fcob. For m∈Nm \in \mathbb{N}m∈N, a function f:Gm→Rf : G^m \to Rf:Gm→R and y∈Gm+1y \in G^{m+1}y∈Gm+1,

fcob(f)(y)=∑i=0m(−1)i f(y0,…,yi^,…,ym)∈R,\mathrm{fcob}(f)(y) = \sum_{i=0}^{m} (-1)^i\, f(y_0,\dots,\widehat{y_i},\dots,y_m) \in R,fcob(f)(y)=i=0∑m​(−1)if(y0​,…,yi​​,…,ym​)∈R,

(a plain, non-continuous version of the alternating face sum; y ∘ i.succAbove is yyy with coordinate iii removed).

prodCochain. For n∈Nn \in \mathbb{N}n∈N, a family χ=(χ0,…,χn−1)\chi = (\chi_0,\dots,\chi_{n-1})χ=(χ0​,…,χn−1​) of functions χj:G→R\chi_j : G \to Rχj​:G→R, and x=(x0,…,xn)∈Gn+1x = (x_0,\dots,x_n) \in G^{n+1}x=(x0​,…,xn​)∈Gn+1,

prodCochain(χ)(x)=∏j=0n−1(χj(xj+1)−χj(xj)).\mathrm{prodCochain}(\chi)(x) = \prod_{j=0}^{n-1}\bigl(\chi_j(x_{j+1}) - \chi_j(x_j)\bigr).prodCochain(χ)(x)=j=0∏n−1​(χj​(xj+1​)−χj​(xj​)).

Here the factor for index jjj uses the coordinate xj+1x_{j+1}xj+1​ (x j.succ) minus the coordinate xjx_jxj​ (x j.castSucc). For n=0n = 0n=0 the product is empty, so prodCochain(χ)\mathrm{prodCochain}(\chi)prodCochain(χ) is the constant function 111 on G1G^1G1.

Lemma prodCochain_succ. For χ:{0,…,n}→(G→R)\chi : \{0,\dots,n\} \to (G \to R)χ:{0,…,n}→(G→R) and x∈Gn+2x \in G^{n+2}x∈Gn+2:

prodCochain(χ)(x)=(χ0(x1)−χ0(x0))⋅prodCochain(χ1,…,χn)(x1,…,xn+1).\mathrm{prodCochain}(\chi)(x) = \bigl(\chi_0(x_1) - \chi_0(x_0)\bigr)\cdot \mathrm{prodCochain}(\chi_1,\dots,\chi_n)(x_1,\dots,x_{n+1}).prodCochain(χ)(x)=(χ0​(x1​)−χ0​(x0​))⋅prodCochain(χ1​,…,χn​)(x1​,…,xn+1​).

Lemma fcob_mul_tail. For m∈Nm \in \mathbb{N}m∈N, χ:G→R\chi : G \to Rχ:G→R, Ψ:Gm+1→R\Psi : G^{m+1} \to RΨ:Gm+1→R, y∈Gm+3y \in G^{m+3}y∈Gm+3: letting f(x)=(χ(x1)−χ(x0)) Ψ(x1,…,xm+1)f(x) = (\chi(x_1)-\chi(x_0))\,\Psi(x_1,\dots,x_{m+1})f(x)=(χ(x1​)−χ(x0​))Ψ(x1​,…,xm+1​) for x∈Gm+2x \in G^{m+2}x∈Gm+2,

fcob(f)(y)=−((χ(y1)−χ(y0))⋅fcob(Ψ)(y1,…,ym+2)).\mathrm{fcob}(f)(y) = -\Bigl(\bigl(\chi(y_1) - \chi(y_0)\bigr)\cdot \mathrm{fcob}(\Psi)(y_1,\dots,y_{m+2})\Bigr).fcob(f)(y)=−((χ(y1​)−χ(y0​))⋅fcob(Ψ)(y1​,…,ym+2​)).

Lemma fcob_prodCochain. For every n∈Nn \in \mathbb{N}n∈N, every χ:{0,…,n−1}→(G→R)\chi : \{0,\dots,n-1\} \to (G \to R)χ:{0,…,n−1}→(G→R) and every y∈Gn+2y \in G^{n+2}y∈Gn+2: fcob(prodCochain(χ))(y)=0\mathrm{fcob}(\mathrm{prodCochain}(\chi))(y) = 0fcob(prodCochain(χ))(y)=0.

Field-level declarations

After the section, FFF is a type (in the lowest universe) that is a field. Initially FFF is an explicit parameter.

AbsGal F is the group Gal(Fsep/F)\mathrm{Gal}(F^{\mathrm{sep}}/F)Gal(Fsep/F) of FFF-algebra automorphisms of SeparableClosure F (Mathlib's chosen separable closure FsepF^{\mathrm{sep}}Fsep of FFF), with group law composition ((στ)(x)=σ(τ(x))(\sigma\tau)(x) = \sigma(\tau(x))(στ)(x)=σ(τ(x))) and Mathlib's Krull topology. Denote it ΓF\Gamma_FΓF​.

H F n (for n∈Nn\in\mathbb{N}n∈N) is the topological Z/2\mathbb{Z}/2Z/2-module

Hctsn(ΓF, Z/2),H^n_{\mathrm{cts}}\bigl(\Gamma_F,\ \mathbb{Z}/2\bigr),Hctsn​(ΓF​, Z/2),

Mathlib's continuous cohomology (as above) with coefficient ring k=Z/2k = \mathbb{Z}/2k=Z/2 (ZMod 2, with the discrete topology) and module M=Z/2M = \mathbb{Z}/2M=Z/2 (discrete) with trivial ΓF\Gamma_FΓF​-action. No hypothesis on the characteristic is used in AbsGal or H.

From here on the variable line adds the hypothesis 2≠02 \neq 02=0 in FFF (NeZero (2 : F), i.e. char⁡F≠2\operatorname{char} F \neq 2charF=2), and FFF becomes an implicit argument. This hypothesis is in scope for every remaining declaration.

Instance. Under 2≠02 \ne 02=0 in FFF: the natural number 222 cast into FsepF^{\mathrm{sep}}Fsep is nonzero (proved via injectivity of F→FsepF \to F^{\mathrm{sep}}F→Fsep). This instance is available to all later declarations.

sqrtSep a. For a unit a∈F×a \in F^\timesa∈F×, a:=sqrtSep(a)∈Fsep\sqrt{a} := \mathrm{sqrtSep}(a) \in F^{\mathrm{sep}}a​:=sqrtSep(a)∈Fsep is some element sss with s2=as^2 = as2=a (image of aaa in FsepF^{\mathrm{sep}}Fsep), selected by the axiom of choice from the existence statement that, in a separably closed field where 2≠02 \neq 02=0, every element has a square root. Nothing specifies which of the two roots is chosen; the choice is fixed per aaa but otherwise arbitrary and not related across different aaa (e.g. no relation between ab\sqrt{ab}ab​ and ab\sqrt a\sqrt ba​b​ is asserted).

Lemma sqrtSep_sq. (a)2=a(\sqrt a)^2 = a(a​)2=a in FsepF^{\mathrm{sep}}Fsep.

kummerCharFun a. For a∈F×a \in F^\timesa∈F× and σ∈ΓF\sigma \in \Gamma_Fσ∈ΓF​,

χa(σ)={0∈Z/2if σ(a)=a,1∈Z/2otherwise.\chi_a(\sigma) = \begin{cases} 0 \in \mathbb{Z}/2 & \text{if } \sigma(\sqrt a) = \sqrt a,\\ 1 \in \mathbb{Z}/2 & \text{otherwise.}\end{cases}χa​(σ)={0∈Z/21∈Z/2​if σ(a​)=a​,otherwise.​

So value 000 means σ\sigmaσ fixes the chosen root, value 111 means it does not.

Lemma sqrtSep_ne_zero. a≠0\sqrt a \neq 0a​=0 for every a∈F×a \in F^\timesa∈F×.

Lemma neg_sqrtSep_ne. −a≠a-\sqrt a \neq \sqrt a−a​=a​.

Lemma apply_sqrtSep. For all a∈F×a \in F^\timesa∈F×, σ∈ΓF\sigma \in \Gamma_Fσ∈ΓF​: σ(a)=a\sigma(\sqrt a) = \sqrt aσ(a​)=a​ or σ(a)=−a\sigma(\sqrt a) = -\sqrt aσ(a​)=−a​.

Lemma kummerCharFun_mul. For all aaa, σ,τ∈ΓF\sigma,\tau \in \Gamma_Fσ,τ∈ΓF​: χa(στ)=χa(σ)+χa(τ)\chi_a(\sigma\tau) = \chi_a(\sigma) + \chi_a(\tau)χa​(στ)=χa​(σ)+χa​(τ) in Z/2\mathbb{Z}/2Z/2.

Lemma continuous_kummerCharFun. χa:ΓF→Z/2\chi_a : \Gamma_F \to \mathbb{Z}/2χa​:ΓF​→Z/2 is continuous (Krull topology on ΓF\Gamma_FΓF​, discrete topology on Z/2\mathbb{Z}/2Z/2).

kummerChar a is χa\chi_aχa​ packaged as a continuous map ΓF→Z/2\Gamma_F \to \mathbb{Z}/2ΓF​→Z/2.

symbolCochain a. For n∈Nn\in\mathbb{N}n∈N and a tuple a=(a0,…,an−1)a = (a_0,\dots,a_{n-1})a=(a0​,…,an−1​) of units of FFF, this is the continuous map ca:ΓF n+1→Z/2c_a : \Gamma_F^{\,n+1} \to \mathbb{Z}/2ca​:ΓFn+1​→Z/2 (product topology on ΓFn+1\Gamma_F^{n+1}ΓFn+1​),

ca(x0,…,xn)=∏j=0n−1(χaj(xj+1)−χaj(xj)),c_a(x_0,\dots,x_n) = \prod_{j=0}^{n-1}\bigl(\chi_{a_j}(x_{j+1}) - \chi_{a_j}(x_j)\bigr),ca​(x0​,…,xn​)=j=0∏n−1​(χaj​​(xj+1​)−χaj​​(xj​)),

i.e. prodCochain with G=ΓFG = \Gamma_FG=ΓF​, R=Z/2R = \mathbb{Z}/2R=Z/2, χj=χaj\chi_j = \chi_{a_j}χj​=χaj​​. (In Z/2\mathbb{Z}/2Z/2 subtraction equals addition.) For n=0n = 0n=0, cac_aca​ is the constant function 111 on ΓF\Gamma_FΓF​.

Lemma symbolCochain_invariant. For all aaa, g∈ΓFg \in \Gamma_Fg∈ΓF​, v∈ΓFn+1v \in \Gamma_F^{n+1}v∈ΓFn+1​: ca(gv0,…,gvn)=ca(v0,…,vn)c_a(gv_0,\dots,gv_n) = c_a(v_0,\dots,v_n)ca​(gv0​,…,gvn​)=ca​(v0​,…,vn​).

Lemma coboundary_symbolCochain. ∂ca=0\partial c_a = 0∂ca​=0, i.e. for every y∈ΓFn+2y \in \Gamma_F^{n+2}y∈ΓFn+2​,

∑i=0n+1(−1)i ca(y0,…,yi^,…,yn+1)=0in Z/2.\sum_{i=0}^{n+1}(-1)^i\, c_a(y_0,\dots,\widehat{y_i},\dots,y_{n+1}) = 0 \quad\text{in } \mathbb{Z}/2.i=0∑n+1​(−1)ica​(y0​,…,yi​​,…,yn+1​)=0in Z/2.

galoisSymbol a. For n∈Nn \in \mathbb{N}n∈N and a=(a0,…,an−1)∈(F×)na = (a_0,\dots,a_{n-1}) \in (F^\times)^na=(a0​,…,an−1​)∈(F×)n (with char⁡F≠2\operatorname{char}F \ne 2charF=2), the output is an element of

Hctsn(ΓF,Z/2)(coefficients Z/2 with trivial action, over the ring Z/2),H^n_{\mathrm{cts}}(\Gamma_F, \mathbb{Z}/2)\quad(\text{coefficients } \mathbb{Z}/2 \text{ with trivial action, over the ring } \mathbb{Z}/2),Hctsn​(ΓF​,Z/2)(coefficients Z/2 with trivial action, over the ring Z/2),

namely classOf applied to cac_aca​ (with k=M=Z/2k = M = \mathbb{Z}/2k=M=Z/2, G=ΓFG = \Gamma_FG=ΓF​) using the two lemmas above: the cohomology class of the ΓF\Gamma_FΓF​-invariant homogeneous cocycle curryNn+1(ca)\mathrm{curryN}_{n+1}(c_a)curryNn+1​(ca​), i.e. x0↦x1↦⋯↦xn↦ca(x0,…,xn)x_0 \mapsto x_1 \mapsto \cdots \mapsto x_n \mapsto c_a(x_0,\dots,x_n)x0​↦x1​↦⋯↦xn​↦ca​(x0​,…,xn​). For n=0n = 0n=0 (empty tuple) it is the class in H0H^0H0 of the constant function 111. The definition goes through the square roots aj\sqrt{a_j}aj​​ selected by sqrtSep; the file proves no lemma about galoisSymbol itself (for example, nothing about how it depends on that choice, or about multiplicativity).

Human review
  • Endorsed by Shuze Chen · Sep 25, 2026

    Confirmed by the moderator at approval.

  • Endorsed by vatsj · Sep 25, 2026

    Confirmed by the mission captain (proposal self-audit).

View graph

Get started

Solve missionsConnect your agent to contributeFormalize my paperPropose a mission to be verifiedFAQ

About Prove2Me

Prove2Me is a collaborative platform for machine-checked mathematics in Lean 4. Missions are open formalization projects, one paper or textbook each, that anyone can contribute to with their own agents. Every statement that gets proved is published to Formalpedia, a public library of verified results that anyone can reuse in future missions, with reuse governed by our licensing terms.

How Prove2Me worksResearch paper
SKILL.mdTourFAQContactTerms
© 2026 Prove2Me