@@ -10,13 +10,15 @@ public import Mathlib.RingTheory.HopfAlgebra.Convolution
1010/-!
1111# Constructing Hopf algebras from algebra generators
1212
13- This file provides a constructor for Hopf algebras given antimultiplicative
14- antipode data on an algebra-generating set, via an extension principle for
15- pointwise convolution inverses of multiplicative maps.
13+ This file provides an extension principle to upgrade a bialgebra to a Hopf algebra given
14+ antimultiplicative antipode data on generators.
1615
17- ## Main declarations
16+ ## Main definitions
1817
1918* `HopfAlgebra.ofGenerators` : construct a Hopf algebra from data on a generating set.
19+
20+ ## Main results
21+
2022* `HopfAlgebra.convMul_eq_one_of_adjoin_eq_top_left` and
2123 `HopfAlgebra.convMul_eq_one_of_adjoin_eq_top_right`: a pointwise one-sided convolution inverse of
2224 a multiplicative map on generators is a global one.
@@ -30,7 +32,7 @@ public section
3032
3133namespace HopfAlgebra
3234
33- open Coalgebra LinearMap WithConv
35+ open Algebra Coalgebra LinearMap WithConv
3436
3537variable {R A B : Type *} [CommSemiring R]
3638
@@ -47,26 +49,21 @@ a left convolution inverse on generators is a left convolution inverse. -/
4749theorem convMul_eq_one_of_adjoin_eq_top_left
4850 (g_one : g 1 = 1 ) (g_mul : ∀ x y, g (x * y) = g y * g x)
4951 (f_one : f 1 = 1 ) (f_mul : ∀ x y, f (x * y) = f x * f y)
50- (adjoin_eq_top : Algebra. adjoin R s = ⊤)
52+ (adjoin_eq_top : adjoin R s = ⊤)
5153 (g_convMul_f : ∀ p ∈ s, (toConv g * toConv f) p = (1 : WithConv (A →ₗ[R] B)) p) :
5254 toConv g * toConv f = 1 := by
53- refine WithConv.ext (ext fun x => ?_)
54- refine Algebra.adjoin_induction g_convMul_f
55- (fun r => by simp [g_one, f_one, Algebra.algebraMap_eq_smul_one, Algebra.TensorProduct.one_def])
56- (fun a b _ _ ha hb => by simp [map_add, ha, hb])
57- (fun a b _ _ ha hb => ?_) (adjoin_eq_top ▸ Algebra.mem_top : x ∈ Algebra.adjoin R s)
55+ ext x; refine adjoin_le
56+ (S := (eqLocus (toConv g * toConv f).ofConv (ofConv 1 )).toSubalgebra ?_ fun a b ha hb => ?_)
57+ g_convMul_f (adjoin_eq_top ▸ mem_top : x ∈ adjoin R s)
58+ · simp [g_one, f_one, TensorProduct.one_def]
5859 let 𝓡a := ℛ R a; let 𝓡b := ℛ R b
59- simp only [𝓡a.convMul_apply, 𝓡b.convMul_apply, convOne_apply] at ha hb
60- rw [convOne_apply]
60+ simp only [mem_eqLocus, 𝓡a.convMul_apply, 𝓡b.convMul_apply, convOne_apply] at ha hb ⊢
6161 calc (toConv g * toConv f) (a * b)
62- _ = ∑ p ∈ 𝓡a.index, ∑ q ∈ 𝓡b.index,
63- g (𝓡a.left p * 𝓡b.left q) * f (𝓡a.right p * 𝓡b.right q) := by
64- simp [← 𝓡a.eq, ← 𝓡b.eq, Finset.sum_mul_sum]
6562 _ = ∑ p ∈ 𝓡a.index, ∑ q ∈ 𝓡b.index,
6663 g (𝓡b.left q) * (g (𝓡a.left p) * f (𝓡a.right p)) * f (𝓡b.right q) := by
67- simp_rw [ g_mul, f_mul, mul_assoc]
64+ simp [← 𝓡a.eq, ← 𝓡b.eq, Finset.sum_mul_sum, g_mul, f_mul, mul_assoc]
6865 _ = ∑ q ∈ 𝓡b.index, algebraMap R B (counit a) * g (𝓡b.left q) * f (𝓡b.right q) := by
69- rw [Finset.sum_comm]; simp_rw [← Finset.sum_mul, ← Finset.mul_sum, ha, ← Algebra. commutes]
66+ rw [Finset.sum_comm]; simp_rw [← Finset.sum_mul, ← Finset.mul_sum, ha, ← commutes]
7067 _ = algebraMap R B (counit (a * b)) := by
7168 simp_rw [mul_assoc, ← Finset.mul_sum, hb, ← map_mul, ← Bialgebra.counit_mul]
7269
@@ -75,26 +72,21 @@ a right convolution inverse on generators is a right convolution inverse. -/
7572theorem convMul_eq_one_of_adjoin_eq_top_right
7673 (g_one : g 1 = 1 ) (g_mul : ∀ x y, g (x * y) = g y * g x)
7774 (f_one : f 1 = 1 ) (f_mul : ∀ x y, f (x * y) = f x * f y)
78- (adjoin_eq_top : Algebra. adjoin R s = ⊤)
75+ (adjoin_eq_top : adjoin R s = ⊤)
7976 (f_convMul_g : ∀ p ∈ s, (toConv f * toConv g) p = (1 : WithConv (A →ₗ[R] B)) p) :
8077 toConv f * toConv g = 1 := by
81- refine WithConv.ext (ext fun x => ?_)
82- refine Algebra.adjoin_induction f_convMul_g
83- (fun r => by simp [g_one, f_one, Algebra.algebraMap_eq_smul_one, Algebra.TensorProduct.one_def])
84- (fun a b _ _ ha hb => by simp [map_add, ha, hb])
85- (fun a b _ _ ha hb => ?_) (adjoin_eq_top ▸ Algebra.mem_top : x ∈ Algebra.adjoin R s)
78+ ext x; refine adjoin_le
79+ (S := (eqLocus (toConv f * toConv g).ofConv (ofConv 1 )).toSubalgebra ?_ fun a b ha hb => ?_)
80+ f_convMul_g (adjoin_eq_top ▸ mem_top : x ∈ adjoin R s)
81+ · simp [g_one, f_one, TensorProduct.one_def]
8682 let 𝓡a := ℛ R a; let 𝓡b := ℛ R b
87- simp only [𝓡a.convMul_apply, 𝓡b.convMul_apply, convOne_apply] at ha hb
88- rw [convOne_apply]
83+ simp only [mem_eqLocus, 𝓡a.convMul_apply, 𝓡b.convMul_apply, convOne_apply] at ha hb ⊢
8984 calc (toConv f * toConv g) (a * b)
90- _ = ∑ p ∈ 𝓡a.index, ∑ q ∈ 𝓡b.index,
91- f (𝓡a.left p * 𝓡b.left q) * g (𝓡a.right p * 𝓡b.right q) := by
92- simp [← 𝓡a.eq, ← 𝓡b.eq, Finset.sum_mul_sum]
9385 _ = ∑ p ∈ 𝓡a.index, ∑ q ∈ 𝓡b.index,
9486 f (𝓡a.left p) * (f (𝓡b.left q) * g (𝓡b.right q)) * g (𝓡a.right p) := by
95- simp_rw [ g_mul, f_mul, mul_assoc]
87+ simp [← 𝓡a.eq, ← 𝓡b.eq, Finset.sum_mul_sum, g_mul, f_mul, mul_assoc]
9688 _ = ∑ p ∈ 𝓡a.index, algebraMap R B (counit b) * f (𝓡a.left p) * g (𝓡a.right p) := by
97- simp_rw [← Finset.sum_mul, ← Finset.mul_sum, hb, ← Algebra. commutes]
89+ simp_rw [← Finset.sum_mul, ← Finset.mul_sum, hb, ← commutes]
9890 _ = algebraMap R B (counit (a * b)) := by
9991 simp_rw [mul_assoc, ← Finset.mul_sum, ha, ← map_mul, mul_comm (counit b),
10092 ← Bialgebra.counit_mul]
@@ -109,7 +101,7 @@ variable (S₀) in
109101that is a two-sided convolution inverse of the identity pointwise on an algebra-generating
110102set. -/
111103noncomputable abbrev ofGenerators (S₀_one : S₀ 1 = 1 ) (S₀_mul : ∀ x y, S₀ (x * y) = S₀ y * S₀ x)
112- (adjoin_eq_top : Algebra. adjoin R s = ⊤)
104+ (adjoin_eq_top : adjoin R s = ⊤)
113105 (S₀_convMul_id : ∀ p ∈ s,
114106 (toConv S₀ * toConv (.id : A →ₗ[R] A)) p = (1 : WithConv (A →ₗ[R] A)) p)
115107 (id_convMul_S₀ : ∀ p ∈ s,
@@ -135,7 +127,7 @@ variable (S₀) in
135127/-- A unital antimultiplicative map that is a left convolution inverse of the identity on an
136128algebra-generating set is the antipode. -/
137129theorem eq_antipode_of_adjoin_eq_top (S₀_one : S₀ 1 = 1 )
138- (S₀_mul : ∀ x y, S₀ (x * y) = S₀ y * S₀ x) (adjoin_eq_top : Algebra. adjoin R s = ⊤)
130+ (S₀_mul : ∀ x y, S₀ (x * y) = S₀ y * S₀ x) (adjoin_eq_top : adjoin R s = ⊤)
139131 (S₀_convMul_id : ∀ p ∈ s,
140132 (toConv S₀ * toConv (.id : A →ₗ[R] A)) p = (1 : WithConv (A →ₗ[R] A)) p) :
141133 S₀ = antipode R :=
0 commit comments