Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.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.
(* -*- mode: coq; mode: visual-line -*- *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Local Open Scope nat_scope. Local Open Scope path_scope. (** * Cantor space 2^N *) Definition Cantor : Type := nat -> Bool.

Cantor + Cantor -> Cantor

Cantor + Cantor -> Cantor
c: Cantor
n: nat

Bool
c: Cantor
n: nat
Bool
c: Cantor
n: nat

Bool
c: Cantor

Bool
c: Cantor
n: nat
Bool
c: Cantor

Bool
exact true.
c: Cantor
n: nat

Bool
exact (c n).
c: Cantor
n: nat

Bool
c: Cantor

Bool
c: Cantor
n: nat
Bool
c: Cantor

Bool
exact false.
c: Cantor
n: nat

Bool
exact (c n). Defined.

Cantor -> Cantor + Cantor

Cantor -> Cantor + Cantor
c: Cantor

Cantor + Cantor
c: Cantor

Cantor + Cantor
c: Cantor
Cantor + Cantor
c: Cantor

Cantor + Cantor
exact (inl (fun n => c n.+1)).
c: Cantor

Cantor + Cantor
exact (inr (fun n => c n.+1)). Defined.
H: Funext

IsEquiv cantor_fold
H: Funext

IsEquiv cantor_fold
H: Funext

(fun x : Cantor => cantor_fold (cantor_unfold x)) == idmap
H: Funext
(fun x : Cantor + Cantor => cantor_unfold (cantor_fold x)) == idmap
H: Funext

(fun x : Cantor => cantor_fold (cantor_unfold x)) == idmap
H: Funext
c: Cantor
n: nat

cantor_fold (cantor_unfold c) n = c n
H: Funext
c: Cantor

cantor_fold (cantor_unfold c) 0 = c 0
H: Funext
c: Cantor
n: nat
IH: cantor_fold (cantor_unfold c) n = c n
cantor_fold (cantor_unfold c) n.+1 = c n.+1
H: Funext
c: Cantor

cantor_fold (cantor_unfold c) 0 = c 0
H: Funext
c: Cantor

cantor_fold (if c 0 then inl (fun n : nat => c n.+1) else inr (fun n : nat => c n.+1)) 0 = c 0
case (c 0); reflexivity.
H: Funext
c: Cantor
n: nat
IH: cantor_fold (cantor_unfold c) n = c n

cantor_fold (cantor_unfold c) n.+1 = c n.+1
H: Funext
c: Cantor
n: nat
IH: cantor_fold (cantor_unfold c) n = c n

cantor_fold (if c 0 then inl (fun n : nat => c n.+1) else inr (fun n : nat => c n.+1)) n.+1 = c n.+1
case (c 0); reflexivity.
H: Funext

(fun x : Cantor + Cantor => cantor_unfold (cantor_fold x)) == idmap
intros [c|c]; apply path_sum; reflexivity. Defined. Definition equiv_cantor_fold `{Funext} : Cantor + Cantor <~> Cantor := Build_Equiv _ _ cantor_fold _. Definition equiv_cantor_unfold `{Funext} : Cantor <~> Cantor + Cantor := Build_Equiv _ _ cantor_unfold (isequiv_inverse equiv_cantor_fold).