Library UniMath.Induction.W.WtypesAsW

From axiomatic W-types to W-types as initial algebras.

Gianluca Amato, Marco Maggesi, Cosimo Perini Brogi 2019-2021.
It is a proof that the rules for W-types gives an initial agebra
Derived from the code in the GitHub repository https://github.com/HoTT/Archive/tree/master/LICS2012 , which accompanies the paper "_Inductive Types in Homotopy Type Theory_", by S. Awodey, N. Gambino and K. Sojakova.

Require Import UniMath.Foundations.All.
Require Import UniMath.MoreFoundations.PartA.
Require Import UniMath.Induction.W.Wtypes.
Require Import UniMath.Induction.W.Core.
Require Import UniMath.Induction.FunctorAlgebras_legacy.
Require Import UniMath.Induction.PolynomialFunctors.
Require Import UniMath.Induction.PolynomialAlgebras2Cells.
Require Import UniMath.CategoryTheory.Core.Functors.

Local Open Scope cat.
Local Notation "a ;; b" := (funcomp a b).

Section From_W_types_to_initiality.

Context {A: UU} {B: A UU} (W: Wtype A B).

We define the algebra associated to W

Notation P := (polynomial_functor A B).

Let s_W (c: P W) : W := w_sup (pr1 c) (pr2 c).

Definition w_algebra: algebra_ob P := w_carrier W ,, s_W.

Notation WW := (w_algebra).

We consider another algebra. For simplicity we first prove the claim for algebras in canonical form.

Section Towards_contractibility.

Context (EE: algebra_ob P).

Let E := alg_carrier P EE.

Let s_E := alg_map P EE.

The map j : W → E, which we will show to be an algebra map. It is defined by W-recursion, so we construct the eliminating term.

Let d_j (x : A) (u: B x W) (IH : B x E): E := s_E (x,, IH).

Let j (w: W): E := w_ind _ d_j w.

Construction of a homotopy sigma_j which is used to show that j is an algebra map.

Let sigma_j_flat : (c: P W), j (s_W c) = s_E (# P j c).
Proof.
  induction c as [x u].
  apply (w_beta (λ _ : W, E)).
Defined.

Let sigma_j_sharp : is_algebra_mor _ WW EE j.
Proof.
  apply funextfun.
  intro.
  apply sigma_j_flat.
Defined.

We introduce the evaluation morphism as the algebra map (j, sigma_j_sharp), which will be the center of the contraction.

Definition w_eval : algebra_mor _ WW EE := j ,, sigma_j_sharp.

Notation jj := (w_eval).

We now assume that to have a algebra map kk : WW → EE and we show that it is propositionally equal to jj For simplicity, we first prove this for algebra maps in canonical form.

Context (kk : algebra_mor _ WW EE).

Let k : W E := mor_from_algebra_mor P WW EE kk.

Let sigma_k : is_algebra_mor _ WW EE k := pr2 kk.

The homotopy associated to s_k

Let sigma_k_flat: (x: P W), k (s_W x) = s_E (# P k x).
Proof.
  apply toforallpaths.
  exact sigma_k.
Defined.

Construction of the homotopy from j to k by W-elimination

Let d_theta (x : A) (u : B x W) (IH : c: B x, j (u c) = k (u c))
  : j (w_sup x u) = k (w_sup x u).
Proof.
  assert (e_1 : j (w_sup x u) = s_E (x,, u ;; j)).
  {
    apply (sigma_j_flat (x,, u)).
  }
  assert (e_2 : s_E (x,, u ;; j) = s_E (x,, u ;; k)).
  {
    do 2 apply maponpaths.
    apply funextfun.
    exact IH.
  }
  assert (e_3 : s_E (x,, u ;; k) = k (w_sup x u)).
  {
    apply (! (sigma_k_flat (x,, u))).
  }
  exact ((e_1 @ e_2) @ e_3).
Defined.

The homotopy between j and k

Let theta : j ~ k := w_ind (λ w : W, j w = k w) d_theta.

Let theta_comp (x : A) (u : B x W)
  : theta (w_sup x u) = d_theta x u (λ y : B x, theta (u y))
  := w_beta (λ w : W, j w = k w) d_theta x u.

Verification that theta is a algebra map homotopy

Let s_theta : isalgmaphomotopy _ j sigma_j_flat k sigma_k_flat theta.
Proof.
  intro c.
  unfold homotcomp.
  apply hornRotation_rr.
  apply theta_comp.
Defined.

The path p : k = j associated to theta

Let p : j = k := funextfun _ _ theta.

The proof that p is an algebra 2-cell. This exploits the work on relating algebra map homotopies and algebra map 2-cells done earlier

Let s_p : isalg2cell _ jj kk p.
Proof.
  set (s_k_flat_sharp := funextfun _ _ sigma_k_flat).
  assert (e : sigma_k = s_k_flat_sharp).
  {
    apply homotinvweqweq0.
  }
  apply (transportb (λ u, isalg2cell _ jj (k ,, u) p) e).
  apply alghomotopytoalg2cell.
  exact s_theta.
Defined.

Proof that jj is propositionally equal to kk

Definition pq : jj = kk.
Proof.
  apply weqfromalg2celltoidalgmap.
  exact (p ,, s_p).
Defined.

End Towards_contractibility.

Proof of initiality of W

Lemma w_types_are_initial : is_initial WW.
Proof.
  intro EE.
  exists (w_eval EE).
  intro kk.
  apply (! (pq EE kk)).
Defined.

End From_W_types_to_initiality.

Theorem Wtype_is_W {A: UU} {B: A UU} (W': Wtype A B) : W B.
Proof.
  exists (w_algebra W').
  apply w_types_are_initial.
Defined.