Library UniMath.AlgebraicTheories.AlgebraicTheoryToMonoid

1. The construction of the monoid


Section AlgebraicTheoryToMonoid.

  Section Ob.

    Context (T : algebraic_theory).

    Definition algebraic_theory_to_monoid_ob : monoid.
    Proof.
      use make_monoid.
      - use make_setwithbinop.
        + exact (T 1).
        + intros a b.
          exact (a (λ _, b)).
      - use make_ismonoidop.
        + abstract (
            intros a b c;
            apply subst_subst
          ).
        + exists (var ( 0 : stn 1)).
          abstract (
            split;
            [ intro m;
              apply var_subst
            | intro m;
              refine (_ @ subst_var _ _);
              apply (maponpaths (subst m));
              apply funextfun;
              intro i;
              apply maponpaths;
              symmetry;
              apply (iscontr_uniqueness (iscontrstn1)) ]
          ).
    Defined.

  End Ob.

  Section Mor.

    Context {T T' : algebraic_theory}.
    Context (f : algebraic_theory_morphism T T').

    Lemma algebraic_theory_morphism_to_ismonoidfun
      : ismonoidfun (X := algebraic_theory_to_monoid_ob T) (Y := algebraic_theory_to_monoid_ob T') (f 1).
    Proof.
      use make_ismonoidfun.
      - intros s t.
        apply mor_subst.
      - apply mor_var.
    Qed.

    Definition algebraic_theory_morphism_to_monoidfun
      : monoidfun (algebraic_theory_to_monoid_ob T) (algebraic_theory_to_monoid_ob T')
      := make_monoidfun algebraic_theory_morphism_to_ismonoidfun.

  End Mor.

  Definition algebraic_theory_to_monoid_functor_data
    : functor_data algebraic_theory_cat monoid_category
    := make_functor_data (C' := monoid_category)
      algebraic_theory_to_monoid_ob
      (λ _ _, algebraic_theory_morphism_to_monoidfun).

  Lemma algebraic_theory_to_monoid_is_functor
    : is_functor algebraic_theory_to_monoid_functor_data.
  Proof.
    split.
    - intro T.
      now apply monoidfun_paths.
    - intros T T' T'' f f'.
      now apply monoidfun_paths.
  Qed.

  Definition algebraic_theory_to_monoid
    : algebraic_theory_cat monoid_category
    := make_functor
      algebraic_theory_to_monoid_functor_data
      algebraic_theory_to_monoid_is_functor.

End AlgebraicTheoryToMonoid.

2. The embedding into the Lawvere theory


Section Lawvere.

  Context (T : algebraic_theory).

  Definition algebraic_theory_monoid_category
    : setcategory
    := monoid_to_category (algebraic_theory_to_monoid T).

  Definition theory_monoid_to_lawvere
    : algebraic_theory_monoid_category (algebraic_theory_to_lawvere T : setcategory).
  Proof.
    use make_functor.
    - use make_functor_data.
      + intro t.
        exact 1.
      + intros t t' f i.
        exact f.
    - split.
      + abstract (
          intro t;
          apply funextfun;
          intro i;
          apply (maponpaths var);
          apply proofirrelevancecontr;
          apply iscontrstn1
        ).
      + abstract easy.
  Defined.

  Definition theory_monoid_to_lawvere_fully_faithful
    : fully_faithful theory_monoid_to_lawvere.
  Proof.
    intros t t'.
    use isweq_iso.
    - intro f.
      exact (f ( 0 : stn 1)).
    - abstract trivial.
    - abstract (
        intro f;
        apply funextfun;
        intro i;
        apply (maponpaths f);
        apply proofirrelevancecontr;
        apply iscontrstn1
      ).
  Defined.

End Lawvere.