@@ -6,6 +6,7 @@ Authors: Ali Ramsey
66module
77
88public import Mathlib.RingTheory.Bialgebra.Basic
9+ public import Mathlib.RingTheory.Coalgebra.Convolution
910
1011/-!
1112# Hopf algebras
@@ -19,13 +20,17 @@ In this file we define `HopfAlgebra`, and provide instances for:
1920* `HopfAlgebra R A` : the Hopf algebra structure on an `R`-bialgebra `A`.
2021* `HopfAlgebra.antipode` : The `R`-linear map `A →ₗ[R] A`.
2122
23+ ## Main results
24+
25+ * `HopfAlgebra.antipode_one` : The antipode of the unit is the unit.
26+ * `HopfAlgebra.antipode_mul` : The antipode is an antihomomorphism: `S(ab) = S(b)S(a)`.
27+
2228 ## TODO
2329
2430* Uniqueness of Hopf algebra structure on a bialgebra (i.e. if the algebra and coalgebra structures
2531 agree then the antipodes must also agree).
2632
27- * `antipode 1 = 1` and `antipode (a * b) = antipode b * antipode a`, so in particular if `A` is
28- commutative then `antipode` is an algebra homomorphism.
33+ * If `A` is commutative then `antipode` is an algebra homomorphism.
2934
3035* If `A` is commutative then `antipode` is necessarily a bijection and its square is
3136 the identity.
@@ -121,6 +126,87 @@ lemma sum_mul_antipode_eq_smul (repr : Repr R a) :
121126@[simp] lemma counit_comp_antipode : counit ∘ₗ antipode R = counit (A := A) := by
122127 ext; exact counit_antipode _
123128
129+ /-! ### The antipode is an antihomomorphism
130+
131+ We prove that `antipode (a * b) = antipode b * antipode a`. The proof uses the "left inverse
132+ equals right inverse" trick in the convolution algebra `(A ⊗ A) →ₗ[R] A`.
133+ -/
134+
135+ open scoped ConvolutionProduct TensorProduct
136+
137+ /-- The antipode reverses multiplication: `S(ab) = S(b)S(a)`. -/
138+ theorem antipode_mul (a b : A) :
139+ antipode R (a * b) = antipode R b * antipode R a := by
140+ -- We show that the linear maps S ∘ μ and μ ∘ (S ⊗ S) ∘ comm are equal,
141+ -- by proving they are both convolution inverses of μ.
142+ suffices h : antipode R ∘ₗ LinearMap.mul' R A =
143+ LinearMap.mul' R A ∘ₗ TensorProduct.map (antipode R) (antipode R) ∘ₗ
144+ TensorProduct.comm R A A by
145+ exact congr(($h) (a ⊗ₜ b))
146+ apply left_inv_eq_right_inv (a := LinearMap.mul' R A)
147+ · -- Left inverse: (S ∘ μ) * μ = 1
148+ refine TensorProduct.ext' fun x y => ?_
149+ -- Unfold convolution product: (f * g)(x ⊗ y) = μ(f ⊗ g)(Δ(x ⊗ y))
150+ simp only [LinearMap.convMul_apply, LinearMap.convOne_apply]
151+ -- The coalgebra on A ⊗ A: Δ(x ⊗ y) = σ (Δx ⊗ Δy) where σ = tensorTensorTensorComm
152+ rw [TensorProduct.comul_tmul]
153+ -- Use Sweedler representations for x and y
154+ let ℛx := ℛ R x; let ℛy := ℛ R y
155+ conv_lhs => rw [← ℛx.eq, ← ℛy.eq]
156+ simp only [TensorProduct.sum_tmul, TensorProduct.tmul_sum, map_sum,
157+ TensorProduct.AlgebraTensorModule.tensorTensorTensorComm_tmul, TensorProduct.map_tmul,
158+ LinearMap.mul'_apply, LinearMap.comp_apply]
159+ rw [Finset.sum_comm]
160+ -- Goal: ∑ S(x₁y₁) * (x₂y₂) = algebraMap (ε(x)ε(y))
161+ -- The counit on A ⊗ A: ε(x ⊗ y) = ε(y) • ε(x) = ε(x)ε(y) since R is commutative
162+ simp only [TensorProduct.counit_tmul, Algebra.algebraMap_eq_smul_one]
163+ -- Use the bialgebra comultiplication axiom: Δ(xy) = Δ(x)Δ(y)
164+ have key := mul_antipode_rTensor_comul_apply (R := R) (x * y)
165+ rw [Bialgebra.comul_mul, ← ℛx.eq, ← ℛy.eq] at key
166+ simp only [Finset.sum_mul, Finset.mul_sum, Algebra.TensorProduct.tmul_mul_tmul,
167+ map_sum, LinearMap.rTensor_tmul, LinearMap.mul'_apply, Bialgebra.counit_mul] at key
168+ rw [Finset.sum_comm] at key
169+ simp only [Algebra.algebraMap_eq_smul_one] at key
170+ rw [mul_comm (counit (R := R) x) (counit y)] at key
171+ exact key
172+ · -- Right inverse: μ * (μ ∘ (S ⊗ S) ∘ comm) = 1
173+ refine TensorProduct.ext' fun x y => ?_
174+ simp only [LinearMap.convMul_apply, LinearMap.convOne_apply]
175+ rw [TensorProduct.comul_tmul]
176+ let ℛx := ℛ R x; let ℛy := ℛ R y
177+ conv_lhs => rw [← ℛx.eq, ← ℛy.eq]
178+ simp only [TensorProduct.sum_tmul, TensorProduct.tmul_sum, map_sum,
179+ TensorProduct.AlgebraTensorModule.tensorTensorTensorComm_tmul, TensorProduct.map_tmul,
180+ LinearMap.mul'_apply, LinearMap.comp_apply]
181+ rw [Finset.sum_comm]
182+ simp only [TensorProduct.counit_tmul, Algebra.algebraMap_eq_smul_one]
183+ -- Goal: ∑ (x₁y₁) * S(y₂)S(x₂) = ε(x)ε(y) • 1
184+ -- Rearrange the sum using antipode axioms
185+ calc ∑ i ∈ ℛx.index, ∑ j ∈ ℛy.index,
186+ (ℛx.left i * ℛy.left j) * (antipode R (ℛy.right j) * antipode R (ℛx.right i))
187+ _ = ∑ i ∈ ℛx.index, ∑ j ∈ ℛy.index,
188+ ℛx.left i * (ℛy.left j * antipode R (ℛy.right j) * antipode R (ℛx.right i)) := by
189+ simp only [mul_assoc]
190+ _ = ∑ i ∈ ℛx.index, ℛx.left i *
191+ ((∑ j ∈ ℛy.index, ℛy.left j * antipode R (ℛy.right j)) * antipode R (ℛx.right i)) := by
192+ simp only [Finset.sum_mul, Finset.mul_sum]
193+ _ = ∑ i ∈ ℛx.index, ℛx.left i *
194+ (counit (R := R) y • (1 : A) * antipode R (ℛx.right i)) := by
195+ rw [sum_mul_antipode_eq_smul ℛy]
196+ _ = ∑ i ∈ ℛx.index, ℛx.left i *
197+ (algebraMap R A (counit y) * antipode R (ℛx.right i)) := by
198+ simp only [Algebra.smul_def, mul_one]
199+ _ = ∑ i ∈ ℛx.index, algebraMap R A (counit y) * (ℛx.left i * antipode R (ℛx.right i)) := by
200+ congr 1 ; ext i; rw [← mul_assoc, ← mul_assoc, Algebra.commutes]
201+ _ = algebraMap R A (counit y) * ∑ i ∈ ℛx.index, ℛx.left i * antipode R (ℛx.right i) := by
202+ rw [← Finset.mul_sum]
203+ _ = algebraMap R A (counit y) * (counit (R := R) x • (1 : A)) := by
204+ rw [sum_mul_antipode_eq_smul ℛx]
205+ _ = (counit (R := R) x * counit y) • (1 : A) := by
206+ simp only [Algebra.smul_def, mul_one, ← map_mul, mul_comm (counit x)]
207+ _ = (counit (R := R) y • counit x) • (1 : A) := by
208+ simp only [smul_eq_mul, mul_comm (counit y)]
209+
124210end HopfAlgebra
125211
126212namespace CommSemiring
0 commit comments