Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Types.Forall Types.Sigma.(** * Theorems about W-types (well-founded trees) *)InductiveW (A : Type) (B : A -> Type) : Type :=
w_sup (x : A) : (B x -> W A B) -> W A B.Definitionw_label {AB} (w : W A B) : A :=
match w with
| w_sup x y => x
end.Definitionw_arg {AB} (w : W A B) : B (w_label w) -> W A B :=
match w with
| w_sup x y => y
end.Definitionissig_W (A : Type) (B : A -> Type)
: _ <~> W A B := ltac:(issig).(** ** Paths *)Definitionequiv_path_wtype {AB} (zz' : W A B)
: (w_label z;w_arg z) = (w_label z';w_arg z') :> {a : _ & B a -> W A B} <~> z = z'
:= (equiv_ap' (issig_W A B)^-1%equiv z z')^-1%equiv.
A: Type B: A -> Type z, z': W A B
{p : w_label z = w_label z' &
w_arg z = w_arg z' o transport B p} <~> z = z'
A: Type B: A -> Type z, z': W A B
{p : w_label z = w_label z' &
w_arg z = w_arg z' o transport B p} <~> z = z'
A: Type B: A -> Type z, z': W A B
{p : w_label z = w_label z' &
w_arg z =
(funx : B (w_label z) => w_arg z' (transport B p x))} <~>
{p : (w_label z; w_arg z).1 = (w_label z'; w_arg z').1
&
transport (funa : A => B a -> W A B) p
(w_label z; w_arg z).2 = (w_label z'; w_arg z').2}
A: Type B: A -> Type z, z': W A B
foralla : w_label z = w_label z',
w_arg z =
(funx : B (w_label z) => w_arg z' (transport B a x)) <~>
transport (funa0 : A => B a0 -> W A B) a
(w_label z; w_arg z).2 = (w_label z'; w_arg z').2
A: Type B: A -> Type z1: A z2: B z1 -> W A B z1': A z2': B z1' -> W A B
foralla : w_label (w_sup A B z1 z2) =
w_label (w_sup A B z1' z2'),
w_arg (w_sup A B z1 z2) =
(funx : B (w_label (w_sup A B z1 z2)) =>
w_arg (w_sup A B z1' z2') (transport B a x)) <~>
transport (funa0 : A => B a0 -> W A B) a
(w_label (w_sup A B z1 z2); w_arg (w_sup A B z1 z2)).2 =
(w_label (w_sup A B z1' z2');
w_arg (w_sup A B z1' z2')).2
A: Type B: A -> Type z1: A z2: B z1 -> W A B z1': A z2': B z1' -> W A B p: z1 = z1'
z2 = (funx : B z1 => z2' (transport B p x)) <~>
transport (funa : A => B a -> W A B) p z2 = z2'
A: Type B: A -> Type z1: A z2, z2': B z1 -> W A B
z2 = (funx : B z1 => z2' (transport B 1 x)) <~>
transport (funa : A => B a -> W A B) 1 z2 = z2'
H: Funext A: Type B: A -> Type n: trunc_index IsTrunc0: IsTrunc n.+1 A
IsTrunc n.+1 (W A B)
H: Funext A: Type B: A -> Type n: trunc_index IsTrunc0: IsTrunc n.+1 A
IsTrunc n.+1 (W A B)
H: Funext A: Type B: A -> Type n: trunc_index IsTrunc0: IsTrunc n.+1 A
forallxy : W A B, IsTrunc n (x = y)
H: Funext A: Type B: A -> Type n: trunc_index IsTrunc0: IsTrunc n.+1 A a: A w: B a -> W A B X: forall (b : B a) (y : W A B), IsTrunc n (w b = y)
forally : W A B, IsTrunc n (w_sup A B a w = y)
H: Funext A: Type B: A -> Type n: trunc_index IsTrunc0: IsTrunc n.+1 A a: A w: B a -> W A B X: forall (b : B a) (y : W A B), IsTrunc n (w b = y) a0: A w0: B a0 -> W A B
IsTrunc n (w_sup A B a w = w_sup A B a0 w0)
H: Funext A: Type B: A -> Type n: trunc_index IsTrunc0: IsTrunc n.+1 A a: A w: B a -> W A B X: forall (b : B a) (y : W A B), IsTrunc n (w b = y) a0: A w0: B a0 -> W A B
IsTrunc n
{p
: w_label (w_sup A B a w) =
w_label (w_sup A B a0 w0) &
w_arg (w_sup A B a w) =
(funx : B (w_label (w_sup A B a w)) =>
w_arg (w_sup A B a0 w0) (transport B p x))}
H: Funext A: Type B: A -> Type n: trunc_index IsTrunc0: IsTrunc n.+1 A a: A w: B a -> W A B X: forall (b : B a) (y : W A B), IsTrunc n (w b = y) a0: A w0: B a0 -> W A B
foralla1 : w_label (w_sup A B a w) =
w_label (w_sup A B a0 w0),
IsTrunc n
(w_arg (w_sup A B a w) =
(funx : B (w_label (w_sup A B a w)) =>
w_arg (w_sup A B a0 w0) (transport B a1 x)))
H: Funext A: Type B: A -> Type n: trunc_index IsTrunc0: IsTrunc n.+1 A a: A w: B a -> W A B X: forall (b : B a) (y : W A B), IsTrunc n (w b = y) a0: A w0: B a0 -> W A B p: a = a0
IsTrunc n (w = (funx : B a => w0 (transport B p x)))
H: Funext A: Type B: A -> Type n: trunc_index IsTrunc0: IsTrunc n.+1 A a: A w: B a -> W A B X: forall (b : B a) (y : W A B), IsTrunc n (w b = y) w0: B a -> W A B
IsTrunc n (w = (funx : B a => w0 (transport B 1 x)))