|
| 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.Basic |
| 9 | +public import Mathlib.RingTheory.Bialgebra.Primitive |
| 10 | +public import Mathlib.RingTheory.Coalgebra.Graded |
| 11 | +public import Mathlib.RingTheory.GradedAlgebra.Basic |
| 12 | + |
| 13 | +/-! |
| 14 | +# Graded bialgebras |
| 15 | +
|
| 16 | +Structural lemmas about graded connected bialgebras. |
| 17 | +
|
| 18 | +## References |
| 19 | +
|
| 20 | +* [Grinberg, D. and Reiner, V., *Hopf Algebras in Combinatorics*][grinberg-reiner-2020], |
| 21 | + Exercise 1.3.20(h) and the proof of Proposition 1.4.16. |
| 22 | +-/ |
| 23 | + |
| 24 | +@[expose] public section |
| 25 | + |
| 26 | +/-! ### Connectedness of a graded algebra -/ |
| 27 | + |
| 28 | +/-- A graded algebra is *connected* (in the Hopf-algebra sense) if its degree-zero part is |
| 29 | +spanned by the unit element `1 : A`. -/ |
| 30 | +class Coalgebra.IsConnected {R A : Type*} [CommSemiring R] [Semiring A] [Algebra R A] |
| 31 | + {ι : Type*} [DecidableEq ι] [AddMonoid ι] (𝒜 : ι → Submodule R A) : Prop where |
| 32 | + /-- The degree-zero part is the `R`-span of `1`. -/ |
| 33 | + eq_span_one : 𝒜 0 = Submodule.span R {(1 : A)} |
| 34 | + |
| 35 | +namespace Coalgebra.IsConnected |
| 36 | + |
| 37 | +variable {R A : Type*} [CommSemiring R] [Ring A] [Bialgebra R A] |
| 38 | +variable (𝒜 : ℕ → Submodule R A) [Coalgebra.IsConnected 𝒜] |
| 39 | + |
| 40 | +open Coalgebra TensorProduct |
| 41 | + |
| 42 | +/-- Every element of the degree-zero part equals its counit times the unit. -/ |
| 43 | +theorem coe_eq_counit_smul_one {a : A} (ha : a ∈ 𝒜 0) : a = counit (R := R) a • 1 := by |
| 44 | + obtain ⟨r, rfl⟩ := Submodule.mem_span_singleton.mp (eq_span_one (𝒜 := 𝒜) ▸ ha) |
| 45 | + simp [Bialgebra.counit_one] |
| 46 | + |
| 47 | +/-- The degree-zero submodule of a connected graded bialgebra is canonically isomorphic to |
| 48 | +the base ring via the counit. -/ |
| 49 | +noncomputable def zeroLEquiv : 𝒜 0 ≃ₗ[R] R where |
| 50 | + toFun a := counit (a : A) |
| 51 | + map_add' _ _ := by simp |
| 52 | + map_smul' _ _ := by simp |
| 53 | + invFun r := ⟨r • 1, eq_span_one (𝒜 := 𝒜) ▸ Submodule.smul_mem _ r (Submodule.subset_span rfl)⟩ |
| 54 | + left_inv := fun ⟨a, ha⟩ => Subtype.ext (coe_eq_counit_smul_one 𝒜 ha).symm |
| 55 | + right_inv _ := by simp [Bialgebra.counit_one] |
| 56 | + |
| 57 | +@[simp] |
| 58 | +theorem zeroLEquiv_apply (a : 𝒜 0) : zeroLEquiv 𝒜 a = counit (a : A) := rfl |
| 59 | + |
| 60 | +@[simp] |
| 61 | +theorem zeroLEquiv_symm_apply_coe (r : R) : ((zeroLEquiv 𝒜).symm r : A) = r • 1 := rfl |
| 62 | + |
| 63 | +end Coalgebra.IsConnected |
| 64 | + |
| 65 | +namespace Bialgebra |
| 66 | + |
| 67 | +variable {R A : Type*} [CommSemiring R] [Ring A] [Bialgebra R A] |
| 68 | +variable (𝒜 : ℕ → Submodule R A) |
| 69 | + |
| 70 | +open Coalgebra DirectSum LinearMap TensorProduct |
| 71 | + |
| 72 | +/-- A linear map on `A ⊗[R] A` that carries each pure tensor of the bigraded part into a |
| 73 | +submodule `S` carries the whole `⨆_{p+q=n} 𝒜 p ⊗ 𝒜 q` into `S`. -/ |
| 74 | +theorem apply_mem_of_mem_bigradedPart {M : Type*} [AddCommMonoid M] [Module R M] |
| 75 | + (f : A ⊗[R] A →ₗ[R] M) (S : Submodule R M) {n : ℕ} |
| 76 | + (h : ∀ {p q : ℕ}, p + q = n → ∀ (a : 𝒜 p) (b : 𝒜 q), f ((a : A) ⊗ₜ[R] (b : A)) ∈ S) |
| 77 | + {z : A ⊗[R] A} |
| 78 | + (hz : z ∈ ⨆ p, ⨆ q, ⨆ (_ : p + q = n), |
| 79 | + LinearMap.range (TensorProduct.map (𝒜 p).subtype (𝒜 q).subtype)) : |
| 80 | + f z ∈ S := by |
| 81 | + refine Submodule.mem_comap.mp <| |
| 82 | + (show (⨆ p, ⨆ q, ⨆ (_ : p + q = n), |
| 83 | + LinearMap.range (TensorProduct.map (𝒜 p).subtype (𝒜 q).subtype)) ≤ |
| 84 | + Submodule.comap f S from ?_) hz |
| 85 | + refine iSup_le fun p => iSup_le fun q => iSup_le fun hpq => ?_ |
| 86 | + rw [LinearMap.range_le_iff_comap, Submodule.eq_top_iff'] |
| 87 | + intro w |
| 88 | + simp only [Submodule.mem_comap] |
| 89 | + induction w using TensorProduct.induction_on with |
| 90 | + | zero => simp |
| 91 | + | tmul a b => exact h hpq a b |
| 92 | + | add y₁ y₂ ih₁ ih₂ => simp only [map_add]; exact add_mem ih₁ ih₂ |
| 93 | + |
| 94 | +variable [GradedAlgebra 𝒜] [GradedCoalgebra 𝒜] |
| 95 | + |
| 96 | +/-- The counit factors through the degree-zero projection. -/ |
| 97 | +theorem counit_eq_counit_comp_projZero (a : A) : |
| 98 | + counit (R := R) a = counit (GradedAlgebra.proj 𝒜 0 a) := by |
| 99 | + classical |
| 100 | + rw [GradedAlgebra.proj_apply] |
| 101 | + conv_lhs => rw [← DirectSum.sum_support_decompose 𝒜 a, map_sum] |
| 102 | + exact Finset.sum_eq_single 0 |
| 103 | + (fun i _ hi => GradedCoalgebra.counit_eq_zero_of_ne_zero hi (DirectSum.decompose 𝒜 a i).2) |
| 104 | + (fun h => by simp [DFinsupp.notMem_support_iff.mp h]) |
| 105 | + |
| 106 | +variable [Coalgebra.IsConnected 𝒜] |
| 107 | + |
| 108 | +/-- Under connectedness, the degree-zero projection equals `algebraMap ∘ counit`. -/ |
| 109 | +theorem proj_zero_eq_algebraMap_comp_counit : |
| 110 | + (GradedAlgebra.proj 𝒜 0 : A →ₗ[R] A) = Algebra.linearMap R A ∘ₗ counit := by |
| 111 | + ext x |
| 112 | + have hmem : GradedAlgebra.proj 𝒜 0 x ∈ 𝒜 0 := by |
| 113 | + rw [GradedAlgebra.proj_apply]; exact SetLike.coe_mem _ |
| 114 | + rw [LinearMap.comp_apply, Algebra.linearMap_apply, |
| 115 | + Coalgebra.IsConnected.coe_eq_counit_smul_one 𝒜 hmem, |
| 116 | + ← counit_eq_counit_comp_projZero, ← Algebra.algebraMap_eq_smul_one] |
| 117 | + |
| 118 | +/-- Applying `id ⊗ q_0` to `Δ(x)` gives `x ⊗ 1`, where `q_0 = GradedAlgebra.proj 𝒜 0`. -/ |
| 119 | +@[simp] |
| 120 | +theorem lTensor_projZero_comul (x : A) : |
| 121 | + (LinearMap.lTensor A (GradedAlgebra.proj 𝒜 0)) (comul x) = x ⊗ₜ[R] (1 : A) := by |
| 122 | + rw [proj_zero_eq_algebraMap_comp_counit, LinearMap.lTensor_comp_apply, |
| 123 | + Coalgebra.lTensor_counit_comul] |
| 124 | + simp |
| 125 | + |
| 126 | +/-- Applying `q_0 ⊗ id` to `Δ(x)` gives `1 ⊗ x`, where `q_0 = GradedAlgebra.proj 𝒜 0`. -/ |
| 127 | +@[simp] |
| 128 | +theorem rTensor_projZero_comul (x : A) : |
| 129 | + (LinearMap.rTensor A (GradedAlgebra.proj 𝒜 0)) (comul x) = (1 : A) ⊗ₜ[R] x := by |
| 130 | + rw [proj_zero_eq_algebraMap_comp_counit, LinearMap.rTensor_comp_apply, |
| 131 | + Coalgebra.rTensor_counit_comul] |
| 132 | + simp |
| 133 | + |
| 134 | +/-- In a connected graded bialgebra, every homogeneous element of degree 1 is primitive. -/ |
| 135 | +theorem isPrimitiveElem_of_mem_one {x : A} (hx : x ∈ 𝒜 1) : IsPrimitiveElem R x where |
| 136 | + counit_eq_zero := GradedCoalgebra.counit_eq_zero_of_ne_zero one_ne_zero hx |
| 137 | + comul_eq_tmul_one_add_one_tmul := by |
| 138 | + classical |
| 139 | + have hL : ((LinearMap.id - LinearMap.lTensor A (GradedAlgebra.proj 𝒜 0) - |
| 140 | + LinearMap.rTensor A (GradedAlgebra.proj 𝒜 0) : |
| 141 | + A ⊗[R] A →ₗ[R] A ⊗[R] A)) (comul x) = 0 := by |
| 142 | + refine (Submodule.mem_bot R).mp <| apply_mem_of_mem_bigradedPart 𝒜 _ ⊥ |
| 143 | + (fun {p q} hpq a b => (Submodule.mem_bot R).mpr ?_) (GradedCoalgebra.comul_mem hx) |
| 144 | + simp only [LinearMap.sub_apply, LinearMap.id_coe, id_eq, |
| 145 | + LinearMap.lTensor_tmul, LinearMap.rTensor_tmul] |
| 146 | + obtain ⟨rfl, rfl⟩ | ⟨rfl, rfl⟩ : p = 0 ∧ q = 1 ∨ p = 1 ∧ q = 0 := by omega |
| 147 | + · rw [show GradedAlgebra.proj 𝒜 0 (a : A) = a from |
| 148 | + DirectSum.decompose_of_mem_same _ a.2, |
| 149 | + show GradedAlgebra.proj 𝒜 0 (b : A) = 0 from |
| 150 | + DirectSum.decompose_of_mem_ne _ b.2 one_ne_zero, |
| 151 | + TensorProduct.tmul_zero, sub_zero, sub_self] |
| 152 | + · rw [show GradedAlgebra.proj 𝒜 0 (a : A) = 0 from |
| 153 | + DirectSum.decompose_of_mem_ne _ a.2 one_ne_zero, |
| 154 | + show GradedAlgebra.proj 𝒜 0 (b : A) = b from |
| 155 | + DirectSum.decompose_of_mem_same _ b.2, |
| 156 | + TensorProduct.zero_tmul, sub_zero, sub_self] |
| 157 | + simp only [LinearMap.sub_apply, LinearMap.id_coe, id_eq] at hL |
| 158 | + rw [sub_sub, sub_eq_zero, lTensor_projZero_comul, rTensor_projZero_comul] at hL |
| 159 | + exact hL |
| 160 | + |
| 161 | +/-- For `x ∈ 𝒜 n`, `Δ(x) - x ⊗ 1` lies in the part of `A ⊗ A` whose left tensor factor has degree |
| 162 | +strictly less than `n`. -/ |
| 163 | +theorem comul_sub_tmul_one_mem_lower {n : ℕ} {x : A} (hx : x ∈ 𝒜 n) : |
| 164 | + comul x - x ⊗ₜ[R] (1 : A) ∈ |
| 165 | + ⨆ p : ℕ, ⨆ q : ℕ, ⨆ (_ : p + q = n), ⨆ (_ : p < n), |
| 166 | + LinearMap.range (TensorProduct.map (𝒜 p).subtype (𝒜 q).subtype) := by |
| 167 | + classical |
| 168 | + rw [show comul x - x ⊗ₜ[R] (1 : A) = |
| 169 | + ((LinearMap.id - LinearMap.lTensor A (GradedAlgebra.proj 𝒜 0) : |
| 170 | + A ⊗[R] A →ₗ[R] A ⊗[R] A)) (comul x) from by simp] |
| 171 | + refine apply_mem_of_mem_bigradedPart 𝒜 _ _ (fun {p q} hpq a b => ?_) |
| 172 | + (GradedCoalgebra.comul_mem hx) |
| 173 | + simp only [LinearMap.sub_apply, LinearMap.id_coe, id_eq, LinearMap.lTensor_tmul] |
| 174 | + rcases Nat.eq_zero_or_pos q with rfl | hq |
| 175 | + · simp |
| 176 | + · have hqb : GradedAlgebra.proj 𝒜 0 (b : A) = 0 := |
| 177 | + DirectSum.decompose_of_mem_ne _ b.2 (Nat.pos_iff_ne_zero.mp hq) |
| 178 | + rw [hqb, TensorProduct.tmul_zero, sub_zero] |
| 179 | + exact Submodule.mem_iSup_of_mem p <| Submodule.mem_iSup_of_mem q <| |
| 180 | + Submodule.mem_iSup_of_mem hpq <| Submodule.mem_iSup_of_mem (by omega) |
| 181 | + ⟨a ⊗ₜ[R] b, by simp⟩ |
| 182 | + |
| 183 | +end Bialgebra |
0 commit comments