Documentation

Mathlib.RingTheory.Bialgebra.Basic

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 R A, Coalgebra R A :
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.

Instances
    @[simp]
    theorem Bialgebra.counit_mul {R : Type u} {A : Type v} [CommSemiring R] [Semiring A] [Bialgebra R A] (a b : A) :
    CoalgebraStruct.counit (a * b) = CoalgebraStruct.counit a * CoalgebraStruct.counit b
    @[simp]
    theorem Bialgebra.comul_mul {R : Type u} {A : Type v} [CommSemiring R] [Semiring A] [Bialgebra R A] (a b : A) :
    CoalgebraStruct.comul (a * b) = CoalgebraStruct.comul a * CoalgebraStruct.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 : CoalgebraStruct.counit 1 = 1) (counit_mul : ∀ {a b : A}, CoalgebraStruct.counit (a * b) = CoalgebraStruct.counit a * CoalgebraStruct.counit b) (comul_one : CoalgebraStruct.comul 1 = 1) (comul_mul : ∀ {a b : A}, CoalgebraStruct.comul (a * b) = CoalgebraStruct.comul a * CoalgebraStruct.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
    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 = CoalgebraStruct.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 = CoalgebraStruct.comul a
          @[simp]
          theorem Bialgebra.counit_algebraMap {R : Type u} {A : Type v} [CommSemiring R] [Semiring A] [Bialgebra R A] (r : R) :
          CoalgebraStruct.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) :
          CoalgebraStruct.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 : ) :
          CoalgebraStruct.counit n = n
          @[simp]
          theorem Bialgebra.comul_natCast {R : Type u} {A : Type v} [CommSemiring R] [Semiring A] [Bialgebra R A] (n : ) :
          CoalgebraStruct.comul n = n
          @[simp]
          theorem Bialgebra.counit_pow {R : Type u} {A : Type v} [CommSemiring R] [Semiring A] [Bialgebra R A] (a : A) (n : ) :
          CoalgebraStruct.counit (a ^ n) = CoalgebraStruct.counit a ^ n
          @[simp]
          theorem Bialgebra.comul_pow {R : Type u} {A : Type v} [CommSemiring R] [Semiring A] [Bialgebra R A] (a : A) (n : ) :
          CoalgebraStruct.comul (a ^ n) = CoalgebraStruct.comul a ^ n
          noncomputable instance CommSemiring.toBialgebra (R : Type u) [CommSemiring R] :

          Every commutative (semi)ring is a bialgebra over itself

          Equations