(** * Theorems about the homotopical interval. *)Require Import Types.Paths. Local Open Scope path_scope. Module Export Interval. Private Inductive interval : Type0 := | zero : interval | one : interval. Axiom seg : zero = one. Definition interval_ind (P : interval -> Type) (a : P zero) (b : P one) (p : seg # a = b) : forall x:interval, P x := fun x => (match x return _ -> P x with | zero => fun _ => a | one => fun _ => b end) p. Axiom interval_ind_beta_seg : forall (P : interval -> Type) (a : P zero) (b : P one) (p : seg # a = b), apD (interval_ind P a b p) seg = p. End Interval. Definition interval_rec (P : Type) (a b : P) (p : a = b) : interval -> P := interval_ind (fun _ => P) a b (transport_const _ _ @ p).P: Type
a, b: P
p: a = bap (interval_rec P a b p) seg = pP: Type
a, b: P
p: a = bap (interval_rec P a b p) seg = pP: Type
a, b: P
p: a = btransport_const seg a @ ap (interval_rec P a b p) seg = transport_const seg a @ pexact (interval_ind_beta_seg (fun _ => P) _ _ _). Defined. (** ** The interval is contractible. *)P: Type
a, b: P
p: a = bapD (interval_ind (fun _ : interval => P) a b (transport_const seg a @ p)) seg = transport_const seg a @ pContr intervalContr intervalforall y : interval, zero = yexact (transport_paths_r _ _ @ concat_1p _). Defined.transport (paths zero) seg 1 = seg