Documentation

Mathlib.RingTheory.Bialgebra

Bialgebras #

In this file we define Bialgebras.

Main definitions #

Implementation notes #

Rather than the "obvious" axiom ∀ a b, counit (a * b) = counit a * counit b, the far more convoluted mul_compr₂_counit is used as a structure field; this says that the corresponding two maps A →ₗ[R] A →ₗ[R] R are equal; a similar trick is used for comultiplication as well. An alternative constructor Bialgebra.mk' is provided with the more easily-readable axioms. The argument for using the more convoluted axioms is that in practice there is evidence that they will be easier to prove (especially when dealing with things like tensor products of bialgebras). This does make the definition more surprising to mathematicians, however mathlib is no stranger to definitions which are surprising to mathematicians -- see for example its definition of a group. Note that this design decision is also compatible with that of Coalgebra. The lengthy docstring for these convoluted fields attempts to explain what is going on.

References #

Tags #

bialgebra

class Bialgebra (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] extends Algebra , Coalgebra :
Type (max u v)

A bialgebra over a commutative (semi)ring R is both an algebra and a coalgebra over R, such that the counit and comultiplication are algebra morphisms.

  • smul : RAA
  • toFun : RA
  • map_one' : (Algebra.toRingHom).toFun 1 = 1
  • map_mul' : ∀ (x y : R), (Algebra.toRingHom).toFun (x * y) = (Algebra.toRingHom).toFun x * (Algebra.toRingHom).toFun y
  • map_zero' : (Algebra.toRingHom).toFun 0 = 0
  • map_add' : ∀ (x y : R), (Algebra.toRingHom).toFun (x + y) = (Algebra.toRingHom).toFun x + (Algebra.toRingHom).toFun y
  • commutes' : ∀ (r : R) (x : A), Algebra.toRingHom r * x = x * Algebra.toRingHom r
  • smul_def' : ∀ (r : R) (x : A), r x = Algebra.toRingHom r * x
  • comul : A →ₗ[R] TensorProduct R A A
  • counit : A →ₗ[R] R
  • coassoc : (TensorProduct.assoc R A A A) ∘ₗ LinearMap.rTensor A Coalgebra.comul ∘ₗ Coalgebra.comul = LinearMap.lTensor A Coalgebra.comul ∘ₗ Coalgebra.comul
  • rTensor_counit_comp_comul : LinearMap.rTensor A Coalgebra.counit ∘ₗ Coalgebra.comul = (TensorProduct.mk R R A) 1
  • lTensor_counit_comp_comul : LinearMap.lTensor A Coalgebra.counit ∘ₗ Coalgebra.comul = (LinearMap.flip (TensorProduct.mk R A R)) 1
  • counit_one : Coalgebra.counit 1 = 1

    The counit on a bialgebra preserves 1.

  • mul_compr₂_counit : LinearMap.compr₂ (LinearMap.mul R A) Coalgebra.counit = LinearMap.compl₁₂ (LinearMap.mul R R) Coalgebra.counit Coalgebra.counit

    The counit on a bialgebra preserves multiplication. Note that this is written in a rather obscure way: it says that two bilinear maps A →ₗ[R] A →ₗ[R] are equal. The two corresponding equal linear maps A ⊗[R] A →ₗ[R] are the following: the first factors through A and is multiplication on A followed by counit. The second factors through R ⊗[R] R, and is counit ⊗ counit followed by multiplication on R.

    See Bialgebra.mk' for a constructor for bialgebras which uses the more familiar but mathematically equivalent counit (a * b) = counit a * counit b.

  • comul_one : Coalgebra.comul 1 = 1

    The comultiplication on a bialgebra preserves 1.

  • mul_compr₂_comul : LinearMap.compr₂ (LinearMap.mul R A) Coalgebra.comul = LinearMap.compl₁₂ (LinearMap.mul R (TensorProduct R A A)) Coalgebra.comul Coalgebra.comul

    The comultiplication on a bialgebra preserves multiplication. This is written in a rather obscure way: it says that two bilinear maps A →ₗ[R] A →ₗ[R] (A ⊗[R] A) are equal. The corresponding equal linear maps A ⊗[R] A →ₗ[R] A ⊗[R] A are firstly multiplcation followed by comul, and secondly comul ⊗ comul followed by multiplication on A ⊗[R] A.

    See Bialgebra.mk' for a constructor for bialgebras which uses the more familiar but mathematically equivalent comul (a * b) = comul a * comul b.

Instances
    @[simp]
    theorem Bialgebra.counit_mul {R : Type u} {A : Type v} [CommSemiring R] [Semiring A] [Bialgebra R A] (a : A) (b : A) :
    Coalgebra.counit (a * b) = Coalgebra.counit a * Coalgebra.counit b
    @[simp]
    theorem Bialgebra.comul_mul {R : Type u} {A : Type v} [CommSemiring R] [Semiring A] [Bialgebra R A] (a : A) (b : A) :
    Coalgebra.comul (a * b) = Coalgebra.comul a * Coalgebra.comul b
    noncomputable def Bialgebra.mk' (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] [Algebra R A] [C : Coalgebra R A] (counit_one : Coalgebra.counit 1 = 1) (counit_mul : ∀ {a b : A}, Coalgebra.counit (a * b) = Coalgebra.counit a * Coalgebra.counit b) (comul_one : Coalgebra.comul 1 = 1) (comul_mul : ∀ {a b : A}, Coalgebra.comul (a * b) = Coalgebra.comul a * Coalgebra.comul b) :

    If R is a field (or even a commutative semiring) and A is an R-algebra with a coalgebra structure, then Bialgebra.mk' consumes proofs that the counit and comultiplication preserve the identity and multiplication, and produces a bialgebra structure on A.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      noncomputable def Bialgebra.counitAlgHom (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] [Bialgebra R A] :

      counitAlgHom R A is the counit of the R-bialgebra A, as an R-algebra map.

      Equations
      Instances For
        @[simp]
        theorem Bialgebra.counitAlgHom_apply (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] [Bialgebra R A] (a : A) :
        (Bialgebra.counitAlgHom R A) a = Coalgebra.counit a
        noncomputable def Bialgebra.comulAlgHom (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] [Bialgebra R A] :

        comulAlgHom R A is the comultiplication of the R-bialgebra A, as an R-algebra map.

        Equations
        Instances For
          @[simp]
          theorem Bialgebra.comulAlgHom_apply (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] [Bialgebra R A] (a : A) :
          (Bialgebra.comulAlgHom R A) a = Coalgebra.comul a
          @[simp]
          theorem Bialgebra.counit_algebraMap {R : Type u} {A : Type v} [CommSemiring R] [Semiring A] [Bialgebra R A] (r : R) :
          Coalgebra.counit ((algebraMap R A) r) = r
          @[simp]
          theorem Bialgebra.comul_algebraMap {R : Type u} {A : Type v} [CommSemiring R] [Semiring A] [Bialgebra R A] (r : R) :
          Coalgebra.comul ((algebraMap R A) r) = (algebraMap R (TensorProduct R A A)) r
          @[simp]
          theorem Bialgebra.counit_natCast {R : Type u} {A : Type v} [CommSemiring R] [Semiring A] [Bialgebra R A] (n : ) :
          Coalgebra.counit n = n
          @[simp]
          theorem Bialgebra.comul_natCast {R : Type u} {A : Type v} [CommSemiring R] [Semiring A] [Bialgebra R A] (n : ) :
          Coalgebra.comul n = n
          @[simp]
          theorem Bialgebra.counit_pow {R : Type u} {A : Type v} [CommSemiring R] [Semiring A] [Bialgebra R A] (a : A) (n : ) :
          Coalgebra.counit (a ^ n) = Coalgebra.counit a ^ n
          @[simp]
          theorem Bialgebra.comul_pow {R : Type u} {A : Type v} [CommSemiring R] [Semiring A] [Bialgebra R A] (a : A) (n : ) :
          Coalgebra.comul (a ^ n) = Coalgebra.comul a ^ n
          noncomputable instance CommSemiring.toBialgebra (R : Type u) [CommSemiring R] :

          Every commutative (semi)ring is a bialgebra over itself

          Equations
          • One or more equations did not get rendered due to their size.