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.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Diagrams.Sequence.Require Import Homotopy.Join.Core.Require Import Colimits.Colimit Colimits.Sequential.LocalOpen Scope nat_scope.(** * Propositonal truncation as a colimit. *)(** In this file we give an alternative construction of the propositional truncation using colimits. This can serve as a metatheoretic justification that propositional truncations exist. *)(** The sequence of increasing joins. *)
A: Type
Sequence
A: Type
Sequence
A: Type
nat -> Type
A: Type
foralln : nat, ?X n -> ?X n.+1
A: Type
foralln : nat,
iterated_join A n -> iterated_join A n.+1
A: Type n: nat
iterated_join A n -> iterated_join A n.+1
exact joinr.Defined.(** Propositional truncation can be defined as the colimit of this sequence. *)DefinitionPropTruncA : Type := Colimit (Join_seq A).(** The constructor is given by the colimit constructor. *)Definitionptr_in {A} : A -> PropTrunc A := colim (D:=Join_seq A) 0.(** The sequential colimit of this sequence is the propositional truncation. *)(** Universal property of propositional truncation. *)
H: Funext A, P: Type IsHProp0: IsHProp P
(PropTrunc A -> P) <~> (A -> P)
H: Funext A, P: Type IsHProp0: IsHProp P
(PropTrunc A -> P) <~> (A -> P)
H: Funext A, P: Type IsHProp0: IsHProp P
(foralln : Graph.graph0 sequence_graph,
Diagram.obj (Join_seq A) n -> P) <~>
(A -> P)
H: Funext A, P: Type IsHProp0: IsHProp P
(foralln : Graph.graph0 sequence_graph,
Diagram.obj (Join_seq A) n -> P) ->
A -> P
H: Funext A, P: Type IsHProp0: IsHProp P
(A -> P) ->
foralln : Graph.graph0 sequence_graph,
Diagram.obj (Join_seq A) n -> P
H: Funext A, P: Type IsHProp0: IsHProp P
(foralln : Graph.graph0 sequence_graph,
Diagram.obj (Join_seq A) n -> P) ->
A -> P
H: Funext A, P: Type IsHProp0: IsHProp P h: foralln : Graph.graph0 sequence_graph,
Diagram.obj (Join_seq A) n -> P
A -> P
exact (h 0).
H: Funext A, P: Type IsHProp0: IsHProp P
(A -> P) ->
foralln : Graph.graph0 sequence_graph,
Diagram.obj (Join_seq A) n -> P
H: Funext A, P: Type IsHProp0: IsHProp P f: A -> P
foralln : Graph.graph0 sequence_graph,
Diagram.obj (Join_seq A) n -> P
H: Funext A, P: Type IsHProp0: IsHProp P f: A -> P
Diagram.obj (Join_seq A) 0 -> P
H: Funext A, P: Type IsHProp0: IsHProp P f: A -> P n: nat IHn: Diagram.obj (Join_seq A) n -> P
Diagram.obj (Join_seq A) n.+1 -> P
H: Funext A, P: Type IsHProp0: IsHProp P f: A -> P
Diagram.obj (Join_seq A) 0 -> P
exact f.
H: Funext A, P: Type IsHProp0: IsHProp P f: A -> P n: nat IHn: Diagram.obj (Join_seq A) n -> P
Diagram.obj (Join_seq A) n.+1 -> P
H: Funext A, P: Type IsHProp0: IsHProp P f: A -> P n: nat IHn: Diagram.obj (Join_seq A) n -> P
Join A
((fix F (m : nat) : Type :=
match m with
| 0 => A
| m'.+1 => Join A (F m')
end) n) -> P
H: Funext A, P: Type IsHProp0: IsHProp P f: A -> P n: nat IHn: Diagram.obj (Join_seq A) n -> P
A -> P
H: Funext A, P: Type IsHProp0: IsHProp P f: A -> P n: nat IHn: Diagram.obj (Join_seq A) n -> P
(fix F (m : nat) : Type :=
match m with
| 0 => A
| m'.+1 => Join A (F m')
end) n -> P
H: Funext A, P: Type IsHProp0: IsHProp P f: A -> P n: nat IHn: Diagram.obj (Join_seq A) n -> P
forall (a : A)
(b : (fix F (m : nat) : Type :=
match m with
| 0 => A
| m'.+1 => Join A (F m')
end) n), ?P_A a = ?P_B b
H: Funext A, P: Type IsHProp0: IsHProp P f: A -> P n: nat IHn: Diagram.obj (Join_seq A) n -> P
forall (a : A)
(b : (fix F (m : nat) : Type :=
match m with
| 0 => A
| m'.+1 => Join A (F m')
end) n), f a = IHn b
H: Funext A, P: Type IsHProp0: IsHProp P f: A -> P n: nat IHn: Diagram.obj (Join_seq A) n -> P a: A b: (fix F (m : nat) : Type :=
match m with
| 0 => A
| m'.+1 => Join A (F m')
end) n
f a = IHn b
rapply path_ishprop.Defined.(** The propositional truncation is a hprop. *)
H: Funext A: Type
IsHProp (PropTrunc A)
H: Funext A: Type
IsHProp (PropTrunc A)
H: Funext A: Type
PropTrunc A -> Contr (PropTrunc A)
H: Funext A: Type
A -> Contr (PropTrunc A)
H: Funext A: Type x: A
Contr (PropTrunc A)
H: Funext A: Type x: A
foralln : Graph.graph0 sequence_graph,
Diagram.obj (Join_seq A) n