@@ -19,11 +19,18 @@ In this file we define `HopfAlgebra`, and provide instances for:
1919
2020* `HopfAlgebra R A` : the Hopf algebra structure on an `R`-bialgebra `A`.
2121* `HopfAlgebra.antipode` : the `R`-linear map `A →ₗ[R] A`.
22+ * `HopfAlgebra.ofAlgHom` : construct a Hopf algebra structure from an algebra hom
23+ `A →ₐ[R] Aᵐᵒᵖ` satisfying the antipode identities.
24+ * `HopfAlgebra.rTensorAntipodeEqualizer`, `HopfAlgebra.lTensorAntipodeEqualizer` : the
25+ subalgebras of `A` on which a candidate antipode satisfies the antipode identity.
2226
2327 ## Main results
2428
2529* `HopfAlgebra.antipode_one` : the antipode of the unit is the unit.
2630* `HopfAlgebra.antipode_mul` : the antipode is an antihomomorphism: `S(ab) = S(b)S(a)`.
31+ * `HopfAlgebra.mul_rTensor_comul_eq_of_mem_adjoin`,
32+ `HopfAlgebra.mul_lTensor_comul_eq_of_mem_adjoin` : the antipode identity propagates
33+ from a generating set of `A` to all of `Algebra.adjoin R s`.
2734
2835 ## TODO
2936
@@ -229,3 +236,136 @@ instance toHopfAlgebra : HopfAlgebra R R where
229236theorem antipode_eq_id : antipode R (A := R) = .id := rfl
230237
231238end CommSemiring
239+
240+ namespace HopfAlgebra
241+
242+ variable {R A : Type *} [CommSemiring R] [Semiring A] [Bialgebra R A]
243+
244+ open Coalgebra MulOpposite
245+
246+ /-- Upgrade a bialgebra to a Hopf algebra by specifying the antipode as an algebra map
247+ `A →ₐ[R] Aᵐᵒᵖ` with appropriate conditions. -/
248+ noncomputable abbrev ofAlgHom (antipode : A →ₐ[R] Aᵐᵒᵖ)
249+ (mul_antipode_rTensor_comul :
250+ LinearMap.mul' R A ∘ₗ ((opLinearEquiv R).symm.toLinearMap ∘ₗ
251+ antipode.toLinearMap).rTensor A ∘ₗ comul = Algebra.linearMap R A ∘ₗ counit)
252+ (mul_antipode_lTensor_comul :
253+ LinearMap.mul' R A ∘ₗ ((opLinearEquiv R).symm.toLinearMap ∘ₗ
254+ antipode.toLinearMap).lTensor A ∘ₗ comul = Algebra.linearMap R A ∘ₗ counit) :
255+ HopfAlgebra R A where
256+ antipode := (opLinearEquiv R).symm.toLinearMap ∘ₗ antipode.toLinearMap
257+ mul_antipode_rTensor_comul := mul_antipode_rTensor_comul
258+ mul_antipode_lTensor_comul := mul_antipode_lTensor_comul
259+
260+ /-- The subalgebra of `a : A` where the `rTensor` antipode identity holds for a candidate
261+ anti-algebra hom `S : A →ₐ[R] Aᵐᵒᵖ`. Following Takeuchi (1971), Lemma 1, this set is closed
262+ under the algebra operations on `A`, with the multiplicative closure step being the
263+ Sweedler `comul_mul` calculation using anti-multiplicativity of `S`. -/
264+ noncomputable def rTensorAntipodeEqualizer (S : A →ₐ[R] Aᵐᵒᵖ) : Subalgebra R A where
265+ carrier := {a | LinearMap.mul' R A
266+ (((opLinearEquiv R).symm.toLinearMap ∘ₗ S.toLinearMap).rTensor A (comul a))
267+ = algebraMap R A (counit (R := R) a)}
268+ add_mem' {x y} (hx : _ = _) (hy : _ = _) := by simp [map_add, hx, hy]
269+ mul_mem' {x y} (hx : _ = _) (hy : _ = _) := by
270+ set Ŝ : A →ₗ[R] A := (opLinearEquiv R).symm.toLinearMap ∘ₗ S.toLinearMap
271+ have antihom : ∀ a b : A, Ŝ (a * b) = Ŝ b * Ŝ a := fun a b => by simp [Ŝ]
272+ let ℛx := ℛ R x
273+ let ℛy := ℛ R y
274+ have hx' : ∑ i ∈ ℛx.index, Ŝ (ℛx.left i) * ℛx.right i = algebraMap R A (counit x) := by
275+ simpa [← ℛx.eq, map_sum, LinearMap.rTensor_tmul, LinearMap.mul'_apply] using hx
276+ have hy' : ∑ j ∈ ℛy.index, Ŝ (ℛy.left j) * ℛy.right j = algebraMap R A (counit y) := by
277+ simpa [← ℛy.eq, map_sum, LinearMap.rTensor_tmul, LinearMap.mul'_apply] using hy
278+ change LinearMap.mul' R A _ = _
279+ rw [Bialgebra.comul_mul]
280+ conv_lhs => rw [← ℛx.eq, ← ℛy.eq]
281+ simp only [Finset.sum_mul, Finset.mul_sum, Algebra.TensorProduct.tmul_mul_tmul,
282+ map_sum, LinearMap.rTensor_tmul, LinearMap.mul'_apply, antihom]
283+ calc ∑ j ∈ ℛy.index, ∑ i ∈ ℛx.index,
284+ Ŝ (ℛy.left j) * Ŝ (ℛx.left i) * (ℛx.right i * ℛy.right j)
285+ = ∑ j ∈ ℛy.index,
286+ Ŝ (ℛy.left j) * (∑ i ∈ ℛx.index, Ŝ (ℛx.left i) * ℛx.right i) * ℛy.right j := by
287+ simp [mul_assoc, Finset.sum_mul, Finset.mul_sum]
288+ _ = ∑ j ∈ ℛy.index,
289+ algebraMap R A (counit x) * (Ŝ (ℛy.left j) * ℛy.right j) := by
290+ simp [hx', ← Algebra.commutes, mul_assoc]
291+ _ = algebraMap R A (counit (x * y)) := by
292+ rw [← Finset.mul_sum, hy', ← map_mul, ← Bialgebra.counit_mul]
293+ algebraMap_mem' r := by simp
294+
295+ @[simp]
296+ theorem mem_rTensorAntipodeEqualizer (S : A →ₐ[R] Aᵐᵒᵖ) (a : A) :
297+ a ∈ rTensorAntipodeEqualizer S ↔
298+ LinearMap.mul' R A
299+ (((opLinearEquiv R).symm.toLinearMap ∘ₗ S.toLinearMap).rTensor A (comul a))
300+ = algebraMap R A (counit (R := R) a) :=
301+ Iff.rfl
302+
303+ /-- The subalgebra of `a : A` where the `lTensor` antipode identity holds for a candidate
304+ anti-algebra hom `S : A →ₐ[R] Aᵐᵒᵖ`. The mirror image of `rTensorAntipodeEqualizer`. -/
305+ noncomputable def lTensorAntipodeEqualizer (S : A →ₐ[R] Aᵐᵒᵖ) : Subalgebra R A where
306+ carrier := {a | LinearMap.mul' R A
307+ (((opLinearEquiv R).symm.toLinearMap ∘ₗ S.toLinearMap).lTensor A (comul a))
308+ = algebraMap R A (counit (R := R) a)}
309+ add_mem' {x y} (hx : _ = _) (hy : _ = _) := by simp [map_add, hx, hy]
310+ mul_mem' {x y} (hx : _ = _) (hy : _ = _) := by
311+ set Ŝ : A →ₗ[R] A := (opLinearEquiv R).symm.toLinearMap ∘ₗ S.toLinearMap
312+ have antihom : ∀ a b : A, Ŝ (a * b) = Ŝ b * Ŝ a := fun a b => by simp [Ŝ]
313+ let ℛx := ℛ R x
314+ let ℛy := ℛ R y
315+ have hx' : ∑ i ∈ ℛx.index, ℛx.left i * Ŝ (ℛx.right i) = algebraMap R A (counit x) := by
316+ simpa [← ℛx.eq, map_sum, LinearMap.lTensor_tmul, LinearMap.mul'_apply] using hx
317+ have hy' : ∑ j ∈ ℛy.index, ℛy.left j * Ŝ (ℛy.right j) = algebraMap R A (counit y) := by
318+ simpa [← ℛy.eq, map_sum, LinearMap.lTensor_tmul, LinearMap.mul'_apply] using hy
319+ change LinearMap.mul' R A _ = _
320+ rw [Bialgebra.comul_mul]
321+ conv_lhs => rw [← ℛx.eq, ← ℛy.eq]
322+ simp only [Finset.sum_mul, Finset.mul_sum, Algebra.TensorProduct.tmul_mul_tmul,
323+ map_sum, LinearMap.lTensor_tmul, LinearMap.mul'_apply, antihom]
324+ rw [Finset.sum_comm]
325+ calc ∑ i ∈ ℛx.index, ∑ j ∈ ℛy.index,
326+ (ℛx.left i * ℛy.left j) * (Ŝ (ℛy.right j) * Ŝ (ℛx.right i))
327+ = ∑ i ∈ ℛx.index,
328+ ℛx.left i * (∑ j ∈ ℛy.index, ℛy.left j * Ŝ (ℛy.right j)) * Ŝ (ℛx.right i) := by
329+ simp [mul_assoc, Finset.sum_mul, Finset.mul_sum]
330+ _ = ∑ i ∈ ℛx.index,
331+ algebraMap R A (counit y) * (ℛx.left i * Ŝ (ℛx.right i)) := by
332+ simp [hy', ← Algebra.commutes, mul_assoc]
333+ _ = algebraMap R A (counit (x * y)) := by
334+ rw [← Finset.mul_sum, hx', ← map_mul, mul_comm, ← Bialgebra.counit_mul]
335+ algebraMap_mem' r := by simp
336+
337+ @[simp]
338+ theorem mem_lTensorAntipodeEqualizer (S : A →ₐ[R] Aᵐᵒᵖ) (a : A) :
339+ a ∈ lTensorAntipodeEqualizer S ↔
340+ LinearMap.mul' R A
341+ (((opLinearEquiv R).symm.toLinearMap ∘ₗ S.toLinearMap).lTensor A (comul a))
342+ = algebraMap R A (counit (R := R) a) :=
343+ Iff.rfl
344+
345+ /-- If `S : A →ₐ[R] Aᵐᵒᵖ` satisfies the `rTensor` antipode identity on a generating set
346+ `s`, then it satisfies it on the whole algebra generated by `s`. -/
347+ theorem mul_rTensor_comul_eq_of_mem_adjoin
348+ (S : A →ₐ[R] Aᵐᵒᵖ) {s : Set A}
349+ (h : ∀ ⦃x⦄, x ∈ s → LinearMap.mul' R A
350+ (((opLinearEquiv R).symm.toLinearMap ∘ₗ S.toLinearMap).rTensor A (comul x))
351+ = algebraMap R A (counit (R := R) x))
352+ {x : A} (hx : x ∈ Algebra.adjoin R s) :
353+ LinearMap.mul' R A
354+ (((opLinearEquiv R).symm.toLinearMap ∘ₗ S.toLinearMap).rTensor A (comul x))
355+ = algebraMap R A (counit (R := R) x) :=
356+ Algebra.adjoin_le (S := rTensorAntipodeEqualizer S) h hx
357+
358+ /-- If `S : A →ₐ[R] Aᵐᵒᵖ` satisfies the `lTensor` antipode identity on a generating set
359+ `s`, then it satisfies it on the whole algebra generated by `s`. -/
360+ theorem mul_lTensor_comul_eq_of_mem_adjoin
361+ (S : A →ₐ[R] Aᵐᵒᵖ) {s : Set A}
362+ (h : ∀ ⦃x⦄, x ∈ s → LinearMap.mul' R A
363+ (((opLinearEquiv R).symm.toLinearMap ∘ₗ S.toLinearMap).lTensor A (comul x))
364+ = algebraMap R A (counit (R := R) x))
365+ {x : A} (hx : x ∈ Algebra.adjoin R s) :
366+ LinearMap.mul' R A
367+ (((opLinearEquiv R).symm.toLinearMap ∘ₗ S.toLinearMap).lTensor A (comul x))
368+ = algebraMap R A (counit (R := R) x) :=
369+ Algebra.adjoin_le (S := lTensorAntipodeEqualizer S) h hx
370+
371+ end HopfAlgebra
0 commit comments