Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
(* -*- mode: coq; mode: visual-line -*- *)

(** * The cumulative hierarchy [V]. *)

[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import HSet TruncType. Require Import Colimits.SpanPushout. Require Import HoTT.Truncations.Core Colimits.Quotient. Local Open Scope nat_scope. Local Open Scope path_scope. (** Bitotal relation *) Definition bitotal {A B : Type} (R : A -> B -> HProp) := (forall a : A, hexists (fun (b : B) => R a b)) * (forall b : B, hexists (fun (a : A) => R a b)). (** ** The cumulative hierarchy V *) Module Export CumulativeHierarchy. Private Inductive V@{U' U | U < U'} : Type@{U'} := | set {A : Type@{U}} (f : A -> V) : V. Axiom setext : forall {A B : Type} (R : A -> B -> HProp) (bitot_R : bitotal R) (h : SPushout R -> V), set (h o (spushl R)) = set (h o (spushr R)). Axiom ishset_V : IsHSet V. Global Existing Instance ishset_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. *) Fixpoint V_ind@{U' U u | U < U'} (P : V@{U' U} -> Type@{u}) (H_0trunc : forall v : V@{U' U}, IsTrunc 0 (P v)) (H_set : forall (A : Type@{U}) (f : A -> V) (H_f : forall a : A, P (f a)), P (set f)) (H_setext : forall (A B : Type@{U}) (R : A -> B -> HProp@{U}) (bitot_R : bitotal R) (h : SPushout R -> V) (H_h : forall x : 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 (fun a => 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 *) End CumulativeHierarchy.
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext: forall (A B : Type) (R : A -> B -> HProp) (bitot_R : bitotal R) (h : SPushout (fun (x : A) (x0 : B) => R x x0) -> V) (H_h : forall x : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x)), transport P (setext R bitot_R h) (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 (h o spushr (fun (x : A) (x0 : B) => R x x0)) (H_h oD spushr (fun (x : A) (x0 : B) => R 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext: forall (A B : Type) (R : A -> B -> HProp) (bitot_R : bitotal R) (h : SPushout (fun (x : A) (x0 : B) => R x x0) -> V) (H_h : forall x : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x)), transport P (setext R bitot_R h) (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 (h o spushr (fun (x : A) (x0 : B) => R x x0)) (H_h oD spushr (fun (x : A) (x0 : B) => R 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext: forall (A B : 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext: forall (A B : 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext: forall (A B : 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 (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 (fun x : 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 (fun x : 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext: forall (A B : 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))
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 (fun x : 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 (fun x : 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext: forall (A B : 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))
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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext: forall (A B : 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))
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) *) Definition equal_img {A B C : Type} (f : A -> C) (g : B -> C) := (forall a : A, hexists (fun (b : B) => f a = g b)) * (forall b : 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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 (A B : 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 (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) = H_set B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
P: Type
H_0trunc: IsHSet P
H_set: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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 (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) = H_set B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
P: Type
H_0trunc: IsHSet P
H_set: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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 (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
P: Type
H_0trunc: IsHSet P
H_set: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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 (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
P: Type
H_0trunc: IsHSet P
H_set: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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 (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
P: Type
H_0trunc: IsHSet P
H_set: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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

forall a : A, hexists (fun 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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
forall b : B, hexists (fun 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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

forall a : A, hexists (fun 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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 (fun 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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 (fun b : B => R a b) -> hexists (fun 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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

{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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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

forall b : B, hexists (fun 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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 (fun 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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 (fun a : A => R a b) -> hexists (fun 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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

{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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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 (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))
P: Type
H_0trunc: IsHSet P
H_set: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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

forall a : A, hexists (fun 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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
forall b : B, hexists (fun 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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

forall a : A, hexists (fun 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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 (fun 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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 (fun b : B => R a b) -> hexists (fun 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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

{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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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

forall b : B, hexists (fun 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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 (fun 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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 (fun a : A => R a b) -> hexists (fun 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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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

{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: forall A : Type, (A -> V) -> (A -> P) -> P
H_setext': forall (A B : 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
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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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 v : V, P v
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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 v : V, P v
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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 (A B : Type) (R : A -> B -> HProp) (bitot_R : bitotal R) (h : SPushout (fun (x : A) (x0 : B) => R x x0) -> V) (H_h : forall x : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x)), transport P (setext R bitot_R h) (H_set A (fun x : 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 (fun x : 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x)

transport P (setext R bitot_R h) (H_set A (fun x : 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 (fun x : 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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 (fun x : 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 (fun x : 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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 (fun x : 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 (fun x : 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)

transport P (setext R bitot_R h) (H_set A (fun x : 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 (fun x : 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)

transport P (setext R bitot_R h) (H_set A (fun x : 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 (fun x : 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)

equal_img f g
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
transport P (setext R bitot_R h) (H_set A (fun x : 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 (fun x : 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)

equal_img f g
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)

forall a : A, hexists (fun b : B => f a = g b)
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
forall b : B, hexists (fun a : A => f a = g b)
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)

forall a : A, hexists (fun b : B => f a = g b)
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
a: A

hexists (fun b : B => f a = g b)
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
a: A

hexists (fun b : B => R a b) -> hexists (fun b : B => f a = g b)
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
a: A

{b : B & R a b} -> {b : B & f a = g b}
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
a: A
b: B
r: R a b

{b : B & f a = g b}
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
a: A
b: B
r: R a b

f a = g b
exact (ap h (spglue R r)).
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)

forall b : B, hexists (fun a : A => f a = g b)
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
b: B

hexists (fun a : A => f a = g b)
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
b: B

hexists (fun a : A => R a b) -> hexists (fun a : A => f a = g b)
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
b: B

{a : A & R a b} -> {a : A & f a = g b}
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
b: B
a: A
r: R a b

{a : A & f a = g b}
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
b: B
a: A
r: R a b

f a = g b
exact (ap h (spglue R r)).
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g

transport P (setext R bitot_R h) (H_set A (fun x : 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 (fun x : 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g

transport P (setext R bitot_R h) (H_set A (fun x : 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : 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 (fun x : 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g

transport P (setext R bitot_R h) (H_set A (fun x : 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g

setext R bitot_R h = setext' (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) eq_img
apply path_ishprop.
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : 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 (fun x : 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g

(forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b)))
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g

forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
forall b : B, hexists (fun a : A => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g

forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
a: A

hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
a: A
truncb:= fst bitot_R a: hexists (fun b : B => R a b)

hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
a: A
truncb:= fst bitot_R a: hexists (fun b : B => R a b)

hexists (fun b : B => R a b) -> hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
a: A
truncb:= fst bitot_R a: hexists (fun b : B => R a b)

{b : B & R a b} -> {b : B & hexists (fun p : f a = g b => transport P p (H_f a) = H_g b)}
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
a: A
truncb:= fst bitot_R a: hexists (fun b : B => R a b)
b: B
Rab: R a b

{b : B & hexists (fun p : f a = g b => transport P p (H_f a) = H_g b)}
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
a: A
truncb:= fst bitot_R a: hexists (fun b : B => R a b)
b: B
Rab: R a b

hexists (fun p : f a = g b => transport P p (H_f a) = H_g b)
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
a: A
truncb:= fst bitot_R a: hexists (fun b : B => R a b)
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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
a: A
truncb:= fst bitot_R a: hexists (fun b : B => R a b)
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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
a: A
truncb:= fst bitot_R a: hexists (fun b : B => R a b)
b: B
Rab: R a b

transport P (ap h (spglue (fun (x : A) (x0 : B) => R x x0) Rab)) (H_f a) = transport (fun x : 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
a: A
truncb:= fst bitot_R a: hexists (fun b : B => R a b)
b: B
Rab: R a b

transport (fun x : 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
a: A
truncb:= fst bitot_R a: hexists (fun b : B => R a b)
b: B
Rab: R a b

transport (fun x : 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g

forall b : B, hexists (fun a : A => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
b: B

hexists (fun a : A => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
b: B
trunca:= snd bitot_R b: hexists (fun a : A => R a b)

hexists (fun a : A => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
b: B
trunca:= snd bitot_R b: hexists (fun a : A => R a b)

hexists (fun a : A => R a b) -> hexists (fun a : A => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
b: B
trunca:= snd bitot_R b: hexists (fun a : A => R a b)

{a : A & R a b} -> {a : A & hexists (fun p : f a = g b => transport P p (H_f a) = H_g b)}
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
b: B
trunca:= snd bitot_R b: hexists (fun a : A => R a b)
a: A
Rab: R a b

{a : A & hexists (fun p : f a = g b => transport P p (H_f a) = H_g b)}
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
b: B
trunca:= snd bitot_R b: hexists (fun a : A => R a b)
a: A
Rab: R a b

hexists (fun p : f a = g b => transport P p (H_f a) = H_g b)
P: V -> Type
H_0trunc: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
b: B
trunca:= snd bitot_R b: hexists (fun a : A => R a 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
b: B
trunca:= snd bitot_R b: hexists (fun a : A => R a 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
b: B
trunca:= snd bitot_R b: hexists (fun a : A => R a 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 (fun x : 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
b: B
trunca:= snd bitot_R b: hexists (fun a : A => R a b)
a: A
Rab: R a b

transport (fun x : 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: forall v : V, IsHSet (P v)
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
H_setext': forall (A B : Type) (f : A -> V) (g : B -> V) (eq_img : equal_img f g) (H_f : forall a : A, P (f a)) (H_g : forall b : B, P (g b)), (forall a : A, hexists (fun b : B => hexists (fun p : f a = g b => transport P p (H_f a) = H_g b))) * (forall b : B, hexists (fun a : A => hexists (fun p : 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
A, B: Type
R: A -> B -> HProp
bitot_R: bitotal R
h: SPushout (fun (x : A) (x0 : B) => R x x0) -> V
H_h: forall x : 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) : forall a : A, P (f a): forall a : A, P (f a)
H_g:= H_h oD spushr (fun (x : A) (x0 : B) => R x x0) : forall b : B, P (g b): forall b : B, P (g b)
eq_img: equal_img f g
b: B
trunca:= snd bitot_R b: hexists (fun a : A => R a b)
a: A
Rab: R a b

transport (fun x : 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), (forall a : A, P (f a)) -> P (set f)
isHProp_P: forall v : V, IsHProp (P v)

forall v : V, P v
P: V -> Type
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
isHProp_P: forall v : V, IsHProp (P v)

forall v : V, P v
P: V -> Type
H_set: forall (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
isHProp_P: forall v : V, IsHProp (P v)

forall (A B : Type) (R : A -> B -> HProp) (bitot_R : bitotal R) (h : SPushout (fun (x : A) (x0 : B) => R x x0) -> V) (H_h : forall x : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x)), transport P (setext R bitot_R h) (H_set A (fun x : 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 (fun x : 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 (A : Type) (f : A -> V), (forall a : A, P (f a)) -> P (set f)
isHProp_P: forall v : 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: forall x : SPushout (fun (x : A) (x0 : B) => R x x0), P (h x)

transport P (setext R bitot_R h) (H_set A (fun x : 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 (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (H_h oD spushr (fun (x : A) (x0 : B) => R x x0))
apply path_ishprop. Defined. Section AssumingUA. Context `{ua : Univalence}. (** ** Membership relation *)
ua: Univalence
x: V

V -> HProp
ua: Univalence
x: V

V -> HProp
ua: Univalence
x: V

forall A : Type, (A -> V) -> (A -> HProp) -> HProp
ua: Univalence
x: V
forall (A B : 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

forall A : Type, (A -> V) -> (A -> HProp) -> HProp
ua: Univalence
x: V
A: Type
f: A -> V

HProp
exact (hexists (fun a : A => f a = x)).
ua: Univalence
x: V

forall (A B : 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 (fun a : A0 => f0 a = x)) A f H_f = (fun (A0 : Type) (f0 : A0 -> V) (_ : A0 -> HProp) => hexists (fun a : A0 => f0 a = x)) B g H_g
ua: Univalence
x: V

forall (A B : 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 (fun a : A => f a = x) = hexists (fun a : B => g a = x)
ua: Univalence
x: V
A, B: Type
f: A -> V
g: B -> V
eqimg: equal_img f g

hexists (fun a : A => f a = x) = hexists (fun 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 : 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) {a : A & f a = x}
a: A
p: 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
p: f a = x

hexists (fun b : B => f a = g b) -> 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
p: f a = x

{b : B & f a = g b} -> {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
p: f a = x
b: B
p': f a = g b

{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
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 (fun a : 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) {a : B & g a = x}
b: B
p: g b = x
a: A
p': 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) {a : B & g a = 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 *) Definition subset (x : V) (y : V) : HProp := Build_HProp (forall z : 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 (A0 B : Type) (f : A0 -> V) (g : B -> V), equal_img f g -> forall (H_f0 : A0 -> HProp) (H_g : B -> HProp), equal_img H_f0 H_g -> Build_HProp ((forall a : A, hexists (fun b : A0 => H_f a (f b))) * (forall b : A0, hexists (fun a : A => H_f a (f b)))) = Build_HProp ((forall a : A, hexists (fun b : B => H_f a (g b))) * (forall b : B, hexists (fun a : 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 (A0 B : Type) (f : A0 -> V) (g : B -> V), equal_img f g -> forall (H_f0 : A0 -> HProp) (H_g : B -> HProp), equal_img H_f0 H_g -> Build_HProp ((forall a : A, hexists (fun b : A0 => H_f a (f b))) * (forall b : A0, hexists (fun a : A => H_f a (f b)))) = Build_HProp ((forall a : A, hexists (fun b : B => H_f a (g b))) * (forall b : B, hexists (fun 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'

Build_HProp ((forall a : A, Tr (-1) {b : B & H_f a (g b)}) * (forall b : B, Tr (-1) {a : A & H_f a (g b)})) = Build_HProp ((forall a : A, Tr (-1) {b : B' & H_f a (g' b)}) * (forall 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'

(forall a : A, Tr (-1) {b : B & H_f a (g b)}) * (forall b : B, Tr (-1) {a : A & H_f a (g b)}) -> (forall a : A, Tr (-1) {b : B' & H_f a (g' b)}) * (forall 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'
(forall a : A, Tr (-1) {b : B' & H_f a (g' b)}) * (forall b : B', Tr (-1) {a : A & H_f a (g' b)}) -> (forall a : A, Tr (-1) {b : B & H_f a (g b)}) * (forall 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'

(forall a : A, Tr (-1) {b : B & H_f a (g b)}) * (forall b : B, Tr (-1) {a : A & H_f a (g b)}) -> (forall a : A, Tr (-1) {b : B' & H_f a (g' b)}) * (forall 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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : B, Tr (-1) {a : A & H_f a (g b)}

forall 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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : B, Tr (-1) {a : A & H_f a (g b)}
forall 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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : B, Tr (-1) {a : A & H_f a (g b)}

forall 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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : B, Tr (-1) {a : A & H_f a (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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : B, Tr (-1) {a : A & H_f a (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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : B, Tr (-1) {a : A & H_f a (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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : B, Tr (-1) {a : A & H_f a (g b)}
a: A
b: B
H3: H_f a (g b)

hexists (fun b0 : B' => g b = g' b0) -> 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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : B, Tr (-1) {a : A & H_f a (g b)}
a: A
b: B
H3: H_f a (g b)

merely {b0 : B' & g b = g' b0} -> 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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : B, Tr (-1) {a : A & H_f a (g b)}
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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : B, Tr (-1) {a : A & H_f a (g b)}
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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : B, Tr (-1) {a : A & H_f a (g b)}
a: A
b: B
H3: H_f a (g b)
b': B'
p: g b = g' b'

H_f a (g' b')
exact (transport (fun x => 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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : B, Tr (-1) {a : A & H_f a (g b)}

forall 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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : 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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : 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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : B, Tr (-1) {a : A & H_f a (g b)}
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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : B, Tr (-1) {a : A & H_f a (g b)}
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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : B, Tr (-1) {a : A & H_f a (g b)}
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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : B, Tr (-1) {a : A & H_f a (g b)}
b': B'
b: B
p: g b = g' b'
a: A
H3: 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: forall a : A, Tr (-1) {b : B & H_f a (g b)}
H2: forall b : B, Tr (-1) {a : A & H_f a (g b)}
b': B'
b: B
p: g b = g' b'
a: A
H3: H_f a (g b)

H_f a (g' b')
exact (transport (fun x => 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'

(forall a : A, Tr (-1) {b : B' & H_f a (g' b)}) * (forall b : B', Tr (-1) {a : A & H_f a (g' b)}) -> (forall a : A, Tr (-1) {b : B & H_f a (g b)}) * (forall 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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : B', Tr (-1) {a : A & H_f a (g' b)}

forall 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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : B', Tr (-1) {a : A & H_f a (g' b)}
forall 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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : B', Tr (-1) {a : A & H_f a (g' b)}

forall 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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : B', Tr (-1) {a : A & H_f a (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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : B', Tr (-1) {a : A & H_f a (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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : B', Tr (-1) {a : A & H_f a (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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : B', Tr (-1) {a : A & H_f a (g' b)}
a: A
b': B'
H3: H_f a (g' b')

hexists (fun a : B => g 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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : B', Tr (-1) {a : A & H_f a (g' b)}
a: A
b': B'
H3: H_f a (g' b')

{a : B & g a = 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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : B', Tr (-1) {a : A & H_f a (g' b)}
a: A
b': B'
H3: H_f a (g' b')
b: B
p: g b = 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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : B', Tr (-1) {a : A & H_f a (g' b)}
a: A
b': B'
H3: H_f a (g' b')
b: B
p: g b = g' b'

H_f a (g b)
exact (transport (fun x => 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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : B', Tr (-1) {a : A & H_f a (g' b)}

forall 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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : 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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : B', Tr (-1) {a : A & H_f a (g' b)}
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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : B', Tr (-1) {a : A & H_f a (g' b)}
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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : B', Tr (-1) {a : A & H_f a (g' b)}
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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : B', Tr (-1) {a : A & H_f a (g' b)}
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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : B', Tr (-1) {a : A & H_f a (g' b)}
b: B
b': B'
p: g b = g' b'
a: A
H3: 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: forall a : A, Tr (-1) {b : B' & H_f a (g' b)}
H2: forall b : B', Tr (-1) {a : A & H_f a (g' b)}
b: B
b': B'
p: g b = g' b'
a: A
H3: H_f a (g' b')

H_f a (g b)
exact (transport (fun x => H_f a x) p^ H3). Defined. (* Then we define bisim : V -> (V -> HProp) by induction again *)
ua: Univalence

V -> V -> HProp
ua: Univalence

V -> V -> HProp
ua: Univalence

forall (A B : 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), (forall a : 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

(forall a : A, Tr (-1) {b : C & H_f a (h b)}) * (forall b : C, Tr (-1) {a : A & H_f a (h b)}) -> (forall a : B, Tr (-1) {b : C & H_g a (h b)}) * (forall b : 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
(forall a : B, Tr (-1) {b : C & H_g a (h b)}) * (forall b : C, Tr (-1) {a : B & H_g a (h b)}) -> (forall a : A, Tr (-1) {b : C & H_f a (h b)}) * (forall b : 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

(forall a : A, Tr (-1) {b : C & H_f a (h b)}) * (forall b : C, Tr (-1) {a : A & H_f a (h b)}) -> (forall a : B, Tr (-1) {b : C & H_g a (h b)}) * (forall b : 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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : C, Tr (-1) {a : A & H_f a (h b)}

forall a : 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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : C, Tr (-1) {a : A & H_f a (h b)}
forall b : 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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : C, Tr (-1) {a : A & H_f a (h b)}

forall a : 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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : C, Tr (-1) {a : A & H_f a (h b)}
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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : C, Tr (-1) {a : A & H_f a (h b)}
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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : C, Tr (-1) {a : A & H_f a (h b)}
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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : C, Tr (-1) {a : A & H_f a (h b)}
b: B
a: A
p: H_f a = H_g b

Tr (-1) {b : C & H_f a (h 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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : C, Tr (-1) {a : A & H_f a (h b)}
b: B
a: A
p: H_f a = H_g b

{b : C & H_f a (h b)} -> {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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : C, Tr (-1) {a : A & H_f a (h b)}
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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : C, Tr (-1) {a : A & H_f a (h b)}
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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : C, Tr (-1) {a : A & H_f a (h b)}

forall b : 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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : 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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : 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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : C, Tr (-1) {a : A & H_f a (h b)}
c: C
a: A
H3: 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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : C, Tr (-1) {a : A & H_f a (h b)}
c: C
a: A
H3: H_f a (h c)

hexists (fun b : B => H_f a = H_g b) -> 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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : C, Tr (-1) {a : A & H_f a (h b)}
c: C
a: A
H3: H_f a (h c)

{b : B & H_f a = H_g b} -> {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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : C, Tr (-1) {a : A & H_f a (h b)}
c: C
a: A
H3: H_f a (h c)
b: B
p: H_f a = H_g b

{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: forall a : A, Tr (-1) {b : C & H_f a (h b)}
H2: forall b : C, Tr (-1) {a : A & H_f a (h b)}
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

(forall a : B, Tr (-1) {b : C & H_g a (h b)}) * (forall b : C, Tr (-1) {a : B & H_g a (h b)}) -> (forall a : A, Tr (-1) {b : C & H_f a (h b)}) * (forall b : 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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : C, Tr (-1) {a : B & H_g a (h b)}

forall 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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : C, Tr (-1) {a : B & H_g a (h b)}
forall b : 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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : C, Tr (-1) {a : B & H_g a (h b)}

forall 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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : C, Tr (-1) {a : B & H_g a (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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : C, Tr (-1) {a : B & H_g a (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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : C, Tr (-1) {a : B & H_g a (h b)}
a: A
b: B
p: 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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : C, Tr (-1) {a : B & H_g a (h b)}
a: A
b: B
p: H_f a = H_g b

Tr (-1) {b0 : C & H_g b (h b0)} -> 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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : C, Tr (-1) {a : B & H_g a (h b)}
a: A
b: B
p: H_f a = H_g b

{b0 : C & H_g b (h b0)} -> {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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : C, Tr (-1) {a : B & H_g a (h b)}
a: A
b: B
p: H_f a = H_g b
c: C
H3: H_g b (h c)

{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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : C, Tr (-1) {a : B & H_g a (h b)}
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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : C, Tr (-1) {a : B & H_g a (h b)}

forall b : 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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : 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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : 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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : C, Tr (-1) {a : B & H_g a (h b)}
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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : C, Tr (-1) {a : B & H_g a (h b)}
c: C
b: B
H3: H_g b (h c)

hexists (fun a : 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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : C, Tr (-1) {a : B & H_g a (h b)}
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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : C, Tr (-1) {a : B & H_g a (h b)}
c: C
b: B
H3: H_g b (h c)
a: A
p: 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: forall a : B, Tr (-1) {b : C & H_g a (h b)}
H2: forall b : C, Tr (-1) {a : B & H_g a (h b)}
c: C
b: B
H3: H_g b (h c)
a: A
p: H_f a = H_g b

H_f a (h c)
exact ((ap10 p^ (h c)) # H3). Defined. Notation "u ~~ v" := (bisimulation u v) : set_scope.
ua: Univalence

Reflexive (fun x x0 : V => x ~~ x0)
ua: Univalence

Reflexive (fun x x0 : V => x ~~ x0)
ua: Univalence

forall (A : Type) (f : A -> V), (forall a : A, f a ~~ f a) -> set f ~~ set f
ua: Univalence
A: Type
f: A -> V
H_f: forall a : A, f a ~~ f a

(forall a : A, Tr (-1) {b : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun ... ... => R x0 x1) x)) (fun x : A => H_h (spushl (fun ... ... => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun ... ... => R x0 x1) x)) (fun x : B => H_h (spushr (fun ... ... => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl ... a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl ... a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h ... = H_h ...} => Trunc_functor (-1) (fun X1 : ... => (X1.1; transport trunctype_type ... X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & ...} => (X0.1; ap H_h (...))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (...) (...)} => Trunc_functor (-1) (fun X1 : ... => (X1.1; transport trunctype_type ... X0.2)) (Trunc_functor (-1) (... => ...) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr ... a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr ... a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h ... = H_h ...} => Trunc_functor (-1) (fun X1 : ... => (X1.1; transport trunctype_type ... X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & ...} => (X0.1; ap H_h (...))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (...) (...)} => Trunc_functor (-1) (fun X1 : ... => (X1.1; transport trunctype_type ... X0.2)) (Trunc_functor (-1) (... => ...) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun ... ... => R x0 x1) x)) (fun x : A => H_h (spushl (fun ... ... => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun ... ... => R x0 x1) x)) (fun x : B => H_h (spushr (fun ... ... => R x0 x1) x)) v))))) (f a) (f b)}) * (forall b : A, Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun ... ... => R x0 x1) x)) (fun x : A => H_h (spushl (fun ... ... => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun ... ... => R x0 x1) x)) (fun x : B => H_h (spushr (fun ... ... => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl ... a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl ... a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h ... = H_h ...} => Trunc_functor (-1) (fun X1 : ... => (X1.1; transport trunctype_type ... X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & ...} => (X0.1; ap H_h (...))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (...) (...)} => Trunc_functor (-1) (fun X1 : ... => (X1.1; transport trunctype_type ... X0.2)) (Trunc_functor (-1) (... => ...) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr ... a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr ... a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h ... = H_h ...} => Trunc_functor (-1) (fun X1 : ... => (X1.1; transport trunctype_type ... X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & ...} => (X0.1; ap H_h (...))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (...) (...)} => Trunc_functor (-1) (fun X1 : ... => (X1.1; transport trunctype_type ... X0.2)) (Trunc_functor (-1) (... => ...) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun ... ... => R x0 x1) x)) (fun x : A => H_h (spushl (fun ... ... => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun ... ... => R x0 x1) x)) (fun x : B => H_h (spushr (fun ... ... => R x0 x1) x)) v))))) (f a) (f b)})
ua: Univalence
A: Type
f: A -> V
H_f: forall a : A, f a ~~ f a

forall a : A, Tr (-1) {b : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (f b)}
ua: Univalence
A: Type
f: A -> V
H_f: forall a : A, f a ~~ f a
forall b : A, Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (f b)}
ua: Univalence
A: Type
f: A -> V
H_f: forall a : A, f a ~~ f a

forall a : A, Tr (-1) {b : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (f b)}
intro a; apply tr; exists a; auto.
ua: Univalence
A: Type
f: A -> V
H_f: forall a : A, f a ~~ f a

forall b : A, Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (f b)}
intro a; apply tr; exists a; auto. Defined.
ua: Univalence

forall u v : V, u = v <~> u ~~ v
ua: Univalence

forall u v : V, u = v <~> u ~~ v
ua: Univalence
u, v: V

u = v <~> u ~~ v
ua: Univalence
u, v: V

u = v -> u ~~ v
ua: Univalence
u, v: V
u ~~ v -> u = v
ua: Univalence
u, v: V

u = v -> u ~~ v
intro p; exact (transport (fun x => u ~~ x) p (reflexive_bisimulation u)).
ua: Univalence
u, v: V

u ~~ v -> u = v
ua: Univalence
u, v: V

forall u v : V, u ~~ v -> u = v
ua: Univalence
u, v: V
A: Type
f: A -> V
H_f: forall (a : A) (v : V), f a ~~ v -> f a = v

forall v : V, set f ~~ v -> set f = v
ua: Univalence
u, v: V
A: Type
f: A -> V
H_f: forall (a : A) (v : V), f a ~~ v -> f a = v
B: Type
g: B -> V

set f ~~ set g -> set f = set g
ua: Univalence
u, v: V
A: Type
f: A -> V
H_f: forall (a : A) (v : V), f a ~~ v -> f a = v
B: Type
g: B -> V
H1: forall a : A, Tr (-1) {b : B & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
H2: forall b : B, Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}

set f = set g
ua: Univalence
u, v: V
A: Type
f: A -> V
H_f: forall (a : A) (v : V), f a ~~ v -> f a = v
B: Type
g: B -> V
H1: forall a : A, Tr (-1) {b : B & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
H2: forall b : B, Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}

equal_img f g
ua: Univalence
u, v: V
A: Type
f: A -> V
H_f: forall (a : A) (v : V), f a ~~ v -> f a = v
B: Type
g: B -> V
H1: forall a : A, Tr (-1) {b : B & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
H2: forall b : B, Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}

forall a : A, hexists (fun b : B => f a = g b)
ua: Univalence
u, v: V
A: Type
f: A -> V
H_f: forall (a : A) (v : V), f a ~~ v -> f a = v
B: Type
g: B -> V
H1: forall a : A, Tr (-1) {b : B & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
H2: forall b : B, Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
forall b : B, hexists (fun a : A => f a = g b)
ua: Univalence
u, v: V
A: Type
f: A -> V
H_f: forall (a : A) (v : V), f a ~~ v -> f a = v
B: Type
g: B -> V
H1: forall a : A, Tr (-1) {b : B & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
H2: forall b : B, Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}

forall a : A, hexists (fun b : B => f a = g b)
ua: Univalence
u, v: V
A: Type
f: A -> V
H_f: forall (a : A) (v : V), f a ~~ v -> f a = v
B: Type
g: B -> V
H1: forall a : A, Tr (-1) {b : B & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
H2: forall b : B, Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
a: A

hexists (fun b : B => f a = g b)
ua: Univalence
u, v: V
A: Type
f: A -> V
H_f: forall (a : A) (v : V), f a ~~ v -> f a = v
B: Type
g: B -> V
H1: forall a : A, Tr (-1) {b : B & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
H2: forall b : B, Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
a: A

Tr (-1) {b : B & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a)) => path_iff_hprop (fun X : (forall a : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a) (h0 b0)}) * (forall b0 : C, Tr (-1) {a : A & H_h (spushl (... => ...) a) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a : A & H_h (spushl ... a) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a : A & R a b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a : A & H_h (spushl (...) a) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a) (h0 b0)}) * (forall b0 : C, Tr (-1) {a : B & H_h (spushr (... => ...) a) (h0 b0)}) => (fun a : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a)), fun c : C => Trunc_rec (fun X0 : {a : B & H_h (spushr (...) a) (h0 c)} => Trunc_functor (-1) (fun X1 : {a : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)} -> hexists (fun b : B => f a = g b)
ua: Univalence
u, v: V
A: Type
f: A -> V
H_f: forall (a : A) (v : V), f a ~~ v -> f a = v
B: Type
g: B -> V
H1: forall a : A, Tr (-1) {b : B & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
H2: forall b : B, Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
a: A

{b : B & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a)) => path_iff_hprop (fun X : (forall a : A, Tr (-1) {b0 : C & H_h (spushl (fun ... ... => R x x0) a) (h0 b0)}) * (forall b0 : C, Tr (-1) {a : A & H_h (spushl (fun ... ... => R x x0) a) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a : A & H_h (spushl (...) a) = H_h (spushr (...) b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h (...) (...)} => (X1.1; transport trunctype_type (ap10 X0.2 (...)) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a : A & R a b0} => (X0.1; ap H_h (spglue (... => ...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a : A & H_h (spushl (... => ...) a) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & H_h ... = H_h ...} => (X1.1; transport trunctype_type (ap10 X1.2 (...)) X0.2)) (Trunc_functor (-1) (fun X1 : {b0 : B & ...} => (X1.1; ap H_h (...))) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a : B, Tr (-1) {b0 : C & H_h (spushr (fun ... ... => R x x0) a) (h0 b0)}) * (forall b0 : C, Tr (-1) {a : B & H_h (spushr (fun ... ... => R x x0) a) (h0 b0)}) => (fun a : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl (...) a) = H_h (spushr (...) b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h (...) (...)} => (X1.1; transport trunctype_type (ap10 (X0.2)^ (...)) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a b0} => (X0.1; ap H_h (spglue (... => ...) X0.2))) (fst bitot_R a)), fun c : C => Trunc_rec (fun X0 : {a : B & H_h (spushr (... => ...) a) (h0 c)} => Trunc_functor (-1) (fun X1 : {a : A & H_h ... = H_h ...} => (X1.1; transport trunctype_type (ap10 (X1.2)^ (...)) X0.2)) (Trunc_functor (-1) (fun X1 : {a : A & ...} => (X1.1; ap H_h (...))) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)} -> {b : B & f a = g b}
ua: Univalence
u, v: V
A: Type
f: A -> V
H_f: forall (a : A) (v : V), f a ~~ v -> f a = v
B: Type
g: B -> V
H1: forall a : A, Tr (-1) {b : B & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
H2: forall b : B, Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
a: A
b: B
h: V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a)) => path_iff_hprop (fun X : (forall a : A, Tr (-1) {b : C & H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) (h0 b)}) * (forall b : C, Tr (-1) {a : A & H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) (h0 b)}) => (fun b : B => Trunc_rec (fun X0 : {a : A & H_h (spushl (fun ... ... => R x x0) a) = H_h (spushr (fun ... ... => R x x0) b)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h (spushl (...) X0.1) (h0 b0)} => (X1.1; transport trunctype_type (ap10 X0.2 (h0 X1.1)) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a : A & R a b} => (X0.1; ap H_h (spglue (fun (x : A) (x0 : B) => R x x0) X0.2))) (snd bitot_R b)), fun c : C => Trunc_rec (fun X0 : {a : A & H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) (h0 c)} => Trunc_functor (-1) (fun X1 : {b : B & H_h (spushl ... X0.1) = H_h (spushr ... b)} => (X1.1; transport trunctype_type (ap10 X1.2 (h0 c)) X0.2)) (Trunc_functor (-1) (fun X1 : {b : B & R X0.1 b} => (X1.1; ap H_h (spglue (...) X1.2))) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a : B, Tr (-1) {b : C & H_h (spushr (fun (x : A) (x0 : B) => R x x0) a) (h0 b)}) * (forall b : C, Tr (-1) {a : B & H_h (spushr (fun (x : A) (x0 : B) => R x x0) a) (h0 b)}) => (fun a : A => Trunc_rec (fun X0 : {b : B & H_h (spushl (fun ... ... => R x x0) a) = H_h (spushr (fun ... ... => R x x0) b)} => Trunc_functor (-1) (fun X1 : {b : C & H_h (spushr (...) X0.1) (h0 b)} => (X1.1; transport trunctype_type (ap10 (X0.2)^ (h0 X1.1)) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b : B & R a b} => (X0.1; ap H_h (spglue (fun (x : A) (x0 : B) => R x x0) X0.2))) (fst bitot_R a)), fun c : C => Trunc_rec (fun X0 : {a : B & H_h (spushr (fun (x : A) (x0 : B) => R x x0) a) (h0 c)} => Trunc_functor (-1) (fun X1 : {a : A & H_h (spushl ... a) = H_h (spushr ... X0.1)} => (X1.1; transport trunctype_type (ap10 (X1.2)^ (h0 c)) X0.2)) (Trunc_functor (-1) (fun X1 : {a : A & R a X0.1} => (X1.1; ap H_h (spglue (...) X1.2))) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)

{b : B & f a = g b}
exists b; exact (H_f a (g b) h).
ua: Univalence
u, v: V
A: Type
f: A -> V
H_f: forall (a : A) (v : V), f a ~~ v -> f a = v
B: Type
g: B -> V
H1: forall a : A, Tr (-1) {b : B & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
H2: forall b : B, Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}

forall b : B, hexists (fun a : A => f a = g b)
ua: Univalence
u, v: V
A: Type
f: A -> V
H_f: forall (a : A) (v : V), f a ~~ v -> f a = v
B: Type
g: B -> V
H1: forall a : A, Tr (-1) {b : B & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
H2: forall b : B, Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
b: B

hexists (fun a : A => f a = g b)
ua: Univalence
u, v: V
A: Type
f: A -> V
H_f: forall (a : A) (v : V), f a ~~ v -> f a = v
B: Type
g: B -> V
H1: forall a : A, Tr (-1) {b : B & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
H2: forall b : B, Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
b: B

Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b : C & H_h (spushl (... => ...) a0) (h0 b)}) * (forall b : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b)}) => (fun b : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b : C & H_h (spushr (... => ...) a0) (h0 b)}) * (forall b : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b)}) => (fun a0 : A => Trunc_rec (fun X0 : {b : B & H_h (spushl ... a0) = H_h (spushr ... b)} => Trunc_functor (-1) (fun X1 : {b : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b : B & R a0 b} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)} -> hexists (fun a : A => f a = g b)
ua: Univalence
u, v: V
A: Type
f: A -> V
H_f: forall (a : A) (v : V), f a ~~ v -> f a = v
B: Type
g: B -> V
H1: forall a : A, Tr (-1) {b : B & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
H2: forall b : B, Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
b: B

{a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b : C & H_h (spushl (fun ... ... => R x x0) a0) (h0 b)}) * (forall b : C, Tr (-1) {a0 : A & H_h (spushl (fun ... ... => R x x0) a0) (h0 b)}) => (fun b : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) = H_h (spushr (...) b)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h (...) (...)} => (X1.1; transport trunctype_type (ap10 X0.2 (...)) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b} => (X0.1; ap H_h (spglue (... => ...) X0.2))) (snd bitot_R b)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (... => ...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b : B & H_h ... = H_h ...} => (X1.1; transport trunctype_type (ap10 X1.2 (...)) X0.2)) (Trunc_functor (-1) (fun X1 : {b : B & ...} => (X1.1; ap H_h (...))) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b : C & H_h (spushr (fun ... ... => R x x0) a0) (h0 b)}) * (forall b : C, Tr (-1) {a0 : B & H_h (spushr (fun ... ... => R x x0) a0) (h0 b)}) => (fun a0 : A => Trunc_rec (fun X0 : {b : B & H_h (spushl (...) a0) = H_h (spushr (...) b)} => Trunc_functor (-1) (fun X1 : {b : C & H_h (...) (...)} => (X1.1; transport trunctype_type (ap10 (X0.2)^ (...)) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b : B & R a0 b} => (X0.1; ap H_h (spglue (... => ...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (... => ...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & H_h ... = H_h ...} => (X1.1; transport trunctype_type (ap10 (X1.2)^ (...)) X0.2)) (Trunc_functor (-1) (fun X1 : {a0 : A & ...} => (X1.1; ap H_h (...))) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)} -> {a : A & f a = g b}
ua: Univalence
u, v: V
A: Type
f: A -> V
H_f: forall (a : A) (v : V), f a ~~ v -> f a = v
B: Type
g: B -> V
H1: forall a : A, Tr (-1) {b : B & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
H2: forall b : B, Tr (-1) {a : A & V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a0 : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a0)) => path_iff_hprop (fun X : (forall a0 : A, Tr (-1) {b0 : C & H_h (spushl (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : A & H_h (spushl (... => ...) a0) (h0 b0)}) => (fun b0 : B => Trunc_rec (fun X0 : {a0 : A & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b1 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 X0.2 ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a0 : A & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (snd bitot_R b0)), fun c : C => Trunc_rec (fun X0 : {a0 : A & H_h (spushl (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {b0 : B & ... = ...} => (X1.1; transport trunctype_type (ap10 X1.2 ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a0 : B, Tr (-1) {b0 : C & H_h (spushr (... => ...) a0) (h0 b0)}) * (forall b0 : C, Tr (-1) {a0 : B & H_h (spushr (... => ...) a0) (h0 b0)}) => (fun a0 : A => Trunc_rec (fun X0 : {b0 : B & H_h (spushl ... a0) = H_h (spushr ... b0)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h ... ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b0 : B & R a0 b0} => (X0.1; ap H_h (spglue (...) X0.2))) (fst bitot_R a0)), fun c : C => Trunc_rec (fun X0 : {a0 : B & H_h (spushr (...) a0) (h0 c)} => Trunc_functor (-1) (fun X1 : {a0 : A & ... = ...} => (X1.1; transport trunctype_type (ap10 ...^ ...) X0.2)) (Trunc_functor (-1) (fun X1 : ... => (X1.1; ap H_h ...)) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)}
b: B
a: A
h: V_ind (fun _ : V => V -> HProp) (fun _ : V => istrunc_arrow) bisim_aux (fun (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) -> V -> HProp) => transport_const (setext R bitot_R h) (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) @ path_forall (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x))) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x))) (V_ind_hprop (fun v : V => bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (fun (C : Type) (h0 : C -> V) (_ : forall a : C, bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a) = bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (h0 a)) => path_iff_hprop (fun X : (forall a : A, Tr (-1) {b : C & H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) (h0 b)}) * (forall b : C, Tr (-1) {a : A & H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) (h0 b)}) => (fun b : B => Trunc_rec (fun X0 : {a : A & H_h (spushl (fun ... ... => R x x0) a) = H_h (spushr (fun ... ... => R x x0) b)} => Trunc_functor (-1) (fun X1 : {b0 : C & H_h (spushl (...) X0.1) (h0 b0)} => (X1.1; transport trunctype_type (ap10 X0.2 (h0 X1.1)) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {a : A & R a b} => (X0.1; ap H_h (spglue (fun (x : A) (x0 : B) => R x x0) X0.2))) (snd bitot_R b)), fun c : C => Trunc_rec (fun X0 : {a : A & H_h (spushl (fun (x : A) (x0 : B) => R x x0) a) (h0 c)} => Trunc_functor (-1) (fun X1 : {b : B & H_h (spushl ... X0.1) = H_h (spushr ... b)} => (X1.1; transport trunctype_type (ap10 X1.2 (h0 c)) X0.2)) (Trunc_functor (-1) (fun X1 : {b : B & R X0.1 b} => (X1.1; ap H_h (spglue (...) X1.2))) (fst bitot_R X0.1))) (snd X c))) (fun X : (forall a : B, Tr (-1) {b : C & H_h (spushr (fun (x : A) (x0 : B) => R x x0) a) (h0 b)}) * (forall b : C, Tr (-1) {a : B & H_h (spushr (fun (x : A) (x0 : B) => R x x0) a) (h0 b)}) => (fun a : A => Trunc_rec (fun X0 : {b : B & H_h (spushl (fun ... ... => R x x0) a) = H_h (spushr (fun ... ... => R x x0) b)} => Trunc_functor (-1) (fun X1 : {b : C & H_h (spushr (...) X0.1) (h0 b)} => (X1.1; transport trunctype_type (ap10 (X0.2)^ (h0 X1.1)) X1.2)) (fst X X0.1)) (Trunc_functor (-1) (fun X0 : {b : B & R a b} => (X0.1; ap H_h (spglue (fun (x : A) (x0 : B) => R x x0) X0.2))) (fst bitot_R a)), fun c : C => Trunc_rec (fun X0 : {a : B & H_h (spushr (fun (x : A) (x0 : B) => R x x0) a) (h0 c)} => Trunc_functor (-1) (fun X1 : {a : A & H_h (spushl ... a) = H_h (spushr ... X0.1)} => (X1.1; transport trunctype_type (ap10 (X1.2)^ (h0 c)) X0.2)) (Trunc_functor (-1) (fun X1 : {a : A & R a X0.1} => (X1.1; ap H_h (spglue (...) X1.2))) (snd bitot_R X0.1))) (snd X c)))) (fun v : V => istrunc_equiv_istrunc (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v <~> bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (equiv_path_trunctype (bisim_aux A (fun x : A => h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : A => H_h (spushl (fun (x0 : A) (x1 : B) => R x0 x1) x)) v) (bisim_aux B (fun x : B => h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) (fun x : B => H_h (spushr (fun (x0 : A) (x1 : B) => R x0 x1) x)) v))))) (f a) (g b)

{a : A & f a = g b}
exists a; 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. *) Definition ker_bisim {A} (f : A -> V) (x y : A) := (f x ~~ f y).
ua: Univalence
A: Type
f: A -> V

forall x y : A, f x = f y <~> ker_bisim f x y
ua: Univalence
A: Type
f: A -> V

forall x y : A, f x = f y <~> ker_bisim f x y
intros; apply bisimulation_equiv_id. Defined. Section MonicSetPresent_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} {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'}.
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'

(forall a : Au, {a' : Au' & mu' a' = mu a}) * (forall a' : 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'

(forall a : Au, {a' : Au' & mu' a' = mu a}) * (forall a' : 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'

forall a : 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'
forall a' : 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'

forall a : 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 (fun x => 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'

forall a' : 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 (fun x => mu' a' ∈ x) (p'^ @ p) (tr (a'; 1)))). Defined. Let e : Au -> Au' := fun a => pr1 (fst eq_img_untrunc a). Let inv_e : Au' -> Au := fun a' => pr1 (snd eq_img_untrunc 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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
apply (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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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 (fun A : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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 (fun A : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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 (fun A : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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 A : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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 A : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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 A : Type => A -> V) path^ mu a' = transport (fun _ : Type => V) path^ (mu (transport idmap (path^)^ a'))
apply (@transport_arrow Type (fun X : Type => X) (fun X => 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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 (fun x => 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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

(Au; mu; (h, mono, p)) = (Au'; 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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

(Au; mu; (h, mono, p)) = (Au'; 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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 (fun A : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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 (fun A : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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 (fun A : Type => {m : A -> V & IsHSet A * IsEmbedding m * (u = set m)}) path^ (mu; (h, mono, p)) = (transport (fun A : Type => A -> V) path^ mu; transportD (fun A : Type => A -> V) (fun (A : Type) (m : (fun A0 : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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 (fun A : Type => A -> V) path^ mu; transportD (fun A : Type => A -> V) (fun (A : Type) (m : (fun A0 : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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 (fun A : Type => {m : A -> V & IsHSet A * IsEmbedding m * (u = set m)}) path^ (mu; (h, mono, p)) = (transport (fun A : Type => A -> V) path^ mu; transportD (fun A : Type => A -> V) (fun (A : Type) (m : (fun A0 : Type => A0 -> V) A) => IsHSet A * IsEmbedding m * (u = set m)) path^ mu (h, mono, p))
apply (@transport_sigma Type (fun A => A -> V) (fun A m => 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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 (fun A : Type => A -> V) path^ mu; transportD (fun A : Type => A -> V) (fun (A : Type) (m : (fun A0 : 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:= fun a : Au => (fst eq_img_untrunc a).1: Au -> Au'
inv_e:= fun a' : Au' => (snd eq_img_untrunc a').1: Au' -> Au
hom1:= (fun a' : 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:= (fun a : 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 (fun A : Type => A -> V) path^ mu = mu'
exact mu_eq_mu'. Defined. End MonicSetPresent_Uniqueness. (** This lemma actually says a little more than 10.5.6, i.e., that Au is a hSet *)
ua: Univalence

forall u : V, {Au : Type & {m : Au -> V & IsHSet Au * IsEmbedding m * (u = set m)}}
ua: Univalence

forall u : V, {Au : Type & {m : Au -> V & IsHSet Au * IsEmbedding m * (u = set m)}}
ua: Univalence

forall (A : Type) (f : A -> V), (forall a : 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
forall v : V, IsHProp {Au : Type & {m : Au -> V & IsHSet Au * IsEmbedding m * (v = set m)}}
ua: Univalence

forall (A : Type) (f : A -> V), (forall a : 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 = (fun x : A => mu (eu x))

{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 = (fun x : 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 = (fun x : 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 = (fun x : A => mu (eu x))

forall a : A, hexists (fun b : 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 = (fun x : A => mu (eu x))
forall b : Au, hexists (fun a : 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 = (fun x : A => mu (eu x))

forall a : A, hexists (fun b : 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 = (fun x : A => mu (eu x))
a: A

hexists (fun b : 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 = (fun x : 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 = (fun x : A => mu (eu x))

forall b : Au, hexists (fun a : 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 = (fun x : A => mu (eu x))
a': Au

hexists (fun 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 = (fun x : A => mu (eu x))
a': Au

ReflectiveSubuniverse.IsConnected (Tr (-1)) (hfiber eu a') -> hexists (fun 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 = (fun x : 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 = (fun x : A => mu (eu x))
a': Au
IC: ReflectiveSubuniverse.IsConnected (Tr (-1)) (hfiber eu a')
a: A
p: eu a = 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 = (fun x : 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 = (fun x : 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 = (fun x : 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 = (fun x : 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 = (fun x : 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

forall v : 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

forall x y : {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

forall y : {Au : Type & {m : Au -> V & IsHSet Au * 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'

(Au; mu; (hset, mono, p)) = (Au'; mu'; (hset', mono', p'))
apply monic_set_present_uniqueness. Defined. Definition type_of_members (u : V) : Type := pr1 (monic_set_present u). Notation "[ u ]" := (type_of_members u) : set_scope. Definition func_of_members {u : V} : [u] -> V := pr1 (pr2 (monic_set_present u)) : [u] -> V. Definition is_hset_typeofmembers {u : V} : IsHSet ([u]) := fst (fst (pr2 (pr2 (monic_set_present u)))). Definition IsEmbedding_funcofmembers {u : V} : IsEmbedding func_of_members := snd (fst (pr2 (pr2 (monic_set_present u)))). Definition is_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

forall x y : V, x ⊆ y * y ⊆ x <-> x = y
ua: Univalence

forall x y : 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) -> forall y : V, set f ⊆ y * y ⊆ set f <-> set f = y
ua: Univalence
A: Type
f: A -> V

forall y : V, set f ⊆ y * y ⊆ set f <-> set f = y
ua: Univalence
A: Type
f: A -> V

forall (A0 : Type) (f0 : A0 -> V), (forall a : 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

forall a : A, hexists (fun b : 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
forall b : B, hexists (fun a : 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

forall a : A, hexists (fun b : 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 (fun b : 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 (fun b : 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 (fun b : 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

{b : 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

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

forall b : B, hexists (fun a : 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 (fun a : 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; exists b; 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
apply (transport (fun x => 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
apply (transport (fun x => z ∈ x) p^ Hz). Qed.
ua: Univalence
C: V -> HProp

(forall v : V, (forall x : V, x ∈ v -> C x) -> C v) -> forall v : V, C v
ua: Univalence
C: V -> HProp

(forall v : V, (forall x : V, x ∈ v -> C x) -> C v) -> forall v : V, C v
ua: Univalence
C: V -> HProp
H: forall v : V, (forall x : V, x ∈ v -> C x) -> C v

forall v : V, C v
ua: Univalence
C: V -> HProp
H: forall v : V, (forall x : V, x ∈ v -> C x) -> C v

forall (A : Type) (f : A -> V), (forall a : A, C (f a)) -> C (set f)
ua: Univalence
C: V -> HProp
H: forall v : V, (forall x : V, x ∈ v -> C x) -> C v
A: Type
f: A -> V
H_f: forall a : A, C (f a)

C (set f)
ua: Univalence
C: V -> HProp
H: forall v : V, (forall x : V, x ∈ v -> C x) -> C v
A: Type
f: A -> V
H_f: forall a : A, C (f a)

forall x : V, x ∈ set f -> C x
ua: Univalence
C: V -> HProp
H: forall v : V, (forall x : V, x ∈ v -> C x) -> C v
A: Type
f: A -> V
H_f: forall a : A, C (f a)
x: V
Hx: x ∈ set f

C x
ua: Univalence
C: V -> HProp
H: forall v : V, (forall x : V, x ∈ v -> C x) -> C v
A: Type
f: A -> V
H_f: forall a : A, C (f a)
x: V
Hx: x ∈ set f

{a : A & f a = x} -> C x
ua: Univalence
C: V -> HProp
H: forall v : V, (forall x : V, x ∈ v -> C x) -> C v
A: Type
f: A -> V
H_f: forall a : A, C (f a)
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 (fun x x0 : V => x ∈ x0)
ua: Univalence

Irreflexive (fun x x0 : V => x ∈ x0)
ua: Univalence

forall v : V, IsHProp (complement (fun x x0 : V => x ∈ x0) v v)
ua: Univalence
X: forall v : V, IsHProp (complement (fun x x0 : V => x ∈ x0) v v)
Irreflexive (fun x x0 : V => x ∈ x0)
ua: Univalence

forall v : V, IsHProp (complement (fun x x0 : V => x ∈ x0) v v)
ua: Univalence
v: V

IsHProp (complement (fun x x0 : V => x ∈ x0) v v)
ua: Univalence
v: V

IsHProp (~ v ∈ v)
exact _.
ua: Univalence
X: forall v : V, IsHProp (complement (fun x x0 : V => x ∈ x0) v v)

Irreflexive (fun x x0 : V => x ∈ x0)
ua: Univalence
X: forall v : V, IsHProp (complement (fun x x0 : V => x ∈ x0) v v)

forall v : V, (forall x : V, x ∈ v -> ~ x ∈ x) -> ~ v ∈ v
ua: Univalence
X: forall v : V, IsHProp (complement (fun x x0 : V => x ∈ x0) v v)
v: V
H: forall x : V, x ∈ v -> ~ x ∈ x

~ v ∈ v
ua: Univalence
X: forall v : V, IsHProp (complement (fun x x0 : V => x ∈ x0) v v)
v: V
H: forall x : 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

forall a : A, hexists (fun b : B => f a = g b)
ua: Univalence
A, B: Type
f: A -> V
g: B -> V
p: set f = set g
forall b : B, hexists (fun a : A => f a = g b)
ua: Univalence
A, B: Type
f: A -> V
g: B -> V
p: set f = set g

forall a : A, hexists (fun b : B => f a = g b)
ua: Univalence
A, B: Type
f: A -> V
g: B -> V
p: set f = set g
a: A

hexists (fun b : 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 (fun b : 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; exists a; 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 (fun 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

{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

{b : B & f a = g b}
exists b; exact p'^.
ua: Univalence
A, B: Type
f: A -> V
g: B -> V
p: set f = set g

forall b : B, hexists (fun a : A => f a = g b)
ua: Univalence
A, B: Type
f: A -> V
g: B -> V
p: set f = set g
b: B

hexists (fun a : 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 (fun a : 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; exists b; 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 (fun 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 & 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

{a : A & f a = g b}
exists a; exact p'. Defined. (** ** Definitions of particular sets in V *) (** The empty set *) Definition V_empty : V := set (Empty_ind (fun _ => V)). (** The singleton {u} *) Definition V_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: forall a : Unit, hexists (fun b : Unit => Unit_ind u a = Unit_ind v b)
H2: forall b : Unit, hexists (fun a : Unit => Unit_ind u a = Unit_ind v b)

u = v
ua: Univalence
u, v: V
H: V_singleton u = V_singleton v
H1: forall a : Unit, hexists (fun b : Unit => Unit_ind u a = Unit_ind v b)
H2: forall b : Unit, hexists (fun a : 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: forall a : Unit, hexists (fun b : Unit => Unit_ind u a = Unit_ind v b)
H2: forall b : Unit, hexists (fun a : 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} *) Definition V_pair (u : V) (v : V) : V@{U' U} := set (fun b : 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 (fun b : Bool => if b then u else v) (fun b : Bool => if b then u' else v')
ua: Univalence
u, v, u', v': V
H1: u = u'
H2: v = v'

forall a : Bool, hexists (fun b : 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'
forall b : Bool, hexists (fun a : 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'

forall a : Bool, hexists (fun b : 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 (fun b : Bool => u = (if b then u' else v'))
ua: Univalence
u, v, u', v': V
H1: u = u'
H2: v = v'
hexists (fun b : Bool => v = (if b then u' else v'))
ua: Univalence
u, v, u', v': V
H1: u = u'
H2: v = v'

hexists (fun b : 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 (fun b : Bool => v = (if b then u' else v'))
apply tr; exists false; assumption.
ua: Univalence
u, v, u', v': V
H1: u = u'
H2: v = v'

forall b : Bool, hexists (fun a : 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 (fun a : Bool => (if a then u else v) = u')
ua: Univalence
u, v, u', v': V
H1: u = u'
H2: v = v'
hexists (fun a : Bool => (if a then u else v) = v')
ua: Univalence
u, v, u', v': V
H1: u = u'
H2: v = v'

hexists (fun a : Bool => (if a then u else v) = u')
apply tr; exists true; assumption.
ua: Univalence
u, v, u', v': V
H1: u = u'
H2: v = v'

hexists (fun a : Bool => (if a then u else v) = v')
apply tr; exists false; 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: forall a : Bool, hexists (fun b : Unit => (if a then u else v) = Unit_ind w b)
H2: forall b : Unit, hexists (fun a : 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: forall a : Bool, hexists (fun b : Unit => (if a then u else v) = Unit_ind w b)
H2: forall b : Unit, hexists (fun a : 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: forall a : Bool, hexists (fun b : Unit => (if a then u else v) = Unit_ind w b)
H2: forall b : Unit, hexists (fun a : 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: forall a : Bool, hexists (fun b : Unit => (if a then u else v) = Unit_ind w b)
H2: forall b : Unit, hexists (fun a : 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: forall a : Bool, hexists (fun b : Unit => (if a then u else v) = Unit_ind w b)
H2: forall b : Unit, hexists (fun a : 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

forall a : Bool, hexists (fun b : Unit => (if a then u else v) = Unit_ind w b)
ua: Univalence
u, v, w: V
p1: u = w
p2: v = w
forall b : Unit, hexists (fun a : Bool => (if a then u else v) = Unit_ind w b)
ua: Univalence
u, v, w: V
p1: u = w
p2: v = w

forall a : Bool, hexists (fun b : 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

forall b : Unit, hexists (fun a : 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) *) Definition V_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; exists true; 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
apply ((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; exists false; 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: forall a0 : Bool, hexists (fun b0 : Bool => (if a0 then c else d) = (if b0 then a else b))
H2: forall b0 : Bool, hexists (fun a0 : 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: forall a0 : Bool, hexists (fun b0 : Bool => (if a0 then c else d) = (if b0 then a else b))
H2: forall b0 : Bool, hexists (fun a0 : Bool => (if a0 then c else d) = (if b0 then a else b))

{a : Bool & (if a 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: forall a0 : Bool, hexists (fun b0 : Bool => (if a0 then c else d) = (if b0 then a else b))
H2: forall b0 : Bool, hexists (fun a0 : 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: forall a0 : Bool, hexists (fun b0 : Bool => (if a0 then c else d) = (if b0 then a else b))
H2: forall b0 : Bool, hexists (fun a0 : 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: forall a0 : Bool, hexists (fun b0 : Bool => (if a0 then c else d) = (if b0 then a else b))
H2: forall b0 : Bool, hexists (fun a0 : 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: forall a0 : Bool, hexists (fun b0 : Bool => (if a0 then c else d) = (if b0 then a else b))
H2: forall b0 : Bool, hexists (fun a0 : 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 *) Definition V_cart_prod (a : V) (b : V) : V := set (fun x : [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 *) Definition V_is_func (a : V) (b : V) (f : V) := f ⊆ (a × b) * (forall x, x ∈ a -> hexists (fun y => y ∈ b * [x,y] ∈ f)) * (forall x y y', [x,y] ∈ f * [x,y'] ∈ f -> y = y'). (** The set of functions from a to b *) Definition V_func (a : V) (b : V) : V := @set ([a] -> [b]) (fun f => set (fun x => [func_of_members x, func_of_members (f x)] )). (** The union of a set Uv *) Definition V_union (v : V) := @set ({x : [v] & [func_of_members x]}) (fun z => func_of_members (pr2 z)). (** The ordinal successor x ∪ {x} *)
ua: Univalence

V -> V
ua: Univalence

V -> V
ua: Univalence

forall A : Type, (A -> V) -> (A -> V) -> V
ua: Univalence
forall (A B : 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

forall A : 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 (A B : 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 (fun x : 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 (fun x : 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 (fun x : A + Unit => match x with | inl a => f a | inr tt => set f end) = set (fun x : 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 (fun x : A + Unit => match x with | inl a => f a | inr tt => set f end) (fun x : 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

forall a : A + Unit, hexists (fun b : 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
forall b : B + Unit, hexists (fun a : 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

forall a : A + Unit, hexists (fun b : 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 (fun b : B + Unit => match a with | inl a => f a | inr 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 (fun b : B + Unit => f a = 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
hexists (fun b : 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 (fun b : B + Unit => f a = 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 (fun b : B => f a = g b) -> hexists (fun b : B + Unit => f a = 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

{b : B & f a = g b} -> {b : B + Unit & f a = 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
b: B
p: f a = g b

{b : B + Unit & f a = match b with | inl a => g a | inr tt => set g end}
exists (inl b); exact p.
ua: Univalence
A, B: Type
f: A -> V
g: B -> V
eq_img: equal_img f g
u: Unit

hexists (fun b : 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

forall b : B + Unit, hexists (fun a : 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 (fun a : 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 (fun 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
u: Unit
hexists (fun a : 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 (fun 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

hexists (fun a : A => f a = g b) -> hexists (fun 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 & 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

{a : A + Unit & match a with | inl a0 => f a0 | inr tt => set f end = g b}
exists (inl a); exact p.
ua: Univalence
A, B: Type
f: A -> V
g: B -> V
eq_img: equal_img f g
u: Unit

hexists (fun a : 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 *) Definition V_omega : V := set (fix I n := match n with 0 => V_empty | S n => V_succ (I n) end). (** ** Axioms of set theory (theorem 10.5.8) *)
ua: Univalence

forall x : V, ~ x ∈ V_empty
ua: Univalence

forall x : V, ~ x ∈ V_empty
ua: Univalence
x: V
Hx: x ∈ V_empty

Empty
ua: Univalence
x: V
Hx: x ∈ V_empty

{a : Empty & Empty_ind (fun _ : Empty => V) a = x} -> Empty
ua: Univalence
x: V
Hx: x ∈ V_empty
ff: Empty

Empty
exact ff. Qed.
ua: Univalence

forall u v : V, hexists (fun w : V => forall x : V, x ∈ w <-> hor (x = u) (x = v))
ua: Univalence

forall u v : V, hexists (fun w : V => forall x : V, x ∈ w <-> hor (x = u) (x = v))
ua: Univalence
u, v: V

hexists (fun w : V => forall x : V, x ∈ w <-> hor (x = u) (x = v))
ua: Univalence
u, v: V

{w : V & forall x : V, x ∈ w <-> hor (x = u) (x = v)}
ua: Univalence
u, v: V

forall x : V, x ∈ V_pair u v <-> hor (x = u) (x = v)
ua: Univalence
u, v, x: V

{a : Bool & (if a then u else v) = x} -> (x = u) + (x = v)
ua: Univalence
u, v, x: V
(x = u) + (x = v) -> {a : Bool & (if a then u else v) = x}
ua: Univalence
u, v, x: V

{a : Bool & (if a then u else v) = x} -> (x = u) + (x = v)
intros [[|] p]; [left|right]; exact p^.
ua: Univalence
u, v, x: V

(x = u) + (x = v) -> {a : Bool & (if a then u else v) = x}
intros [p | p]; [exists true | exists false]; exact p^. Qed.
ua: Univalence

V_empty ∈ V_omega * (forall x : V, x ∈ V_omega -> V_succ x ∈ V_omega)
ua: Univalence

V_empty ∈ V_omega * (forall x : V, x ∈ V_omega -> V_succ x ∈ V_omega)
ua: Univalence

V_empty ∈ V_omega
ua: Univalence
forall x : V, x ∈ V_omega -> V_succ x ∈ V_omega
ua: Univalence

V_empty ∈ V_omega
apply tr; exists 0; auto.
ua: Univalence

forall x : 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 (n : nat) : V := match n with | 0 => V_empty | n0.+1 => V_succ (I n0) end) n = 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 (n : nat) : V := match n with | 0 => V_empty | n0.+1 => V_succ (I n0) end) n = x

V_succ ((fix I (n : nat) : V := match n with | 0 => V_empty | n0.+1 => V_succ (I n0) end) n) = V_succ x
rewrite p; auto. Qed.
ua: Univalence

forall v : V, hexists (fun w : V => forall x : V, x ∈ w <-> hexists (fun u : V => x ∈ u * u ∈ v))
ua: Univalence

forall v : V, hexists (fun w : V => forall x : V, x ∈ w <-> hexists (fun u : V => x ∈ u * u ∈ v))
ua: Univalence
v: V

hexists (fun w : V => forall x : V, x ∈ w <-> hexists (fun u : V => x ∈ u * u ∈ v))
ua: Univalence
v: V

forall x : V, x ∈ V_union v <-> hexists (fun u : V => x ∈ u * u ∈ v)
ua: Univalence
v, x: V

x ∈ V_union v -> hexists (fun u : V => x ∈ u * u ∈ v)
ua: Univalence
v, x: V
hexists (fun u : V => x ∈ u * u ∈ v) -> x ∈ V_union v
ua: Univalence
v, x: V

x ∈ V_union v -> hexists (fun u : V => x ∈ u * u ∈ v)
ua: Univalence
v, x: V
H: x ∈ V_union v

hexists (fun u : V => x ∈ u * u ∈ v)
ua: Univalence
v, x: V
H: Tr (-1) {a : {x : [v] & [func_of_members x]} & func_of_members a.2 = x}

hexists (fun u : V => x ∈ u * u ∈ v)
ua: Univalence
v, x: V
H: Tr (-1) {a : {x : [v] & [func_of_members x]} & func_of_members a.2 = x}

{a : {x : [v] & [func_of_members x]} & func_of_members a.2 = x} -> {u : V & x ∈ u * u ∈ v}
ua: Univalence
v, x: V
H: Tr (-1) {a : {x : [v] & [func_of_members x]} & func_of_members a.2 = x}
u': [v]
x': [func_of_members u']
p: func_of_members x' = x

{u : V & x ∈ u * u ∈ v}
ua: Univalence
v, x: V
H: Tr (-1) {a : {x : [v] & [func_of_members x]} & func_of_members a.2 = x}
u': [v]
x': [func_of_members u']
p: func_of_members x' = x

x ∈ func_of_members u'
ua: Univalence
v, x: V
H: Tr (-1) {a : {x : [v] & [func_of_members x]} & func_of_members a.2 = x}
u': [v]
x': [func_of_members u']
p: func_of_members x' = x
func_of_members u' ∈ v
ua: Univalence
v, x: V
H: Tr (-1) {a : {x : [v] & [func_of_members x]} & func_of_members a.2 = x}
u': [v]
x': [func_of_members u']
p: func_of_members x' = x

x ∈ func_of_members u'
ua: Univalence
v, x: V
H: Tr (-1) {a : {x : [v] & [func_of_members x]} & func_of_members a.2 = x}
u': [v]
x': [func_of_members u']
p: func_of_members x' = x

x ∈ set func_of_members
ua: Univalence
v, x: V
H: Tr (-1) {a : {x : [v] & [func_of_members x]} & func_of_members a.2 = x}
u': [v]
x': [func_of_members u']
p: func_of_members x' = x

Tr (-1) {a : [func_of_members u'] & func_of_members a = x}
ua: Univalence
v, x: V
H: Tr (-1) {a : {x : [v] & [func_of_members x]} & func_of_members a.2 = x}
u': [v]
x': [func_of_members u']
p: func_of_members x' = x

func_of_members x' = x
exact p.
ua: Univalence
v, x: V
H: Tr (-1) {a : {x : [v] & [func_of_members x]} & func_of_members a.2 = x}
u': [v]
x': [func_of_members u']
p: func_of_members x' = x

func_of_members u' ∈ v
ua: Univalence
v, x: V
H: Tr (-1) {a : {x : [v] & [func_of_members x]} & func_of_members a.2 = x}
u': [v]
x': [func_of_members u']
p: func_of_members x' = x

func_of_members u' ∈ set func_of_members
ua: Univalence
v, x: V
H: Tr (-1) {a : {x : [v] & [func_of_members x]} & func_of_members a.2 = x}
u': [v]
x': [func_of_members u']
p: func_of_members x' = x

Tr (-1) {a : [v] & func_of_members a = func_of_members u'}
apply tr; exists u'; reflexivity.
ua: Univalence
v, x: V

hexists (fun u : V => x ∈ u * u ∈ v) -> x ∈ V_union v
ua: Univalence
v, x: V

{u : V & x ∈ u * u ∈ v} -> x ∈ V_union v
ua: Univalence
v, x, u: V
Hx: x ∈ u
Hu: u ∈ v

x ∈ V_union v
ua: Univalence
v, x, u: V
Hx: x ∈ u
Hu: u ∈ v

u ∈ set func_of_members -> x ∈ V_union v
ua: Univalence
v, x, u: V
Hx: x ∈ u
Hu: u ∈ v

{a : [v] & func_of_members a = u} -> x ∈ V_union v
ua: Univalence
v, x, u: V
Hx: x ∈ u
Hu: u ∈ v
u': [v]
pu: func_of_members u' = u

x ∈ V_union v
ua: Univalence
v, x, u: V
Hx: x ∈ u
Hu: u ∈ v
u': [v]
pu: func_of_members u' = u

x ∈ set func_of_members -> x ∈ V_union v
ua: Univalence
v, x, u: V
Hx: x ∈ u
Hu: u ∈ v
u': [v]
pu: func_of_members u' = u

{a : [func_of_members u'] & func_of_members a = x} -> x ∈ V_union v
ua: Univalence
v, x, u: V
Hx: x ∈ u
Hu: u ∈ v
u': [v]
pu: func_of_members u' = u
x': [func_of_members u']
px: func_of_members x' = x

x ∈ V_union v
ua: Univalence
v, x, u: V
Hx: x ∈ u
Hu: u ∈ v
u': [v]
pu: func_of_members u' = u
x': [func_of_members u']
px: func_of_members x' = x

{a : {x : [v] & [func_of_members x]} & func_of_members a.2 = x}
ua: Univalence
v, x, u: V
Hx: x ∈ u
Hu: u ∈ v
u': [v]
pu: func_of_members u' = u
x': [func_of_members u']
px: func_of_members x' = x

func_of_members (u'; x').2 = x
exact px. Qed.
ua: Univalence

forall u v : V, hexists (fun w : V => forall x : V, x ∈ w <-> V_is_func u v x)
ua: Univalence

forall u v : V, hexists (fun w : V => forall x : V, x ∈ w <-> V_is_func u v x)
ua: Univalence
u, v: V

hexists (fun w : V => forall x : V, x ∈ w <-> V_is_func u v x)
ua: Univalence
u, v: V

forall x : V, x ∈ V_func u v <-> V_is_func u v x
ua: Univalence
u, v: V
memb_u: u = set func_of_members

forall x : V, x ∈ V_func u v <-> V_is_func u v x
ua: Univalence
u, v: V
memb_u: u = set func_of_members
memb_v: v = set func_of_members

forall x : V, x ∈ V_func u v <-> V_is_func u v x
ua: Univalence
u, v: V
memb_u: u = set func_of_members
memb_v: v = set func_of_members
phi: V

phi ∈ V_func u v -> V_is_func u v phi
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

phi ∈ V_func u v -> V_is_func u v 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

V_is_func u v 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

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
forall x : V, x ∈ u -> hexists (fun 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
forall x y y' : 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
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 (fun x : [u] => [func_of_members x, func_of_members (a x)]) = phi}
z: V
Hz: z ∈ phi

Tr (-1) {a : [u] * [v] & [func_of_members (fst a), func_of_members (snd a)] = z}
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 (fun x : [u] => [func_of_members x, func_of_members (a x)]) = phi}
z: V
Hz: z ∈ phi

Tr (-1) {a : [u] -> [v] & set (fun x : [u] => [func_of_members x, func_of_members (a x)]) = phi} -> Tr (-1) {a : [u] * [v] & [func_of_members (fst a), func_of_members (snd a)] = z}
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 (fun x : [u] => [func_of_members x, func_of_members (a x)]) = phi}
z: V
Hz: z ∈ phi

{a : [u] -> [v] & set (fun x : [u] => [func_of_members x, func_of_members (a x)]) = phi} -> Tr (-1) {a : [u] * [v] & [func_of_members (fst a), func_of_members (snd a)] = z}
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 (fun x : [u] => [func_of_members x, func_of_members (a x)]) = phi}
z: V
Hz: z ∈ phi
h: [u] -> [v]
p_phi: set (fun x : [u] => [func_of_members x, func_of_members (h x)]) = phi

Tr (-1) {a : [u] * [v] & [func_of_members (fst a), func_of_members (snd a)] = z}
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 (fun x : [u] => [func_of_members x, func_of_members (a x)]) = phi}
z: V
Hz: z ∈ phi
h: [u] -> [v]
p_phi: set (fun x : [u] => [func_of_members x, func_of_members (h x)]) = phi

z ∈ set (fun x : [u] => [func_of_members x, func_of_members (h x)]) -> Tr (-1) {a : [u] * [v] & [func_of_members (fst a), func_of_members (snd a)] = z}
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 (fun x : [u] => [func_of_members x, func_of_members (a x)]) = phi}
z: V
Hz: z ∈ phi
h: [u] -> [v]
p_phi: set (fun x : [u] => [func_of_members x, func_of_members (h x)]) = phi

{a : [u] & [func_of_members a, func_of_members (h a)] = z} -> {a : [u] * [v] & [func_of_members (fst a), func_of_members (snd a)] = z}
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 (fun x : [u] => [func_of_members x, func_of_members (a x)]) = phi}
z: V
Hz: z ∈ phi
h: [u] -> [v]
p_phi: set (fun x : [u] => [func_of_members x, func_of_members (h x)]) = phi
a: [u]
p: [func_of_members a, func_of_members (h a)] = z

{a : [u] * [v] & [func_of_members (fst a), func_of_members (snd a)] = z}
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 (fun x : [u] => [func_of_members x, func_of_members (a x)]) = phi}
z: V
Hz: z ∈ phi
h: [u] -> [v]
p_phi: set (fun x : [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

forall x : V, x ∈ u -> hexists (fun 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

hexists (fun 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

x ∈ set func_of_members -> hexists (fun 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] & func_of_members a = x} -> hexists (fun 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

hexists (fun 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

{a : [u] -> [v] & set (fun x : [u] => [func_of_members x, func_of_members (a x)]) = 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = phi

func_of_members (h a) ∈ v
exact (transport (fun z => func_of_members (h a) ∈ z) memb_v^ (tr (h a; 1))).
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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = phi

[x, func_of_members (h a)] ∈ set (fun x : [u] => [func_of_members x, func_of_members (h x)])
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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = 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

forall x y y' : 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
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 (fun x : [u] => [func_of_members x, func_of_members (a x)]) = 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = phi

[x, y] ∈ set (fun x : [u] => [func_of_members x, func_of_members (h x)]) -> 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = phi
a: [u]
p: [func_of_members a, func_of_members (h a)] = [x, y]

[x, y'] ∈ set (fun x : [u] => [func_of_members x, func_of_members (h x)]) -> 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = phi
a: [u]
p: [func_of_members a, func_of_members (h a)] = [x, y]

{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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = 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 (fun x : [u] => [func_of_members x, func_of_members (h x)]) = 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'
apply (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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'

Tr (-1) {a : [u] -> [v] & set (fun x : [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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'

forall 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
Tr (-1) {a : [u] -> [v] & set (fun x : [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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'

forall 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
a: [u]
x:= func_of_members a: V

forall x0 y : {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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
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 (fun y : V => y ∈ v * [x, y] ∈ 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
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 (fun y : V => y ∈ v * [x, y] ∈ 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
a: [u]
x:= func_of_members a: V
H:= untrunc_istrunc (-1) (H2 x (transport (fun z : 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = 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

{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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = 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

[func_of_members a, func_of_members b] ∈ phi
exact (transport (fun z => [x, z] ∈ phi) Hb^ 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}

Tr (-1) {a : [u] -> [v] & set (fun x : [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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}

set (fun x : [u] => [func_of_members x, func_of_members (h x).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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}

set (fun x : [u] => [func_of_members x, func_of_members (h x).1]) ⊆ phi * phi ⊆ set (fun x : [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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}

set (fun x : [u] => [func_of_members x, func_of_members (h x).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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
phi ⊆ set (fun x : [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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}

set (fun x : [u] => [func_of_members x, func_of_members (h x).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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
z: V
Hz: z ∈ set (fun x : [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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
z: V
Hz: z ∈ set (fun x : [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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
z: V
Hz: z ∈ set (fun x : [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 (fun w => 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}

phi ⊆ set (fun x : [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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
z: V
Hz: z ∈ phi

z ∈ set (fun x : [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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
z: V
Hz: z ∈ phi

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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
z: V
Hz: z ∈ phi

{a : [u] * [v] & [func_of_members (fst a), func_of_members (snd a)] = z} -> {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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
z: V
Hz: z ∈ phi
a: [u]
b: [v]
p: [func_of_members (fst (a, b)), func_of_members (snd (a, b))] = z

{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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ phi}
z: V
Hz: z ∈ phi
a: [u]
b: [v]
p: [func_of_members a, func_of_members b] = z

{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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ 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: forall x : V, x ∈ u -> hexists (fun y : V => y ∈ v * [x, y] ∈ phi)
H3: forall x y y' : V, [x, y] ∈ phi * [x, y'] ∈ phi -> y = y'
h: forall a : [u], {b : [v] & [func_of_members a, func_of_members b] ∈ 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 (fun w => w ∈ phi) p^ Hz). Qed.
ua: Univalence

forall (r : V -> V) (x : V), hexists (fun w : V => forall y : V, y ∈ w <-> hexists (fun z : V => z ∈ x * (r z = y)))
ua: Univalence

forall (r : V -> V) (x : V), hexists (fun w : V => forall y : V, y ∈ w <-> hexists (fun z : V => z ∈ x * (r z = y)))
ua: Univalence
r: V -> V

forall x : V, hexists (fun w : V => forall y : V, y ∈ w <-> hexists (fun z : V => z ∈ x * (r z = y)))
ua: Univalence
r: V -> V

forall (A : Type) (f : A -> V), (forall a : A, hexists (fun w : V => forall y : V, y ∈ w <-> hexists (fun z : V => z ∈ f a * (r z = y)))) -> hexists (fun w : V => forall y : V, y ∈ w <-> hexists (fun z : V => z ∈ set f * (r z = y)))
ua: Univalence
r: V -> V
A: Type
f: A -> V

hexists (fun w : V => forall y : V, y ∈ w <-> hexists (fun z : V => z ∈ set f * (r z = y)))
ua: Univalence
r: V -> V
A: Type
f: A -> V

{w : V & forall y : V, y ∈ w <-> hexists (fun z : V => z ∈ set f * (r z = y))}
ua: Univalence
r: V -> V
A: Type
f: A -> V

forall y : V, y ∈ set (fun x : A => r (f x)) <-> hexists (fun z : V => z ∈ set f * (r z = y))
ua: Univalence
r: V -> V
A: Type
f: A -> V
y: V

y ∈ set (fun x : A => r (f x)) -> hexists (fun z : V => z ∈ set f * (r z = y))
ua: Univalence
r: V -> V
A: Type
f: A -> V
y: V
hexists (fun z : V => z ∈ set f * (r z = y)) -> y ∈ set (fun x : A => r (f x))
ua: Univalence
r: V -> V
A: Type
f: A -> V
y: V

y ∈ set (fun x : A => r (f x)) -> hexists (fun z : 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; exists a; 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 (fun z : V => z ∈ set f * (r z = y)) -> y ∈ set (fun x : 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 (fun x : 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 (fun x : 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 (fun x : 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

{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

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

forall a : V, hexists (fun w : V => forall x : V, x ∈ w <-> x ∈ a * C x)
ua: Univalence
C: V -> HProp

forall a : V, hexists (fun w : V => forall x : V, x ∈ w <-> x ∈ a * C x)
ua: Univalence
C: V -> HProp

forall (A : Type) (f : A -> V), (forall a : A, hexists (fun w : V => forall x : V, x ∈ w <-> x ∈ f a * C x)) -> hexists (fun w : V => forall x : V, x ∈ w <-> x ∈ set f * C x)
ua: Univalence
C: V -> HProp
A: Type
f: A -> V

hexists (fun w : V => forall x : V, x ∈ w <-> x ∈ set f * C x)
ua: Univalence
C: V -> HProp
A: Type
f: A -> V

{w : V & forall x : V, x ∈ w <-> x ∈ set f * C x}
ua: Univalence
C: V -> HProp
A: Type
f: A -> V

forall x : V, x ∈ set (fun z : {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 (fun z : {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 (fun z : {a : A & C (f a)} => f z.1)
ua: Univalence
C: V -> HProp
A: Type
f: A -> V
x: V

x ∈ set (fun z : {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; exists a; 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 (fun z : {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 (fun z : {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 (fun z : {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

{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

f (a; transport (fun x : V => C x) p^ H2).1 = x
exact p. Qed. End AssumingUA.