Skip to content

Commit 5d0f6d6

Browse files
YaelDilliesKiolt
andcommitted
feat(RingTheory): convolution product on bialgebra homs (#39281)
Construct the ring structure on algebra homs `C → A` where `C` is a bialgebra and `A` an algebra, and also the ring structure on bialgebra homs `C → A` where `C` and `A` are bialgebras. From Toric Co-authored-by: Michał Mrugała <kiolterino@gmail.com>
1 parent 860f946 commit 5d0f6d6

3 files changed

Lines changed: 203 additions & 1 deletion

File tree

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6358,6 +6358,7 @@ public import Mathlib.RingTheory.Artinian.Module
63586358
public import Mathlib.RingTheory.Artinian.Ring
63596359
public import Mathlib.RingTheory.Bezout
63606360
public import Mathlib.RingTheory.Bialgebra.Basic
6361+
public import Mathlib.RingTheory.Bialgebra.Convolution
63616362
public import Mathlib.RingTheory.Bialgebra.Equiv
63626363
public import Mathlib.RingTheory.Bialgebra.GroupLike
63636364
public import Mathlib.RingTheory.Bialgebra.Hom
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
/-
2+
Copyright (c) 2025 Yaël Dillies, Michał Mrugała. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Yaël Dillies, Michał Mrugała
5+
-/
6+
module
7+
8+
public import Mathlib.RingTheory.Bialgebra.TensorProduct
9+
public import Mathlib.RingTheory.Coalgebra.Convolution
10+
11+
/-!
12+
# Convolution product on bialgebra homs
13+
14+
This file constructs the ring structure on algebra homs `C → A` where `C` is a bialgebra and `A` an
15+
algebra, and also the ring structure on bialgebra homs `C → A` where `C` and `A` are bialgebras.
16+
Both multiplications are given by
17+
```
18+
|
19+
μ
20+
| | / \
21+
f * g = f g
22+
| | \ /
23+
δ
24+
|
25+
```
26+
diagrammatically, where `μ` stands for multiplication and `δ` for comultiplication.
27+
-/
28+
29+
public section
30+
31+
suppress_compilation
32+
33+
open Algebra Coalgebra Bialgebra TensorProduct WithConv
34+
35+
variable {R A B C : Type*} [CommSemiring R]
36+
37+
namespace AlgHom
38+
variable [CommSemiring A] [CommSemiring B] [Semiring C] [Bialgebra R C] [Algebra R A]
39+
40+
instance : One (WithConv <| C →ₐ[R] A) where
41+
one := toConv <| (Algebra.ofId R A).comp <| counitAlgHom R C
42+
43+
instance : Mul (WithConv <| C →ₐ[R] A) where
44+
mul f g := toConv <| .comp (lmul' R) <| .comp (map f.ofConv g.ofConv) <| comulAlgHom R C
45+
46+
instance : Pow (WithConv <| C →ₐ[R] A) ℕ := ⟨fun f n ↦ npowRec n f⟩
47+
48+
lemma convOne_def : 1 = toConv ((Algebra.ofId R A).comp (counitAlgHom R C)) := rfl
49+
50+
lemma convMul_def (f g : WithConv <| C →ₐ[R] A) :
51+
f * g = toConv (.comp (lmul' R) <| .comp (map f.ofConv g.ofConv) <| comulAlgHom R C) := rfl
52+
53+
private lemma convPow_succ (f : WithConv <| C →ₐ[R] A) (n : ℕ) : f ^ (n + 1) = (f ^ n) * f := rfl
54+
55+
@[simp]
56+
lemma convOne_apply (c : C) : (1 : WithConv <| C →ₐ[R] A) c = algebraMap R A (counit c) := rfl
57+
58+
lemma convMul_apply (f g : WithConv <| C →ₐ[R] A) (c : C) :
59+
(f * g) c = lift f.ofConv g.ofConv (fun _ _ ↦ .all ..) (comul c) := by
60+
simp only [convMul_def, coe_comp, Function.comp_apply, Bialgebra.comulAlgHom_apply]
61+
rw [← comp_apply]
62+
congr 1
63+
ext <;> simp
64+
65+
@[simp]
66+
lemma toLinearMap_convOne : toConv (1 : WithConv <| C →ₐ[R] A).ofConv.toLinearMap = 1 := rfl
67+
68+
@[simp]
69+
lemma toLinearMap_convMul (f g : WithConv <| C →ₐ[R] A) :
70+
toConv (f * g).ofConv.toLinearMap = toConv f.ofConv.toLinearMap * toConv g.ofConv.toLinearMap :=
71+
rfl
72+
73+
@[simp]
74+
lemma toLinearMap_convPow (f : WithConv <| C →ₐ[R] A) :
75+
∀ n : ℕ, toConv (f ^ n).ofConv.toLinearMap = toConv f.ofConv.toLinearMap ^ n
76+
| 0 => rfl
77+
| n + 1 => by simp only [convPow_succ, toLinearMap_convMul, toLinearMap_convPow, pow_succ]
78+
79+
lemma convMul_comp_bialgHom_distrib [Bialgebra R B] (f g : WithConv <| C →ₐ[R] A) (h : B →ₐc[R] C) :
80+
AlgHom.comp (f * g).ofConv (h : B →ₐ[R] C) =
81+
ofConv (toConv (f.ofConv.comp h) * toConv (g.ofConv.comp h)) := by
82+
simp [convMul_def, comp_assoc, Algebra.TensorProduct.map_comp]
83+
84+
lemma comp_convMul_distrib [Algebra R B] (h : A →ₐ[R] B) (f g : WithConv <| C →ₐ[R] A) :
85+
h.comp (f * g).ofConv = ofConv (toConv (h.comp f.ofConv) * toConv (h.comp g.ofConv)) := by
86+
apply toLinearMap_injective
87+
apply WithConv.toConv_injective
88+
rw [AlgHom.comp_toLinearMap, ← ofConv_toConv (f * g).ofConv.toLinearMap, toLinearMap_convMul]
89+
simp [LinearMap.algHom_comp_convMul_distrib, toLinearMap_convMul]
90+
91+
instance : Monoid (WithConv <| C →ₐ[R] A) := fast_instance%
92+
(toConv_injective.comp <| toLinearMap_injective.comp ofConv_injective).monoid _
93+
toLinearMap_convOne toLinearMap_convMul toLinearMap_convPow
94+
95+
variable [IsCocomm R C]
96+
97+
instance : CommMonoid (WithConv <| C →ₐ[R] A) := fast_instance%
98+
(toConv_injective.comp <| toLinearMap_injective.comp ofConv_injective).commMonoid _
99+
toLinearMap_convOne toLinearMap_convMul toLinearMap_convPow
100+
101+
end AlgHom
102+
103+
namespace BialgHom
104+
variable [CommSemiring A] [Semiring C] [Bialgebra R A] [Bialgebra R C]
105+
106+
instance : One (WithConv <| C →ₐc[R] A) where
107+
one := toConv <| (unitBialgHom R A).comp <| counitBialgHom R C
108+
109+
lemma convOne_def : 1 = toConv ((unitBialgHom R A).comp (counitBialgHom R C)) := rfl
110+
111+
@[simp]
112+
lemma convOne_apply (c : C) : (1 : WithConv <| C →ₐc[R] A) c = algebraMap R A (counit c) := rfl
113+
114+
@[simp]
115+
lemma toLinearMap_convOne :
116+
toConv (SemilinearMapClass.semilinearMap (1 : WithConv <| C →ₐc[R] A).ofConv) = 1 := rfl
117+
118+
@[simp] lemma toAlgHom_convOne : toConv (1 : WithConv <| C →ₐc[R] A).ofConv.toAlgHom = 1 := rfl
119+
120+
variable [IsCocomm R C]
121+
122+
instance : Mul (WithConv <| C →ₐc[R] A) where
123+
mul f g := toConv <| .comp (mulBialgHom R A) <| .comp (map f.ofConv g.ofConv) <| comulBialgHom R C
124+
125+
instance : Pow (WithConv <| C →ₐc[R] A) ℕ := ⟨fun f n ↦ npowRec n f⟩
126+
127+
lemma convMul_def (f g : WithConv <| C →ₐc[R] A) :
128+
f * g =
129+
toConv (.comp (mulBialgHom R A) <| .comp (map f.ofConv g.ofConv) <| comulBialgHom R C) :=
130+
rfl
131+
132+
private lemma convPow_succ (f : WithConv <| C →ₐc[R] A) (n : ℕ) : f ^ (n + 1) = (f ^ n) * f := rfl
133+
134+
-- TODO: Make simp once `SemilinearMapClass.semilinearMap` is not simp nf anymore.
135+
-- @[simp]
136+
lemma toLinearMap_convMul (f g : WithConv <| C →ₐc[R] A) :
137+
toConv (f * g).ofConv.toLinearMap = toConv f.ofConv.toLinearMap * toConv g.ofConv.toLinearMap :=
138+
rfl
139+
140+
@[simp]
141+
lemma toAlgHom_convMul (f g : WithConv <| C →ₐc[R] A) :
142+
toConv (f * g).ofConv.toAlgHom = toConv f.ofConv.toAlgHom * toConv g.ofConv.toAlgHom :=
143+
rfl
144+
145+
-- TODO: Make simp once `SemilinearMapClass.semilinearMap` is not simp nf anymore.
146+
-- @[simp]
147+
lemma toLinearMap_convPow (f : WithConv <| C →ₐc[R] A) :
148+
∀ n, toConv (f ^ n).ofConv.toLinearMap = toConv f.ofConv.toLinearMap ^ n
149+
| 0 => rfl
150+
| n + 1 => by simp only [convPow_succ, pow_succ, toLinearMap_convMul, toLinearMap_convPow]
151+
152+
@[simp]
153+
lemma toAlgHom_convPow (f : WithConv <| C →ₐc[R] A) :
154+
∀ n, toConv (f ^ n).ofConv.toAlgHom = toConv f.ofConv.toAlgHom ^ n
155+
| 0 => rfl
156+
| n + 1 => by simp only [convPow_succ, pow_succ, toAlgHom_convMul, toAlgHom_convPow]
157+
158+
instance : CommMonoid (WithConv <| C →ₐc[R] A) := fast_instance%
159+
(toConv_injective.comp <| coe_linearMap_injective.comp ofConv_injective).commMonoid _
160+
toLinearMap_convOne toLinearMap_convMul toLinearMap_convPow
161+
162+
end BialgHom

Mathlib/RingTheory/Bialgebra/TensorProduct.lean

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,12 @@ abbrev rTensor (f : B →ₐc[R] C) : B ⊗[R] A →ₐc[R] C ⊗[R] A :=
196196
end BialgHom
197197

198198
namespace Bialgebra
199-
variable (R A : Type*) [CommSemiring R] [Semiring A] [Bialgebra R A]
199+
variable {R A : Type*} [CommSemiring R]
200200

201+
section Semiring
202+
variable [Semiring A] [Bialgebra R A]
203+
204+
variable (R A) in
201205
/-- Comultiplication as a bialgebra hom. -/
202206
@[expose] def comulBialgHom [IsCocomm R A] : A →ₐc[R] A ⊗[R] A where
203207
__ := comulAlgHom R A
@@ -207,4 +211,39 @@ lemma comm_comp_comulBialgHom [IsCocomm R A] :
207211
(TensorProduct.comm R A A).toBialgHom.comp (comulBialgHom R A) = comulBialgHom R A := by
208212
ext; exact comm_comul _ _
209213

214+
variable (R A) in
215+
/-- Multiplication on a bialgebra as a coalgebra hom. -/
216+
@[expose]
217+
def mulCoalgHom : A ⊗[R] A →ₗc[R] A where
218+
toLinearMap := .mul' R A
219+
counit_comp := by ext; simp [mul_comm]
220+
map_comp_comul := by
221+
ext a b
222+
simp [← (ℛ R a).eq, ← (ℛ R b).eq, TensorProduct.sum_tmul]
223+
simp [TensorProduct.tmul_sum, Finset.sum_mul_sum]
224+
225+
-- TODO: Generate this using `simps` once the coercion from `LinearMapClass` is gone.
226+
@[simp]
227+
lemma toLinearMap_mulCoalgHom : mulCoalgHom R A = LinearMap.mul' R A := rfl
228+
229+
@[simp] lemma coe_mulCoalgHom : ⇑(mulCoalgHom R A) = LinearMap.mul' R A := rfl
230+
231+
end Semiring
232+
233+
section CommSemiring
234+
variable [CommSemiring A] [Bialgebra R A]
235+
236+
variable (R A) in
237+
/-- Multiplication on a commutative bialgebra as a bialgebra hom. -/
238+
@[expose, simps toCoalgHom]
239+
def mulBialgHom : A ⊗[R] A →ₐc[R] A where
240+
toCoalgHom := mulCoalgHom R A
241+
__ := Algebra.TensorProduct.lmul' R
242+
243+
@[simp]
244+
lemma mulBialgHom_toAlgHom : (mulBialgHom R A).toAlgHom = Algebra.TensorProduct.lmul' R := rfl
245+
246+
@[simp] lemma coe_mulBialgHom : ⇑(mulBialgHom R A) = LinearMap.mul' R A := rfl
247+
248+
end CommSemiring
210249
end Bialgebra

0 commit comments

Comments
 (0)