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]
Require Import HFiber Extensions Factorization Limits.Pullback. Require Import Modality Accessible Descent. Require Import Truncations.Core. Require Import Homotopy.Suspension. Local Open Scope path_scope. Local Open Scope subuniverse_scope. (** * Subuniverses of separated types *) (** The basic reference for subuniverses of separated types is - Christensen, Opie, Rijke, and Scoccola, "Localization in Homotopy Type Theory", https://arxiv.org/abs/1807.04155. hereinafter referred to as "CORS". *) (** ** Definition *) (** The definition is in [ReflectiveSubuniverse.v]. *) (** ** Basic properties *) (** A function is (fiberwise) in [Sep O] exactly when its diagonal is in [O]. *) Section Diagonal. Context (O : Subuniverse) {X Y : Type} (f : X -> Y).
O: Subuniverse
X, Y: Type
f: X -> Y
H: MapIn (Sep O) f

MapIn O (diagonal f)
O: Subuniverse
X, Y: Type
f: X -> Y
H: MapIn (Sep O) f

MapIn O (diagonal f)
O: Subuniverse
X, Y: Type
f: X -> Y
H: MapIn (Sep O) f
p: Pullback f f

In O (hfiber (diagonal f) p)
refine (inO_equiv_inO' _ (hfiber_diagonal f p)^-1). Defined.
O: Subuniverse
X, Y: Type
f: X -> Y
H: MapIn O (diagonal f)

MapIn (Sep O) f
O: Subuniverse
X, Y: Type
f: X -> Y
H: MapIn O (diagonal f)

MapIn (Sep O) f
O: Subuniverse
X, Y: Type
f: X -> Y
H: MapIn O (diagonal f)
x1: Y
u, v: hfiber f x1

In O (u = v)
O: Subuniverse
X, Y: Type
f: X -> Y
H: MapIn O (diagonal f)
x1: Y
u: hfiber f x1
x2: X
p: f x2 = x1

In O (u = (x2; p))
O: Subuniverse
X, Y: Type
f: X -> Y
H: MapIn O (diagonal f)
x2: X
u: hfiber f (f x2)

In O (u = (x2; 1))
refine (inO_equiv_inO' _ (hfiber_diagonal f (u.1; x2; u.2))). Defined. End Diagonal. (** Lemma 2.15 of CORS: If [O] is accessible, so is [Sep O]. Its generators are the suspension of those of [O], in the following sense: *)
f: LocalGenerators

LocalGenerators
f: LocalGenerators

LocalGenerators
f: LocalGenerators
i: ?lgen_indices

?lgen_domain i -> ?lgen_codomain i
exact (functor_susp (f i)). Defined.
O: Subuniverse
H: IsAccRSU O

IsAccRSU (Sep O)
O: Subuniverse
H: IsAccRSU O

IsAccRSU (Sep O)
O: Subuniverse
H: IsAccRSU O

forall X : Type, In (Sep O) X <-> IsLocal_Internal.IsLocal (susp_localgen (acc_lgen O)) X
O: Subuniverse
H: IsAccRSU O
A: Type
A_inO: In (Sep O) A

IsLocal_Internal.IsLocal (susp_localgen (acc_lgen O)) A
O: Subuniverse
H: IsAccRSU O
A: Type
A_inO: IsLocal_Internal.IsLocal (susp_localgen (acc_lgen O)) A
In (Sep O) A
O: Subuniverse
H: IsAccRSU O
A: Type
A_inO: In (Sep O) A

IsLocal_Internal.IsLocal (susp_localgen (acc_lgen O)) A
O: Subuniverse
H: IsAccRSU O
A: Type
A_inO: In (Sep O) A
i: lgen_indices (susp_localgen (acc_lgen O))

ooExtendableAlong (susp_localgen (acc_lgen O) i) (fun _ : lgen_codomain (susp_localgen (acc_lgen O)) i => A)
O: Subuniverse
H: IsAccRSU O
A: Type
A_inO: In (Sep O) A
i: lgen_indices (susp_localgen (acc_lgen O))

forall NS : A * A, ooExtendableAlong (acc_lgen O i) (fun x : lgen_codomain (acc_lgen O) i => DPath (fun _ : lgen_codomain (susp_localgen (acc_lgen O)) i => A) (merid x) (fst NS) (snd NS))
O: Subuniverse
H: IsAccRSU O
A: Type
A_inO: In (Sep O) A
i: lgen_indices (susp_localgen (acc_lgen O))
x, y: A

ooExtendableAlong (acc_lgen O i) (fun x0 : lgen_codomain (acc_lgen O) i => DPath (fun _ : lgen_codomain (susp_localgen (acc_lgen O)) i => A) (merid x0) (fst (x, y)) (snd (x, y)))
O: Subuniverse
H: IsAccRSU O
A: Type
A_inO: forall x y : A, In O (x = y)
i: lgen_indices (acc_lgen O)
x, y: A

ooExtendableAlong (acc_lgen O i) (fun x0 : lgen_codomain (acc_lgen O) i => transport (fun _ : Susp (lgen_codomain (acc_lgen O) i) => A) (merid x0) x = y)
O: Subuniverse
H: IsAccRSU O
A: Type
A_inO: forall x y : A, In O (x = y)
i: lgen_indices (acc_lgen O)
x, y: A

forall b : lgen_codomain (acc_lgen O) i, ?Goal0 b <~> transport (fun _ : Susp (lgen_codomain (acc_lgen O) i) => A) (merid b) x = y
O: Subuniverse
H: IsAccRSU O
A: Type
A_inO: forall x y : A, In O (x = y)
i: lgen_indices (acc_lgen O)
x, y: A
ooExtendableAlong (acc_lgen O i) ?Goal0
O: Subuniverse
H: IsAccRSU O
A: Type
A_inO: forall x y : A, In O (x = y)
i: lgen_indices (acc_lgen O)
x, y: A

forall b : lgen_codomain (acc_lgen O) i, (fun _ : lgen_codomain (acc_lgen O) i => x = y) b <~> transport (fun _ : Susp (lgen_codomain (acc_lgen O) i) => A) (merid b) x = y
O: Subuniverse
H: IsAccRSU O
A: Type
A_inO: forall x y : A, In O (x = y)
i: lgen_indices (acc_lgen O)
x, y: A
b: lgen_codomain (acc_lgen O) i

(fun _ : lgen_codomain (acc_lgen O) i => x = y) b <~> transport (fun _ : Susp (lgen_codomain (acc_lgen O) i) => A) (merid b) x = y
apply dp_const.
O: Subuniverse
H: IsAccRSU O
A: Type
A_inO: IsLocal_Internal.IsLocal (susp_localgen (acc_lgen O)) A

In (Sep O) A
O: Subuniverse
H: IsAccRSU O
A: Type
A_inO: IsLocal_Internal.IsLocal (susp_localgen (acc_lgen O)) A

In (Sep O) A
O: Subuniverse
H: IsAccRSU O
A: Type
A_inO: IsLocal_Internal.IsLocal (susp_localgen (acc_lgen O)) A
x, y: A

In O (x = y)
O: Subuniverse
H: IsAccRSU O
A: Type
A_inO: IsLocal_Internal.IsLocal (susp_localgen (acc_lgen O)) A
x, y: A
i: lgen_indices (acc_lgen O)

ooExtendableAlong (acc_lgen O i) (fun _ : lgen_codomain (acc_lgen O) i => x = y)
O: Subuniverse
H: IsAccRSU O
A: Type
i: lgen_indices (acc_lgen O)
A_inO: ooExtendableAlong (susp_localgen (acc_lgen O) i) (fun _ : lgen_codomain (susp_localgen (acc_lgen O)) i => A)
x, y: A

ooExtendableAlong (acc_lgen O i) (fun _ : lgen_codomain (acc_lgen O) i => x = y)
O: Subuniverse
H: IsAccRSU O
A: Type
i: lgen_indices (acc_lgen O)
A_inO: ooExtendableAlong (susp_localgen (acc_lgen O) i) (fun _ : lgen_codomain (susp_localgen (acc_lgen O)) i => A)
x, y: A

forall b : lgen_codomain (acc_lgen O) i, ?Goal b <~> x = y
O: Subuniverse
H: IsAccRSU O
A: Type
i: lgen_indices (acc_lgen O)
A_inO: ooExtendableAlong (susp_localgen (acc_lgen O) i) (fun _ : lgen_codomain (susp_localgen (acc_lgen O)) i => A)
x, y: A
ooExtendableAlong (acc_lgen O i) ?Goal
O: Subuniverse
H: IsAccRSU O
A: Type
i: lgen_indices (acc_lgen O)
A_inO: ooExtendableAlong (susp_localgen (acc_lgen O) i) (fun _ : lgen_codomain (susp_localgen (acc_lgen O)) i => A)
x, y: A

forall b : lgen_codomain (acc_lgen O) i, (fun x0 : lgen_codomain (acc_lgen O) i => DPath (fun _ : lgen_codomain (susp_localgen (acc_lgen O)) i => A) (merid x0) (fst (x, y)) (snd (x, y))) b <~> x = y
O: Subuniverse
H: IsAccRSU O
A: Type
i: lgen_indices (acc_lgen O)
A_inO: ooExtendableAlong (susp_localgen (acc_lgen O) i) (fun _ : lgen_codomain (susp_localgen (acc_lgen O)) i => A)
x, y: A
b: lgen_codomain (acc_lgen O) i

(fun x0 : lgen_codomain (acc_lgen O) i => DPath (fun _ : lgen_codomain (susp_localgen (acc_lgen O)) i => A) (merid x0) (fst (x, y)) (snd (x, y))) b <~> x = y
symmetry; apply dp_const. } Defined.
S: NullGenerators

NullGenerators
S: NullGenerators

NullGenerators
S: NullGenerators
i: ?ngen_indices

Type
exact (Susp (S i)). Defined.
O: Subuniverse
H: IsAccModality O

IsAccModality (Sep O)
O: Subuniverse
H: IsAccModality O

IsAccModality (Sep O)
O: Subuniverse
H: IsAccModality O

forall X : Type, In (Sep O) X <-> IsNull_Internal.IsNull (susp_nullgen (acc_ngen O)) X
O: Subuniverse
H: IsAccModality O
A: Type
A_inO: In (Sep O) A

IsNull_Internal.IsNull (susp_nullgen (acc_ngen O)) A
O: Subuniverse
H: IsAccModality O
A: Type
A_inO: IsNull_Internal.IsNull (susp_nullgen (acc_ngen O)) A
In (Sep O) A
O: Subuniverse
H: IsAccModality O
A: Type
A_inO: In (Sep O) A

IsNull_Internal.IsNull (susp_nullgen (acc_ngen O)) A
O: Subuniverse
H: IsAccModality O
A: Type
A_inO: In (Sep O) A
i: lgen_indices (null_to_local_generators (susp_nullgen (acc_ngen O)))

ooExtendableAlong (null_to_local_generators (susp_nullgen (acc_ngen O)) i) (fun _ : lgen_codomain (null_to_local_generators (susp_nullgen (acc_ngen O))) i => A)
O: Subuniverse
H: IsAccModality O
A: Type
A_inO: In (Sep O) A
i: lgen_indices (null_to_local_generators (susp_nullgen (acc_ngen O)))

ooExtendableAlong (fun _ : Susp Unit => tt) (fun _ : lgen_codomain (null_to_local_generators (susp_nullgen (acc_ngen O))) i => A)
O: Subuniverse
H: IsAccModality O
A: Type
A_inO: In (Sep O) A
i: lgen_indices (null_to_local_generators (susp_nullgen (acc_ngen O)))
ooExtendableAlong (functor_susp (fun _ : acc_ngen O i => tt)) (fun _ : Susp Unit => A)
O: Subuniverse
H: IsAccModality O
A: Type
A_inO: In (Sep O) A
i: lgen_indices (null_to_local_generators (susp_nullgen (acc_ngen O)))

ooExtendableAlong (functor_susp (fun _ : acc_ngen O i => tt)) (fun _ : Susp Unit => A)
O: Subuniverse
H: IsAccModality O
A: Type
A_inO: In (Sep O) A
i: lgen_indices (null_to_local_generators (susp_nullgen (acc_ngen O)))

forall NS : A * A, ooExtendableAlong (fun _ : acc_ngen O i => tt) (fun x : Unit => DPath (fun _ : Susp Unit => A) (merid x) (fst NS) (snd NS))
O: Subuniverse
H: IsAccModality O
A: Type
A_inO: In (Sep O) A
i: lgen_indices (null_to_local_generators (susp_nullgen (acc_ngen O)))
x, y: A

ooExtendableAlong (fun _ : acc_ngen O i => tt) (fun x0 : Unit => DPath (fun _ : Susp Unit => A) (merid x0) (fst (x, y)) (snd (x, y)))
O: Subuniverse
H: IsAccModality O
A: Type
A_inO: In (Sep O) A
i: lgen_indices (null_to_local_generators (susp_nullgen (acc_ngen O)))
x, y: A

forall b : Unit, ?Goal0 b <~> DPath (fun _ : Susp Unit => A) (merid b) (fst (x, y)) (snd (x, y))
O: Subuniverse
H: IsAccModality O
A: Type
A_inO: In (Sep O) A
i: lgen_indices (null_to_local_generators (susp_nullgen (acc_ngen O)))
x, y: A
ooExtendableAlong (fun _ : acc_ngen O i => tt) ?Goal0
O: Subuniverse
H: IsAccModality O
A: Type
A_inO: In (Sep O) A
i: lgen_indices (null_to_local_generators (susp_nullgen (acc_ngen O)))
x, y: A

forall b : Unit, (fun _ : lgen_codomain (null_to_local_generators (acc_ngen O)) i => x = y) b <~> DPath (fun _ : Susp Unit => A) (merid b) (fst (x, y)) (snd (x, y))
O: Subuniverse
H: IsAccModality O
A: Type
A_inO: In (Sep O) A
i: lgen_indices (null_to_local_generators (susp_nullgen (acc_ngen O)))
x, y: A
b: Unit

(fun _ : lgen_codomain (null_to_local_generators (acc_ngen O)) i => x = y) b <~> DPath (fun _ : Susp Unit => A) (merid b) (fst (x, y)) (snd (x, y))
apply dp_const.
O: Subuniverse
H: IsAccModality O
A: Type
A_inO: IsNull_Internal.IsNull (susp_nullgen (acc_ngen O)) A

In (Sep O) A
O: Subuniverse
H: IsAccModality O
A: Type
A_inO: IsNull_Internal.IsNull (susp_nullgen (acc_ngen O)) A

In (Sep O) A
O: Subuniverse
H: IsAccModality O
A: Type
A_inO: IsNull_Internal.IsNull (susp_nullgen (acc_ngen O)) A
x, y: A

In O (x = y)
O: Subuniverse
H: IsAccModality O
A: Type
A_inO: IsNull_Internal.IsNull (susp_nullgen (acc_ngen O)) A
x, y: A
i: lgen_indices (null_to_local_generators (acc_ngen O))

ooExtendableAlong (null_to_local_generators (acc_ngen O) i) (fun _ : lgen_codomain (null_to_local_generators (acc_ngen O)) i => x = y)
O: Subuniverse
H: IsAccModality O
A: Type
i: lgen_indices (null_to_local_generators (acc_ngen O))
A_inO: ooExtendableAlong (null_to_local_generators (susp_nullgen (acc_ngen O)) i) (fun _ : lgen_codomain (null_to_local_generators (susp_nullgen (acc_ngen O))) i => A)
x, y: A

ooExtendableAlong (null_to_local_generators (acc_ngen O) i) (fun _ : lgen_codomain (null_to_local_generators (acc_ngen O)) i => x = y)
O: Subuniverse
H: IsAccModality O
A: Type
i: lgen_indices (null_to_local_generators (acc_ngen O))
A_inO: ooExtendableAlong (null_to_local_generators (susp_nullgen (acc_ngen O)) i) (fun _ : lgen_codomain (null_to_local_generators (susp_nullgen (acc_ngen O))) i => A)
x, y: A

ooExtendableAlong (functor_susp (fun _ : acc_ngen O i => tt)) (fun _ : Susp Unit => A)
O: Subuniverse
H: IsAccModality O
A: Type
i: lgen_indices (null_to_local_generators (acc_ngen O))
A_inO: ooExtendableAlong (null_to_local_generators (susp_nullgen (acc_ngen O)) i) (fun _ : lgen_codomain (null_to_local_generators (susp_nullgen (acc_ngen O))) i => A)
x, y: A
ee: ooExtendableAlong (functor_susp (fun _ : acc_ngen O i => tt)) (fun _ : Susp Unit => A)
ooExtendableAlong (null_to_local_generators (acc_ngen O) i) (fun _ : lgen_codomain (null_to_local_generators (acc_ngen O)) i => x = y)
O: Subuniverse
H: IsAccModality O
A: Type
i: lgen_indices (null_to_local_generators (acc_ngen O))
A_inO: ooExtendableAlong (null_to_local_generators (susp_nullgen (acc_ngen O)) i) (fun _ : lgen_codomain (null_to_local_generators (susp_nullgen (acc_ngen O))) i => A)
x, y: A

ooExtendableAlong (functor_susp (fun _ : acc_ngen O i => tt)) (fun _ : Susp Unit => A)
O: Subuniverse
H: IsAccModality O
A: Type
i: lgen_indices (null_to_local_generators (acc_ngen O))
A_inO: ooExtendableAlong (null_to_local_generators (susp_nullgen (acc_ngen O)) i) (fun _ : lgen_codomain (null_to_local_generators (susp_nullgen (acc_ngen O))) i => A)
x, y: A

ooExtendableAlong (fun _ : Susp Unit => tt) (fun _ : lgen_codomain (null_to_local_generators (susp_nullgen (acc_ngen O))) i => A)
O: Subuniverse
H: IsAccModality O
A: Type
i: lgen_indices (null_to_local_generators (acc_ngen O))
A_inO: ooExtendableAlong (null_to_local_generators (susp_nullgen (acc_ngen O)) i) (fun _ : lgen_codomain (null_to_local_generators (susp_nullgen (acc_ngen O))) i => A)
x, y: A

IsEquiv (fun _ : Susp Unit => tt)
apply isequiv_contr_contr.
O: Subuniverse
H: IsAccModality O
A: Type
i: lgen_indices (null_to_local_generators (acc_ngen O))
A_inO: ooExtendableAlong (null_to_local_generators (susp_nullgen (acc_ngen O)) i) (fun _ : lgen_codomain (null_to_local_generators (susp_nullgen (acc_ngen O))) i => A)
x, y: A
ee: ooExtendableAlong (functor_susp (fun _ : acc_ngen O i => tt)) (fun _ : Susp Unit => A)

ooExtendableAlong (null_to_local_generators (acc_ngen O) i) (fun _ : lgen_codomain (null_to_local_generators (acc_ngen O)) i => x = y)
O: Subuniverse
H: IsAccModality O
A: Type
i: lgen_indices (null_to_local_generators (acc_ngen O))
A_inO: ooExtendableAlong (null_to_local_generators (susp_nullgen (acc_ngen O)) i) (fun _ : lgen_codomain (null_to_local_generators (susp_nullgen (acc_ngen O))) i => A)
x, y: A
ee: ooExtendableAlong (functor_susp (fun _ : acc_ngen O i => tt)) (fun _ : Susp Unit => A)
e: ooExtendableAlong (fun _ : acc_ngen O i => tt) (fun x0 : Unit => DPath (fun _ : Susp Unit => A) (merid x0) (fst (x, y)) (snd (x, y)))

ooExtendableAlong (null_to_local_generators (acc_ngen O) i) (fun _ : lgen_codomain (null_to_local_generators (acc_ngen O)) i => x = y)
O: Subuniverse
H: IsAccModality O
A: Type
i: lgen_indices (null_to_local_generators (acc_ngen O))
A_inO: ooExtendableAlong (null_to_local_generators (susp_nullgen (acc_ngen O)) i) (fun _ : lgen_codomain (null_to_local_generators (susp_nullgen (acc_ngen O))) i => A)
x, y: A
ee: ooExtendableAlong (functor_susp (fun _ : acc_ngen O i => tt)) (fun _ : Susp Unit => A)
e: ooExtendableAlong (fun _ : acc_ngen O i => tt) (fun x0 : Unit => transport (fun _ : Susp Unit => A) (merid x0) x = y)

ooExtendableAlong (null_to_local_generators (acc_ngen O) i) (fun _ : lgen_codomain (null_to_local_generators (acc_ngen O)) i => x = y)
O: Subuniverse
H: IsAccModality O
A: Type
i: lgen_indices (null_to_local_generators (acc_ngen O))
A_inO: ooExtendableAlong (null_to_local_generators (susp_nullgen (acc_ngen O)) i) (fun _ : lgen_codomain (null_to_local_generators (susp_nullgen (acc_ngen O))) i => A)
x, y: A
ee: ooExtendableAlong (functor_susp (fun _ : acc_ngen O i => tt)) (fun _ : Susp Unit => A)
e: ooExtendableAlong (fun _ : acc_ngen O i => tt) (fun x0 : Unit => transport (fun _ : Susp Unit => A) (merid x0) x = y)

forall b : Unit, transport (fun _ : Susp Unit => A) (merid b) x = y <~> x = y
O: Subuniverse
H: IsAccModality O
A: Type
i: lgen_indices (null_to_local_generators (acc_ngen O))
A_inO: ooExtendableAlong (null_to_local_generators (susp_nullgen (acc_ngen O)) i) (fun _ : lgen_codomain (null_to_local_generators (susp_nullgen (acc_ngen O))) i => A)
x, y: A
ee: ooExtendableAlong (functor_susp (fun _ : acc_ngen O i => tt)) (fun _ : Susp Unit => A)
e: ooExtendableAlong (fun _ : acc_ngen O i => tt) (fun x0 : Unit => transport (fun _ : Susp Unit => A) (merid x0) x = y)
b: Unit

transport (fun _ : Susp Unit => A) (merid b) x = y <~> x = y
symmetry; apply dp_const. } Defined. (** Remark 2.16(1) of CORS *)
O: ReflectiveSubuniverse

O <= Sep O
O: ReflectiveSubuniverse

O <= Sep O
intros A ? x y; exact _. Defined. (** Part of Remark 2.16(2) of CORS *)
O: Subuniverse
A, B: Type
i: A -> B
IsEmbedding0: IsEmbedding i
H: In (Sep O) B

In (Sep O) A
O: Subuniverse
A, B: Type
i: A -> B
IsEmbedding0: IsEmbedding i
H: In (Sep O) B

In (Sep O) A
O: Subuniverse
A, B: Type
i: A -> B
IsEmbedding0: IsEmbedding i
H: In (Sep O) B
x, y: A

In O (x = y)
refine (inO_equiv_inO' _ (equiv_ap_isembedding i x y)^-1). Defined. (* As a special case, if X embeds into an n-type for n >= -1 then X is an n-type. Note that this doesn't hold for n = -2. *)
X, Y: Type
n: trunc_index
istr: IsTrunc n.+1 Y
i: X -> Y
isem: IsEmbedding i

IsTrunc n.+1 X
X, Y: Type
n: trunc_index
istr: IsTrunc n.+1 Y
i: X -> Y
isem: IsEmbedding i

IsTrunc n.+1 X
X, Y: Type
n: trunc_index
istr: IsTrunc n.+1 Y
i: X -> Y
isem: IsEmbedding i

forall x y : X, IsTrunc n (x = y)
exact (@in_SepO_embedding (Tr n) _ _ i isem istr). Defined.
O: ReflectiveSubuniverse
A: Type
IsHProp0: IsHProp A

In (Sep O) A
O: ReflectiveSubuniverse
A: Type
IsHProp0: IsHProp A

In (Sep O) A
O: ReflectiveSubuniverse
A: Type
IsHProp0: IsHProp A

In (Sep O) Unit
intros x y; exact _. Defined. (** Remark 2.16(4) of CORS *)
O: Modality
A: Type
B: A -> Type
A_inO: In (Sep O) A
B_inO: forall a : A, In (Sep O) (B a)

In (Sep O) {x : _ & B x}
O: Modality
A: Type
B: A -> Type
A_inO: In (Sep O) A
B_inO: forall a : A, In (Sep O) (B a)

In (Sep O) {x : _ & B x}
O: Modality
A: Type
B: A -> Type
A_inO: In (Sep O) A
B_inO: forall a : A, In (Sep O) (B a)
x: A
u: B x
y: A
v: B y

In O ((x; u) = (y; v))
O: Modality
A: Type
B: A -> Type
x, y: A
A_inO: In O (x = y)
B_inO: forall a : A, In (Sep O) (B a)
u: B x
v: B y

In O ((x; u) = (y; v))
O: Modality
A: Type
B: A -> Type
x, y: A
A_inO: In O (x = y)
B_inO: forall a : A, In (Sep O) (B a)
u: B x
v: B y
X: forall p : x = y, In O (transport B p u = v)

In O ((x; u) = (y; v))
O: Modality
A: Type
B: A -> Type
x, y: A
A_inO: In O (x = y)
B_inO: forall a : A, In (Sep O) (B a)
u: B x
v: B y
X: forall p : x = y, In O (transport B p u = v)
i:= inO_sigma: forall (O : Modality) (A : Type) (B : A -> Type), In O A -> (forall a : A, In O (B a)) -> In O {x : A & B x}

In O ((x; u) = (y; v))
refine (inO_equiv_inO' _ (equiv_path_sigma B _ _)). Defined. (** Lemma 2.17 of CORS *)
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X

IsConnMap (Tr (-1)) (to (Sep O) X)
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X

IsConnMap (Tr (-1)) (to (Sep O) X)
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X
im:= himage (to (Sep O) X): Factorization (@IsConnMap (Tr (-1))) (@MapIn (Tr (-1))) (to (Sep O) X)

IsConnMap (Tr (-1)) (to (Sep O) X)
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X
im:= himage (to (Sep O) X): Factorization (@IsConnMap (Tr (-1))) (@MapIn (Tr (-1))) (to (Sep O) X)
X0: In (Sep O) im

IsConnMap (Tr (-1)) (to (Sep O) X)
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X
im:= himage (to (Sep O) X): Factorization (@IsConnMap (Tr (-1))) (@MapIn (Tr (-1))) (to (Sep O) X)
X0: In (Sep O) im
s:= O_rec (factor1 im): O_reflector (Sep O) X -> im

IsConnMap (Tr (-1)) (to (Sep O) X)
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X
im:= himage (to (Sep O) X): Factorization (@IsConnMap (Tr (-1))) (@MapIn (Tr (-1))) (to (Sep O) X)
X0: In (Sep O) im
s:= O_rec (factor1 im): O_reflector (Sep O) X -> im

(fun x : O_reflector (Sep O) X => factor2 im (s x)) == idmap
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X
im:= himage (to (Sep O) X): Factorization (@IsConnMap (Tr (-1))) (@MapIn (Tr (-1))) (to (Sep O) X)
X0: In (Sep O) im
s:= O_rec (factor1 im): O_reflector (Sep O) X -> im
h: factor2 im o s == idmap
IsConnMap (Tr (-1)) (to (Sep O) X)
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X
im:= himage (to (Sep O) X): Factorization (@IsConnMap (Tr (-1))) (@MapIn (Tr (-1))) (to (Sep O) X)
X0: In (Sep O) im
s:= O_rec (factor1 im): O_reflector (Sep O) X -> im

(fun x : O_reflector (Sep O) X => factor2 im (s x)) == idmap
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X
im:= himage (to (Sep O) X): Factorization (@IsConnMap (Tr (-1))) (@MapIn (Tr (-1))) (to (Sep O) X)
X0: In (Sep O) im
x: X

factor2 im (O_rec (factor1 im) (to (Sep O) X x)) = to (Sep O) X x
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X
im:= himage (to (Sep O) X): Factorization (@IsConnMap (Tr (-1))) (@MapIn (Tr (-1))) (to (Sep O) X)
X0: In (Sep O) im
x: X

factor2 im (factor1 im x) = to (Sep O) X x
apply fact_factors.
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X
im:= himage (to (Sep O) X): Factorization (@IsConnMap (Tr (-1))) (@MapIn (Tr (-1))) (to (Sep O) X)
X0: In (Sep O) im
s:= O_rec (factor1 im): O_reflector (Sep O) X -> im
h: factor2 im o s == idmap

IsConnMap (Tr (-1)) (to (Sep O) X)
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X
im:= himage (to (Sep O) X): Factorization (@IsConnMap (Tr (-1))) (@MapIn (Tr (-1))) (to (Sep O) X)
X0: In (Sep O) im
s:= O_rec (factor1 im): O_reflector (Sep O) X -> im
h: factor2 im o s == idmap

forall b : O_reflector (Sep O) X, merely (hfiber (to (Sep O) X) b)
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X
im:= himage (to (Sep O) X): Factorization (@IsConnMap (Tr (-1))) (@MapIn (Tr (-1))) (to (Sep O) X)
X0: In (Sep O) im
s:= O_rec (factor1 im): O_reflector (Sep O) X -> im
h: factor2 im o s == idmap
z: O_reflector (Sep O) X

merely (hfiber (to (Sep O) X) z)
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X
im:= himage (to (Sep O) X): Factorization (@IsConnMap (Tr (-1))) (@MapIn (Tr (-1))) (to (Sep O) X)
X0: In (Sep O) im
s:= O_rec (factor1 im): O_reflector (Sep O) X -> im
z: O_reflector (Sep O) X
h: (s z).1 = z

merely (hfiber (to (Sep O) X) z)
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X
im:= himage (to (Sep O) X): Factorization (@IsConnMap (Tr (-1))) (@MapIn (Tr (-1))) (to (Sep O) X)
X0: In (Sep O) im
s:= O_rec (factor1 im): O_reflector (Sep O) X -> im
z: O_reflector (Sep O) X
w:= s z: im
h: w.1 = z

merely (hfiber (to (Sep O) X) z)
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X
im:= himage (to (Sep O) X): Factorization (@IsConnMap (Tr (-1))) (@MapIn (Tr (-1))) (to (Sep O) X)
X0: In (Sep O) im
s:= O_rec (factor1 im): O_reflector (Sep O) X -> im
z, w1: O_reflector (Sep O) X
w2: Tr (-1) (hfiber (to (Sep O) X) w1)
h: w1 = z

merely (hfiber (to (Sep O) X) z)
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X
im:= himage (to (Sep O) X): Factorization (@IsConnMap (Tr (-1))) (@MapIn (Tr (-1))) (to (Sep O) X)
X0: In (Sep O) im
s:= O_rec (factor1 im): O_reflector (Sep O) X -> im
w1: O_reflector (Sep O) X
w2: Tr (-1) (hfiber (to (Sep O) X) w1)

merely (hfiber (to (Sep O) X) w1)
exact w2. Defined. (** Proposition 2.18 of CORS. *)
H: Univalence
O: ReflectiveSubuniverse
A, B: Type_ O

{Z : Type & In O Z * (Z <~> A = B)}
H: Univalence
O: ReflectiveSubuniverse
A, B: Type_ O

{Z : Type & In O Z * (Z <~> A = B)}
H: Univalence
O: ReflectiveSubuniverse
A, B: Type_ O

In O (A <~> B)
H: Univalence
O: ReflectiveSubuniverse
A, B: Type_ O
(A <~> B) <~> A = B
H: Univalence
O: ReflectiveSubuniverse
A, B: Type_ O

In O (A <~> B)
exact _.
H: Univalence
O: ReflectiveSubuniverse
A, B: Type_ O

(A <~> B) <~> A = B
H: Univalence
O: ReflectiveSubuniverse
A, B: Type_ O

(A <~> B) <~> A.1 = B.1
apply equiv_path_universe. Defined. (** Lemma 2.21 of CORS *)
O: ReflectiveSubuniverse
X: Type
P: X -> Type
H: In (Sep O) X
H0: forall x : X, In O (P x)

In (Sep O) {x : _ & P x}
O: ReflectiveSubuniverse
X: Type
P: X -> Type
H: In (Sep O) X
H0: forall x : X, In O (P x)

In (Sep O) {x : _ & P x}
O: ReflectiveSubuniverse
X: Type
P: X -> Type
H: In (Sep O) X
H0: forall x : X, In O (P x)
u, v: {x : _ & P x}

In O (u = v)
refine (inO_equiv_inO' _ (equiv_path_sigma P _ _)). Defined. (** Proposition 2.22 of CORS (in funext-free form). *)
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X

ReflectsD (Sep O) O X
O: ReflectiveSubuniverse
X: Type
H: PreReflects (Sep O) X
H0: Reflects (Sep O) X

ReflectsD (Sep O) O X
srapply reflectsD_from_inO_sigma. Defined. (** Once we know that [Sep O] is a reflective subuniverse, this will mean that [O << Sep O]. *) (** And now the version with funext. *) Definition isequiv_toSepO_inO `{Funext} (O : ReflectiveSubuniverse) {X : Type} `{Reflects (Sep O) X} (P : O_reflector (Sep O) X -> Type) `{forall x, In O (P x)} : IsEquiv (fun g : (forall y, P y) => g o to (Sep O) X) := isequiv_ooextendable _ _ (extendable_to_OO P). Definition equiv_toSepO_inO `{Funext} (O : ReflectiveSubuniverse) {X : Type} `{Reflects (Sep O) X} (P : O_reflector (Sep O) X -> Type) `{forall x, In O (P x)} : (forall y, P y) <~> (forall x, P (to (Sep O) X x)) := Build_Equiv _ _ _ (isequiv_toSepO_inO O P). (** TODO: Actually prove this, and put it somewhere more appropriate. *) Section JoinConstruction. Universes i j. Context {X : Type@{i}} {Y : Type@{j}} (f : X -> Y) (ls : forall (y1 y2 : Y), @sig@{j j} Type@{i} (fun (Z : Type@{i}) => Equiv@{i j} Z (y1 = y2))).
X, Y: Type
f: X -> Y
ls: forall y1 y2 : Y, {Z : Type & Z <~> y1 = y2}

Type
Admitted.
X, Y: Type
f: X -> Y
ls: forall y1 y2 : Y, {Z : Type & Z <~> y1 = y2}

X -> jc_image
Admitted.
X, Y: Type
f: X -> Y
ls: forall y1 y2 : Y, {Z : Type & Z <~> y1 = y2}

jc_image -> Y
Admitted.
X, Y: Type
f: X -> Y
ls: forall y1 y2 : Y, {Z : Type & Z <~> y1 = y2}

jc_factor2 o jc_factor1 == f
Admitted.
X, Y: Type
f: X -> Y
ls: forall y1 y2 : Y, {Z : Type & Z <~> y1 = y2}

IsConnMap (Tr (-1)) jc_factor1
Admitted.
X, Y: Type
f: X -> Y
ls: forall y1 y2 : Y, {Z : Type & Z <~> y1 = y2}

IsEmbedding jc_factor2
Admitted. End JoinConstruction. (** We'd like to say that the universe of [O]-modal types is [O]-separated, i.e. belongs to [Sep O]. But since a given subuniverse like [Sep O] lives only on a single universe size, trying to say that in the naive way yields a universe inconsistency. *)
The command has indeed failed with message: In environment O : ReflectiveSubuniverse The term "Type_ O" has type "Type@{Separated.5605}" while it is expected to have type "Type@{Separated.5604}" (universe inconsistency: Cannot enforce Separated.5605 <= Separated.5604 because Separated.5604 < Separated.5605).
(** Instead, we do as in Lemma 2.19 of CORS and prove the morally-equivalent "descent" property, using Lemma 2.18 and the join construction. *)
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X

Descends (Sep O) O X
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X

Descends (Sep O) O X
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X

forall P : X -> Type_ O, {Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
e: forall P : X -> Type_ O, {Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
Descends (Sep O) O X
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
e: forall P : X -> Type_ O, {Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}

Descends (Sep O) O X
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
e: forall P : X -> Type_ O, {Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
P': X -> Type
P_inO: forall x : X, In O (P' x)
P:= fun x : X => (P' x; P_inO x) : Type_ O: X -> Type_ O
ee:= e P: {Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}

O_reflector (Sep O) X -> Type
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
e: forall P : X -> Type_ O, {Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
P': X -> Type
P_inO: forall x : X, In O (P' x)
P:= fun x : X => (P' x; P_inO x) : Type_ O: X -> Type_ O
ee:= e P: {Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
forall x : O_reflector (Sep O) X, In O ((fun (P' : X -> Type) (P_inO : forall x0 : X, In O (P' x0)) => let P := fun x0 : X => (P' x0; P_inO x0) : Type_ O in let ee := e P in ?Goal0) P' P_inO x)
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
e: forall P : X -> Type_ O, {Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
P': X -> Type
P_inO: forall x : X, In O (P' x)
P:= fun x : X => (P' x; P_inO x) : Type_ O: X -> Type_ O
ee:= e P: {Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
forall x : X, (fun (P' : X -> Type) (P_inO : forall x0 : X, In O (P' x0)) => let P := fun x0 : X => (P' x0; P_inO x0) : Type_ O in let ee := e P in ?Goal0) P' P_inO (to (Sep O) X x) <~> P' x
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
e: forall P : X -> Type_ O, {Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
P': X -> Type
P_inO: forall x : X, In O (P' x)
P:= fun x : X => (P' x; P_inO x) : Type_ O: X -> Type_ O
ee:= e P: {Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}

O_reflector (Sep O) X -> Type
exact ee.1.
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
e: forall P : X -> Type_ O, {Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
P': X -> Type
P_inO: forall x : X, In O (P' x)
P:= fun x : X => (P' x; P_inO x) : Type_ O: X -> Type_ O
ee:= e P: {Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}

forall x : O_reflector (Sep O) X, In O ((fun (P' : X -> Type) (P_inO : forall x0 : X, In O (P' x0)) => let P := fun x0 : X => (P' x0; P_inO x0) : Type_ O in let ee := e P in fun x0 : O_reflector (Sep O) X => TypeO_pr1 O (ee.1 x0)) P' P_inO x)
simpl; exact _.
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
e: forall P : X -> Type_ O, {Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
P': X -> Type
P_inO: forall x : X, In O (P' x)
P:= fun x : X => (P' x; P_inO x) : Type_ O: X -> Type_ O
ee:= e P: {Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}

forall x : X, (fun (P' : X -> Type) (P_inO : forall x0 : X, In O (P' x0)) => let P := fun x0 : X => (P' x0; P_inO x0) : Type_ O in let ee := e P in fun x0 : O_reflector (Sep O) X => TypeO_pr1 O (ee.1 x0)) P' P_inO (to (Sep O) X x) <~> P' x
intros x; cbn; apply ee.2.
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X

forall P : X -> Type_ O, {Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O

{Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O

forall A B : Type_ O, {Z : Type & Z <~> A = B}
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
{Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O

forall A B : Type_ O, {Z : Type & Z <~> A = B}
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
A, B: Type_ O

{Z : Type & Z <~> A = B}
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
A, B: Type_ O
q:= almost_inSepO_typeO O A B: {Z : Type & In O Z * (Z <~> A = B)}

{Z : Type & Z <~> A = B}
exact (q.1; snd q.2).
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}

{Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
p:= jc_factor2 P ls: jc_image P ls -> Type_ O

{Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
J:= jc_image P ls: Type
p:= jc_factor2 P ls: J -> Type_ O

{Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
J:= jc_image P ls: Type
p:= jc_factor2 P ls: J -> Type_ O

In (Sep O) J
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
J:= jc_image P ls: Type
p:= jc_factor2 P ls: J -> Type_ O
X0: In (Sep O) J
{Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
J:= jc_image P ls: Type
p:= jc_factor2 P ls: J -> Type_ O

In (Sep O) J
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
J:= jc_image P ls: Type
p:= jc_factor2 P ls: J -> Type_ O
x, y: J

In O (x = y)
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
J:= jc_image P ls: Type
p:= jc_factor2 P ls: J -> Type_ O
x, y: J
q:= almost_inSepO_typeO O (p x) (p y): {Z : Type & In O Z * (Z <~> p x = p y)}

In O (x = y)
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
J:= jc_image P ls: Type
p:= jc_factor2 P ls: J -> Type_ O
x, y: J
q:= almost_inSepO_typeO O (p x) (p y): {Z : Type & In O Z * (Z <~> p x = p y)}

q.1 <~> x = y
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
J:= jc_image P ls: Type
p:= jc_factor2 P ls: J -> Type_ O
x, y: J
q:= almost_inSepO_typeO O (p x) (p y): {Z : Type & In O Z * (Z <~> p x = p y)}

?Goal0 <~> x = y
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
J:= jc_image P ls: Type
p:= jc_factor2 P ls: J -> Type_ O
x, y: J
q:= almost_inSepO_typeO O (p x) (p y): {Z : Type & In O Z * (Z <~> p x = p y)}
q.1 <~> ?Goal0
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
J:= jc_image P ls: Type
p:= jc_factor2 P ls: J -> Type_ O
x, y: J
q:= almost_inSepO_typeO O (p x) (p y): {Z : Type & In O Z * (Z <~> p x = p y)}

?Goal0 <~> x = y
symmetry; srapply (equiv_ap_isembedding p).
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
J:= jc_image P ls: Type
p:= jc_factor2 P ls: J -> Type_ O
x, y: J
q:= almost_inSepO_typeO O (p x) (p y): {Z : Type & In O Z * (Z <~> p x = p y)}

q.1 <~> p x = p y
exact (snd q.2).
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
J:= jc_image P ls: Type
p:= jc_factor2 P ls: J -> Type_ O
X0: In (Sep O) J

{Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
J:= jc_image P ls: Type
p:= jc_factor2 P ls: J -> Type_ O
X0: In (Sep O) J
j:= O_rec (jc_factor1 P ls): O_reflector (Sep O) X -> jc_image P ls

{Q : O_reflector (Sep O) X -> Type_ O & forall x : X, Q (to (Sep O) X x) <~> P x}
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
J:= jc_image P ls: Type
p:= jc_factor2 P ls: J -> Type_ O
X0: In (Sep O) J
j:= O_rec (jc_factor1 P ls): O_reflector (Sep O) X -> jc_image P ls

forall x : X, p (j (to (Sep O) X x)) <~> P x
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
J:= jc_image P ls: Type
X0: In (Sep O) J
x: X

jc_factor2 P ls (O_rec (jc_factor1 P ls) (to (Sep O) X x)) <~> P x
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
J:= jc_image P ls: Type
X0: In (Sep O) J
x: X

jc_factor2 P ls (jc_factor1 P ls x) <~> P x
H: Univalence
O: ReflectiveSubuniverse
X: Type
H0: PreReflects (Sep O) X
H1: Reflects (Sep O) X
P: X -> Type_ O
ls: forall A B : Type_ O, {Z : Type & Z <~> A = B}
J:= jc_image P ls: Type
X0: In (Sep O) J
x: X

jc_factor2 P ls (jc_factor1 P ls x) = P x
exact ((jc_factors P ls x)..1). Defined. (** Once we know that [Sep O] is a reflective subuniverse, this will imply [O <<< Sep O], and that if [Sep O] is accessible (such as if [O] is) then [Type_ O] belongs to its accessible lifting (see [inO_TypeO_lex_leq]. *) (** ** Reflectiveness of [Sep O] *) (** TODO *) (** ** Left-exactness properties *) (** Nearly all of these are true in the generality of a pair of reflective subuniverses with [O <<< O'] and/or [O' <= Sep O], and as such can be found in [Descent.v]. *)