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 Extensions HFiber Truncations NullHomotopy Limits.Pullback.Require Import Descent Lex Separated.(** We construct "canonical" binary meets of reflective subuniverses (that is, whose underlying subuniverse is an intersection), without assuming accessibility. In particular, we will show:1. Given two reflective subuniverses L and O, if [L O X] is [O]-modal, then it is a reflection into the canonical meet. In particular, this is always the case if [L] preserves [O]-modal types; this is Theorem 3.30 of RSS.1. If L and O are lex modalities satisfying an additional "composability" condition, then the composite functor [L o O] converges to a reflection into the canonical meet after n+2 applications when applied to an n-type for some finite n.The latter gives in particular a synthetic approach to higher sheafification (stack completion). As described at https://ncatlab.org/nlab/show/plus+construction+on+presheaves, for any site C the topos of presheaves on its Grothendieck topology is cohesive and even totally connected, so that its shape and sharp modalities are both lex. Their canonical meet is the topos of sheaves for the given topology, and the composite functor [shape o sharp] is the usual "plus construction" on (higher) presheaves. Thus, we recover synthetically the result that an n-truncated type can be stackified by (n+2) applications of the plus construction. We also refer to [L o O] as a "plus construction" in the general case of reflective subuniverses. *)SectionRSUMeet.Context (LO : ReflectiveSubuniverse).(** The canonical meet of two subuniverses is their intersection. *)
forallTU : Type,
?In_internal T ->
forallf : T -> U, IsEquiv f -> ?In_internal U
L, O: ReflectiveSubuniverse
Type -> Type
intros X; exact (In L X * In O X).
L, O: ReflectiveSubuniverse
Funext ->
forallT : Type,
IsHProp ((funX : Type => In L X * In O X) T)
intros ? X; exact _.
L, O: ReflectiveSubuniverse
forallTU : Type,
(funX : Type => In L X * In O X) T ->
forallf : T -> U,
IsEquiv f -> (funX : Type => In L X * In O X) U
intros T U [? ?] f feq; split; exact (inO_equiv_inO _ f).Defined.#[export] InstanceinO_inmeet_l (X : Type) `{im : In Meet X} : In L X := fst im.#[export] InstanceinO_inmeet_r (X : Type) `{im : In Meet X} : In O X := snd im.(** The basic tool in studying its reflectivity is the "plus construction" that applies the two reflectors in sequence. *)DefinitionPlus (X : Type) := L (O X).#[export] InstanceinO_plus_l (X : Type) : In L (Plus X) := _.(** This is not necessarily a reflector, but it is a well-pointed endofunctor. *)Definitionto_plus (X : Type) : X -> Plus X
:= to L (O X) o to O X.Definitionplus_functor {XY : Type} (f : X -> Y) : Plus X -> Plus Y
:= O_functor L (O_functor O f).
L, O: ReflectiveSubuniverse X, Y: Type f: X -> Y
plus_functor f o to_plus X == to_plus Y o f
L, O: ReflectiveSubuniverse X, Y: Type f: X -> Y
plus_functor f o to_plus X == to_plus Y o f
L, O: ReflectiveSubuniverse X, Y: Type f: X -> Y x: X
plus_functor f (to_plus X x) = to_plus Y (f x)
L, O: ReflectiveSubuniverse X, Y: Type f: X -> Y x: X
O_functor L (O_functor O f) (to L (O X) (to O X x)) =
to L (O Y) (to O Y (f x))
L, O: ReflectiveSubuniverse X, Y: Type f: X -> Y x: X
to L (O Y) (O_functor O f (to O X x)) =
to L (O Y) (to O Y (f x))
L, O: ReflectiveSubuniverse X, Y: Type f: X -> Y x: X
O_functor O f (to O X x) = to O Y (f x)
apply to_O_natural.Defined.
L, O: ReflectiveSubuniverse X: Type
to_plus (Plus X) == plus_functor (to_plus X)
L, O: ReflectiveSubuniverse X: Type
to_plus (Plus X) == plus_functor (to_plus X)
L, O: ReflectiveSubuniverse X: Type
(funx : O X => to_plus (Plus X) (to L (O X) x)) ==
(funx : O X =>
plus_functor (to_plus X) (to L (O X) x))
L, O: ReflectiveSubuniverse X: Type ox: O X
to_plus (Plus X) (to L (O X) ox) =
plus_functor (to_plus X) (to L (O X) ox)
L, O: ReflectiveSubuniverse X: Type ox: O X
to L (O (Plus X)) (to O (Plus X) (to L (O X) ox)) =
O_functor L
(O_functor O (funx : X => to L (O X) (to O X x)))
(to L (O X) ox)
L, O: ReflectiveSubuniverse X: Type ox: O X
to L (O (Plus X)) (to O (Plus X) (to L (O X) ox)) =
to L (O (Plus X))
(O_functor O (funx : X => to L (O X) (to O X x)) ox)
L, O: ReflectiveSubuniverse X: Type ox: O X
to O (Plus X) (to L (O X) ox) =
O_functor O (funx : X => to L (O X) (to O X x)) ox
L, O: ReflectiveSubuniverse X: Type x: X
to O (Plus X) (to L (O X) (to O X x)) =
O_functor O (funx : X => to L (O X) (to O X x))
(to O X x)
exact ((to_O_natural O _ x)^).Defined.(** Moreover, it has the desired factorization property of a reflector (though it may not belong to the meet subuniverse itself). *)
L, O: ReflectiveSubuniverse X, Y: Type H: In Meet Y
ooExtendableAlong (to_plus X) (fun_ : Plus X => Y)
L, O: ReflectiveSubuniverse X, Y: Type H: In Meet Y
ooExtendableAlong (to_plus X) (fun_ : Plus X => Y)
apply (ooextendable_compose _ (to O X) (to L (O X)));
rapply extendable_to_O.Defined.Definitionplus_rec {PQ : Type} `{In Meet Q} (f : P -> Q)
: Plus P -> Q
:= (fst (ooextendable_plus 1%nat) f).1.Definitionplus_rec_beta {PQ : Type} `{In Meet Q} (f : P -> Q) (x : P)
: plus_rec f (to_plus P x) = f x
:= (fst (ooextendable_plus 1%nat) f).2 x.Definitionplus_indpaths {PQ : Type} `{In Meet Q} (g h : Plus P -> Q)
(p : g o to_plus P == h o to_plus P)
: g == h
:= (fst (snd (ooextendable_plus 2%nat) g h) p).1.Definitionplus_indpaths_beta {PQ : Type} `{In Meet Q} (g h : Plus P -> Q)
(p : g o (to_plus P) == h o (to_plus P)) (x : P)
: plus_indpaths g h p (to_plus P x) = p x
:= (fst (snd (ooextendable_plus 2%nat) g h) p).2 x.(** Moreover, its fixed points, as a pointed endofunctor, are the types in the meet. *)
L, O: ReflectiveSubuniverse X: Type H: In Meet X
IsEquiv (to_plus X)
L, O: ReflectiveSubuniverse X: Type H: In Meet X
IsEquiv (to_plus X)
L, O: ReflectiveSubuniverse X: Type H: In Meet X
IsEquiv (to L (O X))
L, O: ReflectiveSubuniverse X: Type H: In Meet X
In L (O X)
exact (inO_equiv_inO X (to O X)).Defined.
L, O: ReflectiveSubuniverse X: Type H: IsEquiv (to_plus X)
In Meet X
L, O: ReflectiveSubuniverse X: Type H: IsEquiv (to_plus X)
In Meet X
L, O: ReflectiveSubuniverse X: Type H: IsEquiv (to_plus X)
In L X
L, O: ReflectiveSubuniverse X: Type H: IsEquiv (to_plus X)
In O X
L, O: ReflectiveSubuniverse X: Type H: IsEquiv (to_plus X)
In L X
exact (inO_equiv_inO (Plus X) (to_plus X)^-1).
L, O: ReflectiveSubuniverse X: Type H: IsEquiv (to_plus X)
In O X
L, O: ReflectiveSubuniverse X: Type H: IsEquiv (to_plus X)
O X -> X
L, O: ReflectiveSubuniverse X: Type H: IsEquiv (to_plus X)
?mu o to O X == idmap
L, O: ReflectiveSubuniverse X: Type H: IsEquiv (to_plus X)
O X -> X
exact ((to_plus X)^-1 o (to L (O X))).
L, O: ReflectiveSubuniverse X: Type H: IsEquiv (to_plus X)
(to_plus X)^-1 o to L (O X) o to O X == idmap
intros x; apply (eissect (to_plus X)).Defined.(** It follows that if [Plus X] ever *does* lie in the meet, then it is a reflection. *)
L, O: ReflectiveSubuniverse X: Type H: In O (Plus X)
PreReflects Meet X
L, O: ReflectiveSubuniverse X: Type H: In O (Plus X)
PreReflects Meet X
L, O: ReflectiveSubuniverse X: Type H: In O (Plus X)
Type
L, O: ReflectiveSubuniverse X: Type H: In O (Plus X)
In Meet ?O_reflector
L, O: ReflectiveSubuniverse X: Type H: In O (Plus X)
X -> ?O_reflector
L, O: ReflectiveSubuniverse X: Type H: In O (Plus X)
Type
exact (Plus X).
L, O: ReflectiveSubuniverse X: Type H: In O (Plus X)
In Meet (Plus X)
split; exact _.
L, O: ReflectiveSubuniverse X: Type H: In O (Plus X)
X -> Plus X
apply to_plus.Defined.
L, O: ReflectiveSubuniverse X: Type H: In O (Plus X)
Reflects Meet X
L, O: ReflectiveSubuniverse X: Type H: In O (Plus X)
Reflects Meet X
constructor; intros; exact ooextendable_plus.Defined.(** Recalling that a type is connected for a reflective subuniverse if and only if its reflector is nullhomotopic, we define a type to be "plus-connected" if its map to plus is nullhomotopic. If the meet is reflective, this coincides with connectedness for that reflective subuniverse. *)DefinitionPlusConnected (X : Type) := NullHomotopy (to_plus X).
L, O: ReflectiveSubuniverse X, Y: Type f: X <~> Y
PlusConnected X -> PlusConnected Y
L, O: ReflectiveSubuniverse X, Y: Type f: X <~> Y
PlusConnected X -> PlusConnected Y
L, O: ReflectiveSubuniverse X, Y: Type f: X <~> Y px: Plus X e: forallx : X, to_plus X x = px
PlusConnected Y
L, O: ReflectiveSubuniverse X, Y: Type f: X <~> Y px: Plus X e: forallx : X, to_plus X x = px y: Y
to_plus Y y = plus_functor f px
L, O: ReflectiveSubuniverse X, Y: Type f: X <~> Y px: Plus X e: forallx : X, to_plus X x = px y: Y
to_plus Y y = plus_functor f (to_plus X (f^-1 y))
L, O: ReflectiveSubuniverse X, Y: Type f: X <~> Y px: Plus X e: forallx : X, to_plus X x = px y: Y
to_plus Y y = to_plus Y (f (f^-1 y))
symmetry; apply ap, eisretr.Defined.(** Similarly, we say a map is plus-connected if all of its fibers are. *)DefinitionPlusConnMap {XY : Type} (f : X -> Y) := forally, PlusConnected (hfiber f y).EndRSUMeet.(** Let's now assume we are trying to intersect two lex modalities. *)SectionLexMeet.Context (LO : Modality) `{Lex L} `{Lex O}.(** The plus construction, being a composite of two lex functors, is also lex. Thus, it preserves path-types. *)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x, y: X
Plus L O (x = y) <~> to_plus L O X x = to_plus L O X y
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x, y: X
Plus L O (x = y) <~> to_plus L O X x = to_plus L O X y
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x, y: X
Plus L O (x = y) <~> L (to O X x = to O X y)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x, y: X
O (x = y) <~> to O X x = to O X y
rapply equiv_path_O.Defined.
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x, y: X
plus_path x y o to_plus L O (x = y) ==
ap (to_plus L O X)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x, y: X
plus_path x y o to_plus L O (x = y) ==
ap (to_plus L O X)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x, y: X p: x = y
({|
equiv_fun := O_rec (ap (to L (O_reflector O X)));
equiv_isequiv :=
isequiv_path_OO L L (to O X x) (to O X y)
|}
oE equiv_O_functor L
{|
equiv_fun := O_rec (ap (to O X));
equiv_isequiv := isequiv_path_OO O O x y
|}) (to L (O (x = y)) (to O (x = y) p)) =
ap (funx : X => to L (O X) (to O X x)) p
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x, y: X p: x = y
O_rec
(ap
(to (modality_subuniv L)
(O_reflector (modality_subuniv O) X)))
(O_functor L
(O_rec (ap (to (modality_subuniv O) X)))
(to (modality_subuniv L) (O (x = y))
(to (modality_subuniv O) (x = y) p))) =
ap
(funx : X =>
to (modality_subuniv L) (O X)
(to (modality_subuniv O) X x)) p
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x, y: X p: x = y
O_rec
(ap
(to (modality_subuniv L)
(O_reflector (modality_subuniv O) X)))
(to L
(to (modality_subuniv O) X x =
to (modality_subuniv O) X y)
(O_rec (ap (to (modality_subuniv O) X))
(to (modality_subuniv O) (x = y) p))) =
ap
(funx : X =>
to (modality_subuniv L) (O X)
(to (modality_subuniv O) X x)) p
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x, y: X p: x = y
ap
(to (modality_subuniv L)
(O_reflector (modality_subuniv O) X))
(O_rec (ap (to (modality_subuniv O) X))
(to (modality_subuniv O) (x = y) p)) =
ap
(funx : X =>
to (modality_subuniv L) (O X)
(to (modality_subuniv O) X x)) p
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x, y: X p: x = y
ap
(to (modality_subuniv L)
(O_reflector (modality_subuniv O) X))
(O_rec (ap (to (modality_subuniv O) X))
(to (modality_subuniv O) (x = y) p)) =
ap (to L (O X)) (ap (to O X) p)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x, y: X p: x = y
O_rec (ap (to (modality_subuniv O) X))
(to (modality_subuniv O) (x = y) p) = ap (to O X) p
apply O_rec_beta.Defined.(** This implies that plus-connected types are closed under path-spaces. *)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x, y: X pc: PlusConnected L O X
PlusConnected L O (x = y)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x, y: X pc: PlusConnected L O X
PlusConnected L O (x = y)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x, y: X pc: NullHomotopy (to_plus L O X)
NullHomotopy (to_plus L O (x = y))
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x, y: X pc: NullHomotopy (to_plus L O X)
NullHomotopy
(funx0 : x = y =>
plus_path x y (to_plus L O (x = y) x0))
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x, y: X pc: NullHomotopy (to_plus L O X)
NullHomotopy (ap (to_plus L O X))
apply nullhomotopy_ap; assumption.Defined.(** And hence plus-connected maps are closed under diagonals. *)
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y
PlusConnMap L O f -> PlusConnMap L O (diagonal f)
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y
PlusConnMap L O f -> PlusConnMap L O (diagonal f)
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y pc: PlusConnMap L O f p: Pullback f f
PlusConnected L O (hfiber (diagonal f) p)
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y pc: PlusConnMap L O f p: Pullback f f
PlusConnected L O ((p.1; (p.2).2) = ((p.2).1; 1))
apply plusconnected_path, pc.Defined.(** The plus-construction also preserves fibers. *)
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y y: Y
Plus L O (hfiber f y) <~>
hfiber (plus_functor L O f) (to_plus L O Y y)
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y y: Y
Plus L O (hfiber f y) <~>
hfiber (plus_functor L O f) (to_plus L O Y y)
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y y: Y
Plus L O (hfiber f y) <~>
L (hfiber (O_functor O f) (to O Y y))
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y y: Y
O (hfiber f y) <~> hfiber (O_functor O f) (to O Y y)
rapply equiv_O_functor_hfiber.Defined.
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y y: Y
plus_hfiber f y o to_plus L O (hfiber f y) ==
functor_hfiber
(funu : X => (to_plus_natural L O f u)^) y
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y y: Y
plus_hfiber f y o to_plus L O (hfiber f y) ==
functor_hfiber
(funu : X => (to_plus_natural L O f u)^) y
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y y: Y x: X q: f x = y
(equiv_O_functor_hfiber L (O_functor O f) (to O Y y)
oE equiv_O_functor L (equiv_O_functor_hfiber O f y))
(to L (O (hfiber f y)) (to O (hfiber f y) (x; q))) =
functor_hfiber
(funu : X => (to_plus_natural L O f u)^) y (x; q)
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y y: Y x: X q: f x = y
O_functor_hfiber L (O_functor O f)
(to (modality_subuniv O) Y y)
(O_functor L (O_functor_hfiber O f y)
(to (modality_subuniv L) (O (hfiber f y))
(to (modality_subuniv O) (hfiber f y) (x; q)))) =
functor_hfiber
(funu : X => (to_plus_natural L O f u)^) y (x; q)
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y y: Y x: X q: f x = y
O_functor_hfiber L (O_functor O f)
(to (modality_subuniv O) Y y)
(to L
(hfiber (O_functor O f)
(to (modality_subuniv O) Y y))
(O_functor_hfiber O f y
(to (modality_subuniv O) (hfiber f y) (x; q)))) =
functor_hfiber
(funu : X => (to_plus_natural L O f u)^) y (x; q)
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y y: Y x: X q: f x = y
functor_hfiber
(funu : O X => (to_O_natural L (O_functor O f) u)^)
(to (modality_subuniv O) Y y)
(O_functor_hfiber O f y
(to (modality_subuniv O) (hfiber f y) (x; q))) =
functor_hfiber
(funu : X => (to_plus_natural L O f u)^) y (x; q)
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y y: Y x: X q: f x = y
(to (modality_subuniv L) (O X)
(O_rec
(funX0 : hfiber f y =>
(to (modality_subuniv O) X X0.1;
to_O_natural O f X0.1 @
ap (to (modality_subuniv O) Y) X0.2))
(to (modality_subuniv O) (hfiber f y) (x; q))).1;
((to_O_natural L (O_functor O f)
(O_rec
(funX0 : hfiber f y =>
(to (modality_subuniv O) X X0.1;
to_O_natural O f X0.1 @
ap (to (modality_subuniv O) Y) X0.2))
(to (modality_subuniv O) (hfiber f y) (x; q))).1)^)^ @
ap (to (modality_subuniv L) (O Y))
(O_rec
(funX0 : hfiber f y =>
(to (modality_subuniv O) X X0.1;
to_O_natural O f X0.1 @
ap (to (modality_subuniv O) Y) X0.2))
(to (modality_subuniv O) (hfiber f y) (x; q))).2) =
(to (modality_subuniv L) (O X)
(to (modality_subuniv O) X x);
((to_plus_natural L O f x)^)^ @
ap
(funx : Y =>
to (modality_subuniv L) (O Y)
(to (modality_subuniv O) Y x)) q)
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y y: Y x: X q: f x = y
(to (modality_subuniv L) (O X)
(to (modality_subuniv O) X x);
((to_O_natural L (O_functor O f)
(to (modality_subuniv O) X x))^)^ @
ap (to (modality_subuniv L) (O Y))
(to_O_natural O f x @
ap (to (modality_subuniv O) Y) q)) =
(to (modality_subuniv L) (O X)
(to (modality_subuniv O) X x);
((to_plus_natural L O f x)^)^ @
ap
(funx : Y =>
to (modality_subuniv L) (O Y)
(to (modality_subuniv O) Y x)) q)
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y y: Y x: X q: f x = y
((to_O_natural L (O_functor O f)
(to (modality_subuniv O) X x))^)^ @
ap (to (modality_subuniv L) (O Y))
(to_O_natural O f x @
ap (to (modality_subuniv O) Y) q) =
((to_plus_natural L O f x)^)^ @
ap
(funx : Y =>
to (modality_subuniv L) (O Y)
(to (modality_subuniv O) Y x)) q
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y y: Y x: X q: f x = y
((to_O_natural L (O_functor O f)
(to (modality_subuniv O) X x))^)^ @
ap (to (modality_subuniv L) (O Y))
(to_O_natural O f x @
ap (to (modality_subuniv O) Y) q) =
((to_O_natural L (O_functor O f) (to O X x) @
ap (to L (O Y)) (to_O_natural O f x))^)^ @
ap
(funx : Y =>
to (modality_subuniv L) (O Y)
(to (modality_subuniv O) Y x)) q
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y y: Y x: X q: f x = y
(to_O_natural L (O_functor O f)
(to (modality_subuniv O) X x) @
ap (to (modality_subuniv L) (O Y))
(to_O_natural O f x)) @
ap (to (modality_subuniv L) (O Y))
(ap (to (modality_subuniv O) Y) q) =
(to_O_natural L (O_functor O f) (to O X x) @
ap (to L (O Y)) (to_O_natural O f x)) @
ap
(funx : Y =>
to (modality_subuniv L) (O Y)
(to (modality_subuniv O) Y x)) q
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y y: Y x: X q: f x = y
ap (to (modality_subuniv L) (O Y))
(ap (to (modality_subuniv O) Y) q) =
ap
(funx : Y =>
to (modality_subuniv L) (O Y)
(to (modality_subuniv O) Y x)) q
L, O: Modality Lex0: Lex L Lex1: Lex O X, Y: Type f: X -> Y y: Y x: X q: f x = y
ap
(funx : Y =>
to (modality_subuniv L) (O Y)
(to (modality_subuniv O) Y x)) q =
ap
(funx : Y =>
to (modality_subuniv L) (O Y)
(to (modality_subuniv O) Y x)) q
reflexivity.Defined.(** And pullbacks. *)
L, O: Modality Lex0: Lex L Lex1: Lex O A, B, C: Type f: B -> A g: C -> A
Plus L O (Pullback f g) <~>
Pullback (plus_functor L O f) (plus_functor L O g)
L, O: Modality Lex0: Lex L Lex1: Lex O A, B, C: Type f: B -> A g: C -> A
Plus L O (Pullback f g) <~>
Pullback (plus_functor L O f) (plus_functor L O g)
L, O: Modality Lex0: Lex L Lex1: Lex O A, B, C: Type f: B -> A g: C -> A
Plus L O (Pullback f g) <~>
L (Pullback (O_functor O f) (O_functor O g))
L, O: Modality Lex0: Lex L Lex1: Lex O A, B, C: Type f: B -> A g: C -> A
O (Pullback f g) <~>
Pullback (O_functor O f) (O_functor O g)
rapply equiv_O_pullback.Defined.(** And diagonals. *)
L, O: Modality Lex0: Lex L Lex1: Lex O A, B: Type f: A -> B
diagonal (plus_functor L O f) ==
equiv_plus_pullback f f
o plus_functor L O (diagonal f)
L, O: Modality Lex0: Lex L Lex1: Lex O A, B: Type f: A -> B
diagonal (plus_functor L O f) ==
equiv_plus_pullback f f
o plus_functor L O (diagonal f)
L, O: Modality Lex0: Lex L Lex1: Lex O A, B: Type f: A -> B x: Plus L O A
diagonal (plus_functor L O f) x =
equiv_plus_pullback f f
(plus_functor L O (diagonal f) x)
L, O: Modality Lex0: Lex L Lex1: Lex O A, B: Type f: A -> B x: Plus L O A
equiv_O_pullback L (O_functor O f) (O_functor O f)
(O_functor L (diagonal (O_functor O f)) x) =
equiv_plus_pullback f f
(plus_functor L O (diagonal f) x)
L, O: Modality Lex0: Lex L Lex1: Lex O A, B: Type f: A -> B x: Plus L O A
O_functor L (diagonal (O_functor O f)) x =
equiv_O_functor L (equiv_O_pullback O f f)
(plus_functor L O (diagonal f) x)
L, O: Modality Lex0: Lex L Lex1: Lex O A, B: Type f: A -> B x: Plus L O A
O_functor L
(funx : O A =>
equiv_O_pullback O f f (O_functor O (diagonal f) x))
x =
equiv_O_functor L (equiv_O_pullback O f f)
(plus_functor L O (diagonal f) x)
L, O: Modality Lex0: Lex L Lex1: Lex O A, B: Type f: A -> B x: Plus L O A
O_functor L
(funx : O A =>
equiv_O_pullback O f f (O_functor O (diagonal f) x))
x =
equiv_O_functor L (equiv_O_pullback O f f)
(O_functor L (O_functor O (diagonal f)) x)
exact (O_functor_compose L _ _ x).Defined.(** Recall that a modality is characterized by connectedness of the units. Analogously, we can now prove that the plus-units are all plus-connected. This is equivalently a sort of coherence axiom for the homotopy [wellpointed_plus], that when precomposed with [to_plus] it becomes [to_plus_natural]. *)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type
PlusConnMap L O (to_plus L O X)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type
PlusConnMap L O (to_plus L O X)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type y: Plus L O X
NullHomotopy (to_plus L O (hfiber (to_plus L O X) y))
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type y: Plus L O X
NullHomotopy
(funx : hfiber (to_plus L O X) y =>
plus_hfiber (to_plus L O X) y
(to_plus L O (hfiber (to_plus L O X) y) x))
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type y: Plus L O X
NullHomotopy
(functor_hfiber
(funu : X =>
(to_plus_natural L O (to_plus L O X) u)^) y)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type y: Plus L O X
{y0
: {x : Plus L O X &
plus_functor L O (to_plus L O X) x =
to_plus L O (Plus L O X) y} &
forallx : {x : X & to_plus L O X x = y},
functor_hfiber
(funu : X =>
(to_plus_natural L O (to_plus L O X) u)^) y x = y0}
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type y: Plus L O X
plus_functor L O (to_plus L O X) y =
to_plus L O (Plus L O X) y
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type y: Plus L O X
forallx : {x : X & to_plus L O X x = y},
functor_hfiber
(funu : X =>
(to_plus_natural L O (to_plus L O X) u)^) y x =
(y; ?Goal)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type y: Plus L O X
plus_functor L O (to_plus L O X) y =
to_plus L O (Plus L O X) y
symmetry; apply wellpointed_plus.
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type y: Plus L O X
forallx : {x : X & to_plus L O X x = y},
functor_hfiber
(funu : X =>
(to_plus_natural L O (to_plus L O X) u)^) y x =
(y; (wellpointed_plus L O X y)^)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x: X
functor_hfiber
(funu : X =>
(to_plus_natural L O (to_plus L O X) u)^)
(to_plus L O X x) (x; 1) =
(to_plus L O X x;
(wellpointed_plus L O X (to_plus L O X x))^)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x: X
(to_plus L O X x;
((to_plus_natural L O (to_plus L O X) x)^)^ @ 1) =
(to_plus L O X x;
(wellpointed_plus L O X (to_plus L O X x))^)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x: X
((to_plus_natural L O (to_plus L O X) x)^)^ @ 1 =
(wellpointed_plus L O X (to_plus L O X x))^
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x: X
to_plus_natural L O (to_plus L O X) x =
(wellpointed_plus L O X (to_plus L O X x))^
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x: X
to_plus_natural L O (to_plus L O X) x =
(O_indpaths (to_plus L O (Plus L O X))
(plus_functor L O (to_plus L O X))
(funox : O X =>
ap (to L (O (Plus L O X)))
(O_indpaths
(funx : O_reflector O X =>
to O (Plus L O X) (to L (O X) x))
(O_functor O
(funx : X => to L (O X) (to O X x)))
(funx : X =>
(to_O_natural O
(funx0 : X => to L (O X) (to O X x0)) x)^)
ox) @
(to_O_natural L
(O_functor O
(funx : X => to L (O X) (to O X x))) ox)^)
(to_plus L O X x))^
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x: X
to_plus_natural L O (to_plus L O X) x =
(ap (to L (O (Plus L O X)))
(to_O_natural O
(funx : X => to L (O X) (to O X x)) x)^ @
(to_O_natural L
(O_functor O (funx : X => to L (O X) (to O X x)))
(to O X x))^)^
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type x: X
to_plus_natural L O (to_plus L O X) x =
to_O_natural L
(O_functor O (funx : X => to L (O X) (to O X x)))
(to O X x) @
ap (to L (O (Plus L O X)))
(to_O_natural O (funx : X => to L (O X) (to O X x))
x)
reflexivity.Defined.(** Recall also (from [nsep_iff_trunc_to_O]) that a type is n-separated for a lex modality [O] if and only if its [O]-unit is an n-truncated map. We can now prove the analogous fact for the plus-construction. We state this using [MapIn (Tr n)] instead of [IsTrunc n] because we have more useful lemmas for [MapIn]. *)
L, O: Modality Lex0: Lex L Lex1: Lex O n: trunc_index X: Type
In (nSep n (Meet L O)) X <->
MapIn (Tr n) (to_plus L O X)
L, O: Modality Lex0: Lex L Lex1: Lex O n: trunc_index X: Type
In (nSep n (Meet L O)) X <->
MapIn (Tr n) (to_plus L O X)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type H: In (nSep (-2) (Meet L O)) X
MapIn (Tr (-2)) (to_plus L O X)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type H: MapIn (Tr (-2)) (to_plus L O X)
In (nSep (-2) (Meet L O)) X
L, O: Modality Lex0: Lex L Lex1: Lex O n: trunc_index IHn: forallX : Type,
In (nSep n (Meet L O)) X <->
MapIn (Tr n) (to_plus L O X) X: Type H: In (nSep n.+1 (Meet L O)) X
MapIn (Tr n.+1) (to_plus L O X)
L, O: Modality Lex0: Lex L Lex1: Lex O n: trunc_index IHn: forallX : Type,
In (nSep n (Meet L O)) X <->
MapIn (Tr n) (to_plus L O X) X: Type H: MapIn (Tr n.+1) (to_plus L O X)
In (nSep n.+1 (Meet L O)) X
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type H: In (nSep (-2) (Meet L O)) X
MapIn (Tr (-2)) (to_plus L O X)
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type H: In (nSep (-2) (Meet L O)) X
IsEquiv (to_plus L O X)
rapply isequiv_plus_inmeet.
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type H: MapIn (Tr (-2)) (to_plus L O X)
In (nSep (-2) (Meet L O)) X
L, O: Modality Lex0: Lex L Lex1: Lex O X: Type H: MapIn (Tr (-2)) (to_plus L O X)
IsEquiv (to_plus L O X)
rapply isequiv_contr_map.
L, O: Modality Lex0: Lex L Lex1: Lex O n: trunc_index IHn: forallX : Type,
In (nSep n (Meet L O)) X <->
MapIn (Tr n) (to_plus L O X) X: Type H: In (nSep n.+1 (Meet L O)) X
MapIn (Tr n.+1) (to_plus L O X)
L, O: Modality Lex0: Lex L Lex1: Lex O n: trunc_index IHn: forallX : Type,
In (nSep n (Meet L O)) X <->
MapIn (Tr n) (to_plus L O X) X: Type H: In (nSep n.+1 (Meet L O)) X x, y: X
IsTruncMap n (ap (to_plus L O X))
L, O: Modality Lex0: Lex L Lex1: Lex O n: trunc_index IHn: forallX : Type,
In (nSep n (Meet L O)) X <->
MapIn (Tr n) (to_plus L O X) X: Type H: In (nSep n.+1 (Meet L O)) X x, y: X
MapIn (Tr n) (ap (to_plus L O X))
L, O: Modality Lex0: Lex L Lex1: Lex O n: trunc_index IHn: forallX : Type,
In (nSep n (Meet L O)) X <->
MapIn (Tr n) (to_plus L O X) X: Type H: In (nSep n.+1 (Meet L O)) X x, y: X i:= fst (IHn (x = y)) (H x y): MapIn (Tr n) (to_plus L O (x = y))
MapIn (Tr n) (ap (to_plus L O X))
exact (mapinO_homotopic _ _ (plus_path_to_plus x y)).
L, O: Modality Lex0: Lex L Lex1: Lex O n: trunc_index IHn: forallX : Type,
In (nSep n (Meet L O)) X <->
MapIn (Tr n) (to_plus L O X) X: Type H: MapIn (Tr n.+1) (to_plus L O X)
In (nSep n.+1 (Meet L O)) X
L, O: Modality Lex0: Lex L Lex1: Lex O n: trunc_index IHn: forallX : Type,
In (nSep n (Meet L O)) X <->
MapIn (Tr n) (to_plus L O X) X: Type H: MapIn (Tr n.+1) (to_plus L O X) x, y: X
In (nSep n (Meet L O)) (x = y)
L, O: Modality Lex0: Lex L Lex1: Lex O n: trunc_index IHn: forallX : Type,
In (nSep n (Meet L O)) X <->
MapIn (Tr n) (to_plus L O X) X: Type H: MapIn (Tr n.+1) (to_plus L O X) x, y: X
MapIn (Tr n) (to_plus L O (x = y))
L, O: Modality Lex0: Lex L Lex1: Lex O n: trunc_index IHn: forallX : Type,
In (nSep n (Meet L O)) X <->
MapIn (Tr n) (to_plus L O X) X: Type H: MapIn (Tr n.+1) (to_plus L O X) x, y: X i:= istruncmap_ap n (to_plus L O X) x y: IsTruncMap n (ap (to_plus L O X))
MapIn (Tr n) (to_plus L O (x = y))
L, O: Modality Lex0: Lex L Lex1: Lex O n: trunc_index IHn: forallX : Type,
In (nSep n (Meet L O)) X <->
MapIn (Tr n) (to_plus L O X) X: Type H: MapIn (Tr n.+1) (to_plus L O X) x, y: X i: MapIn (Tr n) (ap (to_plus L O X))
MapIn (Tr n) (to_plus L O (x = y))
L, O: Modality Lex0: Lex L Lex1: Lex O n: trunc_index IHn: forallX : Type,
In (nSep n (Meet L O)) X <->
MapIn (Tr n) (to_plus L O X) X: Type H: MapIn (Tr n.+1) (to_plus L O X) x, y: X i: MapIn (Tr n) (ap (to_plus L O X))
(funx0 : x = y =>
(plus_path x y)^-1 (ap (to_plus L O X) x0)) ==
to_plus L O (x = y)
L, O: Modality Lex0: Lex L Lex1: Lex O n: trunc_index IHn: forallX : Type,
In (nSep n (Meet L O)) X <->
MapIn (Tr n) (to_plus L O X) X: Type H: MapIn (Tr n.+1) (to_plus L O X) x, y: X i: MapIn (Tr n) (ap (to_plus L O X))
MapIn (Tr n)
(funx0 : x = y =>
(plus_path x y)^-1 (ap (to_plus L O X) x0))
L, O: Modality Lex0: Lex L Lex1: Lex O n: trunc_index IHn: forallX : Type,
In (nSep n (Meet L O)) X <->
MapIn (Tr n) (to_plus L O X) X: Type H: MapIn (Tr n.+1) (to_plus L O X) x, y: X i: MapIn (Tr n) (ap (to_plus L O X))
(funx0 : x = y =>
(plus_path x y)^-1 (ap (to_plus L O X) x0)) ==
to_plus L O (x = y)
L, O: Modality Lex0: Lex L Lex1: Lex O n: trunc_index IHn: forallX : Type,
In (nSep n (Meet L O)) X <->
MapIn (Tr n) (to_plus L O X) X: Type H: MapIn (Tr n.+1) (to_plus L O X) x, y: X i: MapIn (Tr n) (ap (to_plus L O X))
MapIn (Tr n)
(funx0 : x = y =>
(plus_path x y)^-1 (ap (to_plus L O X) x0))
rapply mapinO_compose.Defined.(** We now make one more assumption, that the plus-construction inverts plus-connected embeddings. In the case of the plus-construction for stacks, this corresponds roughly to the "local character" condition on a Grothendieck topology. *)Context (composing : forall (XY : Type) (f : X -> Y)
(fe : IsEmbedding f) (fc : PlusConnMap L O f),
IsEquiv (plus_functor L O f)).(** This implies, by induction, that the plus-construction decreases the truncation-level of any finitely truncated plus-connected map. *)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X, Y: Type f: X -> Y H: MapIn (Tr n.+1) f pc: PlusConnMap L O f
MapIn (Tr n) (plus_functor L O f)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X, Y: Type f: X -> Y H: MapIn (Tr n.+1) f pc: PlusConnMap L O f
MapIn (Tr n) (plus_functor L O f)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) X, Y: Type f: X -> Y H: MapIn (Tr (-1)) f pc: PlusConnMap L O f
MapIn (Tr (-2)) (plus_functor L O f)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forall (XY : Type) (f : X -> Y),
MapIn (Tr n.+1) f ->
PlusConnMap L O f ->
MapIn (Tr n) (plus_functor L O f) X, Y: Type f: X -> Y H: MapIn (Tr n.+2) f pc: PlusConnMap L O f
MapIn (Tr n.+1) (plus_functor L O f)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) X, Y: Type f: X -> Y H: MapIn (Tr (-1)) f pc: PlusConnMap L O f
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forall (XY : Type) (f : X -> Y),
MapIn (Tr n.+1) f ->
PlusConnMap L O f ->
MapIn (Tr n) (plus_functor L O f) X, Y: Type f: X -> Y H: MapIn (Tr n.+2) f pc: PlusConnMap L O f
MapIn (Tr n.+1) (plus_functor L O f)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forall (XY : Type) (f : X -> Y),
MapIn (Tr n.+1) f ->
PlusConnMap L O f ->
MapIn (Tr n) (plus_functor L O f) X, Y: Type f: X -> Y H: MapIn (Tr n.+2) f pc: PlusConnMap L O f o:= O_eq_Tr n: Tr n.+1 <=> Sep (Tr n)
MapIn (Tr n.+1) (plus_functor L O f)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forall (XY : Type) (f : X -> Y),
MapIn (Tr n.+1) f ->
PlusConnMap L O f ->
MapIn (Tr n) (plus_functor L O f) X, Y: Type f: X -> Y H: MapIn (Tr n.+2) f pc: PlusConnMap L O f o:= O_eq_Tr n: Tr n.+1 <=> Sep (Tr n)
MapIn (Tr n) (diagonal (plus_functor L O f))
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forall (XY : Type) (f : X -> Y),
MapIn (Tr n.+1) f ->
PlusConnMap L O f ->
MapIn (Tr n) (plus_functor L O f) X, Y: Type f: X -> Y H: MapIn (Tr n.+2) f pc: PlusConnMap L O f o:= O_eq_Tr n: Tr n.+1 <=> Sep (Tr n)
MapIn (Tr n)
(funu : Plus L O X =>
equiv_plus_pullback f f
(plus_functor L O (diagonal f) u))
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forall (XY : Type) (f : X -> Y),
MapIn (Tr n.+1) f ->
PlusConnMap L O f ->
MapIn (Tr n) (plus_functor L O f) X, Y: Type f: X -> Y H: MapIn (Tr n.+2) f pc: PlusConnMap L O f o:= O_eq_Tr n: Tr n.+1 <=> Sep (Tr n)
MapIn (Tr n) (plus_functor L O (diagonal f))
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forall (XY : Type) (f : X -> Y),
MapIn (Tr n.+1) f ->
PlusConnMap L O f ->
MapIn (Tr n) (plus_functor L O f) X, Y: Type f: X -> Y H: MapIn (Tr n.+2) f pc: PlusConnMap L O f o:= O_eq_Tr n: Tr n.+1 <=> Sep (Tr n)
MapIn (Tr n) (equiv_plus_pullback f f)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forall (XY : Type) (f : X -> Y),
MapIn (Tr n.+1) f ->
PlusConnMap L O f ->
MapIn (Tr n) (plus_functor L O f) X, Y: Type f: X -> Y H: MapIn (Tr n.+2) f pc: PlusConnMap L O f o:= O_eq_Tr n: Tr n.+1 <=> Sep (Tr n)
MapIn (Tr n) (plus_functor L O (diagonal f))
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forall (XY : Type) (f : X -> Y),
MapIn (Tr n.+1) f ->
PlusConnMap L O f ->
MapIn (Tr n) (plus_functor L O f) X, Y: Type f: X -> Y H: MapIn (Tr n.+2) f pc: PlusConnMap L O f o:= O_eq_Tr n: Tr n.+1 <=> Sep (Tr n)
MapIn (Tr n.+1) (diagonal f)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forall (XY : Type) (f : X -> Y),
MapIn (Tr n.+1) f ->
PlusConnMap L O f ->
MapIn (Tr n) (plus_functor L O f) X, Y: Type f: X -> Y H: MapIn (Tr n.+2) f pc: PlusConnMap L O f o:= O_eq_Tr n: Tr n.+1 <=> Sep (Tr n)
PlusConnMap L O (diagonal f)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forall (XY : Type) (f : X -> Y),
MapIn (Tr n.+1) f ->
PlusConnMap L O f ->
MapIn (Tr n) (plus_functor L O f) X, Y: Type f: X -> Y H: MapIn (Tr n.+2) f pc: PlusConnMap L O f o:= O_eq_Tr n: Tr n.+1 <=> Sep (Tr n)
MapIn (Tr n.+1) (diagonal f)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forall (XY : Type) (f : X -> Y),
MapIn (Tr n.+1) f ->
PlusConnMap L O f ->
MapIn (Tr n) (plus_functor L O f) X, Y: Type f: X -> Y H: MapIn (Tr n.+2) f pc: PlusConnMap L O f o:= O_eq_Tr n: Tr n.+1 <=> Sep (Tr n)
MapIn (Sep (Tr n.+1)) f
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forall (XY : Type) (f : X -> Y),
MapIn (Tr n.+1) f ->
PlusConnMap L O f ->
MapIn (Tr n) (plus_functor L O f) X, Y: Type f: X -> Y H: MapIn (Tr n.+2) f pc: PlusConnMap L O f o:= O_eq_Tr n: Tr n.+1 <=> Sep (Tr n) o0:= O_eq_Tr n.+1: Tr n.+2 <=> Sep (Tr n.+1)
MapIn (Sep (Tr n.+1)) f
rapply (mapinO_O_leq _ (Sep (Tr n.+1))).
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forall (XY : Type) (f : X -> Y),
MapIn (Tr n.+1) f ->
PlusConnMap L O f ->
MapIn (Tr n) (plus_functor L O f) X, Y: Type f: X -> Y H: MapIn (Tr n.+2) f pc: PlusConnMap L O f o:= O_eq_Tr n: Tr n.+1 <=> Sep (Tr n)
PlusConnMap L O (diagonal f)
apply plusconnmap_diagonal; assumption.Defined.(** It follows, by applying this to the plus-unit and using well-pointedness, that the plus-construction on *types* decreases their plus-separatedness. *)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n.+1 (Meet L O)) X
In (nSep n (Meet L O)) (Plus L O X)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n.+1 (Meet L O)) X
In (nSep n (Meet L O)) (Plus L O X)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n.+1 (Meet L O)) X
MapIn (Tr n) (to_plus L O (Plus L O X))
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n.+1 (Meet L O)) X
MapIn (Tr n) (plus_functor L O (to_plus L O X))
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n.+1 (Meet L O)) X
MapIn (Tr n.+1) (to_plus L O X)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n.+1 (Meet L O)) X
PlusConnMap L O (to_plus L O X)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n.+1 (Meet L O)) X
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n.+1 (Meet L O)) X
PlusConnMap L O (to_plus L O X)
apply plusconnmap_to_plus.Defined.(** Therefore, if a type starts out as n-plus-separated, then n+2 applications of the plus-construction suffice to make it (-2)-plus-separated, i.e. in the meet subuniverse. Hence it has a reflection. *)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n (Meet L O)) X
PreReflects (Meet L O) X
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n (Meet L O)) X
PreReflects (Meet L O) X
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) X: Type H: In (nSep (-2) (Meet L O)) X
PreReflects (Meet L O) X
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forallX : Type,
In (nSep n (Meet L O)) X ->
PreReflects (Meet L O) X X: Type H: In (nSep n.+1 (Meet L O)) X
PreReflects (Meet L O) X
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) X: Type H: In (nSep (-2) (Meet L O)) X
PreReflects (Meet L O) X
rapply prereflects_in.
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forallX : Type,
In (nSep n (Meet L O)) X ->
PreReflects (Meet L O) X X: Type H: In (nSep n.+1 (Meet L O)) X
PreReflects (Meet L O) X
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type IHn: PreReflects (Meet L O) (Plus L O X) H: In (nSep n.+1 (Meet L O)) X
PreReflects (Meet L O) X
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type IHn: PreReflects (Meet L O) (Plus L O X) H: In (nSep n.+1 (Meet L O)) X
Type
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type IHn: PreReflects (Meet L O) (Plus L O X) H: In (nSep n.+1 (Meet L O)) X
In (Meet L O) ?O_reflector
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type IHn: PreReflects (Meet L O) (Plus L O X) H: In (nSep n.+1 (Meet L O)) X
X -> ?O_reflector
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type IHn: PreReflects (Meet L O) (Plus L O X) H: In (nSep n.+1 (Meet L O)) X
Type
exact (O_reflector (Meet L O) (Plus L O X)).
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type IHn: PreReflects (Meet L O) (Plus L O X) H: In (nSep n.+1 (Meet L O)) X
In (Meet L O) (O_reflector (Meet L O) (Plus L O X))
exact _.
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type IHn: PreReflects (Meet L O) (Plus L O X) H: In (nSep n.+1 (Meet L O)) X
X -> O_reflector (Meet L O) (Plus L O X)
exact (to (Meet L O) (Plus L O X) o to_plus L O X).Defined.
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n (Meet L O)) X
Reflects (Meet L O) X
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n (Meet L O)) X
Reflects (Meet L O) X
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) X: Type H: In (nSep (-2) (Meet L O)) X
Reflects (Meet L O) X
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forall (X : Type)
(H : In (nSep n (Meet L O)) X),
Reflects (Meet L O) X X: Type H: In (nSep n.+1 (Meet L O)) X
Reflects (Meet L O) X
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) X: Type H: In (nSep (-2) (Meet L O)) X
Reflects (Meet L O) X
rapply reflects_in.
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index IHn: forall (X : Type)
(H : In (nSep n (Meet L O)) X),
Reflects (Meet L O) X X: Type H: In (nSep n.+1 (Meet L O)) X
Reflects (Meet L O) X
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n.+1 (Meet L O)) X IHn: Reflects (Meet L O) (Plus L O X)
Reflects (Meet L O) X
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n.+1 (Meet L O)) X IHn: Reflects (Meet L O) (Plus L O X) Q: Type Q_inO: In (Meet L O) Q
ooExtendableAlong (to (Meet L O) X)
(fun_ : O_reflector (Meet L O) X => Q)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n.+1 (Meet L O)) X IHn: Reflects (Meet L O) (Plus L O X) Q: Type Q_inO: In (Meet L O) Q
ooExtendableAlong (to (Meet L O) (Plus L O X))
(fun_ : O_reflector (Meet L O) X => Q)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n.+1 (Meet L O)) X IHn: Reflects (Meet L O) (Plus L O X) Q: Type Q_inO: In (Meet L O) Q
ooExtendableAlong (to_plus L O X)
(fun_ : Plus L O X => Q)
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n.+1 (Meet L O)) X IHn: Reflects (Meet L O) (Plus L O X) Q: Type Q_inO: In (Meet L O) Q
ooExtendableAlong (to (Meet L O) (Plus L O X))
(fun_ : O_reflector (Meet L O) X => Q)
apply (@extendable_to_O (Meet L O) (Plus L O X)); assumption.
L, O: Modality Lex0: Lex L Lex1: Lex O composing: forall (XY : Type) (f : X -> Y),
IsEmbedding f ->
PlusConnMap L O f ->
IsEquiv (plus_functor L O f) n: trunc_index X: Type H: In (nSep n.+1 (Meet L O)) X IHn: Reflects (Meet L O) (Plus L O X) Q: Type Q_inO: In (Meet L O) Q
ooExtendableAlong (to_plus L O X)
(fun_ : Plus L O X => Q)