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.
(** * Injectivity of Sigma types *)(** Here we characterize the condition for which a sigma type over an injective type is itself injective, and we also provide some examples.Many proofs guided by original Agda formalization in the Type Topology Library which can be found at: https://martinescardo.github.io/TypeTopology/InjectiveTypes.Sigma and InjectiveTypes.MathematicalStructuresMoreGeneral. *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Types.Forall Types.Sigma Types.Universe.Require Import Modalities.ReflectiveSubuniverse.Require Import Truncations.Core.Require Import InjectiveTypes.InjectiveTypes InjectiveTypes.TypeFamKanExt.SectionAlgFlabSigma.Context {X : Type} (A : X -> Type) (Xaf : IsAlgebraicFlabbyType X).(** The condition for a sigma type over an algebraically flabby type to be algebraically flabby can be described as the existence of a section to the following map for every [P] and [f]. *)Definitionalg_flab_map (P : HProp) (f : P -> X)
: (A (center_af f)) -> (forallh, A (f h))
:= funah => contr_af f h # a.(** Here is the condition. (It would in fact be enough to assume that [s] is section up to homotopies in its domain.) *)Definitionalg_flab_sigma_condition
:= forallPf, {s : _ & alg_flab_map P f o s == idmap}.(** A sigma type over an algebraically flabby type is also algebraically flabby, and thus algebraically injective, when the above condition holds. *)
X: Type A: X -> Type Xaf: IsAlgebraicFlabbyType X cond: alg_flab_sigma_condition
IsAlgebraicFlabbyType {x : X & A x}
X: Type A: X -> Type Xaf: IsAlgebraicFlabbyType X cond: alg_flab_sigma_condition
IsAlgebraicFlabbyType {x : X & A x}
X: Type A: X -> Type Xaf: IsAlgebraicFlabbyType X cond: alg_flab_sigma_condition P: HProp f: P -> {x : X & A x}
{x : X & A x}
X: Type A: X -> Type Xaf: IsAlgebraicFlabbyType X cond: alg_flab_sigma_condition P: HProp f: P -> {x : X & A x}
forallp : P,
(fun (P : HProp) (f : P -> {x : X & A x}) => ?Goal) P
f = f p
X: Type A: X -> Type Xaf: IsAlgebraicFlabbyType X cond: alg_flab_sigma_condition P: HProp f: P -> {x : X & A x} C:= cond P (pr1 o f): {s
: (forallh : P, A ((pr1 o f) h)) ->
A (center_af (pr1 o f)) &
alg_flab_map P (pr1 o f) o s == idmap}
{x : X & A x}
X: Type A: X -> Type Xaf: IsAlgebraicFlabbyType X cond: alg_flab_sigma_condition P: HProp f: P -> {x : X & A x} C:= cond P (pr1 o f): {s
: (forallh : P, A ((pr1 o f) h)) ->
A (center_af (pr1 o f)) &
alg_flab_map P (pr1 o f) o s == idmap}
forallp : P,
(fun (P : HProp) (f : P -> {x : X & A x}) =>
letC := cond P (pr1 o f) in?Goal) P f =
f p
X: Type A: X -> Type Xaf: IsAlgebraicFlabbyType X cond: alg_flab_sigma_condition P: HProp f: P -> {x : X & A x} C:= cond P (pr1 o f): {s
: (forallh : P, A ((pr1 o f) h)) ->
A (center_af (pr1 o f)) &
alg_flab_map P (pr1 o f) o s == idmap}
{x : X & A x}
X: Type A: X -> Type Xaf: IsAlgebraicFlabbyType X cond: alg_flab_sigma_condition P: HProp f: P -> {x : X & A x} C:= cond P (pr1 o f): {s
: (forallh : P, A ((pr1 o f) h)) ->
A (center_af (pr1 o f)) &
alg_flab_map P (pr1 o f) o s == idmap}
A (center_af (funx : P => (f x).1))
(* For the point in [A (above)], we use the section component of [cond P (pr1 o f)]: *)exact (C.1 (pr2 o f)).
X: Type A: X -> Type Xaf: IsAlgebraicFlabbyType X cond: alg_flab_sigma_condition P: HProp f: P -> {x : X & A x} C:= cond P (pr1 o f): {s
: (forallh : P, A ((pr1 o f) h)) ->
A (center_af (pr1 o f)) &
alg_flab_map P (pr1 o f) o s == idmap}
forallp : P,
(fun (P : HProp) (f : P -> {x : X & A x}) =>
letC := cond P (pr1 o f) in
(center_af (funx : P => (f x).1); C.1 (pr2 o f))) P
f = f p
X: Type A: X -> Type Xaf: IsAlgebraicFlabbyType X cond: alg_flab_sigma_condition P: HProp f: P -> {x : X & A x} C:= cond P (pr1 o f): {s
: (forallh : P, A ((pr1 o f) h)) ->
A (center_af (pr1 o f)) &
alg_flab_map P (pr1 o f) o s == idmap} h: P
(center_af (funx : P => (f x).1);
(cond P (funx : P => (f x).1)).1
(funx : P => (f x).2)) = f h
X: Type A: X -> Type Xaf: IsAlgebraicFlabbyType X cond: alg_flab_sigma_condition P: HProp f: P -> {x : X & A x} C:= cond P (pr1 o f): {s
: (forallh : P, A ((pr1 o f) h)) ->
A (center_af (pr1 o f)) &
alg_flab_map P (pr1 o f) o s == idmap} h: P
(center_af (funx : P => (f x).1);
C.1 (funx : P => (f x).2)) = f h
(* We need to show that the point we gave is equal to [f h]. *)
X: Type A: X -> Type Xaf: IsAlgebraicFlabbyType X cond: alg_flab_sigma_condition P: HProp f: P -> {x : X & A x} C:= cond P (pr1 o f): {s
: (forallh : P, A ((pr1 o f) h)) ->
A (center_af (pr1 o f)) &
alg_flab_map P (pr1 o f) o s == idmap} h: P
center_af (funx : P => (f x).1) = (f h).1
X: Type A: X -> Type Xaf: IsAlgebraicFlabbyType X cond: alg_flab_sigma_condition P: HProp f: P -> {x : X & A x} C:= cond P (pr1 o f): {s
: (forallh : P, A ((pr1 o f) h)) ->
A (center_af (pr1 o f)) &
alg_flab_map P (pr1 o f) o s == idmap} h: P
transport (funx : X => A x)
?Goal (C.1 (funx : P => (f x).2)) =
(f h).2
X: Type A: X -> Type Xaf: IsAlgebraicFlabbyType X cond: alg_flab_sigma_condition P: HProp f: P -> {x : X & A x} C:= cond P (pr1 o f): {s
: (forallh : P, A ((pr1 o f) h)) ->
A (center_af (pr1 o f)) &
alg_flab_map P (pr1 o f) o s == idmap} h: P
center_af (funx : P => (f x).1) = (f h).1
napply contr_af.
X: Type A: X -> Type Xaf: IsAlgebraicFlabbyType X cond: alg_flab_sigma_condition P: HProp f: P -> {x : X & A x} C:= cond P (pr1 o f): {s
: (forallh : P, A ((pr1 o f) h)) ->
A (center_af (pr1 o f)) &
alg_flab_map P (pr1 o f) o s == idmap} h: P
transport (funx : X => A x)
(contr_af (funx : P => (f x).1) h)
(C.1 (funx : P => (f x).2)) = (f h).2
exact (apD10 (C.2 (pr2 o f)) h).Defined.Definitionalg_inj_sigma (cond : alg_flab_sigma_condition)
: IsAlgebraicInjectiveType {x : X & A x}
:= alg_inj_alg_flab (alg_flab_sigma cond).EndAlgFlabSigma.(** Taking our algebraically flabby type [X] to be [Type], we introduce our primary examples (the types of pointed types, monoids, etc.), and give a few simplifying lemmas. *)SectionAlgFlabUniverse.(** [T] is a version of transport in the type family [A]. It could be defined to be transport combined with univalence, but we allow the user to choose different "implementations" of transport that might be more convenient. *)Context (A : Type -> Type) (T : forall {XY}, X <~> Y -> A X -> A Y)
(Trefl : forallX, (T (equiv_idmap X) == idmap)).Arguments T {X Y} _ _. (* This is needed, despite the braces above. *)(** When studying the sigma type [{X : Type & A X}], the map [alg_flab_map] can be exchanged for either of these simpler maps. This first one will turn out to be homotopic to [alg_flab_map] when [Type] is given its "forall" flabbiness structure. *)
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Funext P: HProp f: P -> Type
A (forallh : P, f h) -> forallh : P, A (f h)
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Funext P: HProp f: P -> Type
A (forallh : P, f h) -> forallh : P, A (f h)
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Funext P: HProp f: P -> Type a: A (forallh : P, f h) h: P
A (f h)
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Funext P: HProp f: P -> Type a: A (forallh : P, f h) h: P
(forallh : P, f h) <~> f h
apply (@equiv_contr_forall _ _ (contr_inhabited_hprop _ _)).Defined.(** And this one is homotopic to [alg_flab_map] when [Type] is given its "sigma" flabbiness structure. *)
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap P: HProp f: P -> Type
A {h : P & f h} -> forallh : P, A (f h)
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap P: HProp f: P -> Type
A {h : P & f h} -> forallh : P, A (f h)
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap P: HProp f: P -> Type a: A {h : P & f h} h: P
A (f h)
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap P: HProp f: P -> Type a: A {h : P & f h} h: P
{h : P & f h} <~> f h
apply (@equiv_contr_sigma _ _ (contr_inhabited_hprop _ _)).Defined.(** The following conditions can be thought of as closure conditions under pi or sigma types for the type family [A]. *)Definitionalg_flab_sigma_condition_forall `{Funext}
:= forallPf, {s : _ & alg_flab_map_forall P f o s == idmap}.Definitionalg_flab_sigma_condition_sigma
:= forallPf, {s : _ & alg_flab_map_sigma P f o s == idmap}.
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence P: HProp f: P -> Type
alg_flab_map_forall P f ==
alg_flab_map A alg_flab_Type_forall P f
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence P: HProp f: P -> Type
alg_flab_map_forall P f ==
alg_flab_map A alg_flab_Type_forall P f
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence P: HProp f: P -> Type a: A (forallh : P, f h)
alg_flab_map_forall P f a =
alg_flab_map A alg_flab_Type_forall P f a
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence P: HProp f: P -> Type a: A (forallh : P, f h) h: P
alg_flab_map_forall P f a h =
alg_flab_map A alg_flab_Type_forall P f a h
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence P: HProp f: P -> Type a: A (forallh : P, f h) h: P
forallX : Type, univalent_transport A 1 == idmap
apply univalent_transport_idequiv.Defined.
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence P: HProp f: P -> Type
alg_flab_map_sigma P f ==
alg_flab_map A alg_flab_Type_sigma P f
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence P: HProp f: P -> Type
alg_flab_map_sigma P f ==
alg_flab_map A alg_flab_Type_sigma P f
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence P: HProp f: P -> Type s: A {h : P & f h}
alg_flab_map_sigma P f s =
alg_flab_map A alg_flab_Type_sigma P f s
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence P: HProp f: P -> Type s: A {h : P & f h} h: P
alg_flab_map_sigma P f s h =
alg_flab_map A alg_flab_Type_sigma P f s h
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence P: HProp f: P -> Type s: A {h : P & f h} h: P
forallX : Type, univalent_transport A 1 == idmap
apply univalent_transport_idequiv.Defined.(** The original [sigma_condition] is implied by our reformulated conditions [alg_flab_sigma_condition_forall] and [alg_flab_sigma_condition_sigma]. *)
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence condf: alg_flab_sigma_condition_forall
alg_flab_sigma_condition A alg_flab_Type_forall
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence condf: alg_flab_sigma_condition_forall
alg_flab_sigma_condition A alg_flab_Type_forall
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence condf: alg_flab_sigma_condition_forall P: HProp f: P -> Type
{s : (forallh : P, A (f h)) -> A (center_af f) &
(funx : forallh : P, A (f h) =>
alg_flab_map A alg_flab_Type_forall P f (s x)) ==
idmap}
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence condf: alg_flab_sigma_condition_forall P: HProp f: P -> Type s: (forallh : P, A (f h)) -> A (forallh : P, f h) J: (funx : forallh : P, A (f h) =>
alg_flab_map_forall P f (s x)) == idmap
{s : (forallh : P, A (f h)) -> A (center_af f) &
(funx : forallh : P, A (f h) =>
alg_flab_map A alg_flab_Type_forall P f (s x)) ==
idmap}
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence condf: alg_flab_sigma_condition_forall P: HProp f: P -> Type s: (forallh : P, A (f h)) -> A (forallh : P, f h) J: (funx : forallh : P, A (f h) =>
alg_flab_map_forall P f (s x)) == idmap
(funx : forallh : P, A (f h) =>
alg_flab_map A alg_flab_Type_forall P f (s x)) ==
idmap
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence condf: alg_flab_sigma_condition_forall P: HProp f: P -> Type s: (forallh : P, A (f h)) -> A (forallh : P, f h) J: (funx : forallh : P, A (f h) =>
alg_flab_map_forall P f (s x)) == idmap g: forallh : P, A (f h)
alg_flab_map A alg_flab_Type_forall P f (s g) = g
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence condf: alg_flab_sigma_condition_forall P: HProp f: P -> Type s: (forallh : P, A (f h)) -> A (forallh : P, f h) J: (funx : forallh : P, A (f h) =>
alg_flab_map_forall P f (s x)) == idmap g: forallh : P, A (f h)
alg_flab_map_forall P f (s g) = g
apply J.Defined.
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence condf: alg_flab_sigma_condition_forall
IsAlgebraicFlabbyType {X : Type & A X}
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence condf: alg_flab_sigma_condition_forall
IsAlgebraicFlabbyType {X : Type & A X}
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence condf: alg_flab_sigma_condition_forall
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence condf: alg_flab_sigma_condition_sigma
alg_flab_sigma_condition A alg_flab_Type_sigma
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence condf: alg_flab_sigma_condition_sigma
alg_flab_sigma_condition A alg_flab_Type_sigma
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence condf: alg_flab_sigma_condition_sigma P: HProp f: P -> Type
{s : (forallh : P, A (f h)) -> A (center_af f) &
(funx : forallh : P, A (f h) =>
alg_flab_map A alg_flab_Type_sigma P f (s x)) ==
idmap}
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence condf: alg_flab_sigma_condition_sigma P: HProp f: P -> Type s: (forallh : P, A (f h)) -> A {h : P & f h} J: (funx : forallh : P, A (f h) =>
alg_flab_map_sigma P f (s x)) == idmap
{s : (forallh : P, A (f h)) -> A (center_af f) &
(funx : forallh : P, A (f h) =>
alg_flab_map A alg_flab_Type_sigma P f (s x)) ==
idmap}
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence condf: alg_flab_sigma_condition_sigma P: HProp f: P -> Type s: (forallh : P, A (f h)) -> A {h : P & f h} J: (funx : forallh : P, A (f h) =>
alg_flab_map_sigma P f (s x)) == idmap
(funx : forallh : P, A (f h) =>
alg_flab_map A alg_flab_Type_sigma P f (s x)) ==
idmap
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence condf: alg_flab_sigma_condition_sigma P: HProp f: P -> Type s: (forallh : P, A (f h)) -> A {h : P & f h} J: (funx : forallh : P, A (f h) =>
alg_flab_map_sigma P f (s x)) == idmap g: forallh : P, A (f h)
alg_flab_map A alg_flab_Type_sigma P f (s g) = g
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence condf: alg_flab_sigma_condition_sigma P: HProp f: P -> Type s: (forallh : P, A (f h)) -> A {h : P & f h} J: (funx : forallh : P, A (f h) =>
alg_flab_map_sigma P f (s x)) == idmap g: forallh : P, A (f h)
alg_flab_map_sigma P f (s g) = g
apply J.Defined.
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence conds: alg_flab_sigma_condition_sigma
IsAlgebraicFlabbyType {X : Type & A X}
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence conds: alg_flab_sigma_condition_sigma
IsAlgebraicFlabbyType {X : Type & A X}
A: Type -> Type T: forallXY : Type, X <~> Y -> A X -> A Y Trefl: forallX : Type, T 1 == idmap H: Univalence conds: alg_flab_sigma_condition_sigma
alg_flab_sigma_condition A ?Goal
exact (sigma_condition_sigma_condition_sigma conds).Defined.EndAlgFlabUniverse.(** The type of pointed types is algebraically flabby. *)
{s : (forallh : P, f h) -> forallh : P, f h &
(funx : forallh : P, f h =>
alg_flab_map_forall idmap (@equiv_fun) P f (s x)) ==
idmap}
H: Univalence P: HProp f: P -> Type
(funx : forallh : P, f h =>
alg_flab_map_forall idmap (@equiv_fun) P f x) ==
idmap
reflexivity.Defined.(** The following results are adapted from section 7 of Injective Types in Univalent Mathematics by Martín Escardó, using the above results. *)(** For a subuniverse, the flabbiness condition is equivalent to closure under proposition indexed pi types (or sigma types), so using this we can state a simpler theorem for proving flabbiness of subuniverses. *)
H: Univalence O: Subuniverse condForall: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O (forallh : P, A h)
IsAlgebraicFlabbyType (Type_ O)
H: Univalence O: Subuniverse condForall: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O (forallh : P, A h)
IsAlgebraicFlabbyType (Type_ O)
H: Univalence O: Subuniverse condForall: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O (forallh : P, A h)
forallX : Type,
(funH : In O X => inO_equiv_inO' X 1) == idmap
H: Univalence O: Subuniverse condForall: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O (forallh : P, A h)
alg_flab_sigma_condition_forall
(In O)
(fun (XY : Type) (f : X <~> Y) (H : In O X) =>
inO_equiv_inO' X f)
H: Univalence O: Subuniverse condForall: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O (forallh : P, A h)
forallX : Type,
(funH : In O X => inO_equiv_inO' X 1) == idmap
H: Univalence O: Subuniverse condForall: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O (forallh : P, A h) X: Type A: In O X
inO_equiv_inO' X 1 = A
apply path_ishprop.
H: Univalence O: Subuniverse condForall: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O (forallh : P, A h)
alg_flab_sigma_condition_forall
(In O)
(fun (XY : Type) (f : X <~> Y) (H : In O X) =>
inO_equiv_inO' X f)
H: Univalence O: Subuniverse condForall: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O (forallh : P, A h) P: HProp A: P -> Type
{s
: (forallh : P, In O (A h)) ->
In O (forallh : P, A h) &
(funx : forallh : P, In O (A h) =>
alg_flab_map_forall (In O)
(fun (XY : Type) (f : X <~> Y) (H : In O X) =>
inO_equiv_inO' X f) P A
(s x)) == idmap}
H: Univalence O: Subuniverse condForall: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O (forallh : P, A h) P: HProp A: P -> Type
(funx : forallh : P, In O (A h) =>
alg_flab_map_forall (In O)
(fun (XY : Type) (f : X <~> Y) (H : In O X) =>
inO_equiv_inO' X f) P A
(condForall P A x)) == idmap
H: Univalence O: Subuniverse condForall: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O (forallh : P, A h) P: HProp A: P -> Type s: forallh : P, In O (A h)
alg_flab_map_forall (In O)
(fun (XY : Type) (f : X <~> Y) (H : In O X) =>
inO_equiv_inO' X f) P A
(condForall P A s) = s
apply path_ishprop.Defined.
H: Univalence O: Subuniverse condSigma: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O {h : P & A h}
IsAlgebraicFlabbyType (Type_ O)
H: Univalence O: Subuniverse condSigma: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O {h : P & A h}
IsAlgebraicFlabbyType (Type_ O)
H: Univalence O: Subuniverse condSigma: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O {h : P & A h}
forallX : Type,
(funH : In O X => inO_equiv_inO' X 1) == idmap
H: Univalence O: Subuniverse condSigma: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O {h : P & A h}
alg_flab_sigma_condition_sigma
(In O)
(fun (XY : Type) (f : X <~> Y) (H : In O X) =>
inO_equiv_inO' X f)
H: Univalence O: Subuniverse condSigma: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O {h : P & A h}
forallX : Type,
(funH : In O X => inO_equiv_inO' X 1) == idmap
H: Univalence O: Subuniverse condSigma: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O {h : P & A h} X: Type A: In O X
inO_equiv_inO' X 1 = A
apply path_ishprop.
H: Univalence O: Subuniverse condSigma: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O {h : P & A h}
alg_flab_sigma_condition_sigma
(In O)
(fun (XY : Type) (f : X <~> Y) (H : In O X) =>
inO_equiv_inO' X f)
H: Univalence O: Subuniverse condSigma: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O {h : P & A h} P: HProp A: P -> Type
{s : (forallh : P, In O (A h)) -> In O {h : P & A h}
&
(funx : forallh : P, In O (A h) =>
alg_flab_map_sigma (In O)
(fun (XY : Type) (f : X <~> Y) (H : In O X) =>
inO_equiv_inO' X f) P A
(s x)) == idmap}
H: Univalence O: Subuniverse condSigma: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O {h : P & A h} P: HProp A: P -> Type
(funx : forallh : P, In O (A h) =>
alg_flab_map_sigma (In O)
(fun (XY : Type) (f : X <~> Y) (H : In O X) =>
inO_equiv_inO' X f) P A
(condSigma P A x)) == idmap
H: Univalence O: Subuniverse condSigma: forall (P : HProp) (A : P -> Type),
(forallh : P, In O (A h)) ->
In O {h : P & A h} P: HProp A: P -> Type s: forallh : P, In O (A h)
alg_flab_map_sigma (In O)
(fun (XY : Type) (f : X <~> Y) (H : In O X) =>
inO_equiv_inO' X f) P A
(condSigma P A s) = s
apply path_ishprop.Defined.(** As an immediate corollary, we get that reflective subuniverses are algebraically flabby. *)Definitionalg_flab_reflective_subuniverse `{Univalence} (O : ReflectiveSubuniverse)
: IsAlgebraicFlabbyType@{u su} (Type_ O)
:= alg_flab_subuniverse_forall _ _.