Built with Alectryon. 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.
From HoTT Require Import Basics Types.From HoTT Require Import Basics Types.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'0 : A -> Type) (P_inO0 : forallx0 : A, In (Tr n) (P'0 x0)) =>
letP0 :=
funx0 : A =>
{|
trunctype_type := P'0 x0;
trunctype_istrunc := istrunc_inO_tr (P'0 x0)
|} in?Goal@{P':=P'0; P_inO:=P_inO0}) 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'0 : A -> Type) (P_inO0 : forallx0 : A, In (Tr n) (P'0 x0)) =>
letP0 :=
funx0 : A =>
{|
trunctype_type := P'0 x0; trunctype_istrunc := istrunc_inO_tr (P'0 x0)
|} in?Goal@{P':=P'0; P_inO:=P_inO0}) 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'0 : A -> Type) (P_inO0 : forallx0 : A, In (Tr n) (P'0 x0)) =>
letP0 :=
funx0 : A =>
{|
trunctype_type := P'0 x0;
trunctype_istrunc := istrunc_inO_tr (P'0 x0)
|} infunx0 : O_reflector (Tr n.+1) A => trunctype_type (Trunc_rec P0 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'0 : A -> Type) (P_inO0 : forallx0 : A, In (Tr n) (P'0 x0)) =>
letP0 :=
funx0 : A =>
{|
trunctype_type := P'0 x0; trunctype_istrunc := istrunc_inO_tr (P'0 x0)
|} infunx0 : O_reflector (Tr n.+1) A => trunctype_type (Trunc_rec P0 x0)) P'
P_inO (to (Tr n.+1) A x) <~>
P' x
H: Univalence n: trunc_index A: Type P': A -> Type P_inO: forallx0 : A, In (Tr n) (P' x0) P:= funx0 : A =>
{| trunctype_type := P' x0; trunctype_istrunc := istrunc_inO_tr (P' x0) |}: 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.