|
| 1 | +/- |
| 2 | +Copyright (c) 2026 Robert Hawkins. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Robert Hawkins |
| 5 | +-/ |
| 6 | +module |
| 7 | + |
| 8 | +public import Mathlib.RingTheory.Bialgebra.Convolution |
| 9 | +public import Mathlib.RingTheory.HopfAlgebra.Basic |
| 10 | + |
| 11 | +/-! |
| 12 | +# Constructing Hopf algebras from algebra generators |
| 13 | +
|
| 14 | +This file provides constructors for Hopf algebras given antimultiplicative |
| 15 | +antipode data on an algebra-generating set. |
| 16 | +
|
| 17 | +## Main declarations |
| 18 | +
|
| 19 | +* `HopfAlgebra.ofGenerators` : construct a Hopf algebra from data on a generating set. |
| 20 | +* `HopfAlgebra.convMul_id_eq_one_of_adjoin_eq_top` and `id_convMul_eq_one_of_adjoin_eq_top`: |
| 21 | + the extension principle promoting a pointwise convolution inverse on generators to a global |
| 22 | + identity. |
| 23 | +-/ |
| 24 | + |
| 25 | +public section |
| 26 | + |
| 27 | +namespace HopfAlgebra |
| 28 | + |
| 29 | +open Coalgebra LinearMap WithConv |
| 30 | + |
| 31 | +variable {R A : Type*} [CommSemiring R] |
| 32 | + |
| 33 | +section ExtensionPrinciple |
| 34 | + |
| 35 | +/-! ### Extension principle from algebra generators -/ |
| 36 | + |
| 37 | +variable [Semiring A] [Bialgebra R A] {S₀ : A →ₗ[R] A} {s : Set A} |
| 38 | + |
| 39 | +/-- If a unital antimultiplicative map `S₀` satisfies `toConv S₀ * toConv .id = 1` pointwise |
| 40 | +on an algebra-generating set, then it does so globally. -/ |
| 41 | +theorem convMul_id_eq_one_of_adjoin_eq_top (S₀_one : S₀ 1 = 1) |
| 42 | + (S₀_mul : ∀ x y : A, S₀ (x * y) = S₀ y * S₀ x) |
| 43 | + (adjoin_eq_top : Algebra.adjoin R s = ⊤) |
| 44 | + (S₀_convMul_id : ∀ p ∈ s, |
| 45 | + (toConv S₀ * toConv (.id : A →ₗ[R] A)) p = (1 : WithConv (A →ₗ[R] A)) p) : |
| 46 | + toConv S₀ * toConv .id = 1 := by |
| 47 | + refine WithConv.ext (ext fun x => ?_) |
| 48 | + refine Algebra.adjoin_induction S₀_convMul_id |
| 49 | + (fun r => by simp [S₀_one, Algebra.algebraMap_eq_smul_one, Algebra.TensorProduct.one_def]) |
| 50 | + (fun a b _ _ ha hb => by simp [map_add, ha, hb]) |
| 51 | + (fun a b _ _ ha hb => ?_) (adjoin_eq_top ▸ Algebra.mem_top : x ∈ Algebra.adjoin R s) |
| 52 | + let 𝓡a := ℛ R a; let 𝓡b := ℛ R b |
| 53 | + simp only [𝓡a.convMul_apply, 𝓡b.convMul_apply, id_apply, convOne_apply] at ha hb |
| 54 | + rw [convOne_apply] |
| 55 | + calc (toConv S₀ * toConv (.id : A →ₗ[R] A)) (a * b) |
| 56 | + _ = ∑ p ∈ 𝓡a.index, ∑ q ∈ 𝓡b.index, |
| 57 | + S₀ (𝓡a.left p * 𝓡b.left q) * (𝓡a.right p * 𝓡b.right q) := by |
| 58 | + simp [← 𝓡a.eq, ← 𝓡b.eq, Finset.sum_mul_sum] |
| 59 | + _ = ∑ p ∈ 𝓡a.index, ∑ q ∈ 𝓡b.index, |
| 60 | + S₀ (𝓡b.left q) * (S₀ (𝓡a.left p) * 𝓡a.right p) * 𝓡b.right q := by |
| 61 | + simp_rw [S₀_mul, mul_assoc] |
| 62 | + _ = ∑ q ∈ 𝓡b.index, algebraMap R A (counit a) * S₀ (𝓡b.left q) * 𝓡b.right q := by |
| 63 | + rw [Finset.sum_comm]; simp_rw [← Finset.sum_mul, ← Finset.mul_sum, ha, ← Algebra.commutes] |
| 64 | + _ = algebraMap R A (counit (a * b)) := by |
| 65 | + simp_rw [mul_assoc, ← Finset.mul_sum, hb, ← map_mul, ← Bialgebra.counit_mul] |
| 66 | + |
| 67 | +/-- Analogue of `convMul_id_eq_one_of_adjoin_eq_top` for `toConv .id * toConv S₀ = 1`. -/ |
| 68 | +theorem id_convMul_eq_one_of_adjoin_eq_top (S₀_one : S₀ 1 = 1) |
| 69 | + (S₀_mul : ∀ x y : A, S₀ (x * y) = S₀ y * S₀ x) |
| 70 | + (adjoin_eq_top : Algebra.adjoin R s = ⊤) |
| 71 | + (id_convMul_S₀ : ∀ p ∈ s, |
| 72 | + (toConv (.id : A →ₗ[R] A) * toConv S₀) p = (1 : WithConv (A →ₗ[R] A)) p) : |
| 73 | + toConv .id * toConv S₀ = 1 := by |
| 74 | + refine WithConv.ext (ext fun x => ?_) |
| 75 | + refine Algebra.adjoin_induction id_convMul_S₀ |
| 76 | + (fun r => by simp [S₀_one, Algebra.algebraMap_eq_smul_one, Algebra.TensorProduct.one_def]) |
| 77 | + (fun a b _ _ ha hb => by simp [map_add, ha, hb]) |
| 78 | + (fun a b _ _ ha hb => ?_) (adjoin_eq_top ▸ Algebra.mem_top : x ∈ Algebra.adjoin R s) |
| 79 | + let 𝓡a := ℛ R a; let 𝓡b := ℛ R b |
| 80 | + simp only [𝓡a.convMul_apply, 𝓡b.convMul_apply, id_apply, convOne_apply] at ha hb |
| 81 | + rw [convOne_apply] |
| 82 | + calc (toConv (.id : A →ₗ[R] A) * toConv S₀) (a * b) |
| 83 | + _ = ∑ p ∈ 𝓡a.index, ∑ q ∈ 𝓡b.index, |
| 84 | + (𝓡a.left p * 𝓡b.left q) * S₀ (𝓡a.right p * 𝓡b.right q) := by |
| 85 | + simp [← 𝓡a.eq, ← 𝓡b.eq, Finset.sum_mul_sum] |
| 86 | + _ = ∑ p ∈ 𝓡a.index, ∑ q ∈ 𝓡b.index, |
| 87 | + 𝓡a.left p * (𝓡b.left q * S₀ (𝓡b.right q)) * S₀ (𝓡a.right p) := by |
| 88 | + simp_rw [S₀_mul, mul_assoc] |
| 89 | + _ = ∑ p ∈ 𝓡a.index, |
| 90 | + algebraMap R A (counit b) * 𝓡a.left p * S₀ (𝓡a.right p) := by |
| 91 | + simp_rw [← Finset.sum_mul, ← Finset.mul_sum, hb, ← Algebra.commutes] |
| 92 | + _ = algebraMap R A (counit (a * b)) := by |
| 93 | + simp_rw [mul_assoc, ← Finset.mul_sum, ha, ← map_mul, mul_comm (counit b), |
| 94 | + ← Bialgebra.counit_mul] |
| 95 | + |
| 96 | +variable (S₀) in |
| 97 | +/-- Upgrade a bialgebra to a Hopf algebra from a unital antimultiplicative candidate antipode |
| 98 | +that is a two-sided convolution inverse of the identity pointwise on an algebra-generating |
| 99 | +set. -/ |
| 100 | +noncomputable abbrev ofGenerators (S₀_one : S₀ 1 = 1) |
| 101 | + (S₀_mul : ∀ x y : A, S₀ (x * y) = S₀ y * S₀ x) |
| 102 | + (adjoin_eq_top : Algebra.adjoin R s = ⊤) |
| 103 | + (S₀_convMul_id : ∀ p ∈ s, |
| 104 | + (toConv S₀ * toConv (.id : A →ₗ[R] A)) p = (1 : WithConv (A →ₗ[R] A)) p) |
| 105 | + (id_convMul_S₀ : ∀ p ∈ s, |
| 106 | + (toConv (.id : A →ₗ[R] A) * toConv S₀) p = (1 : WithConv (A →ₗ[R] A)) p) : |
| 107 | + HopfAlgebra R A := |
| 108 | + ofConvInverse S₀ |
| 109 | + (convMul_id_eq_one_of_adjoin_eq_top S₀_one S₀_mul adjoin_eq_top S₀_convMul_id) |
| 110 | + (id_convMul_eq_one_of_adjoin_eq_top S₀_one S₀_mul adjoin_eq_top id_convMul_S₀) |
| 111 | + |
| 112 | +end ExtensionPrinciple |
| 113 | + |
| 114 | +end HopfAlgebra |
0 commit comments