Library UniMath.AlgebraicTheories.Examples.Plus1Presheaf

1. The definition of the plus 1 presheaf


Definition plus_1_presheaf_data
  {T : algebraic_theory}
  (P : presheaf T)
  : presheaf_data T.
Proof.
  use make_presheaf_data.
  - exact (λ n, P (1 + n)).
  - intros m n s t.
    refine (op (T := T) (P := P) s _).
    intro i.
    induction (invmap stnweq i) as [i' | i'].
    + refine (t i' (λ j, var (stnweq (inl j)))).
    + exact (var (stnweq (inr i'))).
Defined.

Lemma plus_1_is_presheaf
  {T : algebraic_theory}
  (P : presheaf T)
  : is_presheaf (plus_1_presheaf_data P).
Proof.
  use make_is_presheaf.
  - intros l m n x f g.
    refine (op_op P x _ _ @ _).
    apply (maponpaths (op (x : P _))).
    apply funextfun.
    intro i.
    induction (invmap stnweq i) as [i' | i'].
    + refine (subst_subst T (f i') _ _ @ !_).
      refine (subst_subst T (f i') g _ @ !_).
      apply maponpaths.
      apply funextfun.
      intro.
      refine (var_subst _ _ _ @ _).
      exact (maponpaths _ (homotinvweqweq stnweq _)).
    + refine (var_subst _ _ _ @ _).
      exact (maponpaths _ (homotinvweqweq stnweq _)).
  - intros n x.
    refine (_ @ op_var _ _).
    apply (maponpaths (op (x : P _))).
    apply funextfun.
    intro i.
    refine (_ @ maponpaths _ (homotweqinvweq stnweq i)).
    induction (invmap stnweq i) as [i' | i'].
    + apply var_subst.
    + apply idpath.
Qed.

Definition plus_1_presheaf
  {T : algebraic_theory}
  (P : presheaf T)
: presheaf T
:= make_presheaf _ (plus_1_is_presheaf P).