Zulip Chat Archive
Stream: new members
Topic: Proving a statement about Hopf Algebras
Sam Ezeh (Mar 12 2024 at 09:03):
import Aesop
import Mathlib.Algebra.Algebra.Basic
import Mathlib.RingTheory.Bialgebra
import Mathlib.RingTheory.HopfAlgebra
example [CommSemiring R] [CommSemiring A] [H : HopfAlgebra R A] :
(LinearMap.mul' R A)
∘ₗ (LinearMap.mul' R A).lTensor A
∘ₗ (TensorProduct.assoc R A A A)
∘ₗ H.comul.rTensor A
∘ₗ TensorProduct.map (LinearMap.mul' R A) H.antipode
∘ₗ (TensorProduct.assoc R A A A).symm
∘ₗ H.comul.lTensor A
=
(LinearMap.mul' R A)
∘ₗ (TensorProduct.comm R A A)
∘ₗ (LinearMap.mul' R A).lTensor A
∘ₗ (TensorProduct.assoc R A A A)
∘ₗ H.comul.rTensor A
:= by
sorry
I think the statement's correct and the first thing I want to do is rewrite H.comul.rTensor A ∘ₗ TensorProduct.map (LinearMap.mul' R A) H.antipode
as TensorProduct.map (H.comul ∘ₗ LinearMap.mul' R A) H.antipode
. Once I've done this, I'd like touse mul_compr₂_comul
to get TensorProduct.map ((LinearMap.mul' R _) ∘ₗ (TensorProduct.map H.comul H.comul)) H.antipode
. However, all the bialgebra laws use LinearMap.mul
instead of LinearMap.mul'
and they use the compr₂
variants instead of TensorProduct.map
which might suggest that I'm writing this weirdly, is there a better way to state this?
Another thing is the hopf algebra laws use LinearMap.mul'
and LinearMap.lTensor
/LinearMap.rTensor
instead of LinearMap.mul
and compr₂
, am I missing a way to make the two definitions work nicely together?
Kevin Buzzard (Mar 12 2024 at 09:10):
@Edison Xie @Jujian Zhang you have both been thinking about this stuff recently
Eric Wieser (Mar 12 2024 at 09:20):
Sam Ezeh said:
However, all the bialgebra laws use
LinearMap.mul
instead ofLinearMap.mul'
and they use thecompr₂
variants instead ofTensorProduct.map
which might suggest that I'm writing this weirdly, is there a better way to state this?Another thing is the hopf algebra laws use
LinearMap.mul'
andLinearMap.lTensor
/LinearMap.rTensor
instead ofLinearMap.mul
andcompr₂
, am I missing a way to make the two definitions work nicely together?
I think it would be very reasonable to add some more Bialgebra
lemmas that convert the existing statements to these statements
Kevin Buzzard (Mar 12 2024 at 12:04):
Your first step is
rw [← LinearMap.comp_assoc _ _ (LinearMap.rTensor A Coalgebra.comul)] -- brackets in right place
unfold LinearMap.rTensor -- is there no API for this?
rw [← map_comp] -- :tada
rw [LinearMap.id_comp] -- simplify
but I have no idea about all this compr/compl stuff. I do know that @Eric Wieser was adamant that the statement of the bialgebra axiom needed to be changed from comul (a * b) = comul a * comul b
(the original choice) to (LinearMap.mul R A).compr₂ comul = (LinearMap.mul R (A ⊗[R] A)).compl₁₂ comul comul
but I have no understanding of why this is better, all I know is that Eric understands this stuff much better than me so I trusted him.
I will also say that this question took me several minutes to even parse: the lack of a commutative diagram widget (even though it's been advertised on FRO slides for months if not years) is really painful here.
Sam Ezeh (Mar 12 2024 at 12:08):
Kevin Buzzard said:
I will also say that this question took me several minutes to even parse: the lack of a commutative diagram widget (even though it's been advertised on FRO slides for months if not years) is really painful here.
What is the state of this? Are there people working on it? My motivation for working with Hopf Algebras is precisely for my graphical rewriting project where I want to build a proof of concept for string diagrams: https://github.com/dignissimus/Untangle
Eric Wieser (Mar 12 2024 at 12:48):
Even when it existed, it was only for statements written categorically. There is an open PR for string diagrams in monoidal categories, but this has the same shortcoming.
Edison Xie (Mar 12 2024 at 17:46):
Kevin Buzzard said:
Edison Xie Jujian Zhang you have both been thinking about this stuff recently
open BigOperators
set_option tactic.skipAssignedInstances false
set_option synthInstance.maxHeartbeats 50000
example (R1 : Type) (A1 : Type) [CommRing R1] [CommRing A1] [H : HopfAlgebra R1 A1] :
(LinearMap.mul' R1 A1)
∘ₗ (LinearMap.mul' R1 A1).lTensor A1
∘ₗ (TensorProduct.assoc R1 A1 A1 A1)
∘ₗ H.comul.rTensor A1
∘ₗ TensorProduct.map (LinearMap.mul' R1 A1) H.antipode
∘ₗ (TensorProduct.assoc R1 A1 A1 A1).symm
∘ₗ H.comul.lTensor A1
=
(LinearMap.mul' R1 A1)
∘ₗ (TensorProduct.comm R1 A1 A1)
∘ₗ (LinearMap.mul' R1 A1).lTensor A1
∘ₗ (TensorProduct.assoc R1 A1 A1 A1)
∘ₗ H.comul.rTensor A1
:= by
rw [← LinearMap.comp_assoc _ _ (LinearMap.rTensor A1 Coalgebra.comul)] -- brackets in right place
unfold LinearMap.rTensor -- is there no API for this?
rw [← TensorProduct.map_comp] -- :tada
rw [LinearMap.id_comp] -- simplify
ext a b
simp only [TensorProduct.AlgebraTensorModule.curry_apply, TensorProduct.curry_apply,
LinearMap.coe_restrictScalars, LinearMap.coe_comp, LinearEquiv.coe_coe, comp_apply,
LinearMap.lTensor_tmul, LinearMap.rTensor_tmul]
obtain ⟨I1, x1, x2, hx⟩ := HopfPoints.comul_repr R1 A1 a
obtain ⟨I2, y1, y2, hy⟩ := HopfPoints.comul_repr R1 A1 b
simp (config := { zetaDelta := true, zeta := false }) only [hy, TensorProduct.tmul_sum, map_sum,
TensorProduct.assoc_symm_tmul, TensorProduct.map_tmul, LinearMap.mul'_apply,
LinearMap.rTensor_tmul, Bialgebra.comul_mul, hx, TensorProduct.sum_tmul,
TensorProduct.assoc_tmul, LinearMap.lTensor_tmul, TensorProduct.comm_tmul,
LinearMap.id_coe,id_eq]
simp only [LinearMap.coe_comp, comp_apply, LinearMap.mul'_apply, Bialgebra.comul_mul]
obtain ⟨I11, y11, y12, hy1⟩ := HopfPoints.comul_repr R1 A1 (y1 x)
sorry
I attempted this but failed, but i think the general idea is using sweedler to open everything up then it should be clear using some properties of antipode :(
Eric Wieser (Mar 12 2024 at 18:25):
What's the statement of HopfPoints.comul_repr
?
Jujian Zhang (Mar 12 2024 at 18:52):
I think it is saying that for some inex set and coordinate function
Sam Ezeh (Mar 13 2024 at 04:44):
Eric Wieser said:
I think it would be very reasonable to add some more
Bialgebra
lemmas that convert the existing statements to these statements
Would these be welcome?
lemma mul'_comp_comul [CommSemiring R] [Semiring A] [B : Bialgebra R A] : LinearMap.mul' R _ ∘ₗ TensorProduct.map B.comul B.comul = B.comul ∘ₗ LinearMap.mul' R A := by
ext
simp
lemma mul'_comp_counit [CommSemiring R] [Semiring A] [B : Bialgebra R A] : LinearMap.mul' R _ ∘ₗ TensorProduct.map B.counit B.counit = B.counit ∘ₗ LinearMap.mul' R _:= by
ext
simp
lemma lift_map_eq_lift_compl₁₂
[CommSemiring R]
[Semiring A] [Semiring B] [Semiring C]
[Semiring D] [Semiring E] [Semiring F]
[Semiring G] [Semiring H]
[Module R A] [Module R B] [Module R C]
[Module R D] [Module R E] [Module R F]
[Module R G] [Module R H]
{f : B ⊗[R] C →ₗ[R] E ⊗[R] F →ₗ[R] G ⊗[R] H}
{g : A →ₗ[R] B ⊗[R] C}
{h : D →ₗ[R] E ⊗[R] F}
: TensorProduct.lift f ∘ₗ TensorProduct.map g h = TensorProduct.lift (f.compl₁₂ g h) := by
ext
simp
lemma comp_lift_eq_lift_compr₂
[CommSemiring R]
[Semiring A] [Semiring B] [Semiring C] [Semiring D]
[Module R A] [Module R B] [Module R C] [Module R D]
{f : A →ₗ[R] B →ₗ[R] C}
{g : C →ₗ[R] D}
: g ∘ₗ TensorProduct.lift f = TensorProduct.lift (f.compr₂ g) := by
ext
simp
Eric Wieser (Mar 13 2024 at 08:23):
I think some of those assumptions are too strong; I doubt you need your modules to be semirings?
Eric Wieser (Mar 13 2024 at 08:23):
Otherwise they look fine
Last updated: May 02 2025 at 03:31 UTC