@@ -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
@@ -17,15 +18,19 @@ In this file we define `HopfAlgebra`, and provide instances for:
1718 ## Main definitions
1819
1920* `HopfAlgebra R A` : the Hopf algebra structure on an `R`-bialgebra `A`.
20- * `HopfAlgebra.antipode` : The `R`-linear map `A →ₗ[R] A`.
21+ * `HopfAlgebra.antipode` : the `R`-linear map `A →ₗ[R] A`.
22+
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)`.
2127
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,83 @@ 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+ -- The counit on `A ⊗ A`: `ε(x ⊗ y) = ε(y) • ε(x) = ε(x)ε(y)` since `R` is commutative.
161+ simp only [TensorProduct.counit_tmul, Algebra.algebraMap_eq_smul_one]
162+ -- Use the bialgebra comultiplication axiom: `Δ(xy) = Δ(x)Δ(y)`.
163+ have key := mul_antipode_rTensor_comul_apply (R := R) (x * y)
164+ rw [Bialgebra.comul_mul, ← ℛx.eq, ← ℛy.eq] at key
165+ simp only [Finset.sum_mul, Finset.mul_sum, Algebra.TensorProduct.tmul_mul_tmul,
166+ map_sum, LinearMap.rTensor_tmul, LinearMap.mul'_apply, Bialgebra.counit_mul] at key
167+ rw [Finset.sum_comm] at key
168+ simpa [Algebra.algebraMap_eq_smul_one, mul_comm (counit x) (counit y)] using key
169+ · -- Right inverse: `μ * (μ ∘ (S ⊗ S) ∘ comm) = 1`.
170+ refine TensorProduct.ext' fun x y => ?_
171+ simp only [LinearMap.convMul_apply, LinearMap.convOne_apply]
172+ rw [TensorProduct.comul_tmul]
173+ let ℛx := ℛ R x; let ℛy := ℛ R y
174+ conv_lhs => rw [← ℛx.eq, ← ℛy.eq]
175+ simp only [TensorProduct.sum_tmul, TensorProduct.tmul_sum, map_sum,
176+ TensorProduct.AlgebraTensorModule.tensorTensorTensorComm_tmul, TensorProduct.map_tmul,
177+ LinearMap.mul'_apply, LinearMap.comp_apply]
178+ rw [Finset.sum_comm]
179+ simp only [TensorProduct.counit_tmul, Algebra.algebraMap_eq_smul_one]
180+ -- Rearrange the sum using antipode axioms.
181+ calc ∑ i ∈ ℛx.index, ∑ j ∈ ℛy.index,
182+ (ℛx.left i * ℛy.left j) * (antipode R (ℛy.right j) * antipode R (ℛx.right i))
183+ _ = ∑ i ∈ ℛx.index, ∑ j ∈ ℛy.index,
184+ ℛx.left i * (ℛy.left j * antipode R (ℛy.right j) * antipode R (ℛx.right i)) := by
185+ simp [mul_assoc]
186+ _ = ∑ i ∈ ℛx.index, ℛx.left i *
187+ ((∑ j ∈ ℛy.index, ℛy.left j * antipode R (ℛy.right j)) * antipode R (ℛx.right i)) := by
188+ simp [Finset.sum_mul, Finset.mul_sum]
189+ _ = ∑ i ∈ ℛx.index, ℛx.left i *
190+ (counit y • 1 * antipode R (ℛx.right i)) := by
191+ rw [sum_mul_antipode_eq_smul ℛy]
192+ _ = ∑ i ∈ ℛx.index, ℛx.left i *
193+ (algebraMap R A (counit y) * antipode R (ℛx.right i)) := by
194+ simp [Algebra.smul_def]
195+ _ = ∑ i ∈ ℛx.index, algebraMap R A (counit y) * (ℛx.left i * antipode R (ℛx.right i)) := by
196+ congr 1 ; ext i; rw [← mul_assoc, ← mul_assoc, Algebra.commutes]
197+ _ = algebraMap R A (counit y) * ∑ i ∈ ℛx.index, ℛx.left i * antipode R (ℛx.right i) := by
198+ rw [← Finset.mul_sum]
199+ _ = algebraMap R A (counit y) * (counit (R := R) x • (1 : A)) := by
200+ rw [sum_mul_antipode_eq_smul ℛx]
201+ _ = (counit (R := R) x * counit y) • (1 : A) := by
202+ simp only [Algebra.smul_def, mul_one, ← map_mul, mul_comm (counit x)]
203+ _ = (counit (R := R) y • counit x) • (1 : A) := by
204+ simp only [smul_eq_mul, mul_comm (counit y)]
205+
124206end HopfAlgebra
125207
126208namespace CommSemiring
0 commit comments