Skip to content

Commit b6a4cc4

Browse files
author
Amelia Livingston
committed
refactor(RepresentationTheory/GroupCohomology): tidy up 8599 and add more low degree cocycle API (#8785)
1 parent b9ecf68 commit b6a4cc4

File tree

7 files changed

+358
-61
lines changed

7 files changed

+358
-61
lines changed

Mathlib/Algebra/Algebra/Equiv.lean

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -750,13 +750,6 @@ instance applyMulSemiringAction : MulSemiringAction (A₁ ≃ₐ[R] A₁) A₁ w
750750
mul_smul _ _ _ := rfl
751751
#align alg_equiv.apply_mul_semiring_action AlgEquiv.applyMulSemiringAction
752752

753-
instance : MulDistribMulAction (A₁ ≃ₐ[R] A₁) A₁ˣ where
754-
smul := fun f => Units.map f
755-
one_smul := fun x => by ext; rfl
756-
mul_smul := fun x y z => by ext; rfl
757-
smul_mul := fun x y z => by ext; exact x.map_mul _ _
758-
smul_one := fun x => by ext; exact x.map_one
759-
760753
@[simp]
761754
protected theorem smul_def (f : A₁ ≃ₐ[R] A₁) (a : A₁) : f • a = f a :=
762755
rfl
@@ -774,6 +767,17 @@ instance apply_smulCommClass' : SMulCommClass (A₁ ≃ₐ[R] A₁) R A₁ where
774767
smul_comm e r a := e.map_smul r a
775768
#align alg_equiv.apply_smul_comm_class' AlgEquiv.apply_smulCommClass'
776769

770+
instance : MulDistribMulAction (A₁ ≃ₐ[R] A₁) A₁ˣ where
771+
smul := fun f => Units.map f
772+
one_smul := fun x => by ext; rfl
773+
mul_smul := fun x y z => by ext; rfl
774+
smul_mul := fun x y z => by ext; exact x.map_mul _ _
775+
smul_one := fun x => by ext; exact x.map_one
776+
777+
@[simp]
778+
theorem smul_units_def (f : A₁ ≃ₐ[R] A₁) (x : A₁ˣ) :
779+
f • x = Units.map f x := rfl
780+
777781
@[simp]
778782
theorem algebraMap_eq_apply (e : A₁ ≃ₐ[R] A₂) {y : R} {x : A₁} :
779783
algebraMap R A₂ y = e x ↔ algebraMap R A₁ y = x :=

Mathlib/Algebra/Algebra/Hom.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,10 @@ instance : MulDistribMulAction (A →ₐ[R] A) Aˣ where
586586
smul_mul := fun x y z => by ext; exact x.map_mul _ _
587587
smul_one := fun x => by ext; exact x.map_one
588588

589+
@[simp]
590+
theorem smul_units_def (f : A →ₐ[R] A) (x : Aˣ) :
591+
f • x = Units.map (f : A →* A) x := rfl
592+
589593
end MulDistribMulAction
590594
end Algebra
591595

Mathlib/RepresentationTheory/Basic.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ theorem ofMulAction_single (g : G) (x : H) (r : k) :
293293
end MulAction
294294
section DistribMulAction
295295

296-
variable (k G A : Type*) [CommSemiring k] [Monoid G] [AddCommGroup A] [Module k A]
296+
variable (k G A : Type*) [CommSemiring k] [Monoid G] [AddCommMonoid A] [Module k A]
297297
[DistribMulAction G A] [SMulCommClass G k A]
298298

299299
/-- Turns a `k`-module `A` with a compatible `DistribMulAction` of a monoid `G` into a
@@ -320,8 +320,8 @@ def ofMulDistribMulAction : Representation ℤ M (Additive G) :=
320320
(addMonoidEndRingEquivInt (Additive G) : AddMonoid.End (Additive G) →* _).comp
321321
((monoidEndToAdditive G : _ →* _).comp (MulDistribMulAction.toMonoidEnd M G))
322322

323-
@[simp] theorem ofMulDistribMulAction_apply_apply (g : M) (a : G) :
324-
ofMulDistribMulAction M G g a = g • a := rfl
323+
@[simp] theorem ofMulDistribMulAction_apply_apply (g : M) (a : Additive G) :
324+
ofMulDistribMulAction M G g a = Additive.ofMul (g • Additive.toMul a) := rfl
325325

326326
end MulDistribMulAction
327327
section Group

Mathlib/RepresentationTheory/GroupCohomology/Basic.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ Let `k` be a commutative ring and `G` a group. This file defines the group cohom
1616
`A : Rep k G` to be the cohomology of the complex
1717
$$0 \to \mathrm{Fun}(G^0, A) \to \mathrm{Fun}(G^1, A) \to \mathrm{Fun}(G^2, A) \to \dots$$
1818
with differential $d^n$ sending $f: G^n \to A$ to the function mapping $(g_0, \dots, g_n)$ to
19-
$$\rho(g_0)(f(g_1, \dots, g_n))
20-
+ \sum_{i = 0}^{n - 1} (-1)^{i + 1}\cdot f(g_0, \dots, g_ig_{i + 1}, \dots, g_n)$$
19+
$$\rho(g_0)(f(g_1, \dots, g_n))$$
20+
$$+ \sum_{i = 0}^{n - 1} (-1)^{i + 1}\cdot f(g_0, \dots, g_ig_{i + 1}, \dots, g_n)$$
2121
$$+ (-1)^{n + 1}\cdot f(g_0, \dots, g_{n - 1})$$ (where `ρ` is the representation attached to `A`).
2222
2323
We have a `k`-linear isomorphism $\mathrm{Fun}(G^n, A) \cong \mathrm{Hom}(k[G^{n + 1}], A)$, where

Mathlib/RepresentationTheory/GroupCohomology/Hilbert90.lean

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,17 @@ Noether's generalization also holds for infinite Galois extensions.
2424
2525
## Main statements
2626
27-
* `hilbert90`: for all $f: Aut_K(L) \to L^\times$ satisfying the 1-cocycle condition, there exists
28-
`β : Lˣ` such that $f(g)g(β) = β$ for all `g : Aut_K(L)`.
29-
* `groupCohomology.hilbert90`: $H^1(Aut_K(L), L^\times)$ is trivial.
27+
* `groupCohomology.isMulOneCoboundary_of_isMulOneCocycle_of_aut_to_units`: Noether's generalization
28+
of Hilbert's Theorem 90: for all $f: Aut_K(L) \to L^\times$ satisfying the 1-cocycle
29+
condition, there exists `β : Lˣ` such that $g(β)/β = f(g)$ for all `g : Aut_K(L)`.
30+
* `groupCohomology.H1ofAutOnUnitsUnique`: Noether's generalization of Hilbert's Theorem 90:
31+
$H^1(Aut_K(L), L^\times)$ is trivial.
3032
3133
## Implementation notes
3234
3335
Given a commutative ring `k` and a group `G`, group cohomology is developed in terms of `k`-linear
34-
`G`-representations on `k`-modules. Thus stating Noether's generalization of Hilbert 90 in terms
35-
of `H¹` requires us to turn the natural action of `Aut_K(L)` on `Lˣ` into a morphism
36+
`G`-representations on `k`-modules. Therefore stating Noether's generalization of Hilbert 90 in
37+
terms of `H¹` requires us to turn the natural action of `Aut_K(L)` on `Lˣ` into a morphism
3638
`Aut_K(L) →* (Additive Lˣ →ₗ[ℤ] Additive Lˣ)`. Thus we provide the non-`H¹` version too, as its
3739
statement is clearer.
3840
@@ -46,16 +48,17 @@ for all $1 ≤ n.$
4648
-/
4749

4850
open BigOperators
51+
namespace groupCohomology
4952
namespace Hilbert90
5053

51-
variable (K L : Type*) [Field K] [Field L] [Algebra K L] [FiniteDimensional K L]
54+
variable {K L : Type*} [Field K] [Field L] [Algebra K L] [FiniteDimensional K L]
5255

5356
/-- Given `f : Aut_K(L) → Lˣ`, the sum `∑ f(φ) • φ` for `φ ∈ Aut_K(L)`, as a function `L → L`. -/
5457
noncomputable def aux (f : (L ≃ₐ[K] L) → Lˣ) : L → L :=
5558
Finsupp.total (L ≃ₐ[K] L) (L → L) L (fun φ => φ)
5659
(Finsupp.equivFunOnFinite.symm (fun φ => (f φ : L)))
5760

58-
theorem aux_ne_zero (f : (L ≃ₐ[K] L) → Lˣ) : aux K L f ≠ 0 :=
61+
theorem aux_ne_zero (f : (L ≃ₐ[K] L) → Lˣ) : aux f ≠ 0 :=
5962
/- the set `Aut_K(L)` is linearly independent in the `L`-vector space `L → L`, by Dedekind's
6063
linear independence of characters -/
6164
have : LinearIndependent L (fun (f : L ≃ₐ[K] L) => (f : L → L)) :=
@@ -71,38 +74,38 @@ section
7174
open Hilbert90
7275
variable {K L : Type*} [Field K] [Field L] [Algebra K L] [FiniteDimensional K L]
7376

74-
theorem hilbert90 (f : (L ≃ₐ[K] L) → Lˣ)
75-
(hf : ∀ (g h : (L ≃ₐ[K] L)), f (g * h) = g (f h) * f g) :
76-
∃ β : Lˣ, ∀ g : (L ≃ₐ[K] L), f g * Units.map g β = β := by
77+
/-- Noether's generalization of Hilbert's Theorem 90: given a finite extension of fields and a
78+
function `f : Aut_K(L) → Lˣ` satisfying `f(gh) = g(f(h)) * f(g)` for all `g, h : Aut_K(L)`, there
79+
exists `β : Lˣ` such that `g(β)/β = f(g)` for all `g : Aut_K(L).` -/
80+
theorem isMulOneCoboundary_of_isMulOneCocycle_of_aut_to_units
81+
(f : (L ≃ₐ[K] L) → Lˣ) (hf : IsMulOneCocycle f) :
82+
IsMulOneCoboundary f := by
7783
/- Let `z : L` be such that `∑ f(h) * h(z) ≠ 0`, for `h ∈ Aut_K(L)` -/
78-
obtain ⟨z, hz⟩ : ∃ z, aux K L f z ≠ 0 :=
79-
not_forall.1 (fun H => aux_ne_zero K L f <| funext fun x => H x)
80-
have : aux K L f z = ∑ h, f h * h z := by simp [aux, Finsupp.total, Finsupp.sum_fintype]
81-
/- Let `β = ∑ f(h) * h(z).` -/
82-
use Units.mk0 (aux K L f z) hz
84+
obtain ⟨z, hz⟩ : ∃ z, aux f z ≠ 0 :=
85+
not_forall.1 (fun H => aux_ne_zero f <| funext <| fun x => H x)
86+
have : aux f z = ∑ h, f h * h z := by simp [aux, Finsupp.total, Finsupp.sum_fintype]
87+
/- Let `β = (∑ f(h) * h(z))⁻¹.` -/
88+
use (Units.mk0 (aux f z) hz)⁻¹
8389
intro g
84-
/- Then the equality follows from the hypothesis `hf` (that `f` is a 1-cocycle). -/
85-
simp_rw [Units.ext_iff, this, Units.val_mul, Units.coe_map, Units.val_mk0, MonoidHom.coe_coe,
86-
map_sum, map_mul, Finset.mul_sum, ← mul_assoc, mul_comm (f _ : L), ← hf, mul_comm (f _ : L)]
87-
exact Fintype.sum_bijective (fun i => g * i) (Group.mulLeft_bijective g) _ _ (fun i => rfl)
90+
/- Then the equality follows from the hypothesis that `f` is a 1-cocycle. -/
91+
simp only [IsMulOneCocycle, IsMulOneCoboundary, AlgEquiv.smul_units_def,
92+
map_inv, div_inv_eq_mul, inv_mul_eq_iff_eq_mul, Units.ext_iff, this,
93+
Units.val_mul, Units.coe_map, Units.val_mk0, MonoidHom.coe_coe] at hf ⊢
94+
simp_rw [map_sum, map_mul, Finset.sum_mul, mul_assoc, mul_comm _ (f _ : L), ← mul_assoc, ← hf g]
95+
exact eq_comm.1 (Fintype.sum_bijective (fun i => g * i)
96+
(Group.mulLeft_bijective g) _ _ (fun i => rfl))
8897

8998
end
90-
namespace groupCohomology
9199
variable (K L : Type) [Field K] [Field L] [Algebra K L] [FiniteDimensional K L]
92100

93-
/-- Given a finite extension of fields `L/K`, the first group cohomology `H¹(Aut_K(L), Lˣ)` is
94-
trivial. -/
95-
noncomputable instance hilbert90 : Unique (H1 (Rep.ofAlgebraAutOnUnits K L)) where
101+
/-- Noether's generalization of Hilbert's Theorem 90: given a finite extension of fields `L/K`, the
102+
first group cohomology `H¹(Aut_K(L), Lˣ)` is trivial. -/
103+
noncomputable instance H1ofAutOnUnitsUnique : Unique (H1 (Rep.ofAlgebraAutOnUnits K L)) where
96104
default := 0
97105
uniq := fun a => Quotient.inductionOn' a fun x => (Submodule.Quotient.mk_eq_zero _).2 <| by
98-
rcases _root_.hilbert90 (Additive.toMul ∘ x.1) (fun g h => Units.ext_iff.1
99-
((mem_oneCocycles_iff x.1).1 x.2 g h)) with ⟨β, hβ⟩
100-
use Additive.ofMul (β⁻¹ : Lˣ)
101-
ext g
102-
refine' Additive.toMul.bijective.1 _
103-
show Units.map g β⁻¹ / β⁻¹ = Additive.toMul (x.1 g)
104-
rw [map_inv, div_inv_eq_mul, mul_comm]
105-
-- TODO this used to be `exact` prior to leanprover/lean4#2478
106-
apply mul_inv_eq_iff_eq_mul.2 (hβ g).symm
106+
refine' (oneCoboundariesOfIsMulOneCoboundary _).2
107+
rcases isMulOneCoboundary_of_isMulOneCocycle_of_aut_to_units x.1
108+
(isMulOneCocycle_of_oneCocycles x) with ⟨β, hβ⟩
109+
use β
107110

108111
end groupCohomology

0 commit comments

Comments
 (0)