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 TruncType.Require Import Truncations.Core Modalities.Modality Modalities.Descent.(** ** Separatedness and path-spaces of truncations *)SectionSeparatedTrunc.LocalOpen Scope subuniverse_scope.(** The [n.+1]-truncation modality consists of the separated types for the [n]-truncation modality. *)
n: trunc_index
Tr n.+1 <=> Sep (Tr n)
n: trunc_index
Tr n.+1 <=> Sep (Tr n)
n: trunc_index A: Type A_inO: In (Tr n.+1) A
In (Sep (Tr n)) A
n: trunc_index A: Type A_inO: In (Sep (Tr n)) A
In (Tr n.+1) A
n: trunc_index A: Type A_inO: In (Tr n.+1) A
In (Sep (Tr n)) A
intros x y; exact _.
n: trunc_index A: Type A_inO: In (Sep (Tr n)) A
In (Tr n.+1) A
rapply istrunc_S.Defined.(** It follows that [Tr n <<< Tr n.+1]. However, it is easier to prove this directly than to go through separatedness. *)
n: trunc_index
Tr n <= Tr n.+1
n: trunc_index
Tr n <= Tr n.+1
intros A ?; exact _.Defined.
n: trunc_index
Tr n << Tr n.+1
n: trunc_index
Tr n << Tr n.+1
srapply O_strong_leq_trans_l.Defined.(** For some reason, this causes typeclass search to spin. *)
H: Univalence n: trunc_index
Tr n <<< Tr n.+1
H: Univalence n: trunc_index
Tr n <<< Tr n.+1
H: Univalence n: trunc_index A: Type P': A -> Type P_inO: forallx : A, In (Tr n) (P' x) P:= funx : A =>
{|
trunctype_type := P' x;
trunctype_istrunc := istrunc_inO_tr (P' x)
|}: A -> n -Type
O_reflector (Tr n.+1) A -> Type
H: Univalence n: trunc_index A: Type P': A -> Type P_inO: forallx : A, In (Tr n) (P' x) P:= funx : A =>
{|
trunctype_type := P' x;
trunctype_istrunc := istrunc_inO_tr (P' x)
|}: A -> n -Type
forallx : O_reflector (Tr n.+1) A,
In (Tr n)
((fun (P' : A -> Type)
(P_inO : forallx0 : A, In (Tr n) (P' x0)) =>
letP :=
funx0 : A =>
{|
trunctype_type := P' x0;
trunctype_istrunc := istrunc_inO_tr (P' x0)
|} in?Goal) P' P_inO x)
H: Univalence n: trunc_index A: Type P': A -> Type P_inO: forallx : A, In (Tr n) (P' x) P:= funx : A =>
{|
trunctype_type := P' x;
trunctype_istrunc := istrunc_inO_tr (P' x)
|}: A -> n -Type
forallx : A,
(fun (P' : A -> Type)
(P_inO : forallx0 : A, In (Tr n) (P' x0)) =>
letP :=
funx0 : A =>
{|
trunctype_type := P' x0;
trunctype_istrunc := istrunc_inO_tr (P' x0)
|} in?Goal) P' P_inO (to (Tr n.+1) A x) <~>
P' x
H: Univalence n: trunc_index A: Type P': A -> Type P_inO: forallx : A, In (Tr n) (P' x) P:= funx : A =>
{|
trunctype_type := P' x;
trunctype_istrunc := istrunc_inO_tr (P' x)
|}: A -> n -Type
O_reflector (Tr n.+1) A -> Type
exact (Trunc_rec P).
H: Univalence n: trunc_index A: Type P': A -> Type P_inO: forallx : A, In (Tr n) (P' x) P:= funx : A =>
{|
trunctype_type := P' x;
trunctype_istrunc := istrunc_inO_tr (P' x)
|}: A -> n -Type
forallx : O_reflector (Tr n.+1) A,
In (Tr n)
((fun (P' : A -> Type)
(P_inO : forallx0 : A, In (Tr n) (P' x0)) =>
letP :=
funx0 : A =>
{|
trunctype_type := P' x0;
trunctype_istrunc := istrunc_inO_tr (P' x0)
|} infunx0 : O_reflector (Tr n.+1) A =>
trunctype_type (Trunc_rec P x0)) P' P_inO x)
intros; simpl; exact _.
H: Univalence n: trunc_index A: Type P': A -> Type P_inO: forallx : A, In (Tr n) (P' x) P:= funx : A =>
{|
trunctype_type := P' x;
trunctype_istrunc := istrunc_inO_tr (P' x)
|}: A -> n -Type
forallx : A,
(fun (P' : A -> Type)
(P_inO : forallx0 : A, In (Tr n) (P' x0)) =>
letP :=
funx0 : A =>
{|
trunctype_type := P' x0;
trunctype_istrunc := istrunc_inO_tr (P' x0)
|} infunx0 : O_reflector (Tr n.+1) A =>
trunctype_type (Trunc_rec P x0)) P' P_inO
(to (Tr n.+1) A x) <~> P' x
H: Univalence n: trunc_index A: Type P': A -> Type P_inO: forallx : A, In (Tr n) (P' x) P:= funx : A =>
{|
trunctype_type := P' x;
trunctype_istrunc := istrunc_inO_tr (P' x)
|}: A -> n -Type x: A
P' x <~> P' x
reflexivity.Defined.Definitionpath_Tr {nA} {xy : A}
: Tr n (x = y) -> (tr x = tr y :> Tr n.+1 A)
:= path_OO (Tr n.+1) (Tr n) x y.Definitionequiv_path_Tr `{Univalence} {n} {A : Type} (x y : A)
: Tr n (x = y) <~> (tr x = tr y :> Tr n.+1 A)
:= equiv_path_OO (Tr n.+1) (Tr n) x y.EndSeparatedTrunc.