Skip to content
Closed
Changes from 34 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
2fed255
feat: Tannaka duality for finite groups
ybenmeur Feb 21, 2025
3f05321
first part
ybenmeur Feb 21, 2025
1a057b3
fix CI error
ybenmeur Feb 21, 2025
7bbbf3c
second part
ybenmeur Feb 21, 2025
e15d912
third part
ybenmeur Feb 21, 2025
d762416
rename
ybenmeur Feb 21, 2025
7d4db7c
generalize most of the file to commrings
jcommelin Feb 24, 2025
80f3a63
generalize to domains
jcommelin Feb 24, 2025
90d2c06
meaningful names
ybenmeur Feb 24, 2025
410737c
fix docstring
ybenmeur Feb 24, 2025
f974f9c
Apply suggestions from code review
ybenmeur Feb 25, 2025
ca4846e
Update Mathlib/RepresentationTheory/Tannaka.lean
ybenmeur Feb 25, 2025
677b3fd
further simplification
ybenmeur Feb 25, 2025
0fa0947
Merge remote-tracking branch 'upstream/master' into yb_tannaka3
ybenmeur Feb 28, 2025
0c859d2
Apply suggestions from code review
ybenmeur Mar 6, 2025
edc6a06
remove one `change`
ybenmeur Mar 6, 2025
42b313f
attempt to remove `change`s (with some `erw` for now)
ybenmeur Mar 6, 2025
4c844f3
fix
ybenmeur Mar 6, 2025
8a6f4d5
no `change`s
ybenmeur Mar 6, 2025
34be1f6
fix
ybenmeur Mar 6, 2025
8ffe5c3
Merge branch 'master' into yb_tannaka3
ybenmeur Mar 8, 2025
6ba5b52
remove `toRightFDRepComp`
ybenmeur Mar 11, 2025
5938914
Merge branch 'master' into yb_tannaka3
ybenmeur Mar 11, 2025
98edc4b
Merge branch 'master' into yb_tannaka3
ybenmeur Mar 13, 2025
098f429
naming convention for `eval_of_algHom`
ybenmeur Mar 15, 2025
062811e
Merge branch 'master' into yb_tannaka3
ybenmeur Mar 25, 2025
71c03d7
fix
ybenmeur Mar 25, 2025
8e38f7b
Merge remote-tracking branch 'upstream/master' into yb_tannaka3
ybenmeur Apr 15, 2025
b2e6a93
moved lemma
ybenmeur Apr 15, 2025
b57fb55
update + move things + some changes
ybenmeur Apr 15, 2025
232d0dd
Merge remote-tracking branch 'upstream/master' into yb_tannaka3
ybenmeur Apr 28, 2025
f7e6293
fix finite/fintype assumptions
ybenmeur Apr 28, 2025
cebbec0
details
ybenmeur Apr 28, 2025
da6e937
apply review suggestions
ybenmeur May 1, 2025
8db35b4
last suggestions
ybenmeur May 2, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 80 additions & 4 deletions Mathlib/RepresentationTheory/Tannaka.lean
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ The theorem can be formulated as follows: for any integral domain `k`, a finite
recovered from `FDRep k G`, the monoidal category of finite dimensional `k`-linear representations
of `G`, and the monoidal forgetful functor `forget : FDRep k G ⥤ FGModuleCat k`.

More specifically, the main result is the isomorphism `equiv : G ≃* Aut (forget k G)`.
The main result is the isomorphism `equiv : G ≃* Aut (forget k G)`.

## Reference

Expand Down Expand Up @@ -99,11 +99,9 @@ def leftRegular : Representation k G (G → k) where
@[simp]
lemma leftRegular_apply (s t : G) (f : G → k) : leftRegular s f t = f (s⁻¹ * t) := rfl

variable [Finite G]

/-- The right regular representation `rightRegular` on `G → k` as a `FDRep k G`. -/
@[simp]
def rightFDRep : FDRep k G := FDRep.of rightRegular
def rightFDRep [Finite G] : FDRep k G := FDRep.of rightRegular

end definitions

Expand Down Expand Up @@ -151,6 +149,84 @@ def algHomOfRightFDRepComp (η : Aut (forget k G)) : (G → k) →ₐ[k] (G →
apply_fun (fun x ↦ (x.hom.app rightFDRep).hom (1 : G → k)) at this
exact this

/-- For `v : X` and `G` a finite group, the `G`-equivariant linear map from the right
regular representation `rightFDRep` to `X` sending `single 1 1` to `v`. -/
@[simps]
def sumSMulInv [Fintype G] {X : FDRep k G} (v : X) : (G → k) →ₗ[k] X where
toFun f := ∑ s : G, (f s) • (X.ρ s⁻¹ v)
map_add' _ _ := by
simp [add_smul, sum_add_distrib]
map_smul' _ _ := by
simp [smul_sum, smul_smul]
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
map_add' _ _ := by
simp [add_smul, sum_add_distrib]
map_smul' _ _ := by
simp [smul_sum, smul_smul]
map_add' _ _ := by simp [add_smul, sum_add_distrib]
map_smul' _ _ := by simp [smul_sum, smul_smul]


omit [Finite G] in
@[simp]
lemma sumSMulInv_single_id [Fintype G] [DecidableEq G] {X : FDRep k G} (v : X) :
∑ s : G, (single 1 1 : G → k) s • (X.ρ s⁻¹) v = v := by
Comment on lines +162 to +163
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are you not using sumSMulInv for the LHS? And can you use Fintype.sum_eq_single in the proof?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because sumSMulInv is tagged simps. I just tried untagging it and it was slightly worse in my opinion.

rw [Fintype.sum_eq_single 1]
· simp
· simp_all

/-- For `v : X` and `G` a finite group, the representation morphism from the right
regular representation `rightFDRep` to `X` sending `single 1 1` to `v`. -/
@[simps]
def ofRightFDRep [Fintype G] (X : FDRep k G) (v : X) : rightFDRep ⟶ X where
hom := ofHom (sumSMulInv v)
comm t := by
ext f
let φ_term (X : FDRep k G) (f : G → k) v s := (f s) • (X.ρ s⁻¹ v)
have := sum_map univ (mulRightEmbedding t⁻¹) (φ_term X (rightRegular t f) v)
simpa [φ_term] using this

lemma toRightFDRepComp_injective {η₁ η₂ : Aut (forget k G)}
(h : η₁.hom.hom.app rightFDRep = η₂.hom.hom.app rightFDRep) : η₁ = η₂ := by
have := Fintype.ofFinite G
classical
ext X v
have h1 := η₁.hom.hom.naturality (ofRightFDRep X v)
have h2 := η₂.hom.hom.naturality (ofRightFDRep X v)
rw [h, ← h2] at h1
simpa using congr(Hom.hom $h1 (single 1 1))
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
simpa using congr(Hom.hom $h1 (single 1 1))
simpa using congr(($h1).hom (single 1 1))

(untested, you might also try without the parentheses)


/-- `leftRegular` as a morphism `rightFDRep k G ⟶ rightFDRep k G` in `FDRep k G`. -/
def leftRegularFDRepHom (s : G) : End (rightFDRep : FDRep k G) where
hom := ofHom (leftRegular s)
comm _ := by
ext f
funext _
apply congrArg f
exact mul_assoc ..

lemma toRightFDRepComp_in_rightRegular [IsDomain k] (η : Aut (forget k G)) :
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note to myself: as commented in a previous PR, this works for an "indecomposable (commutative) semiring" k (a typeclass I'm about to introduce). TODO: allow Semiring in FDRep.

∃ (s : G), (η.hom.hom.app rightFDRep).hom = rightRegular s := by
classical
obtain ⟨s, hs⟩ := ((evalAlgHom _ _ 1).comp (algHomOfRightFDRepComp η)).eq_piEvalAlgHom
refine ⟨s, Basis.ext (basisFun k G) (fun u ↦ ?_)⟩
simp only [rightFDRep, forget_obj]
ext t
have nat := η.hom.hom.naturality (leftRegularFDRepHom t⁻¹)
calc
_ = leftRegular t⁻¹ ((η.hom.hom.app rightFDRep).hom (single u 1)) 1 := by simp
_ = (η.hom.hom.app rightFDRep).hom (leftRegular t⁻¹ (single u 1)) 1 :=
congrFun congr((Hom.hom $nat (single u 1))).symm 1
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
congrFun congr((Hom.hom $nat (single u 1))).symm 1
congr(($nat.symm).hom (single u 1) 1)

(untested)

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For some reason this one doesn't work without congrFun. It was also the case when I was using apply_fun.

_ = evalAlgHom _ _ s (leftRegular t⁻¹ (single u 1)) :=
congr($hs ((leftRegular t⁻¹) (single u 1)))
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
congr($hs ((leftRegular t⁻¹) (single u 1)))
congr($hs (leftRegular t⁻¹ (single u 1)))

_ = _ := by
by_cases u = t * s <;> simp_all [single_apply]
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
_ = _ := by
by_cases u = t * s <;> simp_all [single_apply]
_ = _ := by by_cases u = t * s <;> simp_all [single_apply]


lemma equivHom_surjective [IsDomain k] : Function.Surjective (equivHom k G) := by
intro η
obtain ⟨s, h⟩ := toRightFDRepComp_in_rightRegular η
exact ⟨s, toRightFDRepComp_injective (hom_ext h.symm)⟩

variable (k G) in
/-- Tannaka duality for finite groups:

A finite group `G` is isomorphic to `Aut (forget k G)`, where `k` is any integral domain,
and `forget k G` is the monoidal forgetful functor `FDRep k G ⥤ FGModuleCat k G`. -/
def equiv [IsDomain k] : G ≃* Aut (forget k G) :=
MulEquiv.ofBijective (equivHom k G) ⟨equivHom_injective, equivHom_surjective⟩

end FiniteGroup

end TannakaDuality
Expand Down
Loading