Built with Alectryon. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
(** * The cumulative hierarchy [V]. *)Require Import HoTT.Basics HoTT.Types.Require Import HSet TruncType.Require Import Colimits.SpanPushout.Require Import HoTT.Truncations.Core Colimits.Quotient.LocalOpen Scope nat_scope.LocalOpen Scope path_scope.(** Bitotal relation *)Definitionbitotal {AB : Type} (R : A -> B -> HProp) :=
(foralla : A, hexists (fun (b : B) => R a b))
* (forallb : B, hexists (fun (a : A) => R a b)).(** ** The cumulative hierarchy V *)ModuleExport CumulativeHierarchy.Private InductiveV@{U' U | U < U'} : Type@{U'} :=
| set {A : Type@{U}} (f : A -> V) : V.Axiomsetext : forall {AB : Type} (R : A -> B -> HProp)
(bitot_R : bitotal R) (h : SPushout R -> V),
set (h o (spushl R)) = set (h o (spushr R)).Axiomishset_V : IsHSet V.Existing Instanceishset_V.(** The induction principle. Annotating the universes here greatly reduces the number of universe variables later in the file. For example, [function] below went from 279 to 3. If [V_ind] needs to be generalized in the future, check [function] to make sure things haven't exploded again. *)FixpointV_ind@{U' U u | U < U'} (P : V@{U' U} -> Type@{u})
(H_0trunc : forallv : V@{U' U}, IsTrunc 0 (P v))
(H_set : forall (A : Type@{U}) (f : A -> V) (H_f : foralla : A, P (f a)), P (set f))
(H_setext : forall (AB : Type@{U}) (R : A -> B -> HProp@{U}) (bitot_R : bitotal R)
(h : SPushout R -> V) (H_h : forallx : SPushout R, P (h x)),
transport@{U' u} _ (setext R bitot_R h) (H_set A (h o spushl R) (H_h oD spushl R))
= H_set B (h o spushr R) (H_h oD spushr R) )
(v : V)
: P v
:= (match v with
| set A f => fun__ => H_set A f (funa => V_ind P H_0trunc H_set H_setext (f a))
end) H_setext H_0trunc.(** We don't need to axiomatize the computation rule because we get it for free thanks to 0-truncation *)EndCumulativeHierarchy.
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f : A0 -> V), (foralla : A0, P (f a)) -> P (set f) H_setext: forall (A0B0 : Type) (R0 : A0 -> B0 -> HProp) (bitot_R0 : bitotal R0)
(h0 : SPushout (fun (x : A0) (x0 : B0) => R0 x x0) -> V)
(H_h : forallx : SPushout (fun (x : A0) (x0 : B0) => R0 x x0), P (h0 x)),
transport P (setext R0 bitot_R0 h0)
(H_set A0 (h0 o spushl (fun (x : A0) (x0 : B0) => R0 x x0))
(H_h oD spushl (fun (x : A0) (x0 : B0) => R0 x x0))) =
H_set B0 (h0 o spushr (fun (x : A0) (x0 : B0) => R0 x x0))
(H_h oD spushr (fun (x : A0) (x0 : B0) => R0 x x0)) A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
apD (V_ind P H_0trunc H_set H_setext) (setext R bitot_R h) =
H_setext A B R bitot_R h (V_ind P H_0trunc H_set H_setext oD h)
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f : A0 -> V), (foralla : A0, P (f a)) -> P (set f) H_setext: forall (A0B0 : Type) (R0 : A0 -> B0 -> HProp) (bitot_R0 : bitotal R0)
(h0 : SPushout (fun (x : A0) (x0 : B0) => R0 x x0) -> V)
(H_h : forallx : SPushout (fun (x : A0) (x0 : B0) => R0 x x0), P (h0 x)),
transport P (setext R0 bitot_R0 h0)
(H_set A0 (h0 o spushl (fun (x : A0) (x0 : B0) => R0 x x0))
(H_h oD spushl (fun (x : A0) (x0 : B0) => R0 x x0))) =
H_set B0 (h0 o spushr (fun (x : A0) (x0 : B0) => R0 x x0))
(H_h oD spushr (fun (x : A0) (x0 : B0) => R0 x x0)) A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
apD (V_ind P H_0trunc H_set H_setext) (setext R bitot_R h) =
H_setext A B R bitot_R h (V_ind P H_0trunc H_set H_setext oD h)
apply path_ishprop.Defined.(** The non-dependent eliminator *)
P: Type H_0trunc: IsHSet P H_set: forallA : Type, (A -> V) -> (A -> P) -> P H_setext: forall (AB : Type) (R : A -> B -> HProp),
bitotal R ->
forall (h : SPushout (fun (x : A) (x0 : B) => R x x0) -> V)
(H_h : SPushout (fun (x : A) (x0 : B) => R x x0) -> P),
H_set A (h o spushl (fun (x : A) (x0 : B) => R x x0))
(H_h o spushl (fun (x : A) (x0 : B) => R x x0)) =
H_set B (h o spushr (fun (x : A) (x0 : B) => R x x0))
(H_h o spushr (fun (x : A) (x0 : B) => R x x0))
V -> P
P: Type H_0trunc: IsHSet P H_set: forallA : Type, (A -> V) -> (A -> P) -> P H_setext: forall (AB : Type) (R : A -> B -> HProp),
bitotal R ->
forall (h : SPushout (fun (x : A) (x0 : B) => R x x0) -> V)
(H_h : SPushout (fun (x : A) (x0 : B) => R x x0) -> P),
H_set A (h o spushl (fun (x : A) (x0 : B) => R x x0))
(H_h o spushl (fun (x : A) (x0 : B) => R x x0)) =
H_set B (h o spushr (fun (x : A) (x0 : B) => R x x0))
(H_h o spushr (fun (x : A) (x0 : B) => R x x0))
V -> P
P: Type H_0trunc: IsHSet P H_set: forallA : Type, (A -> V) -> (A -> P) -> P H_setext: forall (AB : Type) (R : A -> B -> HProp),
bitotal R ->
forall (h : SPushout (fun (x : A) (x0 : B) => R x x0) -> V)
(H_h : SPushout (fun (x : A) (x0 : B) => R x x0) -> P),
H_set A (h o spushl (fun (x : A) (x0 : B) => R x x0))
(H_h o spushl (fun (x : A) (x0 : B) => R x x0)) =
H_set B (h o spushr (fun (x : A) (x0 : B) => R x x0))
(H_h o spushr (fun (x : A) (x0 : B) => R x x0))
forall (AB : Type) (R : A -> B -> HProp) (bitot_R : bitotal R)
(h : SPushout (fun (x : A) (x0 : B) => R x x0) -> V)
(H_h : SPushout (fun (x : A) (x0 : B) => R x x0) -> P),
transport (fun_ : V => P) (setext R bitot_R h)
(H_set A (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0))) =
H_set B (funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushr (fun (x : A) (x0 : B) => R x x0))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext: forall (A0B0 : Type) (R0 : A0 -> B0 -> HProp),
bitotal R0 ->
forall (h0 : SPushout (fun (x : A0) (x0 : B0) => R0 x x0) -> V)
(H_h0 : SPushout (fun (x : A0) (x0 : B0) => R0 x x0) -> P),
H_set A0 (h0 o spushl (fun (x : A0) (x0 : B0) => R0 x x0))
(H_h0 o spushl (fun (x : A0) (x0 : B0) => R0 x x0)) =
H_set B0 (h0 o spushr (fun (x : A0) (x0 : B0) => R0 x x0))
(H_h0 o spushr (fun (x : A0) (x0 : B0) => R0 x x0)) A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P
transport (fun_ : V => P) (setext R bitot_R h)
(H_set A (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0))) =
H_set B (funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushr (fun (x : A) (x0 : B) => R x x0))
exact (transport_const _ _ @ H_setext A B R bitot_R h H_h).Defined.
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext: forall (A0B0 : Type) (R0 : A0 -> B0 -> HProp),
bitotal R0 ->
forall (h0 : SPushout (fun (x : A0) (x0 : B0) => R0 x x0) -> V)
(H_h : SPushout (fun (x : A0) (x0 : B0) => R0 x x0) -> P),
H_set A0 (h0 o spushl (fun (x : A0) (x0 : B0) => R0 x x0))
(H_h o spushl (fun (x : A0) (x0 : B0) => R0 x x0)) =
H_set B0 (h0 o spushr (fun (x : A0) (x0 : B0) => R0 x x0))
(H_h o spushr (fun (x : A0) (x0 : B0) => R0 x x0)) A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
ap (V_rec P H_0trunc H_set H_setext) (setext R bitot_R h) =
H_setext A B R bitot_R h (V_rec P H_0trunc H_set H_setext o h)
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext: forall (A0B0 : Type) (R0 : A0 -> B0 -> HProp),
bitotal R0 ->
forall (h0 : SPushout (fun (x : A0) (x0 : B0) => R0 x x0) -> V)
(H_h : SPushout (fun (x : A0) (x0 : B0) => R0 x x0) -> P),
H_set A0 (h0 o spushl (fun (x : A0) (x0 : B0) => R0 x x0))
(H_h o spushl (fun (x : A0) (x0 : B0) => R0 x x0)) =
H_set B0 (h0 o spushr (fun (x : A0) (x0 : B0) => R0 x x0))
(H_h o spushr (fun (x : A0) (x0 : B0) => R0 x x0)) A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
ap (V_rec P H_0trunc H_set H_setext) (setext R bitot_R h) =
H_setext A B R bitot_R h (V_rec P H_0trunc H_set H_setext o h)
apply path_ishprop.Defined.(** ** Alternative induction principle (This is close to the one from the book) *)Definitionequal_img {ABC : Type} (f : A -> C) (g : B -> C) :=
(foralla : A, hexists (fun (b : B) => f a = g b))
* (forallb : B, hexists (fun (a : A) => f a = g b)).
A, B: Type f: A -> V g: B -> V eq_img: equal_img f g
set f = set g
A, B: Type f: A -> V g: B -> V eq_img: equal_img f g
set f = set g
A, B: Type f: A -> V g: B -> V eq_img: equal_img f g R:= fun (a : A) (b : B) => Build_HProp (f a = g b): A -> B -> HProp
set f = set g
A, B: Type f: A -> V g: B -> V eq_img: equal_img f g R:= fun (a : A) (b : B) => Build_HProp (f a = g b): A -> B -> HProp h:= spushout_rec (fun (a : A) (b : B) => R a b) V f g
(fun (x : A) (y : B) => idmap): SPushout (fun (a : A) (b : B) => R a b) -> V
set f = set g
exact (setext R eq_img h).Defined.
P: Type H_0trunc: IsHSet P H_set: forallA : Type, (A -> V) -> (A -> P) -> P H_setext': forall (AB : Type) (f : A -> V) (g : B -> V),
equal_img f g ->
forall (H_f : A -> P) (H_g : B -> P),
equal_img H_f H_g -> H_set A f H_f = H_set B g H_g
V -> P
P: Type H_0trunc: IsHSet P H_set: forallA : Type, (A -> V) -> (A -> P) -> P H_setext': forall (AB : Type) (f : A -> V) (g : B -> V),
equal_img f g ->
forall (H_f : A -> P) (H_g : B -> P),
equal_img H_f H_g -> H_set A f H_f = H_set B g H_g
V -> P
P: Type H_0trunc: IsHSet P H_set: forallA : Type, (A -> V) -> (A -> P) -> P H_setext': forall (AB : Type) (f : A -> V) (g : B -> V),
equal_img f g ->
forall (H_f : A -> P) (H_g : B -> P),
equal_img H_f H_g -> H_set A f H_f = H_set B g H_g
forall (AB : Type) (R : A -> B -> HProp),
bitotal R ->
forall (h : SPushout (fun (x : A) (x0 : B) => R x x0) -> V)
(H_h : SPushout (fun (x : A) (x0 : B) => R x x0) -> P),
H_set A (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(funx : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) =
H_set B (funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
(funx : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P
H_set A (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(funx : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) =
H_set B (funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
(funx : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P
equal_img (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P
equal_img (funx : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(funx : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P
equal_img (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P
foralla : A,
hexists
(funb : B =>
h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
h (spushr (fun (x : A) (x0 : B) => R x x0) b))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P
forallb : B,
hexists
(funa : A =>
h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
h (spushr (fun (x : A) (x0 : B) => R x x0) b))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P
foralla : A,
hexists
(funb : B =>
h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
h (spushr (fun (x : A) (x0 : B) => R x x0) b))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P a: A
hexists
(funb : B =>
h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
h (spushr (fun (x : A) (x0 : B) => R x x0) b))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P a: A
hexists (funb : B => R a b) ->
hexists
(funb : B =>
h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
h (spushr (fun (x : A) (x0 : B) => R x x0) b))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P a: A
{b : B & R a b} ->
{b : B &
h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
h (spushr (fun (x : A) (x0 : B) => R x x0) b)}
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P a: A b: B r: R a b
{b0 : B &
h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
h (spushr (fun (x : A) (x0 : B) => R x x0) b0)}
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P a: A b: B r: R a b
h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
h (spushr (fun (x : A) (x0 : B) => R x x0) b)
exact (ap h (spglue R r)).
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P
forallb : B,
hexists
(funa : A =>
h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
h (spushr (fun (x : A) (x0 : B) => R x x0) b))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P b: B
hexists
(funa : A =>
h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
h (spushr (fun (x : A) (x0 : B) => R x x0) b))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P b: B
hexists (funa : A => R a b) ->
hexists
(funa : A =>
h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
h (spushr (fun (x : A) (x0 : B) => R x x0) b))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P b: B
{a : A & R a b} ->
{a : A &
h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
h (spushr (fun (x : A) (x0 : B) => R x x0) b)}
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P b: B a: A r: R a b
{a0 : A &
h (spushl (fun (x : A) (x0 : B) => R x x0) a0) =
h (spushr (fun (x : A) (x0 : B) => R x x0) b)}
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P b: B a: A r: R a b
h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
h (spushr (fun (x : A) (x0 : B) => R x x0) b)
exact (ap h (spglue R r)).
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P
equal_img (funx : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(funx : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P
foralla : A,
hexists
(funb : B =>
H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
H_h (spushr (fun (x : A) (x0 : B) => R x x0) b))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P
forallb : B,
hexists
(funa : A =>
H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
H_h (spushr (fun (x : A) (x0 : B) => R x x0) b))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P
foralla : A,
hexists
(funb : B =>
H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
H_h (spushr (fun (x : A) (x0 : B) => R x x0) b))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P a: A
hexists
(funb : B =>
H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
H_h (spushr (fun (x : A) (x0 : B) => R x x0) b))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P a: A
hexists (funb : B => R a b) ->
hexists
(funb : B =>
H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
H_h (spushr (fun (x : A) (x0 : B) => R x x0) b))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P a: A
{b : B & R a b} ->
{b : B &
H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
H_h (spushr (fun (x : A) (x0 : B) => R x x0) b)}
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P a: A b: B r: R a b
{b0 : B &
H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
H_h (spushr (fun (x : A) (x0 : B) => R x x0) b0)}
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P a: A b: B r: R a b
H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
H_h (spushr (fun (x : A) (x0 : B) => R x x0) b)
exact (ap H_h (spglue R r)).
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P
forallb : B,
hexists
(funa : A =>
H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
H_h (spushr (fun (x : A) (x0 : B) => R x x0) b))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P b: B
hexists
(funa : A =>
H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
H_h (spushr (fun (x : A) (x0 : B) => R x x0) b))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P b: B
hexists (funa : A => R a b) ->
hexists
(funa : A =>
H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
H_h (spushr (fun (x : A) (x0 : B) => R x x0) b))
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P b: B
{a : A & R a b} ->
{a : A &
H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
H_h (spushr (fun (x : A) (x0 : B) => R x x0) b)}
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P b: B a: A r: R a b
{a0 : A &
H_h (spushl (fun (x : A) (x0 : B) => R x x0) a0) =
H_h (spushr (fun (x : A) (x0 : B) => R x x0) b)}
P: Type H_0trunc: IsHSet P H_set: forallA0 : Type, (A0 -> V) -> (A0 -> P) -> P H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V),
equal_img f g ->
forall (H_f : A0 -> P) (H_g : B0 -> P),
equal_img H_f H_g -> H_set A0 f H_f = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: SPushout (fun (x : A) (x0 : B) => R x x0) -> P b: B a: A r: R a b
H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) =
H_h (spushr (fun (x : A) (x0 : B) => R x x0) b)
exact (ap H_h (spglue R r)).Defined.(** Note that the hypothesis H_setext' differs from the one given in section 10.5 of the HoTT book. *)
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A : Type) (f : A -> V), (foralla : A, P (f a)) -> P (set f) H_setext': forall (AB : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g)
(H_f : foralla : A, P (f a)) (H_g : forallb : B, P (g b)),
(foralla : A,
hexists
(funb : B => hexists (funp : f a = g b => transport P p (H_f a) = H_g b))) *
(forallb : B,
hexists
(funa : A => hexists (funp : f a = g b => transport P p (H_f a) = H_g b))) ->
transport P (setext' f g eq_img) (H_set A f H_f) = H_set B g H_g
forallv : V, P v
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A : Type) (f : A -> V), (foralla : A, P (f a)) -> P (set f) H_setext': forall (AB : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g)
(H_f : foralla : A, P (f a)) (H_g : forallb : B, P (g b)),
(foralla : A,
hexists
(funb : B => hexists (funp : f a = g b => transport P p (H_f a) = H_g b))) *
(forallb : B,
hexists
(funa : A => hexists (funp : f a = g b => transport P p (H_f a) = H_g b))) ->
transport P (setext' f g eq_img) (H_set A f H_f) = H_set B g H_g
forallv : V, P v
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A : Type) (f : A -> V), (foralla : A, P (f a)) -> P (set f) H_setext': forall (AB : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g)
(H_f : foralla : A, P (f a)) (H_g : forallb : B, P (g b)),
(foralla : A,
hexists
(funb : B => hexists (funp : f a = g b => transport P p (H_f a) = H_g b))) *
(forallb : B,
hexists
(funa : A => hexists (funp : f a = g b => transport P p (H_f a) = H_g b))) ->
transport P (setext' f g eq_img) (H_set A f H_f) = H_set B g H_g
forall (AB : Type) (R : A -> B -> HProp) (bitot_R : bitotal R)
(h : SPushout (fun (x : A) (x0 : B) => R x x0) -> V)
(H_h : forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x)),
transport P (setext R bitot_R h)
(H_set A (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0))) =
H_set B (funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushr (fun (x : A) (x0 : B) => R x x0))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f : A0 -> V), (foralla : A0, P (f a)) -> P (set f) H_setext': forall (A0B0 : Type) (f : A0 -> V) (g : B0 -> V)
(eq_img : equal_img f g) (H_f : foralla : A0, P (f a))
(H_g : forallb : B0, P (g b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f a = g b => transport P p (H_f a) = H_g b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f a = g b => transport P p (H_f a) = H_g b))) ->
transport P (setext' f g eq_img) (H_set A0 f H_f) = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x)
transport P (setext R bitot_R h)
(H_set A (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0))) =
H_set B (funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushr (fun (x : A) (x0 : B) => R x x0))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g : B0 -> V)
(eq_img : equal_img f0 g) (H_f : foralla : A0, P (f0 a))
(H_g : forallb : B0, P (g b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g b => transport P p (H_f a) = H_g b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g b => transport P p (H_f a) = H_g b))) ->
transport P (setext' f0 g eq_img) (H_set A0 f0 H_f) = H_set B0 g H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V
transport P (setext R bitot_R h)
(H_set A (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0))) =
H_set B (funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushr (fun (x : A) (x0 : B) => R x x0))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f : foralla : A0, P (f0 a))
(H_g : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f a) = H_g b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f a) = H_g b))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f) = H_set B0 g0 H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V
transport P (setext R bitot_R h)
(H_set A (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0))) =
H_set B (funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushr (fun (x : A) (x0 : B) => R x x0))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g b))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a)
transport P (setext R bitot_R h)
(H_set A (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0))) =
H_set B (funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushr (fun (x : A) (x0 : B) => R x x0))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b)
transport P (setext R bitot_R h)
(H_set A (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0))) =
H_set B (funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushr (fun (x : A) (x0 : B) => R x x0))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b)
equal_img f g
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) eq_img: equal_img f g
transport P (setext R bitot_R h)
(H_set A (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0))) =
H_set B (funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushr (fun (x : A) (x0 : B) => R x x0))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b)
equal_img f g
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b)
foralla : A, hexists (funb : B => f a = g b)
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b)
forallb : B, hexists (funa : A => f a = g b)
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b)
foralla : A, hexists (funb : B => f a = g b)
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb : B0, P (g0 b)),
(foralla0 : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a0 = g0 b => transport P p (H_f0 a0) = H_g0 b))) *
(forallb : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b => transport P p (H_f0 a0) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) a: A
hexists (funb : B => f a = g b)
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb : B0, P (g0 b)),
(foralla0 : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a0 = g0 b => transport P p (H_f0 a0) = H_g0 b))) *
(forallb : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b => transport P p (H_f0 a0) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) a: A
hexists (funb : B => R a b) -> hexists (funb : B => f a = g b)
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb : B0, P (g0 b)),
(foralla0 : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a0 = g0 b => transport P p (H_f0 a0) = H_g0 b))) *
(forallb : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b => transport P p (H_f0 a0) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) a: A
{b : B & R a b} -> {b : B & f a = g b}
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) a: A b: B r: R a b
{b0 : B & f a = g b0}
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) a: A b: B r: R a b
f a = g b
exact (ap h (spglue R r)).
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b)
forallb : B, hexists (funa : A => f a = g b)
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a = g0 b0 => transport P p (H_f0 a) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b0 => transport P p (H_f0 a) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) b: B
hexists (funa : A => f a = g b)
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a = g0 b0 => transport P p (H_f0 a) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b0 => transport P p (H_f0 a) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) b: B
hexists (funa : A => R a b) -> hexists (funa : A => f a = g b)
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a = g0 b0 => transport P p (H_f0 a) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b0 => transport P p (H_f0 a) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) b: B
{a : A & R a b} -> {a : A & f a = g b}
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) b: B a: A r: R a b
{a0 : A & f a0 = g b}
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) b: B a: A r: R a b
f a = g b
exact (ap h (spglue R r)).
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) eq_img: equal_img f g
transport P (setext R bitot_R h)
(H_set A (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0))) =
H_set B (funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushr (fun (x : A) (x0 : B) => R x x0))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) eq_img: equal_img f g
transport P (setext R bitot_R h)
(H_set A (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0))) =
transport P
(setext' (h o spushl (fun (x : A) (x0 : B) => R x x0))
(h o spushr (fun (x : A) (x0 : B) => R x x0)) eq_img)
(H_set A (h o spushl (fun (x : A) (x0 : B) => R x x0))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0)))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) eq_img: equal_img f g
transport P
(setext' (h o spushl (fun (x : A) (x0 : B) => R x x0))
(h o spushr (fun (x : A) (x0 : B) => R x x0)) eq_img)
(H_set A (h o spushl (fun (x : A) (x0 : B) => R x x0))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0))) =
H_set B (funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushr (fun (x : A) (x0 : B) => R x x0))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) eq_img: equal_img f g
transport P (setext R bitot_R h)
(H_set A (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0))) =
transport P
(setext' (h o spushl (fun (x : A) (x0 : B) => R x x0))
(h o spushr (fun (x : A) (x0 : B) => R x x0)) eq_img)
(H_set A (h o spushl (fun (x : A) (x0 : B) => R x x0))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0)))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) eq_img: equal_img f g
setext R bitot_R h =
setext' (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) eq_img
apply path_ishprop.
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) eq_img: equal_img f g
transport P
(setext' (h o spushl (fun (x : A) (x0 : B) => R x x0))
(h o spushr (fun (x : A) (x0 : B) => R x x0)) eq_img)
(H_set A (h o spushl (fun (x : A) (x0 : B) => R x x0))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0))) =
H_set B (funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushr (fun (x : A) (x0 : B) => R x x0))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) eq_img: equal_img f g
(foralla : A,
hexists
(funb : B => hexists (funp : f a = g b => transport P p (H_f a) = H_g b))) *
(forallb : B,
hexists
(funa : A => hexists (funp : f a = g b => transport P p (H_f a) = H_g b)))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) eq_img: equal_img f g
foralla : A,
hexists
(funb : B => hexists (funp : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) eq_img: equal_img f g
forallb : B,
hexists
(funa : A => hexists (funp : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) eq_img: equal_img f g
foralla : A,
hexists
(funb : B => hexists (funp : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb : B0, P (g0 b)),
(foralla0 : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a0 = g0 b => transport P p (H_f0 a0) = H_g0 b))) *
(forallb : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b => transport P p (H_f0 a0) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) eq_img: equal_img f g a: A
hexists
(funb : B => hexists (funp : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb : B0, P (g0 b)),
(foralla0 : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a0 = g0 b => transport P p (H_f0 a0) = H_g0 b))) *
(forallb : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b => transport P p (H_f0 a0) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) eq_img: equal_img f g a: A truncb:= fst bitot_R a: hexists (funb : B => R a b)
hexists
(funb : B => hexists (funp : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb : B0, P (g0 b)),
(foralla0 : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a0 = g0 b => transport P p (H_f0 a0) = H_g0 b))) *
(forallb : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b => transport P p (H_f0 a0) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) eq_img: equal_img f g a: A truncb:= fst bitot_R a: hexists (funb : B => R a b)
hexists (funb : B => R a b) ->
hexists
(funb : B => hexists (funp : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb : B0, P (g0 b)),
(foralla0 : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a0 = g0 b => transport P p (H_f0 a0) = H_g0 b))) *
(forallb : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b => transport P p (H_f0 a0) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) eq_img: equal_img f g a: A truncb:= fst bitot_R a: hexists (funb : B => R a b)
{b : B & R a b} ->
{b : B & hexists (funp : f a = g b => transport P p (H_f a) = H_g b)}
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g a: A truncb:= fst bitot_R a: hexists (funb0 : B => R a b0) b: B Rab: R a b
{b0 : B & hexists (funp : f a = g b0 => transport P p (H_f a) = H_g b0)}
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g a: A truncb:= fst bitot_R a: hexists (funb0 : B => R a b0) b: B Rab: R a b
hexists (funp : f a = g b => transport P p (H_f a) = H_g b)
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g a: A truncb:= fst bitot_R a: hexists (funb0 : B => R a b0) b: B Rab: R a b
{p : f a = g b & transport P p (H_f a) = H_g b}
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g a: A truncb:= fst bitot_R a: hexists (funb0 : B => R a b0) b: B Rab: R a b
transport P (ap h (spglue (fun (x : A) (x0 : B) => R x x0) Rab)) (H_f a) =
H_g b
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g a: A truncb:= fst bitot_R a: hexists (funb0 : B => R a b0) b: B Rab: R a b
transport P (ap h (spglue (fun (x : A) (x0 : B) => R x x0) Rab)) (H_f a) =
transport (funx : SPushout (fun (x : A) (x0 : B) => R x x0) => P (h x))
(spglue (fun (x : A) (x0 : B) => R x x0) Rab)
(H_h (spushl (fun (x : A) (x0 : B) => R x x0) a))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g a: A truncb:= fst bitot_R a: hexists (funb0 : B => R a b0) b: B Rab: R a b
transport (funx : SPushout (fun (x : A) (x0 : B) => R x x0) => P (h x))
(spglue (fun (x : A) (x0 : B) => R x x0) Rab)
(H_h (spushl (fun (x : A) (x0 : B) => R x x0) a)) =
transport P (ap h (spglue (fun (x : A) (x0 : B) => R x x0) Rab)) (H_f a)
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g a: A truncb:= fst bitot_R a: hexists (funb0 : B => R a b0) b: B Rab: R a b
transport (funx : SPushout (fun (x : A) (x0 : B) => R x x0) => P (h x))
(spglue (fun (x : A) (x0 : B) => R x x0) Rab)
(H_h (spushl (fun (x : A) (x0 : B) => R x x0) a)) =
transport P (ap h (spglue (fun (x : A) (x0 : B) => R x x0) Rab)) (H_f a)
apply transport_compose.
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb : B0, P (g0 b)),
(foralla : A0,
hexists
(funb : B0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) *
(forallb : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b => transport P p (H_f0 a) = H_g0 b))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb : B, P (g b): forallb : B, P (g b) eq_img: equal_img f g
forallb : B,
hexists
(funa : A => hexists (funp : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a = g0 b0 => transport P p (H_f0 a) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b0 => transport P p (H_f0 a) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g b: B
hexists
(funa : A => hexists (funp : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a = g0 b0 => transport P p (H_f0 a) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b0 => transport P p (H_f0 a) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g b: B trunca:= snd bitot_R b: hexists (funa : A => R a b)
hexists
(funa : A => hexists (funp : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a = g0 b0 => transport P p (H_f0 a) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b0 => transport P p (H_f0 a) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g b: B trunca:= snd bitot_R b: hexists (funa : A => R a b)
hexists (funa : A => R a b) ->
hexists
(funa : A => hexists (funp : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla : A0, P (f0 a)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla : A0, P (f0 a))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a = g0 b0 => transport P p (H_f0 a) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa : A0 =>
hexists (funp : f0 a = g0 b0 => transport P p (H_f0 a) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla : A, P (f a): foralla : A, P (f a) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g b: B trunca:= snd bitot_R b: hexists (funa : A => R a b)
{a : A & R a b} ->
{a : A & hexists (funp : f a = g b => transport P p (H_f a) = H_g b)}
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g b: B trunca:= snd bitot_R b: hexists (funa0 : A => R a0 b) a: A Rab: R a b
{a0 : A & hexists (funp : f a0 = g b => transport P p (H_f a0) = H_g b)}
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g b: B trunca:= snd bitot_R b: hexists (funa0 : A => R a0 b) a: A Rab: R a b
hexists (funp : f a = g b => transport P p (H_f a) = H_g b)
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g b: B trunca:= snd bitot_R b: hexists (funa0 : A => R a0 b) a: A Rab: R a b
{p : f a = g b & transport P p (H_f a) = H_g b}
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g b: B trunca:= snd bitot_R b: hexists (funa0 : A => R a0 b) a: A Rab: R a b
transport P (ap h (spglue (fun (x : A) (x0 : B) => R x x0) Rab)) (H_f a) =
H_g b
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g b: B trunca:= snd bitot_R b: hexists (funa0 : A => R a0 b) a: A Rab: R a b
transport P (ap h (spglue (fun (x : A) (x0 : B) => R x x0) Rab)) (H_f a) =
transport (funx : SPushout (fun (x : A) (x0 : B) => R x x0) => P (h x))
(spglue (fun (x : A) (x0 : B) => R x x0) Rab)
(H_h (spushl (fun (x : A) (x0 : B) => R x x0) a))
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g b: B trunca:= snd bitot_R b: hexists (funa0 : A => R a0 b) a: A Rab: R a b
transport (funx : SPushout (fun (x : A) (x0 : B) => R x x0) => P (h x))
(spglue (fun (x : A) (x0 : B) => R x x0) Rab)
(H_h (spushl (fun (x : A) (x0 : B) => R x x0) a)) =
transport P (ap h (spglue (fun (x : A) (x0 : B) => R x x0) Rab)) (H_f a)
P: V -> Type H_0trunc: forallv : V, IsHSet (P v) H_set: forall (A0 : Type) (f0 : A0 -> V), (foralla0 : A0, P (f0 a0)) -> P (set f0) H_setext': forall (A0B0 : Type) (f0 : A0 -> V) (g0 : B0 -> V)
(eq_img0 : equal_img f0 g0) (H_f0 : foralla0 : A0, P (f0 a0))
(H_g0 : forallb0 : B0, P (g0 b0)),
(foralla0 : A0,
hexists
(funb0 : B0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) *
(forallb0 : B0,
hexists
(funa0 : A0 =>
hexists (funp : f0 a0 = g0 b0 => transport P p (H_f0 a0) = H_g0 b0))) ->
transport P (setext' f0 g0 eq_img0) (H_set A0 f0 H_f0) = H_set B0 g0 H_g0 A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x) f:= h o spushl (fun (x : A) (x0 : B) => R x x0) : A -> V: A -> V g:= h o spushr (fun (x : A) (x0 : B) => R x x0) : B -> V: B -> V H_f:= H_h oD spushl (fun (x : A) (x0 : B) => R x x0) : foralla0 : A, P (f a0): foralla0 : A, P (f a0) H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forallb0 : B, P (g b0): forallb0 : B, P (g b0) eq_img: equal_img f g b: B trunca:= snd bitot_R b: hexists (funa0 : A => R a0 b) a: A Rab: R a b
transport (funx : SPushout (fun (x : A) (x0 : B) => R x x0) => P (h x))
(spglue (fun (x : A) (x0 : B) => R x x0) Rab)
(H_h (spushl (fun (x : A) (x0 : B) => R x x0) a)) =
transport P (ap h (spglue (fun (x : A) (x0 : B) => R x x0) Rab)) (H_f a)
apply transport_compose.Defined.(** Simpler induction principle when the goal is an hprop *)
P: V -> Type H_set: forall (A : Type) (f : A -> V), (foralla : A, P (f a)) -> P (set f) isHProp_P: forallv : V, IsHProp (P v)
forallv : V, P v
P: V -> Type H_set: forall (A : Type) (f : A -> V), (foralla : A, P (f a)) -> P (set f) isHProp_P: forallv : V, IsHProp (P v)
forallv : V, P v
P: V -> Type H_set: forall (A : Type) (f : A -> V), (foralla : A, P (f a)) -> P (set f) isHProp_P: forallv : V, IsHProp (P v)
forall (AB : Type) (R : A -> B -> HProp) (bitot_R : bitotal R)
(h : SPushout (fun (x : A) (x0 : B) => R x x0) -> V)
(H_h : forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x)),
transport P (setext R bitot_R h)
(H_set A (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0))) =
H_set B (funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushr (fun (x : A) (x0 : B) => R x x0))
P: V -> Type H_set: forall (A0 : Type) (f : A0 -> V), (foralla : A0, P (f a)) -> P (set f) isHProp_P: forallv : V, IsHProp (P v) A, B: Type R: A -> B -> HProp bitot_R: bitotal R h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V H_h: forallx : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x)
transport P (setext R bitot_R h)
(H_set A (funx : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushl (fun (x : A) (x0 : B) => R x x0))) =
H_set B (funx : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
(H_h oD spushr (fun (x : A) (x0 : B) => R x x0))
forall (AB : Type) (f : A -> V) (g : B -> V),
equal_img f g ->
forall (H_f : A -> HProp) (H_g : B -> HProp),
equal_img H_f H_g -> ?H_set A f H_f = ?H_set B g H_g
ua: Univalence x: V
forallA : Type, (A -> V) -> (A -> HProp) -> HProp
ua: Univalence x: V A: Type f: A -> V
HProp
exact (hexists (funa : A => f a = x)).
ua: Univalence x: V
forall (AB : Type) (f : A -> V) (g : B -> V),
equal_img f g ->
forall (H_f : A -> HProp) (H_g : B -> HProp),
equal_img H_f H_g ->
(fun (A0 : Type) (f0 : A0 -> V) (_ : A0 -> HProp) =>
hexists (funa : A0 => f0 a = x)) A f H_f =
(fun (A0 : Type) (f0 : A0 -> V) (_ : A0 -> HProp) =>
hexists (funa : A0 => f0 a = x)) B g H_g
ua: Univalence x: V
forall (AB : Type) (f : A -> V) (g : B -> V),
equal_img f g ->
forall (H_f : A -> HProp) (H_g : B -> HProp),
equal_img H_f H_g ->
hexists (funa : A => f a = x) = hexists (funa : B => g a = x)
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g
hexists (funa : A => f a = x) = hexists (funa : B => g a = x)
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g
Tr (-1) {a : A & f a = x} -> Tr (-1) {a : B & g a = x}
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g
Tr (-1) {a : B & g a = x} -> Tr (-1) {a : A & f a = x}
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g
Tr (-1) {a : A & f a = x} -> Tr (-1) {a : B & g a = x}
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g H: Tr (-1) {a : A & f a = x}
Tr (-1) {a : B & g a = x}
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g H: Tr (-1) {a : A & f a = x}
{a : A & f a = x} -> Tr (-1) {a : B & g a = x}
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g H: Tr (-1) {a0 : A & f a0 = x} a: A p: f a = x
Tr (-1) {a0 : B & g a0 = x}
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g H: Tr (-1) {a0 : A & f a0 = x} a: A p: f a = x
hexists (funb : B => f a = g b) -> Tr (-1) {a0 : B & g a0 = x}
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g H: Tr (-1) {a0 : A & f a0 = x} a: A p: f a = x
{b : B & f a = g b} -> {a0 : B & g a0 = x}
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g H: Tr (-1) {a0 : A & f a0 = x} a: A p: f a = x b: B p': f a = g b
{a0 : B & g a0 = x}
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g H: Tr (-1) {a0 : A & f a0 = x} a: A p: f a = x b: B p': f a = g b
g b = x
transitivity (f a); auto with path_hints.
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g
Tr (-1) {a : B & g a = x} -> Tr (-1) {a : A & f a = x}
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g H: Tr (-1) {a : B & g a = x}
Tr (-1) {a : A & f a = x}
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g H: Tr (-1) {a : B & g a = x}
{a : B & g a = x} -> Tr (-1) {a : A & f a = x}
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g H: Tr (-1) {a : B & g a = x} b: B p: g b = x
Tr (-1) {a : A & f a = x}
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g H: Tr (-1) {a : B & g a = x} b: B p: g b = x
hexists (funa : A => f a = g b) -> Tr (-1) {a : A & f a = x}
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g H: Tr (-1) {a : B & g a = x} b: B p: g b = x
{a : A & f a = g b} -> {a : A & f a = x}
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g H: Tr (-1) {a0 : B & g a0 = x} b: B p: g b = x a: A p': f a = g b
{a0 : A & f a0 = x}
ua: Univalence x: V A, B: Type f: A -> V g: B -> V eqimg: equal_img f g H: Tr (-1) {a0 : B & g a0 = x} b: B p: g b = x a: A p': f a = g b
f a = x
transitivity (g b); auto with path_hints.Defined.Declare Scope set_scope.Notation"x ∈ v" := (mem x v) : set_scope.Open Scope set_scope.(** ** Subset relation *)Definitionsubset (x : V) (y : V) : HProp
:= Build_HProp (forallz : V, z ∈ x -> z ∈ y).Notation"x ⊆ y" := (subset x y) : set_scope.(** ** Bisimulation relation *)(** The equality in [V] lives in [Type@{U'}]. We define the bisimulation relation which is a [U]-small resizing of the equality in [V]: it must live in [HProp_U : Type{U'}], hence the codomain is [HProp@{U}]. We then prove that bisimulation is equality ([bisim_equals_id]), then use it to prove the key lemma [monic_set_present]. *)(* We define [bisimulation] by double induction on [V]. We first fix the first argument as set(A,f) and define [bisim_aux : V -> HProp], by induction. This is the inner of the two inductions. *)
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp
V -> HProp
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp
V -> HProp
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp
IsHSet HProp
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp
forall (A0B : Type) (f0 : A0 -> V) (g : B -> V),
equal_img f0 g ->
forall (H_f0 : A0 -> HProp) (H_g : B -> HProp),
equal_img H_f0 H_g ->
Build_HProp
((foralla : A, hexists (funb : A0 => H_f a (f0 b))) *
(forallb : A0, hexists (funa : A => H_f a (f0 b)))) =
Build_HProp
((foralla : A, hexists (funb : B => H_f a (g b))) *
(forallb : B, hexists (funa : A => H_f a (g b))))
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp
IsHSet HProp
exact _.
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp
forall (A0B : Type) (f0 : A0 -> V) (g : B -> V),
equal_img f0 g ->
forall (H_f0 : A0 -> HProp) (H_g : B -> HProp),
equal_img H_f0 H_g ->
Build_HProp
((foralla : A, hexists (funb : A0 => H_f a (f0 b))) *
(forallb : A0, hexists (funa : A => H_f a (f0 b)))) =
Build_HProp
((foralla : A, hexists (funb : B => H_f a (g b))) *
(forallb : B, hexists (funa : A => H_f a (g b))))
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g'
Build_HProp
((foralla : A, Tr (-1) {b : B & H_f a (g b)}) *
(forallb : B, Tr (-1) {a : A & H_f a (g b)})) =
Build_HProp
((foralla : A, Tr (-1) {b : B' & H_f a (g' b)}) *
(forallb : B', Tr (-1) {a : A & H_f a (g' b)}))
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g'
(foralla : A, Tr (-1) {b : B & H_f a (g b)}) *
(forallb : B, Tr (-1) {a : A & H_f a (g b)}) ->
(foralla : A, Tr (-1) {b : B' & H_f a (g' b)}) *
(forallb : B', Tr (-1) {a : A & H_f a (g' b)})
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g'
(foralla : A, Tr (-1) {b : B' & H_f a (g' b)}) *
(forallb : B', Tr (-1) {a : A & H_f a (g' b)}) ->
(foralla : A, Tr (-1) {b : B & H_f a (g b)}) *
(forallb : B, Tr (-1) {a : A & H_f a (g b)})
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g'
(foralla : A, Tr (-1) {b : B & H_f a (g b)}) *
(forallb : B, Tr (-1) {a : A & H_f a (g b)}) ->
(foralla : A, Tr (-1) {b : B' & H_f a (g' b)}) *
(forallb : B', Tr (-1) {a : A & H_f a (g' b)})
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b : B & H_f a (g b)} H2: forallb : B, Tr (-1) {a : A & H_f a (g b)}
foralla : A, Tr (-1) {b : B' & H_f a (g' b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b : B & H_f a (g b)} H2: forallb : B, Tr (-1) {a : A & H_f a (g b)}
forallb : B', Tr (-1) {a : A & H_f a (g' b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b : B & H_f a (g b)} H2: forallb : B, Tr (-1) {a : A & H_f a (g b)}
foralla : A, Tr (-1) {b : B' & H_f a (g' b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b : B & H_f a0 (g b)} H2: forallb : B, Tr (-1) {a0 : A & H_f a0 (g b)} a: A
Tr (-1) {b : B' & H_f a (g' b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b : B & H_f a0 (g b)} H2: forallb : B, Tr (-1) {a0 : A & H_f a0 (g b)} a: A
{b : B & H_f a (g b)} -> Tr (-1) {b : B' & H_f a (g' b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b0 : B & H_f a0 (g b0)} H2: forallb0 : B, Tr (-1) {a0 : A & H_f a0 (g b0)} a: A b: B H3: H_f a (g b)
Tr (-1) {b0 : B' & H_f a (g' b0)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b0 : B & H_f a0 (g b0)} H2: forallb0 : B, Tr (-1) {a0 : A & H_f a0 (g b0)} a: A b: B H3: H_f a (g b)
hexists (funb0 : B' => g b = g' b0) -> Tr (-1) {b0 : B' & H_f a (g' b0)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b0 : B & H_f a0 (g b0)} H2: forallb0 : B, Tr (-1) {a0 : A & H_f a0 (g b0)} a: A b: B H3: H_f a (g b)
merely {b0 : B' & g b = g' b0} -> Tr (-1) {b0 : B' & H_f a (g' b0)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b0 : B & H_f a0 (g b0)} H2: forallb0 : B, Tr (-1) {a0 : A & H_f a0 (g b0)} a: A b: B H3: H_f a (g b)
{b0 : B' & g b = g' b0} -> {b0 : B' & H_f a (g' b0)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b0 : B & H_f a0 (g b0)} H2: forallb0 : B, Tr (-1) {a0 : A & H_f a0 (g b0)} a: A b: B H3: H_f a (g b) b': B' p: g b = g' b'
{b0 : B' & H_f a (g' b0)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b0 : B & H_f a0 (g b0)} H2: forallb0 : B, Tr (-1) {a0 : A & H_f a0 (g b0)} a: A b: B H3: H_f a (g b) b': B' p: g b = g' b'
H_f a (g' b')
exact (transport (funx => H_f a x) p H3).
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b : B & H_f a (g b)} H2: forallb : B, Tr (-1) {a : A & H_f a (g b)}
forallb : B', Tr (-1) {a : A & H_f a (g' b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b : B & H_f a (g b)} H2: forallb : B, Tr (-1) {a : A & H_f a (g b)} b': B'
Tr (-1) {a : A & H_f a (g' b')}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b : B & H_f a (g b)} H2: forallb : B, Tr (-1) {a : A & H_f a (g b)} b': B'
{a : B & g a = g' b'} -> Tr (-1) {a : A & H_f a (g' b')}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b0 : B & H_f a (g b0)} H2: forallb0 : B, Tr (-1) {a : A & H_f a (g b0)} b': B' b: B p: g b = g' b'
Tr (-1) {a : A & H_f a (g' b')}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b0 : B & H_f a (g b0)} H2: forallb0 : B, Tr (-1) {a : A & H_f a (g b0)} b': B' b: B p: g b = g' b'
Tr (-1) {a : A & H_f a (g b)} -> Tr (-1) {a : A & H_f a (g' b')}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b0 : B & H_f a (g b0)} H2: forallb0 : B, Tr (-1) {a : A & H_f a (g b0)} b': B' b: B p: g b = g' b'
{a : A & H_f a (g b)} -> {a : A & H_f a (g' b')}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b0 : B & H_f a0 (g b0)} H2: forallb0 : B, Tr (-1) {a0 : A & H_f a0 (g b0)} b': B' b: B p: g b = g' b' a: A H3: H_f a (g b)
{a0 : A & H_f a0 (g' b')}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b0 : B & H_f a0 (g b0)} H2: forallb0 : B, Tr (-1) {a0 : A & H_f a0 (g b0)} b': B' b: B p: g b = g' b' a: A H3: H_f a (g b)
H_f a (g' b')
exact (transport (funx => H_f a x) p H3).
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g'
(foralla : A, Tr (-1) {b : B' & H_f a (g' b)}) *
(forallb : B', Tr (-1) {a : A & H_f a (g' b)}) ->
(foralla : A, Tr (-1) {b : B & H_f a (g b)}) *
(forallb : B, Tr (-1) {a : A & H_f a (g b)})
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b : B' & H_f a (g' b)} H2: forallb : B', Tr (-1) {a : A & H_f a (g' b)}
foralla : A, Tr (-1) {b : B & H_f a (g b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b : B' & H_f a (g' b)} H2: forallb : B', Tr (-1) {a : A & H_f a (g' b)}
forallb : B, Tr (-1) {a : A & H_f a (g b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b : B' & H_f a (g' b)} H2: forallb : B', Tr (-1) {a : A & H_f a (g' b)}
foralla : A, Tr (-1) {b : B & H_f a (g b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b : B' & H_f a0 (g' b)} H2: forallb : B', Tr (-1) {a0 : A & H_f a0 (g' b)} a: A
Tr (-1) {b : B & H_f a (g b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b : B' & H_f a0 (g' b)} H2: forallb : B', Tr (-1) {a0 : A & H_f a0 (g' b)} a: A
{b : B' & H_f a (g' b)} -> Tr (-1) {b : B & H_f a (g b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b : B' & H_f a0 (g' b)} H2: forallb : B', Tr (-1) {a0 : A & H_f a0 (g' b)} a: A b': B' H3: H_f a (g' b')
Tr (-1) {b : B & H_f a (g b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b : B' & H_f a0 (g' b)} H2: forallb : B', Tr (-1) {a0 : A & H_f a0 (g' b)} a: A b': B' H3: H_f a (g' b')
hexists (funa0 : B => g a0 = g' b') -> Tr (-1) {b : B & H_f a (g b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b : B' & H_f a0 (g' b)} H2: forallb : B', Tr (-1) {a0 : A & H_f a0 (g' b)} a: A b': B' H3: H_f a (g' b')
{a0 : B & g a0 = g' b'} -> {b : B & H_f a (g b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b0 : B' & H_f a0 (g' b0)} H2: forallb0 : B', Tr (-1) {a0 : A & H_f a0 (g' b0)} a: A b': B' H3: H_f a (g' b') b: B p: g b = g' b'
{b0 : B & H_f a (g b0)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b0 : B' & H_f a0 (g' b0)} H2: forallb0 : B', Tr (-1) {a0 : A & H_f a0 (g' b0)} a: A b': B' H3: H_f a (g' b') b: B p: g b = g' b'
H_f a (g b)
exact (transport (funx => H_f a x) p^ H3).
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b : B' & H_f a (g' b)} H2: forallb : B', Tr (-1) {a : A & H_f a (g' b)}
forallb : B, Tr (-1) {a : A & H_f a (g b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b0 : B' & H_f a (g' b0)} H2: forallb0 : B', Tr (-1) {a : A & H_f a (g' b0)} b: B
Tr (-1) {a : A & H_f a (g b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b0 : B' & H_f a (g' b0)} H2: forallb0 : B', Tr (-1) {a : A & H_f a (g' b0)} b: B
{b0 : B' & g b = g' b0} -> Tr (-1) {a : A & H_f a (g b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b0 : B' & H_f a (g' b0)} H2: forallb0 : B', Tr (-1) {a : A & H_f a (g' b0)} b: B b': B' p: g b = g' b'
Tr (-1) {a : A & H_f a (g b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b0 : B' & H_f a (g' b0)} H2: forallb0 : B', Tr (-1) {a : A & H_f a (g' b0)} b: B b': B' p: g b = g' b'
Tr (-1) {a : A & H_f a (g' b')} -> Tr (-1) {a : A & H_f a (g b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla : A, Tr (-1) {b0 : B' & H_f a (g' b0)} H2: forallb0 : B', Tr (-1) {a : A & H_f a (g' b0)} b: B b': B' p: g b = g' b'
{a : A & H_f a (g' b')} -> {a : A & H_f a (g b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b0 : B' & H_f a0 (g' b0)} H2: forallb0 : B', Tr (-1) {a0 : A & H_f a0 (g' b0)} b: B b': B' p: g b = g' b' a: A H3: H_f a (g' b')
{a0 : A & H_f a0 (g b)}
ua: Univalence A: Type f: A -> V H_f: A -> V -> HProp B, B': Type g: B -> V g': B' -> V eq_img: equal_img g g' H_g: B -> HProp H_g': B' -> HProp H_img: equal_img H_g H_g' H1: foralla0 : A, Tr (-1) {b0 : B' & H_f a0 (g' b0)} H2: forallb0 : B', Tr (-1) {a0 : A & H_f a0 (g' b0)} b: B b': B' p: g b = g' b' a: A H3: H_f a (g' b')
H_f a (g b)
exact (transport (funx => H_f a x) p^ H3).Defined.(* Then we define [bisimulation : V -> (V -> HProp)] by induction again *)
ua: Univalence
V -> V -> HProp
ua: Univalence
V -> V -> HProp
ua: Univalence
forall (AB : Type) (f : A -> V) (g : B -> V),
equal_img f g ->
forall (H_f : A -> V -> HProp) (H_g : B -> V -> HProp),
equal_img H_f H_g -> bisim_aux A f H_f = bisim_aux B g H_g
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g
bisim_aux A f H_f = bisim_aux B g H_g
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g
bisim_aux A f H_f == bisim_aux B g H_g
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g
forall (A0 : Type) (f0 : A0 -> V),
(foralla : A0, bisim_aux A f H_f (f0 a) = bisim_aux B g H_g (f0 a)) ->
bisim_aux A f H_f (set f0) = bisim_aux B g H_g (set f0)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V
bisim_aux A f H_f (set h) = bisim_aux B g H_g (set h)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V
(foralla : A, Tr (-1) {b : C & H_f a (h b)}) *
(forallb : C, Tr (-1) {a : A & H_f a (h b)}) ->
(foralla : B, Tr (-1) {b : C & H_g a (h b)}) *
(forallb : C, Tr (-1) {a : B & H_g a (h b)})
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V
(foralla : B, Tr (-1) {b : C & H_g a (h b)}) *
(forallb : C, Tr (-1) {a : B & H_g a (h b)}) ->
(foralla : A, Tr (-1) {b : C & H_f a (h b)}) *
(forallb : C, Tr (-1) {a : A & H_f a (h b)})
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V
(foralla : A, Tr (-1) {b : C & H_f a (h b)}) *
(forallb : C, Tr (-1) {a : A & H_f a (h b)}) ->
(foralla : B, Tr (-1) {b : C & H_g a (h b)}) *
(forallb : C, Tr (-1) {a : B & H_g a (h b)})
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla : A, Tr (-1) {b : C & H_f a (h b)} H2: forallb : C, Tr (-1) {a : A & H_f a (h b)}
foralla : B, Tr (-1) {b : C & H_g a (h b)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla : A, Tr (-1) {b : C & H_f a (h b)} H2: forallb : C, Tr (-1) {a : A & H_f a (h b)}
forallb : C, Tr (-1) {a : B & H_g a (h b)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla : A, Tr (-1) {b : C & H_f a (h b)} H2: forallb : C, Tr (-1) {a : A & H_f a (h b)}
foralla : B, Tr (-1) {b : C & H_g a (h b)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla : A, Tr (-1) {b0 : C & H_f a (h b0)} H2: forallb0 : C, Tr (-1) {a : A & H_f a (h b0)} b: B
Tr (-1) {b0 : C & H_g b (h b0)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla : A, Tr (-1) {b0 : C & H_f a (h b0)} H2: forallb0 : C, Tr (-1) {a : A & H_f a (h b0)} b: B
{a : A & H_f a = H_g b} -> Tr (-1) {b0 : C & H_g b (h b0)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : A, Tr (-1) {b0 : C & H_f a0 (h b0)} H2: forallb0 : C, Tr (-1) {a0 : A & H_f a0 (h b0)} b: B a: A p: H_f a = H_g b
Tr (-1) {b0 : C & H_g b (h b0)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : A, Tr (-1) {b0 : C & H_f a0 (h b0)} H2: forallb0 : C, Tr (-1) {a0 : A & H_f a0 (h b0)} b: B a: A p: H_f a = H_g b
Tr (-1) {b0 : C & H_f a (h b0)} -> Tr (-1) {b0 : C & H_g b (h b0)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : A, Tr (-1) {b0 : C & H_f a0 (h b0)} H2: forallb0 : C, Tr (-1) {a0 : A & H_f a0 (h b0)} b: B a: A p: H_f a = H_g b
{b0 : C & H_f a (h b0)} -> {b0 : C & H_g b (h b0)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : A, Tr (-1) {b0 : C & H_f a0 (h b0)} H2: forallb0 : C, Tr (-1) {a0 : A & H_f a0 (h b0)} b: B a: A p: H_f a = H_g b c: C H3: H_f a (h c)
{b0 : C & H_g b (h b0)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : A, Tr (-1) {b0 : C & H_f a0 (h b0)} H2: forallb0 : C, Tr (-1) {a0 : A & H_f a0 (h b0)} b: B a: A p: H_f a = H_g b c: C H3: H_f a (h c)
H_g b (h c)
exact ((ap10 p (h c)) # H3).
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla : A, Tr (-1) {b : C & H_f a (h b)} H2: forallb : C, Tr (-1) {a : A & H_f a (h b)}
forallb : C, Tr (-1) {a : B & H_g a (h b)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla : A, Tr (-1) {b : C & H_f a (h b)} H2: forallb : C, Tr (-1) {a : A & H_f a (h b)} c: C
Tr (-1) {a : B & H_g a (h c)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla : A, Tr (-1) {b : C & H_f a (h b)} H2: forallb : C, Tr (-1) {a : A & H_f a (h b)} c: C
{a : A & H_f a (h c)} -> Tr (-1) {a : B & H_g a (h c)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : A, Tr (-1) {b : C & H_f a0 (h b)} H2: forallb : C, Tr (-1) {a0 : A & H_f a0 (h b)} c: C a: A H3: H_f a (h c)
Tr (-1) {a0 : B & H_g a0 (h c)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : A, Tr (-1) {b : C & H_f a0 (h b)} H2: forallb : C, Tr (-1) {a0 : A & H_f a0 (h b)} c: C a: A H3: H_f a (h c)
hexists (funb : B => H_f a = H_g b) -> Tr (-1) {a0 : B & H_g a0 (h c)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : A, Tr (-1) {b : C & H_f a0 (h b)} H2: forallb : C, Tr (-1) {a0 : A & H_f a0 (h b)} c: C a: A H3: H_f a (h c)
{b : B & H_f a = H_g b} -> {a0 : B & H_g a0 (h c)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : A, Tr (-1) {b0 : C & H_f a0 (h b0)} H2: forallb0 : C, Tr (-1) {a0 : A & H_f a0 (h b0)} c: C a: A H3: H_f a (h c) b: B p: H_f a = H_g b
{a0 : B & H_g a0 (h c)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : A, Tr (-1) {b0 : C & H_f a0 (h b0)} H2: forallb0 : C, Tr (-1) {a0 : A & H_f a0 (h b0)} c: C a: A H3: H_f a (h c) b: B p: H_f a = H_g b
H_g b (h c)
exact ((ap10 p (h c)) # H3).
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V
(foralla : B, Tr (-1) {b : C & H_g a (h b)}) *
(forallb : C, Tr (-1) {a : B & H_g a (h b)}) ->
(foralla : A, Tr (-1) {b : C & H_f a (h b)}) *
(forallb : C, Tr (-1) {a : A & H_f a (h b)})
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla : B, Tr (-1) {b : C & H_g a (h b)} H2: forallb : C, Tr (-1) {a : B & H_g a (h b)}
foralla : A, Tr (-1) {b : C & H_f a (h b)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla : B, Tr (-1) {b : C & H_g a (h b)} H2: forallb : C, Tr (-1) {a : B & H_g a (h b)}
forallb : C, Tr (-1) {a : A & H_f a (h b)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla : B, Tr (-1) {b : C & H_g a (h b)} H2: forallb : C, Tr (-1) {a : B & H_g a (h b)}
foralla : A, Tr (-1) {b : C & H_f a (h b)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : B, Tr (-1) {b : C & H_g a0 (h b)} H2: forallb : C, Tr (-1) {a0 : B & H_g a0 (h b)} a: A
Tr (-1) {b : C & H_f a (h b)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : B, Tr (-1) {b : C & H_g a0 (h b)} H2: forallb : C, Tr (-1) {a0 : B & H_g a0 (h b)} a: A
{b : B & H_f a = H_g b} -> Tr (-1) {b : C & H_f a (h b)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : B, Tr (-1) {b0 : C & H_g a0 (h b0)} H2: forallb0 : C, Tr (-1) {a0 : B & H_g a0 (h b0)} a: A b: B p: H_f a = H_g b
Tr (-1) {b0 : C & H_f a (h b0)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : B, Tr (-1) {b0 : C & H_g a0 (h b0)} H2: forallb0 : C, Tr (-1) {a0 : B & H_g a0 (h b0)} a: A b: B p: H_f a = H_g b
Tr (-1) {b0 : C & H_g b (h b0)} -> Tr (-1) {b0 : C & H_f a (h b0)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : B, Tr (-1) {b0 : C & H_g a0 (h b0)} H2: forallb0 : C, Tr (-1) {a0 : B & H_g a0 (h b0)} a: A b: B p: H_f a = H_g b
{b0 : C & H_g b (h b0)} -> {b0 : C & H_f a (h b0)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : B, Tr (-1) {b0 : C & H_g a0 (h b0)} H2: forallb0 : C, Tr (-1) {a0 : B & H_g a0 (h b0)} a: A b: B p: H_f a = H_g b c: C H3: H_g b (h c)
{b0 : C & H_f a (h b0)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : B, Tr (-1) {b0 : C & H_g a0 (h b0)} H2: forallb0 : C, Tr (-1) {a0 : B & H_g a0 (h b0)} a: A b: B p: H_f a = H_g b c: C H3: H_g b (h c)
H_f a (h c)
exact ((ap10 p^ (h c)) # H3).
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla : B, Tr (-1) {b : C & H_g a (h b)} H2: forallb : C, Tr (-1) {a : B & H_g a (h b)}
forallb : C, Tr (-1) {a : A & H_f a (h b)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla : B, Tr (-1) {b : C & H_g a (h b)} H2: forallb : C, Tr (-1) {a : B & H_g a (h b)} c: C
Tr (-1) {a : A & H_f a (h c)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla : B, Tr (-1) {b : C & H_g a (h b)} H2: forallb : C, Tr (-1) {a : B & H_g a (h b)} c: C
{a : B & H_g a (h c)} -> Tr (-1) {a : A & H_f a (h c)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla : B, Tr (-1) {b0 : C & H_g a (h b0)} H2: forallb0 : C, Tr (-1) {a : B & H_g a (h b0)} c: C b: B H3: H_g b (h c)
Tr (-1) {a : A & H_f a (h c)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla : B, Tr (-1) {b0 : C & H_g a (h b0)} H2: forallb0 : C, Tr (-1) {a : B & H_g a (h b0)} c: C b: B H3: H_g b (h c)
hexists (funa : A => H_f a = H_g b) -> Tr (-1) {a : A & H_f a (h c)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla : B, Tr (-1) {b0 : C & H_g a (h b0)} H2: forallb0 : C, Tr (-1) {a : B & H_g a (h b0)} c: C b: B H3: H_g b (h c)
{a : A & H_f a = H_g b} -> {a : A & H_f a (h c)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : B, Tr (-1) {b0 : C & H_g a0 (h b0)} H2: forallb0 : C, Tr (-1) {a0 : B & H_g a0 (h b0)} c: C b: B H3: H_g b (h c) a: A p: H_f a = H_g b
{a0 : A & H_f a0 (h c)}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g H_f: A -> V -> HProp H_g: B -> V -> HProp H_img: equal_img H_f H_g C: Type h: C -> V H1: foralla0 : B, Tr (-1) {b0 : C & H_g a0 (h b0)} H2: forallb0 : C, Tr (-1) {a0 : B & H_g a0 (h b0)} c: C b: B H3: H_g b (h c) a: A p: H_f a = H_g b
existsa; exact (H_f a (g b) h).Defined.(** ** Canonical presentation of V-sets (Lemma 10.5.6) *)(** Using the regular kernel would lead to a universe inconsistency in the [monic_set_present] lemma later. *)Definitionker_bisim {A} (f : A -> V) (xy : A) := (f x ~~ f y).
ua: Univalence A: Type f: A -> V
forallxy : A, f x = f y <~> ker_bisim f x y
ua: Univalence A: Type f: A -> V
forallxy : A, f x = f y <~> ker_bisim f x y
intros; apply bisimulation_equiv_id.Defined.SectionMonicSetPresent_Uniqueness.(** Given [u : V], we want to show that the representation [u = @set Au mu], where [Au] is an hSet and [mu] is monic, is unique. *)Context {u : V} {AuAu': Type} {h : IsHSet Au} {h' : IsHSet Au'} {mu : Au -> V} {mono : IsEmbedding mu}
{mu' : Au' -> V} {mono' : IsEmbedding mu'} {p : u = set mu} {p' : u = set mu'}.
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu'
(foralla : Au, {a' : Au' & mu' a' = mu a}) *
(foralla' : Au', {a : Au & mu a = mu' a'})
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu'
(foralla : Au, {a' : Au' & mu' a' = mu a}) *
(foralla' : Au', {a : Au & mu a = mu' a'})
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu'
foralla : Au, {a' : Au' & mu' a' = mu a}
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu'
foralla' : Au', {a : Au & mu a = mu' a'}
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu'
foralla : Au, {a' : Au' & mu' a' = mu a}
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' a: Au
{a' : Au' & mu' a' = mu a}
exact (@untrunc_istrunc (-1) _ (mono' (mu a)) (transport (funx => mu a ∈ x) (p^ @ p') (tr (a; 1)))).
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu'
foralla' : Au', {a : Au & mu a = mu' a'}
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' a': Au'
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
e o inv_e == idmap
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
e o inv_e == idmap
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au a': Au'
e (inv_e a') = a'
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au a': Au'
mu' (e (inv_e a')) = mu' a'
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au a': Au'
mu' (e (inv_e a')) = mu (inv_e a')
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au a': Au'
mu (inv_e a') = mu' a'
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au a': Au'
mu' (e (inv_e a')) = mu (inv_e a')
exact (pr2 (fst eq_img_untrunc (inv_e a'))).
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au a': Au'
mu (inv_e a') = mu' a'
exact (pr2 (snd eq_img_untrunc a')).Defined.
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap
inv_e o e == idmap
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap
inv_e o e == idmap
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa0 : Au => (fst eq_img_untrunc a0).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap a: Au
inv_e (e a) = a
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa0 : Au => (fst eq_img_untrunc a0).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap a: Au
mu (inv_e (e a)) = mu a
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa0 : Au => (fst eq_img_untrunc a0).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap a: Au
mu (inv_e (e a)) = mu' (e a)
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa0 : Au => (fst eq_img_untrunc a0).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap a: Au
mu' (e a) = mu a
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa0 : Au => (fst eq_img_untrunc a0).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap a: Au
mu (inv_e (e a)) = mu' (e a)
exact (pr2 (snd eq_img_untrunc (e a))).
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa0 : Au => (fst eq_img_untrunc a0).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap a: Au
mu' (e a) = mu a
exact (pr2 (fst eq_img_untrunc a)).Defined.
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap
Au' = Au
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap
Au' = Au
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap
Au' <~> Au
exact (equiv_adjointify inv_e e hom2 hom1).Defined.
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au
transport (funA : Type => A -> V) path^ mu = mu'
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au
transport (funA : Type => A -> V) path^ mu = mu'
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au
transport (funA : Type => A -> V) path^ mu == mu'
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au hom1:= (funa'0 : Au' =>
isinj_embedding mu' mono' (e (inv_e a'0)) a'0
((fst eq_img_untrunc (inv_e a'0)).2 @ (snd eq_img_untrunc a'0).2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au a': Au'
transport (funA : Type => A -> V) path^ mu a' = mu' a'
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au hom1:= (funa'0 : Au' =>
isinj_embedding mu' mono' (e (inv_e a'0)) a'0
((fst eq_img_untrunc (inv_e a'0)).2 @ (snd eq_img_untrunc a'0).2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au a': Au'
transport (funA : Type => A -> V) path^ mu a' =
transport (fun_ : Type => V) path^ (mu (transport idmap (path^)^ a'))
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au hom1:= (funa'0 : Au' =>
isinj_embedding mu' mono' (e (inv_e a'0)) a'0
((fst eq_img_untrunc (inv_e a'0)).2 @ (snd eq_img_untrunc a'0).2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au a': Au'
transport (fun_ : Type => V) path^ (mu (transport idmap (path^)^ a')) =
mu' a'
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au hom1:= (funa'0 : Au' =>
isinj_embedding mu' mono' (e (inv_e a'0)) a'0
((fst eq_img_untrunc (inv_e a'0)).2 @ (snd eq_img_untrunc a'0).2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au a': Au'
transport (funA : Type => A -> V) path^ mu a' =
transport (fun_ : Type => V) path^ (mu (transport idmap (path^)^ a'))
exact (@transport_arrow Type (funX : Type => X) (funX => V) Au Au' path^ mu a').
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au hom1:= (funa'0 : Au' =>
isinj_embedding mu' mono' (e (inv_e a'0)) a'0
((fst eq_img_untrunc (inv_e a'0)).2 @ (snd eq_img_untrunc a'0).2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au a': Au'
transport (fun_ : Type => V) path^ (mu (transport idmap (path^)^ a')) =
mu' a'
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au hom1:= (funa'0 : Au' =>
isinj_embedding mu' mono' (e (inv_e a'0)) a'0
((fst eq_img_untrunc (inv_e a'0)).2 @ (snd eq_img_untrunc a'0).2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au a': Au'
transport (fun_ : Type => V) path^ (mu (transport idmap (path^)^ a')) =
mu (transport idmap (path^)^ a')
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au hom1:= (funa'0 : Au' =>
isinj_embedding mu' mono' (e (inv_e a'0)) a'0
((fst eq_img_untrunc (inv_e a'0)).2 @ (snd eq_img_untrunc a'0).2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au a': Au'
mu (transport idmap (path^)^ a') = mu' a'
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au hom1:= (funa'0 : Au' =>
isinj_embedding mu' mono' (e (inv_e a'0)) a'0
((fst eq_img_untrunc (inv_e a'0)).2 @ (snd eq_img_untrunc a'0).2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au a': Au'
transport (fun_ : Type => V) path^ (mu (transport idmap (path^)^ a')) =
mu (transport idmap (path^)^ a')
apply transport_const.
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au hom1:= (funa'0 : Au' =>
isinj_embedding mu' mono' (e (inv_e a'0)) a'0
((fst eq_img_untrunc (inv_e a'0)).2 @ (snd eq_img_untrunc a'0).2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au a': Au'
mu (transport idmap (path^)^ a') = mu' a'
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au hom1:= (funa'0 : Au' =>
isinj_embedding mu' mono' (e (inv_e a'0)) a'0
((fst eq_img_untrunc (inv_e a'0)).2 @ (snd eq_img_untrunc a'0).2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au a': Au'
mu (transport idmap (path^)^ a') = mu (inv_e a')
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au hom1:= (funa'0 : Au' =>
isinj_embedding mu' mono' (e (inv_e a'0)) a'0
((fst eq_img_untrunc (inv_e a'0)).2 @ (snd eq_img_untrunc a'0).2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au a': Au'
mu (inv_e a') = mu' a'
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au hom1:= (funa'0 : Au' =>
isinj_embedding mu' mono' (e (inv_e a'0)) a'0
((fst eq_img_untrunc (inv_e a'0)).2 @ (snd eq_img_untrunc a'0).2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au a': Au'
mu (transport idmap (path^)^ a') = mu (inv_e a')
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au hom1:= (funa'0 : Au' =>
isinj_embedding mu' mono' (e (inv_e a'0)) a'0
((fst eq_img_untrunc (inv_e a'0)).2 @ (snd eq_img_untrunc a'0).2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au a': Au'
transport idmap (path^)^ a' = inv_e a'
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au hom1:= (funa'0 : Au' =>
isinj_embedding mu' mono' (e (inv_e a'0)) a'0
((fst eq_img_untrunc (inv_e a'0)).2 @ (snd eq_img_untrunc a'0).2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au a': Au'
transport idmap (path^)^ a' = transport idmap path a'
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au hom1:= (funa'0 : Au' =>
isinj_embedding mu' mono' (e (inv_e a'0)) a'0
((fst eq_img_untrunc (inv_e a'0)).2 @ (snd eq_img_untrunc a'0).2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au a': Au'
transport idmap path a' = inv_e a'
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au hom1:= (funa'0 : Au' =>
isinj_embedding mu' mono' (e (inv_e a'0)) a'0
((fst eq_img_untrunc (inv_e a'0)).2 @ (snd eq_img_untrunc a'0).2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au a': Au'
transport idmap (path^)^ a' = transport idmap path a'
exact (ap (funx => transport idmap x a') (inv_V path)).
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa'0 : Au' => (snd eq_img_untrunc a'0).1: Au' -> Au hom1:= (funa'0 : Au' =>
isinj_embedding mu' mono' (e (inv_e a'0)) a'0
((fst eq_img_untrunc (inv_e a'0)).2 @ (snd eq_img_untrunc a'0).2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au a': Au'
transport idmap path a' = inv_e a'
apply transport_path_universe.Defined.
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au
{p0 : Au = Au' &
transport
(funA : Type => {m : A -> V & IsHSet A * IsEmbedding m * (u = set m)}) p0
(mu; (h, mono, p)) =
(mu'; (h', mono', p'))}
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au
transport
(funA : Type => {m : A -> V & IsHSet A * IsEmbedding m * (u = set m)})
path^ (mu; (h, mono, p)) =
(mu'; (h', mono', p'))
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au
transport
(funA : Type => {m : A -> V & IsHSet A * IsEmbedding m * (u = set m)})
path^ (mu; (h, mono, p)) =
(transport (funA : Type => A -> V) path^ mu;
transportD (funA : Type => A -> V)
(fun (A : Type) (m : (funA0 : Type => A0 -> V) A) =>
IsHSet A * IsEmbedding m * (u = set m))
path^ mu (h, mono, p))
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au
(transport (funA : Type => A -> V) path^ mu;
transportD (funA : Type => A -> V)
(fun (A : Type) (m : (funA0 : Type => A0 -> V) A) =>
IsHSet A * IsEmbedding m * (u = set m))
path^ mu (h, mono, p)) =
(mu'; (h', mono', p'))
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au
transport
(funA : Type => {m : A -> V & IsHSet A * IsEmbedding m * (u = set m)})
path^ (mu; (h, mono, p)) =
(transport (funA : Type => A -> V) path^ mu;
transportD (funA : Type => A -> V)
(fun (A : Type) (m : (funA0 : Type => A0 -> V) A) =>
IsHSet A * IsEmbedding m * (u = set m))
path^ mu (h, mono, p))
exact (@transport_sigma Type (funA => A -> V) (funAm => IsHSet A * IsEmbedding m * (u = set m)) Au Au' path^ (mu; (h, mono, p))).
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au
(transport (funA : Type => A -> V) path^ mu;
transportD (funA : Type => A -> V)
(fun (A : Type) (m : (funA0 : Type => A0 -> V) A) =>
IsHSet A * IsEmbedding m * (u = set m))
path^ mu (h, mono, p)) =
(mu'; (h', mono', p'))
ua: Univalence u: V Au, Au': Type h: IsHSet Au h': IsHSet Au' mu: Au -> V mono: IsEmbedding mu mu': Au' -> V mono': IsEmbedding mu' p: u = set mu p': u = set mu' e:= funa : Au => (fst eq_img_untrunc a).1: Au -> Au' inv_e:= funa' : Au' => (snd eq_img_untrunc a').1: Au' -> Au hom1:= (funa' : Au' =>
isinj_embedding mu' mono' (e (inv_e a')) a'
((fst eq_img_untrunc (inv_e a')).2 @ (snd eq_img_untrunc a').2))
:
e o inv_e == idmap: e o inv_e == idmap hom2:= (funa : Au =>
isinj_embedding mu mono (inv_e (e a)) a
((snd eq_img_untrunc (e a)).2 @ (fst eq_img_untrunc a).2))
:
inv_e o e == idmap: inv_e o e == idmap path:= path_universe_uncurried (equiv_adjointify inv_e e hom2 hom1): Au' = Au
transport (funA : Type => A -> V) path^ mu = mu'
exact mu_eq_mu'.Defined.EndMonicSetPresent_Uniqueness.(** This lemma actually says a little more than 10.5.6, i.e., that Au is a hSet *)
ua: Univalence
forallu : V,
{Au : Type & {m : Au -> V & IsHSet Au * IsEmbedding m * (u = set m)}}
ua: Univalence
forallu : V,
{Au : Type & {m : Au -> V & IsHSet Au * IsEmbedding m * (u = set m)}}
ua: Univalence
forall (A : Type) (f : A -> V),
(foralla : A,
{Au : Type & {m : Au -> V & IsHSet Au * IsEmbedding m * (f a = set m)}}) ->
{Au : Type & {m : Au -> V & IsHSet Au * IsEmbedding m * (set f = set m)}}
ua: Univalence
forallv : V,
IsHProp {Au : Type & {m : Au -> V & IsHSet Au * IsEmbedding m * (v = set m)}}
ua: Univalence
forall (A : Type) (f : A -> V),
(foralla : A,
{Au : Type & {m : Au -> V & IsHSet Au * IsEmbedding m * (f a = set m)}}) ->
{Au : Type & {m : Au -> V & IsHSet Au * IsEmbedding m * (set f = set m)}}
ua: Univalence A: Type f: A -> V
{Au : Type & {m : Au -> V & IsHSet Au * IsEmbedding m * (set f = set m)}}
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x))
{Au0 : Type & {m : Au0 -> V & IsHSet Au0 * IsEmbedding m * (set f = set m)}}
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x))
IsHSet Au * IsEmbedding mu * (set f = set mu)
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x))
set f = set mu
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x))
foralla : A, hexists (funb : Au => f a = mu b)
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x))
forallb : Au, hexists (funa : A => f a = mu b)
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x))
foralla : A, hexists (funb : Au => f a = mu b)
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x)) a: A
hexists (funb : Au => f a = mu b)
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x)) a: A
f a = mu (eu a)
exact (ap10 factor a).
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x))
forallb : Au, hexists (funa : A => f a = mu b)
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x)) a': Au
hexists (funa : A => f a = mu a')
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x)) a': Au
ReflectiveSubuniverse.IsConnected (Tr (-1)) (hfiber eu a') ->
hexists (funa : A => f a = mu a')
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x)) a': Au IC: ReflectiveSubuniverse.IsConnected (Tr (-1)) (hfiber eu a')
hfiber eu a' -> {a : A & f a = mu a'}
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x)) a': Au IC: ReflectiveSubuniverse.IsConnected (Tr (-1)) (hfiber eu a') a: A p: eu a = a'
{a0 : A & f a0 = mu a'}
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x)) a': Au IC: ReflectiveSubuniverse.IsConnected (Tr (-1)) (hfiber eu a') a: A p: eu a = a'
f a = mu a'
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x)) a': Au IC: ReflectiveSubuniverse.IsConnected (Tr (-1)) (hfiber eu a') a: A p: eu a = a'
f a = mu (eu a)
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x)) a': Au IC: ReflectiveSubuniverse.IsConnected (Tr (-1)) (hfiber eu a') a: A p: eu a = a'
mu (eu a) = mu a'
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x)) a': Au IC: ReflectiveSubuniverse.IsConnected (Tr (-1)) (hfiber eu a') a: A p: eu a = a'
f a = mu (eu a)
exact (ap10 factor a).
ua: Univalence A: Type f: A -> V Au: Type eu: A -> Au mu: Au -> V hset_Au: IsHSet Au epi_eu: ReflectiveSubuniverse.IsConnMap (Tr (-1)) eu mono_mu: IsEmbedding mu factor: f = (funx : A => mu (eu x)) a': Au IC: ReflectiveSubuniverse.IsConnected (Tr (-1)) (hfiber eu a') a: A p: eu a = a'
mu (eu a) = mu a'
exact (ap mu p).
ua: Univalence
forallv : V,
IsHProp {Au : Type & {m : Au -> V & IsHSet Au * IsEmbedding m * (v = set m)}}
ua: Univalence v: V
IsHProp {Au : Type & {m : Au -> V & IsHSet Au * IsEmbedding m * (v = set m)}}
ua: Univalence v: V
forallxy : {Au : Type & {m : Au -> V & IsHSet Au * IsEmbedding m * (v = set m)}},
x = y
ua: Univalence v: V Au: Type mu: Au -> V hset: IsHSet Au mono: IsEmbedding mu p: v = set mu
forally : {Au0 : Type & {m : Au0 -> V & IsHSet Au0 * IsEmbedding m * (v = set m)}},
(Au; mu; (hset, mono, p)) = y
ua: Univalence v: V Au: Type mu: Au -> V hset: IsHSet Au mono: IsEmbedding mu p: v = set mu Au': Type mu': Au' -> V hset': IsHSet Au' mono': IsEmbedding mu' p': v = set mu'
exact monic_set_present_uniqueness.Defined.Definitiontype_of_members (u : V) : Type := pr1 (monic_set_present u).Notation"[ u ]" := (type_of_members u) : set_scope.Definitionfunc_of_members {u : V} : [u] -> V := pr1 (pr2 (monic_set_present u)) : [u] -> V.Definitionis_hset_typeofmembers {u : V} : IsHSet ([u]) := fst (fst (pr2 (pr2 (monic_set_present u)))).DefinitionIsEmbedding_funcofmembers {u : V} : IsEmbedding func_of_members := snd (fst (pr2 (pr2 (monic_set_present u)))).Definitionis_valid_presentation (u : V) : u = set func_of_members := snd (pr2 (pr2 (monic_set_present u))).(** ** Lemmas 10.5.8 (i) & (vii), we put them here because they are useful later *)
ua: Univalence
forallxy : V, x ⊆ y * y ⊆ x <-> x = y
ua: Univalence
forallxy : V, x ⊆ y * y ⊆ x <-> x = y
ua: Univalence
forall (A : Type) (f : A -> V),
(forall (a : A) (y : V), f a ⊆ y * y ⊆ f a <-> f a = y) ->
forally : V, set f ⊆ y * y ⊆ set f <-> set f = y
ua: Univalence A: Type f: A -> V
forally : V, set f ⊆ y * y ⊆ set f <-> set f = y
ua: Univalence A: Type f: A -> V
forall (A0 : Type) (f0 : A0 -> V),
(foralla : A0, set f ⊆ f0 a * f0 a ⊆ set f <-> set f = f0 a) ->
set f ⊆ set f0 * set f0 ⊆ set f <-> set f = set f0
ua: Univalence A: Type f: A -> V B: Type g: B -> V
set f ⊆ set g * set g ⊆ set f <-> set f = set g
ua: Univalence A: Type f: A -> V B: Type g: B -> V
set f ⊆ set g * set g ⊆ set f -> set f = set g
ua: Univalence A: Type f: A -> V B: Type g: B -> V
set f = set g -> set f ⊆ set g * set g ⊆ set f
ua: Univalence A: Type f: A -> V B: Type g: B -> V
set f ⊆ set g * set g ⊆ set f -> set f = set g
ua: Univalence A: Type f: A -> V B: Type g: B -> V H1: set f ⊆ set g H2: set g ⊆ set f
set f = set g
ua: Univalence A: Type f: A -> V B: Type g: B -> V H1: set f ⊆ set g H2: set g ⊆ set f
equal_img f g
ua: Univalence A: Type f: A -> V B: Type g: B -> V H1: set f ⊆ set g H2: set g ⊆ set f
foralla : A, hexists (funb : B => f a = g b)
ua: Univalence A: Type f: A -> V B: Type g: B -> V H1: set f ⊆ set g H2: set g ⊆ set f
forallb : B, hexists (funa : A => f a = g b)
ua: Univalence A: Type f: A -> V B: Type g: B -> V H1: set f ⊆ set g H2: set g ⊆ set f
foralla : A, hexists (funb : B => f a = g b)
ua: Univalence A: Type f: A -> V B: Type g: B -> V H1: set f ⊆ set g H2: set g ⊆ set f a: A
hexists (funb : B => f a = g b)
ua: Univalence A: Type f: A -> V B: Type g: B -> V H1: set f ⊆ set g H2: set g ⊆ set f a: A
{a0 : B & g a0 = f a} -> hexists (funb : B => f a = g b)
ua: Univalence A: Type f: A -> V B: Type g: B -> V H1: set f ⊆ set g H2: set g ⊆ set f a: A b: B p: g b = f a
hexists (funb0 : B => f a = g b0)
ua: Univalence A: Type f: A -> V B: Type g: B -> V H1: set f ⊆ set g H2: set g ⊆ set f a: A b: B p: g b = f a
{b0 : B & f a = g b0}
ua: Univalence A: Type f: A -> V B: Type g: B -> V H1: set f ⊆ set g H2: set g ⊆ set f a: A b: B p: g b = f a
f a = g b
exact p^.
ua: Univalence A: Type f: A -> V B: Type g: B -> V H1: set f ⊆ set g H2: set g ⊆ set f
forallb : B, hexists (funa : A => f a = g b)
ua: Univalence A: Type f: A -> V B: Type g: B -> V H1: set f ⊆ set g H2: set g ⊆ set f b: B
hexists (funa : A => f a = g b)
ua: Univalence A: Type f: A -> V B: Type g: B -> V H1: set f ⊆ set g H2: set g ⊆ set f b: B
g b ∈ set g
apply tr; existsb; reflexivity.
ua: Univalence A: Type f: A -> V B: Type g: B -> V
set f = set g -> set f ⊆ set g * set g ⊆ set f
ua: Univalence A: Type f: A -> V B: Type g: B -> V p: set f = set g
set f ⊆ set g
ua: Univalence A: Type f: A -> V B: Type g: B -> V p: set f = set g
set g ⊆ set f
ua: Univalence A: Type f: A -> V B: Type g: B -> V p: set f = set g
set f ⊆ set g
ua: Univalence A: Type f: A -> V B: Type g: B -> V p: set f = set g z: V Hz: z ∈ set f
z ∈ set g
exact (transport (funx => z ∈ x) p Hz).
ua: Univalence A: Type f: A -> V B: Type g: B -> V p: set f = set g
set g ⊆ set f
ua: Univalence A: Type f: A -> V B: Type g: B -> V p: set f = set g z: V Hz: z ∈ set g
z ∈ set f
exact (transport (funx => z ∈ x) p^ Hz).Qed.
ua: Univalence C: V -> HProp
(forallv : V, (forallx : V, x ∈ v -> C x) -> C v) -> forallv : V, C v
ua: Univalence C: V -> HProp
(forallv : V, (forallx : V, x ∈ v -> C x) -> C v) -> forallv : V, C v
ua: Univalence C: V -> HProp H: forallv : V, (forallx : V, x ∈ v -> C x) -> C v
forallv : V, C v
ua: Univalence C: V -> HProp H: forallv : V, (forallx : V, x ∈ v -> C x) -> C v
forall (A : Type) (f : A -> V), (foralla : A, C (f a)) -> C (set f)
ua: Univalence C: V -> HProp H: forallv : V, (forallx : V, x ∈ v -> C x) -> C v A: Type f: A -> V H_f: foralla : A, C (f a)
C (set f)
ua: Univalence C: V -> HProp H: forallv : V, (forallx : V, x ∈ v -> C x) -> C v A: Type f: A -> V H_f: foralla : A, C (f a)
forallx : V, x ∈ set f -> C x
ua: Univalence C: V -> HProp H: forallv : V, (forallx0 : V, x0 ∈ v -> C x0) -> C v A: Type f: A -> V H_f: foralla : A, C (f a) x: V Hx: x ∈ set f
C x
ua: Univalence C: V -> HProp H: forallv : V, (forallx0 : V, x0 ∈ v -> C x0) -> C v A: Type f: A -> V H_f: foralla : A, C (f a) x: V Hx: x ∈ set f
{a : A & f a = x} -> C x
ua: Univalence C: V -> HProp H: forallv : V, (forallx0 : V, x0 ∈ v -> C x0) -> C v A: Type f: A -> V H_f: foralla0 : A, C (f a0) x: V Hx: x ∈ set f a: A p: f a = x
C x
exact (transport C p (H_f a)).Defined.(** ** Two useful lemmas *)
ua: Univalence
Irreflexive (funxx0 : V => x ∈ x0)
ua: Univalence
Irreflexive (funxx0 : V => x ∈ x0)
ua: Univalence
forallv : V, IsHProp (complement (funxx0 : V => x ∈ x0) v v)
ua: Univalence X: forallv : V, IsHProp (complement (funxx0 : V => x ∈ x0) v v)
Irreflexive (funxx0 : V => x ∈ x0)
ua: Univalence
forallv : V, IsHProp (complement (funxx0 : V => x ∈ x0) v v)
ua: Univalence v: V
IsHProp (complement (funxx0 : V => x ∈ x0) v v)
ua: Univalence v: V
IsHProp (~ v ∈ v)
exact _.
ua: Univalence X: forallv : V, IsHProp (complement (funxx0 : V => x ∈ x0) v v)
Irreflexive (funxx0 : V => x ∈ x0)
ua: Univalence X: forallv : V, IsHProp (complement (funxx0 : V => x ∈ x0) v v)
forallv : V, (forallx : V, x ∈ v -> ~ x ∈ x) -> ~ v ∈ v
ua: Univalence X: forallv0 : V, IsHProp (complement (funxx0 : V => x ∈ x0) v0 v0) v: V H: forallx : V, x ∈ v -> ~ x ∈ x
~ v ∈ v
ua: Univalence X: forallv0 : V, IsHProp (complement (funxx0 : V => x ∈ x0) v0 v0) v: V H: forallx : V, x ∈ v -> ~ x ∈ x Hv: v ∈ v
Empty
exact (H v Hv Hv).Defined.
ua: Univalence A, B: Type f: A -> V g: B -> V
set f = set g -> equal_img f g
ua: Univalence A, B: Type f: A -> V g: B -> V
set f = set g -> equal_img f g
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g
equal_img f g
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g
foralla : A, hexists (funb : B => f a = g b)
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g
forallb : B, hexists (funa : A => f a = g b)
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g
foralla : A, hexists (funb : B => f a = g b)
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g a: A
hexists (funb : B => f a = g b)
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g a: A
f a ∈ set g
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g a: A H: f a ∈ set g
hexists (funb : B => f a = g b)
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g a: A
f a ∈ set g
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g a: A
f a ∈ set f
apply tr; existsa; reflexivity.
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g a: A H: f a ∈ set g
hexists (funb : B => f a = g b)
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g a: A H: f a ∈ set g
{a0 : B & g a0 = f a} -> {b : B & f a = g b}
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g a: A H: f a ∈ set g b: B p': g b = f a
{b0 : B & f a = g b0}
existsb; exact p'^.
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g
forallb : B, hexists (funa : A => f a = g b)
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g b: B
hexists (funa : A => f a = g b)
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g b: B
g b ∈ set f
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g b: B H: g b ∈ set f
hexists (funa : A => f a = g b)
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g b: B
g b ∈ set f
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g b: B
g b ∈ set g
apply tr; existsb; reflexivity.
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g b: B H: g b ∈ set f
hexists (funa : A => f a = g b)
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g b: B H: g b ∈ set f
{a : A & f a = g b} -> {a : A & f a = g b}
ua: Univalence A, B: Type f: A -> V g: B -> V p: set f = set g b: B H: g b ∈ set f a: A p': f a = g b
{a0 : A & f a0 = g b}
existsa; exact p'.Defined.(** ** Definitions of particular sets in V *)(** The empty set *)DefinitionV_empty : V := set (Empty_ind (fun_ => V)).(** The singleton {u} *)DefinitionV_singleton (u : V) : V@{U' U} := set (Unit_ind u).
ua: Univalence u, v: V
IsEquiv (ap V_singleton)
ua: Univalence u, v: V
IsEquiv (ap V_singleton)
ua: Univalence u, v: V
V_singleton u = V_singleton v -> u = v
ua: Univalence u, v: V
V_singleton u = V_singleton v -> u = v
ua: Univalence u, v: V H: V_singleton u = V_singleton v
u = v
ua: Univalence u, v: V H: V_singleton u = V_singleton v
equal_img (Unit_ind u) (Unit_ind v) -> u = v
ua: Univalence u, v: V H: V_singleton u = V_singleton v H1: foralla : Unit, hexists (funb : Unit => Unit_ind u a = Unit_ind v b) H2: forallb : Unit, hexists (funa : Unit => Unit_ind u a = Unit_ind v b)
u = v
ua: Univalence u, v: V H: V_singleton u = V_singleton v H1: foralla : Unit, hexists (funb : Unit => Unit_ind u a = Unit_ind v b) H2: forallb : Unit, hexists (funa : Unit => Unit_ind u a = Unit_ind v b)
{b : Unit & Unit_ind u tt = Unit_ind v b} -> u = v
ua: Univalence u, v: V H: V_singleton u = V_singleton v H1: foralla : Unit, hexists (funb : Unit => Unit_ind u a = Unit_ind v b) H2: forallb : Unit, hexists (funa : Unit => Unit_ind u a = Unit_ind v b) t: Unit p: Unit_ind u tt = Unit_ind v t
u = v
destruct t; exact p.}Defined.(** The pair {u,v} *)DefinitionV_pair (u : V) (v : V) : V@{U' U} := set (funb : Bool => if b then u else v).
ua: Univalence u, v, u', v': V
(u = u') * (v = v') -> V_pair u v = V_pair u' v'
ua: Univalence u, v, u', v': V
(u = u') * (v = v') -> V_pair u v = V_pair u' v'
ua: Univalence u, v, u', v': V H1: u = u' H2: v = v'
V_pair u v = V_pair u' v'
ua: Univalence u, v, u', v': V H1: u = u' H2: v = v'
equal_img (funb : Bool => if b then u else v)
(funb : Bool => if b then u' else v')
ua: Univalence u, v, u', v': V H1: u = u' H2: v = v'
foralla : Bool,
hexists (funb : Bool => (if a then u else v) = (if b then u' else v'))
ua: Univalence u, v, u', v': V H1: u = u' H2: v = v'
forallb : Bool,
hexists (funa : Bool => (if a then u else v) = (if b then u' else v'))
ua: Univalence u, v, u', v': V H1: u = u' H2: v = v'
foralla : Bool,
hexists (funb : Bool => (if a then u else v) = (if b then u' else v'))
ua: Univalence u, v, u', v': V H1: u = u' H2: v = v'
hexists (funb : Bool => u = (if b then u' else v'))
ua: Univalence u, v, u', v': V H1: u = u' H2: v = v'
hexists (funb : Bool => v = (if b then u' else v'))
ua: Univalence u, v, u', v': V H1: u = u' H2: v = v'
hexists (funb : Bool => u = (if b then u' else v'))
ua: Univalence u, v, u', v': V H1: u = u' H2: v = v'
u = u'
assumption.
ua: Univalence u, v, u', v': V H1: u = u' H2: v = v'
hexists (funb : Bool => v = (if b then u' else v'))
apply tr; existsfalse; assumption.
ua: Univalence u, v, u', v': V H1: u = u' H2: v = v'
forallb : Bool,
hexists (funa : Bool => (if a then u else v) = (if b then u' else v'))
ua: Univalence u, v, u', v': V H1: u = u' H2: v = v'
hexists (funa : Bool => (if a then u else v) = u')
ua: Univalence u, v, u', v': V H1: u = u' H2: v = v'
hexists (funa : Bool => (if a then u else v) = v')
ua: Univalence u, v, u', v': V H1: u = u' H2: v = v'
hexists (funa : Bool => (if a then u else v) = u')
apply tr; existstrue; assumption.
ua: Univalence u, v, u', v': V H1: u = u' H2: v = v'
hexists (funa : Bool => (if a then u else v) = v')
apply tr; existsfalse; assumption.Defined.
ua: Univalence u, v, w: V
V_pair u v = V_singleton w <-> (u = w) * (v = w)
ua: Univalence u, v, w: V
V_pair u v = V_singleton w <-> (u = w) * (v = w)
ua: Univalence u, v, w: V
V_pair u v = V_singleton w -> (u = w) * (v = w)
ua: Univalence u, v, w: V
(u = w) * (v = w) -> V_pair u v = V_singleton w
ua: Univalence u, v, w: V
V_pair u v = V_singleton w -> (u = w) * (v = w)
ua: Univalence u, v, w: V H: V_pair u v = V_singleton w
(u = w) * (v = w)
ua: Univalence u, v, w: V H: V_pair u v = V_singleton w H1: foralla : Bool,
hexists (funb : Unit => (if a then u else v) = Unit_ind w b) H2: forallb : Unit,
hexists (funa : Bool => (if a then u else v) = Unit_ind w b)
(u = w) * (v = w)
ua: Univalence u, v, w: V H: V_pair u v = V_singleton w H1: foralla : Bool,
hexists (funb : Unit => (if a then u else v) = Unit_ind w b) H2: forallb : Unit,
hexists (funa : Bool => (if a then u else v) = Unit_ind w b)
{b : Unit & u = Unit_ind w b} -> (u = w) * (v = w)
ua: Univalence u, v, w: V H: V_pair u v = V_singleton w H1: foralla : Bool,
hexists (funb : Unit => (if a then u else v) = Unit_ind w b) H2: forallb : Unit,
hexists (funa : Bool => (if a then u else v) = Unit_ind w b) p: u = Unit_ind w tt
(u = w) * (v = w)
ua: Univalence u, v, w: V H: V_pair u v = V_singleton w H1: foralla : Bool,
hexists (funb : Unit => (if a then u else v) = Unit_ind w b) H2: forallb : Unit,
hexists (funa : Bool => (if a then u else v) = Unit_ind w b) p: u = Unit_ind w tt
{b : Unit & v = Unit_ind w b} -> (u = w) * (v = w)
ua: Univalence u, v, w: V H: V_pair u v = V_singleton w H1: foralla : Bool,
hexists (funb : Unit => (if a then u else v) = Unit_ind w b) H2: forallb : Unit,
hexists (funa : Bool => (if a then u else v) = Unit_ind w b) p: u = Unit_ind w tt p': v = Unit_ind w tt
(u = w) * (v = w)
split; [exact p| exact p'].
ua: Univalence u, v, w: V
(u = w) * (v = w) -> V_pair u v = V_singleton w
ua: Univalence u, v, w: V p1: u = w p2: v = w
V_pair u v = V_singleton w
ua: Univalence u, v, w: V p1: u = w p2: v = w
foralla : Bool,
hexists (funb : Unit => (if a then u else v) = Unit_ind w b)
ua: Univalence u, v, w: V p1: u = w p2: v = w
forallb : Unit,
hexists (funa : Bool => (if a then u else v) = Unit_ind w b)
ua: Univalence u, v, w: V p1: u = w p2: v = w
foralla : Bool,
hexists (funb : Unit => (if a then u else v) = Unit_ind w b)
ua: Univalence u, v, w: V p1: u = w p2: v = w a: Bool
(if a then u else v) = Unit_ind w tt
destruct a; [exact p1 | exact p2].
ua: Univalence u, v, w: V p1: u = w p2: v = w
forallb : Unit,
hexists (funa : Bool => (if a then u else v) = Unit_ind w b)
ua: Univalence u, v, w: V p1: u = w p2: v = w t: Unit
u = Unit_ind w t
destruct t; exact p1.Defined.(** The ordered pair (u,v) *)DefinitionV_pair_ord (u : V) (v : V) : V := V_pair (V_singleton u) (V_pair u v).Notation" [ u , v ] " := (V_pair_ord u v) : set_scope.
ua: Univalence a, b, c, d: V
[a, b] = [c, d] <-> (a = c) * (b = d)
ua: Univalence a, b, c, d: V
[a, b] = [c, d] <-> (a = c) * (b = d)
ua: Univalence a, b, c, d: V
[a, b] = [c, d] -> (a = c) * (b = d)
ua: Univalence a, b, c, d: V
(a = c) * (b = d) -> [a, b] = [c, d]
ua: Univalence a, b, c, d: V
[a, b] = [c, d] -> (a = c) * (b = d)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d]
(a = c) * (b = d)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d]
a = c
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c
(a = c) * (b = d)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d]
a = c
ua: Univalence a, b, c, d: V p: [a, b] = [c, d]
V_singleton a ∈ [c, d]
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] H: V_singleton a ∈ [c, d]
a = c
ua: Univalence a, b, c, d: V p: [a, b] = [c, d]
V_singleton a ∈ [c, d]
ua: Univalence a, b, c, d: V p: [a, b] = [c, d]
V_singleton a ∈ [a, b]
ua: Univalence a, b, c, d: V p: [a, b] = [c, d]
Tr (-1)
{a0 : Bool & (if a0 then V_singleton a else V_pair a b) = V_singleton a}
apply tr; existstrue; reflexivity.
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] H: V_singleton a ∈ [c, d]
a = c
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] H: V_singleton a ∈ [c, d]
{a0 : Bool & (if a0 then V_singleton c else V_pair c d) = V_singleton a} ->
a = c
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] H: V_singleton a ∈ [c, d] p': V_singleton c = V_singleton a
a = c
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] H: V_singleton a ∈ [c, d] p': V_pair c d = V_singleton a
a = c
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] H: V_singleton a ∈ [c, d] p': V_singleton c = V_singleton a
a = c
exact ((ap V_singleton)^-1 p'^).
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] H: V_singleton a ∈ [c, d] p': V_pair c d = V_singleton a
a = c
symmetry; apply (fst pair_eq_singleton p').
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c
(a = c) * (b = d)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c
a = c
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c
b = d
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c
a = c
exact p1.
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c
b = d
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c
hor (b = c) (b = d)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H: hor (b = c) (b = d)
b = d
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c
hor (b = c) (b = d)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c
V_pair a b ∈ [c, d]
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H': V_pair a b ∈ [c, d]
hor (b = c) (b = d)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c
V_pair a b ∈ [c, d]
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c
V_pair a b ∈ [a, b]
apply tr; existsfalse; reflexivity.
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H': V_pair a b ∈ [c, d]
hor (b = c) (b = d)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H': V_pair a b ∈ [c, d]
{a0 : Bool & (if a0 then V_singleton c else V_pair c d) = V_pair a b} ->
hor (b = c) (b = d)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H': V_pair a b ∈ [c, d] p': V_singleton c = V_pair a b
hor (b = c) (b = d)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H': V_pair a b ∈ [c, d] p': V_pair c d = V_pair a b
hor (b = c) (b = d)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H': V_pair a b ∈ [c, d] p': V_singleton c = V_pair a b
hor (b = c) (b = d)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H': V_pair a b ∈ [c, d] p': V_singleton c = V_pair a b
b = c
apply (fst pair_eq_singleton p'^).
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H': V_pair a b ∈ [c, d] p': V_pair c d = V_pair a b
hor (b = c) (b = d)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H': V_pair a b ∈ [c, d] p': V_pair c d = V_pair a b H1: foralla0 : Bool,
hexists (funb0 : Bool => (if a0 then c else d) = (if b0 then a else b)) H2: forallb0 : Bool,
hexists (funa0 : Bool => (if a0 then c else d) = (if b0 then a else b))
hor (b = c) (b = d)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H': V_pair a b ∈ [c, d] p': V_pair c d = V_pair a b H1: foralla0 : Bool,
hexists (funb0 : Bool => (if a0 then c else d) = (if b0 then a else b)) H2: forallb0 : Bool,
hexists (funa0 : Bool => (if a0 then c else d) = (if b0 then a else b))
{a0 : Bool & (if a0 then c else d) = b} -> (b = c) + (b = d)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H': V_pair a b ∈ [c, d] p': V_pair c d = V_pair a b H1: foralla0 : Bool,
hexists (funb0 : Bool => (if a0 then c else d) = (if b0 then a else b)) H2: forallb0 : Bool,
hexists (funa0 : Bool => (if a0 then c else d) = (if b0 then a else b)) p'': c = b
(b = c) + (b = d)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H': V_pair a b ∈ [c, d] p': V_pair c d = V_pair a b H1: foralla0 : Bool,
hexists (funb0 : Bool => (if a0 then c else d) = (if b0 then a else b)) H2: forallb0 : Bool,
hexists (funa0 : Bool => (if a0 then c else d) = (if b0 then a else b)) p'': d = b
(b = c) + (b = d)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H': V_pair a b ∈ [c, d] p': V_pair c d = V_pair a b H1: foralla0 : Bool,
hexists (funb0 : Bool => (if a0 then c else d) = (if b0 then a else b)) H2: forallb0 : Bool,
hexists (funa0 : Bool => (if a0 then c else d) = (if b0 then a else b)) p'': c = b
(b = c) + (b = d)
left; exact p''^.
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H': V_pair a b ∈ [c, d] p': V_pair c d = V_pair a b H1: foralla0 : Bool,
hexists (funb0 : Bool => (if a0 then c else d) = (if b0 then a else b)) H2: forallb0 : Bool,
hexists (funa0 : Bool => (if a0 then c else d) = (if b0 then a else b)) p'': d = b
(b = c) + (b = d)
right; exact p''^.
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H: hor (b = c) (b = d)
b = d
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H: hor (b = c) (b = d)
(b = c) + (b = d) -> b = d
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H: hor (b = c) (b = d) p': b = c
b = d
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H: hor (b = c) (b = d) p': b = d
b = d
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H: hor (b = c) (b = d) p': b = c
b = d
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H: hor (b = c) (b = d) p': b = c
[a, b] = V_singleton (V_singleton b)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H: hor (b = c) (b = d) p': b = c H': [a, b] = V_singleton (V_singleton b)
b = d
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H: hor (b = c) (b = d) p': b = c
[a, b] = V_singleton (V_singleton b)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H: hor (b = c) (b = d) p': b = c
(V_singleton a = V_singleton b) * (V_pair a b = V_singleton b)
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H: hor (b = c) (b = d) p': b = c
V_singleton a = V_singleton b
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H: hor (b = c) (b = d) p': b = c
V_pair a b = V_singleton b
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H: hor (b = c) (b = d) p': b = c
V_singleton a = V_singleton b
apply ap; exact (p1 @ p'^).
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H: hor (b = c) (b = d) p': b = c
V_pair a b = V_singleton b
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H: hor (b = c) (b = d) p': b = c
(a = b) * (b = b)
split; [exact (p1 @ p'^) | reflexivity].
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H: hor (b = c) (b = d) p': b = c H': [a, b] = V_singleton (V_singleton b)
b = d
ua: Univalence a, b, c, d: V p: [a, b] = [c, d] p1: a = c H: hor (b = c) (b = d) p': b = c H': [a, b] = V_singleton (V_singleton b) H'': V_pair c d = V_singleton b
b = d
symmetry; apply (fst pair_eq_singleton H'').
ua: Univalence a, b, c, d: V
(a = c) * (b = d) -> [a, b] = [c, d]
ua: Univalence a, b, c, d: V p: a = c p': b = d
[a, b] = [c, d]
ua: Univalence a, b, c, d: V p: a = c p': b = d
(V_singleton a = V_singleton c) * (V_pair a b = V_pair c d)
ua: Univalence a, b, c, d: V p: a = c p': b = d
V_singleton a = V_singleton c
ua: Univalence a, b, c, d: V p: a = c p': b = d
V_pair a b = V_pair c d
ua: Univalence a, b, c, d: V p: a = c p': b = d
V_singleton a = V_singleton c
apply ap; exact p.
ua: Univalence a, b, c, d: V p: a = c p': b = d
V_pair a b = V_pair c d
ua: Univalence a, b, c, d: V p: a = c p': b = d
(a = c) * (b = d)
split; assumption; assumption.Defined.(** The cartesian product a × b *)DefinitionV_cart_prod (a : V) (b : V) : V
:= set (funx : [a] * [b] => [func_of_members (fst x), func_of_members (snd x)]).Notation" a × b " := (V_cart_prod a b) : set_scope.(** f is a function with domain a and codomain b *)DefinitionV_is_func (a : V) (b : V) (f : V) := f ⊆ (a × b)
* (forallx, x ∈ a -> hexists (funy => y ∈ b * [x,y] ∈ f))
* (forallxyy', [x,y] ∈ f * [x,y'] ∈ f -> y = y').(** The set of functions from a to b *)DefinitionV_func (a : V) (b : V) : V
:= @set ([a] -> [b]) (funf => set (funx => [func_of_members x, func_of_members (f x)] )).(** The union of a set Uv *)DefinitionV_union (v : V) :=
@set ({x : [v] & [func_of_members x]}) (funz => func_of_members (pr2 z)).(** The ordinal successor x ∪ {x} *)
ua: Univalence
V -> V
ua: Univalence
V -> V
ua: Univalence
forallA : Type, (A -> V) -> (A -> V) -> V
ua: Univalence
forall (AB : Type) (f : A -> V) (g : B -> V),
equal_img f g ->
forall (H_f : A -> V) (H_g : B -> V),
equal_img H_f H_g -> ?H_set A f H_f = ?H_set B g H_g
ua: Univalence
forallA : Type, (A -> V) -> (A -> V) -> V
ua: Univalence A: Type f: A -> V
V
exact (set (fun (x : A + Unit) => match x with inl a => f a
| inr tt => set f end)).
ua: Univalence
forall (AB : Type) (f : A -> V) (g : B -> V),
equal_img f g ->
forall (H_f : A -> V) (H_g : B -> V),
equal_img H_f H_g ->
(fun (A0 : Type) (f0_ : A0 -> V) =>
set
(funx : A0 + Unit => match x with
| inl a => f0 a
| inr tt => set f0
end))
A f H_f =
(fun (A0 : Type) (f0_ : A0 -> V) =>
set
(funx : A0 + Unit => match x with
| inl a => f0 a
| inr tt => set f0
end))
B g H_g
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g
set (funx : A + Unit => match x with
| inl a => f a
| inr tt => set f
end) =
set (funx : B + Unit => match x with
| inl a => g a
| inr tt => set g
end)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g
equal_img
(funx : A + Unit => match x with
| inl a => f a
| inr tt => set f
end)
(funx : B + Unit => match x with
| inl a => g a
| inr tt => set g
end)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g
foralla : A + Unit,
hexists
(funb : B + Unit =>
match a with
| inl a0 => f a0
| inr tt => set f
end = match b with
| inl a0 => g a0
| inr tt => set g
end)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g
forallb : B + Unit,
hexists
(funa : A + Unit =>
match a with
| inl a0 => f a0
| inr tt => set f
end = match b with
| inl a0 => g a0
| inr tt => set g
end)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g
foralla : A + Unit,
hexists
(funb : B + Unit =>
match a with
| inl a0 => f a0
| inr tt => set f
end = match b with
| inl a0 => g a0
| inr tt => set g
end)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g a: A + Unit
hexists
(funb : B + Unit =>
match a with
| inl a0 => f a0
| inr tt => set f
end = match b with
| inl a0 => g a0
| inr tt => set g
end)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g a: A
hexists
(funb : B + Unit =>
f a = match b with
| inl a0 => g a0
| inr tt => set g
end)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g u: Unit
hexists
(funb : B + Unit =>
match u with
| tt => set f
end = match b with
| inl a => g a
| inr tt => set g
end)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g a: A
hexists
(funb : B + Unit =>
f a = match b with
| inl a0 => g a0
| inr tt => set g
end)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g a: A
hexists (funb : B => f a = g b) ->
hexists
(funb : B + Unit =>
f a = match b with
| inl a0 => g a0
| inr tt => set g
end)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g a: A
{b : B & f a = g b} ->
{b : B + Unit & f a = match b with
| inl a0 => g a0
| inr tt => set g
end}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g a: A b: B p: f a = g b
{b0 : B + Unit & f a = match b0 with
| inl a0 => g a0
| inr tt => set g
end}
exists (inlb); exact p.
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g u: Unit
hexists
(funb : B + Unit =>
match u with
| tt => set f
end = match b with
| inl a => g a
| inr tt => set g
end)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g u: Unit
match u with
| tt => set f
end = set g
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g
set f = set g
apply setext'; auto.
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g
forallb : B + Unit,
hexists
(funa : A + Unit =>
match a with
| inl a0 => f a0
| inr tt => set f
end = match b with
| inl a0 => g a0
| inr tt => set g
end)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g b: B + Unit
hexists
(funa : A + Unit =>
match a with
| inl a0 => f a0
| inr tt => set f
end = match b with
| inl a0 => g a0
| inr tt => set g
end)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g b: B
hexists
(funa : A + Unit =>
match a with
| inl a0 => f a0
| inr tt => set f
end = g b)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g u: Unit
hexists
(funa : A + Unit =>
match a with
| inl a0 => f a0
| inr tt => set f
end = match u with
| tt => set g
end)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g b: B
hexists
(funa : A + Unit =>
match a with
| inl a0 => f a0
| inr tt => set f
end = g b)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g b: B
hexists (funa : A => f a = g b) ->
hexists
(funa : A + Unit =>
match a with
| inl a0 => f a0
| inr tt => set f
end = g b)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g b: B
{a : A & f a = g b} ->
{a : A + Unit & match a with
| inl a0 => f a0
| inr tt => set f
end = g b}
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g b: B a: A p: f a = g b
{a0 : A + Unit & match a0 with
| inl a1 => f a1
| inr tt => set f
end = g b}
exists (inla); exact p.
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g u: Unit
hexists
(funa : A + Unit =>
match a with
| inl a0 => f a0
| inr tt => set f
end = match u with
| tt => set g
end)
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g u: Unit
set f = match u with
| tt => set g
end
ua: Univalence A, B: Type f: A -> V g: B -> V eq_img: equal_img f g
set f = set g
apply setext'; auto.Defined.(** The set of finite ordinals *)DefinitionV_omega : V
:= set (fix I n := match n with0 => V_empty
| S n => V_succ (I n) end).(** ** Axioms of set theory (theorem 10.5.8) *)
V_empty ∈ V_omega * (forallx : V, x ∈ V_omega -> V_succ x ∈ V_omega)
ua: Univalence
V_empty ∈ V_omega * (forallx : V, x ∈ V_omega -> V_succ x ∈ V_omega)
ua: Univalence
V_empty ∈ V_omega
ua: Univalence
forallx : V, x ∈ V_omega -> V_succ x ∈ V_omega
ua: Univalence
V_empty ∈ V_omega
apply tr; exists0; auto.
ua: Univalence
forallx : V, x ∈ V_omega -> V_succ x ∈ V_omega
ua: Univalence x: V
x ∈ V_omega -> V_succ x ∈ V_omega
ua: Univalence x: V
{a : nat &
(fix I (n : nat) : V :=
match n with
| 0 => V_empty
| n0.+1 => V_succ (I n0)
end)
a =
x} ->
{a : nat &
(fix I (n : nat) : V :=
match n with
| 0 => V_empty
| n0.+1 => V_succ (I n0)
end)
a =
V_succ x}
ua: Univalence x: V n: nat p: (fix I (n0 : nat) : V :=
match n0 with
| 0 => V_empty
| n1.+1 => V_succ (I n1)
end)
n =
x
{a : nat &
(fix I (n0 : nat) : V :=
match n0 with
| 0 => V_empty
| n1.+1 => V_succ (I n1)
end)
a =
V_succ x}
ua: Univalence x: V n: nat p: (fix I (n0 : nat) : V :=
match n0 with
| 0 => V_empty
| n1.+1 => V_succ (I n1)
end)
n =
x
V_succ
((fix I (n0 : nat) : V :=
match n0 with
| 0 => V_empty
| n1.+1 => V_succ (I n1)
end)
n) =
V_succ x
rewrite p; auto.Qed.
ua: Univalence
forallv : V,
hexists
(funw : V => forallx : V, x ∈ w <-> hexists (funu : V => x ∈ u * u ∈ v))
ua: Univalence
forallv : V,
hexists
(funw : V => forallx : V, x ∈ w <-> hexists (funu : V => x ∈ u * u ∈ v))
ua: Univalence v: V
hexists
(funw : V => forallx : V, x ∈ w <-> hexists (funu : V => x ∈ u * u ∈ v))
ua: Univalence v: V
forallx : V, x ∈ V_union v <-> hexists (funu : V => x ∈ u * u ∈ v)
ua: Univalence v, x: V
x ∈ V_union v -> hexists (funu : V => x ∈ u * u ∈ v)
ua: Univalence v, x: V
hexists (funu : V => x ∈ u * u ∈ v) -> x ∈ V_union v
ua: Univalence v, x: V
x ∈ V_union v -> hexists (funu : V => x ∈ u * u ∈ v)
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v
phi ⊆ (u × v)
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v z: V Hz: z ∈ phi
z ∈ (u × v)
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: Tr (-1)
{a : [u] -> [v] &
set (funx : [u] => [func_of_members x, func_of_members (a x)]) = phi} z: V Hz: z ∈ phi
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: Tr (-1)
{a : [u] -> [v] &
set (funx : [u] => [func_of_members x, func_of_members (a x)]) = phi} z: V Hz: z ∈ phi
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: Tr (-1)
{a : [u] -> [v] &
set (funx : [u] => [func_of_members x, func_of_members (a x)]) = phi} z: V Hz: z ∈ phi
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: Tr (-1)
{a0 : [u] -> [v] &
set (funx : [u] => [func_of_members x, func_of_members (a0 x)]) = phi} z: V Hz: z ∈ phi h: [u] -> [v] p_phi: set (funx : [u] => [func_of_members x, func_of_members (h x)]) = phi a: [u] p: [func_of_members a, func_of_members (h a)] = z
[func_of_members (fst (a, h a)), func_of_members (snd (a, h a))] = z
assumption.
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v
forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi)
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x: V Hx: x ∈ u
hexists (funy : V => y ∈ v * [x, y] ∈ phi)
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x: V Hx: x ∈ u
x ∈ set func_of_members -> hexists (funy : V => y ∈ v * [x, y] ∈ phi)
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x: V Hx: x ∈ u
{a : [u] & func_of_members a = x} ->
hexists (funy : V => y ∈ v * [x, y] ∈ phi)
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x: V Hx: x ∈ u a: [u] p: func_of_members a = x
hexists (funy : V => y ∈ v * [x, y] ∈ phi)
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x: V Hx: x ∈ u a: [u] p: func_of_members a = x
{a0 : [u] -> [v] &
set (funx0 : [u] => [func_of_members x0, func_of_members (a0 x0)]) = phi} ->
{y : V & y ∈ v * [x, y] ∈ phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x: V Hx: x ∈ u a: [u] p: func_of_members a = x h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi
{y : V & y ∈ v * [x, y] ∈ phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x: V Hx: x ∈ u a: [u] p: func_of_members a = x h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi
func_of_members (h a) ∈ v * [x, func_of_members (h a)] ∈ phi
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x: V Hx: x ∈ u a: [u] p: func_of_members a = x h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi
func_of_members (h a) ∈ v
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x: V Hx: x ∈ u a: [u] p: func_of_members a = x h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi
[x, func_of_members (h a)] ∈ phi
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x: V Hx: x ∈ u a: [u] p: func_of_members a = x h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x: V Hx: x ∈ u a: [u] p: func_of_members a = x h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi
[x, func_of_members (h a)] ∈ phi
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x: V Hx: x ∈ u a: [u] p: func_of_members a = x h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x: V Hx: x ∈ u a: [u] p: func_of_members a = x h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi
[func_of_members a, func_of_members (h a)] = [x, func_of_members (h a)]
rewrite p; reflexivity.
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x, y, y': V Hy: [x, y] ∈ phi Hy': [x, y'] ∈ phi
y = y'
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x, y, y': V Hy: [x, y] ∈ phi Hy': [x, y'] ∈ phi
{a : [u] -> [v] &
set (funx0 : [u] => [func_of_members x0, func_of_members (a x0)]) = phi} ->
y = y'
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x, y, y': V Hy: [x, y] ∈ phi Hy': [x, y'] ∈ phi h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi
y = y'
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x, y, y': V Hy: [x, y] ∈ phi Hy': [x, y'] ∈ phi h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi
[x, y] ∈ set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) ->
y = y'
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x, y, y': V Hy: [x, y] ∈ phi Hy': [x, y'] ∈ phi h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi
{a : [u] & [func_of_members a, func_of_members (h a)] = [x, y]} -> y = y'
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x, y, y': V Hy: [x, y] ∈ phi Hy': [x, y'] ∈ phi h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi a: [u] p: [func_of_members a, func_of_members (h a)] = [x, y]
y = y'
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x, y, y': V Hy: [x, y] ∈ phi Hy': [x, y'] ∈ phi h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi a: [u] p: [func_of_members a, func_of_members (h a)] = [x, y]
[x, y'] ∈ set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) ->
y = y'
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x, y, y': V Hy: [x, y] ∈ phi Hy': [x, y'] ∈ phi h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi a: [u] p: [func_of_members a, func_of_members (h a)] = [x, y]
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x, y, y': V Hy: [x, y] ∈ phi Hy': [x, y'] ∈ phi h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi a: [u] p: [func_of_members a, func_of_members (h a)] = [x, y] a': [u] p': [func_of_members a', func_of_members (h a')] = [x, y']
y = y'
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x, y, y': V Hy: [x, y] ∈ phi Hy': [x, y'] ∈ phi h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi a: [u] p: [func_of_members a, func_of_members (h a)] = [x, y] a': [u] p': [func_of_members a', func_of_members (h a')] = [x, y'] px: func_of_members a = x py: func_of_members (h a) = y
y = y'
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x, y, y': V Hy: [x, y] ∈ phi Hy': [x, y'] ∈ phi h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi a: [u] p: [func_of_members a, func_of_members (h a)] = [x, y] a': [u] p': [func_of_members a', func_of_members (h a')] = [x, y'] px: func_of_members a = x py: func_of_members (h a) = y px': func_of_members a' = x py': func_of_members (h a') = y'
y = y'
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x, y, y': V Hy: [x, y] ∈ phi Hy': [x, y'] ∈ phi h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi a: [u] p: [func_of_members a, func_of_members (h a)] = [x, y] a': [u] p': [func_of_members a', func_of_members (h a')] = [x, y'] px: func_of_members a = x py: func_of_members (h a) = y px': func_of_members a' = x py': func_of_members (h a') = y'
func_of_members (h a) = y'
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x, y, y': V Hy: [x, y] ∈ phi Hy': [x, y'] ∈ phi h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi a: [u] p: [func_of_members a, func_of_members (h a)] = [x, y] a': [u] p': [func_of_members a', func_of_members (h a')] = [x, y'] px: func_of_members a = x py: func_of_members (h a) = y px': func_of_members a' = x py': func_of_members (h a') = y'
func_of_members (h a) = func_of_members (h a')
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x, y, y': V Hy: [x, y] ∈ phi Hy': [x, y'] ∈ phi h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi a: [u] p: [func_of_members a, func_of_members (h a)] = [x, y] a': [u] p': [func_of_members a', func_of_members (h a')] = [x, y'] px: func_of_members a = x py: func_of_members (h a) = y px': func_of_members a' = x py': func_of_members (h a') = y'
h a = h a'
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H: phi ∈ V_func u v x, y, y': V Hy: [x, y] ∈ phi Hy': [x, y'] ∈ phi h: [u] -> [v] p_phi: set (funx0 : [u] => [func_of_members x0, func_of_members (h x0)]) = phi a: [u] p: [func_of_members a, func_of_members (h a)] = [x, y] a': [u] p': [func_of_members a', func_of_members (h a')] = [x, y'] px: func_of_members a = x py: func_of_members (h a) = y px': func_of_members a' = x py': func_of_members (h a') = y'
a = a'
exact (isinj_embedding func_of_members IsEmbedding_funcofmembers a a' (px @ px'^)).
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V
V_is_func u v phi -> phi ∈ V_func u v
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
phi ∈ V_func u v
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
Tr (-1)
{a : [u] -> [v] &
set (funx : [u] => [func_of_members x, func_of_members (a x)]) = phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
Tr (-1)
{a : [u] -> [v] &
set (funx : [u] => [func_of_members x, func_of_members (a x)]) = phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' a: [u]
{b : [v] & [func_of_members a, func_of_members b] ∈ phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx0 : V, x0 ∈ u -> hexists (funy : V => y ∈ v * [x0, y] ∈ phi) H3: forallx0yy' : V, [x0, y] ∈ phi * [x0, y'] ∈ phi -> y = y' a: [u] x:= func_of_members a: V
{b : [v] & [func_of_members a, func_of_members b] ∈ phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx0 : V, x0 ∈ u -> hexists (funy : V => y ∈ v * [x0, y] ∈ phi) H3: forallx0yy' : V, [x0, y] ∈ phi * [x0, y'] ∈ phi -> y = y' a: [u] x:= func_of_members a: V
{y : V & y ∈ v * [x, y] ∈ phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx0 : V, x0 ∈ u -> hexists (funy : V => y ∈ v * [x0, y] ∈ phi) H3: forallx0yy' : V, [x0, y] ∈ phi * [x0, y'] ∈ phi -> y = y' a: [u] x:= func_of_members a: V H:= ?Goal0: {y : V & y ∈ v * [x, y] ∈ phi}
{b : [v] & [func_of_members a, func_of_members b] ∈ phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx0 : V, x0 ∈ u -> hexists (funy : V => y ∈ v * [x0, y] ∈ phi) H3: forallx0yy' : V, [x0, y] ∈ phi * [x0, y'] ∈ phi -> y = y' a: [u] x:= func_of_members a: V
{y : V & y ∈ v * [x, y] ∈ phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx0 : V, x0 ∈ u -> hexists (funy : V => y ∈ v * [x0, y] ∈ phi) H3: forallx0yy' : V, [x0, y] ∈ phi * [x0, y'] ∈ phi -> y = y' a: [u] x:= func_of_members a: V
IsHProp {y : V & y ∈ v * [x, y] ∈ phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx0 : V, x0 ∈ u -> hexists (funy : V => y ∈ v * [x0, y] ∈ phi) H3: forallx0yy' : V, [x0, y] ∈ phi * [x0, y'] ∈ phi -> y = y' a: [u] x:= func_of_members a: V
forallx0y : {y : V & y ∈ v * [x, y] ∈ phi}, x0 = y
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx0 : V, x0 ∈ u -> hexists (funy0 : V => y0 ∈ v * [x0, y0] ∈ phi) H3: forallx0y0y'0 : V, [x0, y0] ∈ phi * [x0, y'0] ∈ phi -> y0 = y'0 a: [u] x:= func_of_members a: V y: V H1_y: y ∈ v H2_y: [x, y] ∈ phi y': V H1_y': y' ∈ v H2_y': [x, y'] ∈ phi
(y; (H1_y, H2_y)) = (y'; (H1_y', H2_y'))
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx0 : V, x0 ∈ u -> hexists (funy0 : V => y0 ∈ v * [x0, y0] ∈ phi) H3: forallx0y0y'0 : V, [x0, y0] ∈ phi * [x0, y'0] ∈ phi -> y0 = y'0 a: [u] x:= func_of_members a: V y: V H1_y: y ∈ v H2_y: [x, y] ∈ phi y': V H1_y': y' ∈ v H2_y': [x, y'] ∈ phi
{p : y = y' &
transport (funy0 : V => y0 ∈ v * [x, y0] ∈ phi) p (H1_y, H2_y) =
(H1_y', H2_y')}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx0 : V, x0 ∈ u -> hexists (funy0 : V => y0 ∈ v * [x0, y0] ∈ phi) H3: forallx0y0y'0 : V, [x0, y0] ∈ phi * [x0, y'0] ∈ phi -> y0 = y'0 a: [u] x:= func_of_members a: V y: V H1_y: y ∈ v H2_y: [x, y] ∈ phi y': V H1_y': y' ∈ v H2_y': [x, y'] ∈ phi
transport (funy0 : V => y0 ∈ v * [x, y0] ∈ phi) (H3 x y y' (H2_y, H2_y'))
(H1_y, H2_y) =
(H1_y', H2_y')
apply path_ishprop.
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx0 : V, x0 ∈ u -> hexists (funy : V => y ∈ v * [x0, y] ∈ phi) H3: forallx0yy' : V, [x0, y] ∈ phi * [x0, y'] ∈ phi -> y = y' a: [u] x:= func_of_members a: V H:= untrunc_istrunc (-1)
(H2 x (transport (funz : V => x ∈ z) memb_u^ (tr (a; 1)))): {y : V & y ∈ v * [x, y] ∈ phi}
{b : [v] & [func_of_members a, func_of_members b] ∈ phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx0 : V, x0 ∈ u -> hexists (funy0 : V => y0 ∈ v * [x0, y0] ∈ phi) H3: forallx0y0y' : V, [x0, y0] ∈ phi * [x0, y'] ∈ phi -> y0 = y' a: [u] x:= func_of_members a: V y: V H1_y: y ∈ v H2_y: [x, y] ∈ phi
{b : [v] & [func_of_members a, func_of_members b] ∈ phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx0 : V, x0 ∈ u -> hexists (funy0 : V => y0 ∈ v * [x0, y0] ∈ phi) H3: forallx0y0y' : V, [x0, y0] ∈ phi * [x0, y'] ∈ phi -> y0 = y' a: [u] x:= func_of_members a: V y: V H1_y: y ∈ v H2_y: [x, y] ∈ phi b: [v] Hb: func_of_members b = y
{b0 : [v] & [func_of_members a, func_of_members b0] ∈ phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx0 : V, x0 ∈ u -> hexists (funy0 : V => y0 ∈ v * [x0, y0] ∈ phi) H3: forallx0y0y' : V, [x0, y0] ∈ phi * [x0, y'] ∈ phi -> y0 = y' a: [u] x:= func_of_members a: V y: V H1_y: y ∈ v H2_y: [x, y] ∈ phi b: [v] Hb: func_of_members b = y
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
Tr (-1)
{a : [u] -> [v] &
set (funx : [u] => [func_of_members x, func_of_members (a x)]) = phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi} z: V Hz: z ∈ set (funx : [u] => [func_of_members x, func_of_members (h x).1])
z ∈ phi
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi} z: V Hz: z ∈ set (funx : [u] => [func_of_members x, func_of_members (h x).1])
{a : [u] & [func_of_members a, func_of_members (h a).1] = z} -> z ∈ phi
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla0 : [u], {b : [v] & [func_of_members a0, func_of_members b] ∈ phi} z: V Hz: z ∈ set (funx : [u] => [func_of_members x, func_of_members (h x).1]) a: [u] Ha: [func_of_members a, func_of_members (h a).1] = z
z ∈ phi
exact (transport (funw => w ∈ phi) Ha (pr2 (h a))).
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi} z: V Hz: z ∈ phi
z ∈ set (funx : [u] => [func_of_members x, func_of_members (h x).1])
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi} z: V Hz: z ∈ phi
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi} z: V Hz: z ∈ phi
z ∈ (u × v) ->
Tr (-1) {a : [u] & [func_of_members a, func_of_members (h a).1] = z}
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi} z: V Hz: z ∈ phi
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla0 : [u], {b0 : [v] & [func_of_members a0, func_of_members b0] ∈ phi} z: V Hz: z ∈ phi a: [u] b: [v] p: [func_of_members a, func_of_members b] = z
[func_of_members a, func_of_members (h a).1] = z
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla0 : [u], {b0 : [v] & [func_of_members a0, func_of_members b0] ∈ phi} z: V Hz: z ∈ phi a: [u] b: [v] p: [func_of_members a, func_of_members b] = z
[func_of_members a, func_of_members (h a).1] =
[func_of_members a, func_of_members b]
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla0 : [u], {b0 : [v] & [func_of_members a0, func_of_members b0] ∈ phi} z: V Hz: z ∈ phi a: [u] b: [v] p: [func_of_members a, func_of_members b] = z
func_of_members (h a).1 = func_of_members b
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla0 : [u], {b0 : [v] & [func_of_members a0, func_of_members b0] ∈ phi} z: V Hz: z ∈ phi a: [u] b: [v] p: [func_of_members a, func_of_members b] = z
[func_of_members a, func_of_members (h a).1] ∈ phi *
[func_of_members a, func_of_members b] ∈ phi
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla0 : [u], {b0 : [v] & [func_of_members a0, func_of_members b0] ∈ phi} z: V Hz: z ∈ phi a: [u] b: [v] p: [func_of_members a, func_of_members b] = z
[func_of_members a, func_of_members (h a).1] ∈ phi
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla0 : [u], {b0 : [v] & [func_of_members a0, func_of_members b0] ∈ phi} z: V Hz: z ∈ phi a: [u] b: [v] p: [func_of_members a, func_of_members b] = z
[func_of_members a, func_of_members b] ∈ phi
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla0 : [u], {b0 : [v] & [func_of_members a0, func_of_members b0] ∈ phi} z: V Hz: z ∈ phi a: [u] b: [v] p: [func_of_members a, func_of_members b] = z
[func_of_members a, func_of_members (h a).1] ∈ phi
exact (pr2 (h a)).
ua: Univalence u, v: V memb_u: u = set func_of_members memb_v: v = set func_of_members phi: V H1: phi ⊆ (u × v) H2: forallx : V, x ∈ u -> hexists (funy : V => y ∈ v * [x, y] ∈ phi) H3: forallxyy' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y' h: foralla0 : [u], {b0 : [v] & [func_of_members a0, func_of_members b0] ∈ phi} z: V Hz: z ∈ phi a: [u] b: [v] p: [func_of_members a, func_of_members b] = z
[func_of_members a, func_of_members b] ∈ phi
exact (transport (funw => w ∈ phi) p^ Hz).Qed.
ua: Univalence
forall (r : V -> V) (x : V),
hexists
(funw : V =>
forally : V, y ∈ w <-> hexists (funz : V => z ∈ x * (r z = y)))
ua: Univalence
forall (r : V -> V) (x : V),
hexists
(funw : V =>
forally : V, y ∈ w <-> hexists (funz : V => z ∈ x * (r z = y)))
ua: Univalence r: V -> V
forallx : V,
hexists
(funw : V =>
forally : V, y ∈ w <-> hexists (funz : V => z ∈ x * (r z = y)))
ua: Univalence r: V -> V
forall (A : Type) (f : A -> V),
(foralla : A,
hexists
(funw : V =>
forally : V, y ∈ w <-> hexists (funz : V => z ∈ f a * (r z = y)))) ->
hexists
(funw : V =>
forally : V, y ∈ w <-> hexists (funz : V => z ∈ set f * (r z = y)))
ua: Univalence r: V -> V A: Type f: A -> V
hexists
(funw : V =>
forally : V, y ∈ w <-> hexists (funz : V => z ∈ set f * (r z = y)))
ua: Univalence r: V -> V A: Type f: A -> V
{w : V &
forally : V, y ∈ w <-> hexists (funz : V => z ∈ set f * (r z = y))}
ua: Univalence r: V -> V A: Type f: A -> V
forally : V,
y ∈ set (funx : A => r (f x)) <->
hexists (funz : V => z ∈ set f * (r z = y))
ua: Univalence r: V -> V A: Type f: A -> V y: V
y ∈ set (funx : A => r (f x)) ->
hexists (funz : V => z ∈ set f * (r z = y))
ua: Univalence r: V -> V A: Type f: A -> V y: V
hexists (funz : V => z ∈ set f * (r z = y)) ->
y ∈ set (funx : A => r (f x))
ua: Univalence r: V -> V A: Type f: A -> V y: V
y ∈ set (funx : A => r (f x)) ->
hexists (funz : V => z ∈ set f * (r z = y))
ua: Univalence r: V -> V A: Type f: A -> V y: V
{a : A & r (f a) = y} -> {z : V & z ∈ set f * (r z = y)}
ua: Univalence r: V -> V A: Type f: A -> V y: V a: A p: r (f a) = y
{z : V & z ∈ set f * (r z = y)}
ua: Univalence r: V -> V A: Type f: A -> V y: V a: A p: r (f a) = y
f a ∈ set f * (r (f a) = y)
ua: Univalence r: V -> V A: Type f: A -> V y: V a: A p: r (f a) = y
f a ∈ set f
ua: Univalence r: V -> V A: Type f: A -> V y: V a: A p: r (f a) = y
r (f a) = y
ua: Univalence r: V -> V A: Type f: A -> V y: V a: A p: r (f a) = y
f a ∈ set f
apply tr; existsa; auto.
ua: Univalence r: V -> V A: Type f: A -> V y: V a: A p: r (f a) = y
r (f a) = y
assumption.
ua: Univalence r: V -> V A: Type f: A -> V y: V
hexists (funz : V => z ∈ set f * (r z = y)) ->
y ∈ set (funx : A => r (f x))
ua: Univalence r: V -> V A: Type f: A -> V y: V
{z : V & z ∈ set f * (r z = y)} -> y ∈ set (funx : A => r (f x))
ua: Univalence r: V -> V A: Type f: A -> V y, z: V h: z ∈ set f p: r z = y
y ∈ set (funx : A => r (f x))
ua: Univalence r: V -> V A: Type f: A -> V y, z: V h: z ∈ set f p: r z = y
z ∈ set f -> y ∈ set (funx : A => r (f x))
ua: Univalence r: V -> V A: Type f: A -> V y, z: V h: z ∈ set f p: r z = y
{a : A & f a = z} -> {a : A & r (f a) = y}
ua: Univalence r: V -> V A: Type f: A -> V y, z: V h: z ∈ set f p: r z = y a: A p': f a = z
{a0 : A & r (f a0) = y}
ua: Univalence r: V -> V A: Type f: A -> V y, z: V h: z ∈ set f p: r z = y a: A p': f a = z
r (f a) = y
ua: Univalence r: V -> V A: Type f: A -> V y, z: V h: z ∈ set f p: r z = y a: A p': f a = z
r (f a) = r z
exact (ap r p').Qed.
ua: Univalence C: V -> HProp
foralla : V, hexists (funw : V => forallx : V, x ∈ w <-> x ∈ a * C x)
ua: Univalence C: V -> HProp
foralla : V, hexists (funw : V => forallx : V, x ∈ w <-> x ∈ a * C x)
ua: Univalence C: V -> HProp
forall (A : Type) (f : A -> V),
(foralla : A, hexists (funw : V => forallx : V, x ∈ w <-> x ∈ f a * C x)) ->
hexists (funw : V => forallx : V, x ∈ w <-> x ∈ set f * C x)
ua: Univalence C: V -> HProp A: Type f: A -> V
hexists (funw : V => forallx : V, x ∈ w <-> x ∈ set f * C x)
ua: Univalence C: V -> HProp A: Type f: A -> V
{w : V & forallx : V, x ∈ w <-> x ∈ set f * C x}
ua: Univalence C: V -> HProp A: Type f: A -> V
forallx : V,
x ∈ set (funz : {a : A & C (f a)} => f z.1) <-> x ∈ set f * C x
ua: Univalence C: V -> HProp A: Type f: A -> V x: V
x ∈ set (funz : {a : A & C (f a)} => f z.1) -> x ∈ set f * C x
ua: Univalence C: V -> HProp A: Type f: A -> V x: V
x ∈ set f * C x -> x ∈ set (funz : {a : A & C (f a)} => f z.1)
ua: Univalence C: V -> HProp A: Type f: A -> V x: V
x ∈ set (funz : {a : A & C (f a)} => f z.1) -> x ∈ set f * C x
ua: Univalence C: V -> HProp A: Type f: A -> V x: V
{a : {a : A & C (f a)} & f a.1 = x} -> x ∈ set f * C x
ua: Univalence C: V -> HProp A: Type f: A -> V x: V a: A h: C (f a) p: f (a; h).1 = x
x ∈ set f * C x
ua: Univalence C: V -> HProp A: Type f: A -> V x: V a: A h: C (f a) p: f (a; h).1 = x
x ∈ set f
ua: Univalence C: V -> HProp A: Type f: A -> V x: V a: A h: C (f a) p: f (a; h).1 = x
C x
ua: Univalence C: V -> HProp A: Type f: A -> V x: V a: A h: C (f a) p: f (a; h).1 = x
x ∈ set f
apply tr; existsa; assumption.
ua: Univalence C: V -> HProp A: Type f: A -> V x: V a: A h: C (f a) p: f (a; h).1 = x
C x
exact (transport C p h).
ua: Univalence C: V -> HProp A: Type f: A -> V x: V
x ∈ set f * C x -> x ∈ set (funz : {a : A & C (f a)} => f z.1)
ua: Univalence C: V -> HProp A: Type f: A -> V x: V H1: x ∈ set f H2: C x
x ∈ set (funz : {a : A & C (f a)} => f z.1)
ua: Univalence C: V -> HProp A: Type f: A -> V x: V H1: x ∈ set f H2: C x
x ∈ set f -> x ∈ set (funz : {a : A & C (f a)} => f z.1)
ua: Univalence C: V -> HProp A: Type f: A -> V x: V H1: x ∈ set f H2: C x
{a : A & f a = x} -> {a : {a : A & C (f a)} & f a.1 = x}
ua: Univalence C: V -> HProp A: Type f: A -> V x: V H1: x ∈ set f H2: C x a: A p: f a = x
{a0 : {a0 : A & C (f a0)} & f a0.1 = x}
ua: Univalence C: V -> HProp A: Type f: A -> V x: V H1: x ∈ set f H2: C x a: A p: f a = x