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.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
From HoTT Require Import PropResizing.PropResizing. From HoTT Require Import Spaces.Nat.Core Spaces.Card. From HoTT Require Import Equiv.BiInv. From HoTT Require Import HIT.unique_choice. From HoTT.Sets Require Import Ordinals Hartogs Powers GCH AC. Open Scope type. (* The proof of Sierpinski's results that GCH implies AC given in this file consists of two ingredients: 1. Adding powers of infinite sets does not increase the cardinality (path_infinite_power). 2. A variant of Cantor's theorem saying that P(X) <= (X + Y) implies P(X) <= Y for large X (Cantor_injects_injects). Those are used to obtain that cardinality-controlled functions are well-behaved in the presence of GCH (Sierpinski), from which we obtain by instantiation with the Hartogs number that every set embeds into an ordinal, which is enough to conclude GCH -> AC (GCH_AC) since the well-ordering theorem implies AC (WO_AC). *) (** * Constructive equivalences *) (* For the first ingredient, we establish a bunch of paths and conclude the desired result by equational reasoning. *) Section Preparation. Context {UA : Univalence}.
UA: Univalence
X, Y, Z: Type

(X -> Z) * (Y -> Z) = (X + Y -> Z)
UA: Univalence
X, Y, Z: Type

(X -> Z) * (Y -> Z) = (X + Y -> Z)
UA: Univalence
X, Y, Z: Type

(X -> Z) * (Y -> Z) <~> (X + Y -> Z)
apply equiv_sum_distributive. Qed.
UA: Univalence
X, Y, Z: Type

X + (Y + Z) = X + Y + Z
UA: Univalence
X, Y, Z: Type

X + (Y + Z) = X + Y + Z
UA: Univalence
X, Y, Z: Type

X + Y + Z = X + (Y + Z)
UA: Univalence
X, Y, Z: Type

X + Y + Z <~> X + (Y + Z)
apply equiv_sum_assoc. Qed.
UA: Univalence
X: Type

X + X = Bool * X
UA: Univalence
X: Type

X + X = Bool * X
UA: Univalence
X: Type

X + X <~> Bool * X
UA: Univalence
X: Type

X + X -> Bool * X
UA: Univalence
X: Type
Bool * X -> X + X
UA: Univalence
X: Type
?f o ?g == idmap
UA: Univalence
X: Type
?g o ?f == idmap
UA: Univalence
X: Type

X + X -> Bool * X
exact (fun x => match x with inl x => (true, x) | inr x => (false, x) end).
UA: Univalence
X: Type

Bool * X -> X + X
exact (fun x => match x with (true, x) => inl x | (false, x) => inr x end).
UA: Univalence
X: Type

(fun x : X + X => match x with | inl x0 => (true, x0) | inr x0 => (false, x0) end) o (fun x : Bool * X => let x0 := x in let fst := fst x0 in let x1 := snd x0 in if fst then inl x1 else inr x1) == idmap
intros [[]]; reflexivity.
UA: Univalence
X: Type

(fun x : Bool * X => let x0 := x in let fst := fst x0 in let x1 := snd x0 in if fst then inl x1 else inr x1) o (fun x : X + X => match x with | inl x0 => (true, x0) | inr x0 => (false, x0) end) == idmap
intros []; reflexivity. Qed.
UA: Univalence

Unit + nat = nat
UA: Univalence

Unit + nat = nat
UA: Univalence

Unit + nat <~> nat
UA: Univalence

Unit + nat -> nat
UA: Univalence
nat -> Unit + nat
UA: Univalence
?f o ?g == idmap
UA: Univalence
?g o ?f == idmap
UA: Univalence

Unit + nat -> nat
exact (fun x => match x with inl _ => O | inr n => S n end).
UA: Univalence

nat -> Unit + nat
exact (fun n => match n with O => inl tt | S n => inr n end).
UA: Univalence

(fun x : Unit + nat => match x with | inl _ => 0%nat | inr n => (n.+1)%nat end) o (fun n : nat => match n with | 0%nat => inl tt | (n0.+1)%nat => inr n0 end) == idmap
now intros [].
UA: Univalence

(fun n : nat => match n with | 0%nat => inl tt | (n0.+1)%nat => inr n0 end) o (fun x : Unit + nat => match x with | inl _ => 0%nat | inr n => (n.+1)%nat end) == idmap
now intros [[]|n]. Qed.
UA: Univalence
X: Type

X = (Unit -> X)
UA: Univalence
X: Type

X = (Unit -> X)
UA: Univalence
X: Type

X <~> (Unit -> X)
apply equiv_unit_rec. Qed. (** * Equivalences relying on LEM **) Context {EM : ExcludedMiddle}.
UA: Univalence
EM: ExcludedMiddle

HProp = Bool
UA: Univalence
EM: ExcludedMiddle

HProp = Bool
UA: Univalence
EM: ExcludedMiddle

HProp <~> Bool
UA: Univalence
EM: ExcludedMiddle

HProp -> Bool
UA: Univalence
EM: ExcludedMiddle
Bool -> HProp
UA: Univalence
EM: ExcludedMiddle
?f o ?g == idmap
UA: Univalence
EM: ExcludedMiddle
?g o ?f == idmap
UA: Univalence
EM: ExcludedMiddle

HProp -> Bool
exact (fun P => if LEM P _ then true else false).
UA: Univalence
EM: ExcludedMiddle

Bool -> HProp
exact (fun b : Bool => if b then merely Unit else merely Empty).
UA: Univalence
EM: ExcludedMiddle

(fun P : HProp => if LEM P (trunctype_istrunc P) then true else false) o (fun b : Bool => if b then merely Unit else merely Empty) == idmap
UA: Univalence
EM: ExcludedMiddle
H: ~ merely Unit

false = true
UA: Univalence
EM: ExcludedMiddle
H: merely Empty
true = false
UA: Univalence
EM: ExcludedMiddle
H: ~ merely Unit

false = true
destruct (H (tr tt)).
UA: Univalence
EM: ExcludedMiddle
H: merely Empty

true = false
UA: Univalence
EM: ExcludedMiddle
H: merely Empty

IsHProp (true = false)
exact _.
UA: Univalence
EM: ExcludedMiddle

(fun b : Bool => if b then merely Unit else merely Empty) o (fun P : HProp => if LEM P (trunctype_istrunc P) then true else false) == idmap
UA: Univalence
EM: ExcludedMiddle
P: HProp

(if if LEM P (trunctype_istrunc P) then true else false then merely Unit else merely Empty) = P
UA: Univalence
EM: ExcludedMiddle
P: HProp
H: P

merely Unit <-> P
UA: Univalence
EM: ExcludedMiddle
P: HProp
H: ~ P
merely Empty <-> P
UA: Univalence
EM: ExcludedMiddle
P: HProp
H: P

merely Unit <-> P
UA: Univalence
EM: ExcludedMiddle
P: HProp
H: P

P -> merely Unit
UA: Univalence
EM: ExcludedMiddle
P: HProp
H: P

merely Unit
UA: Univalence
EM: ExcludedMiddle
P: HProp
H: P

Unit
exact tt.
UA: Univalence
EM: ExcludedMiddle
P: HProp
H: ~ P

merely Empty <-> P
UA: Univalence
EM: ExcludedMiddle
P: HProp
H: ~ P

merely Empty -> P
UA: Univalence
EM: ExcludedMiddle
P: HProp
H: ~ P
HE: merely Empty

P
UA: Univalence
EM: ExcludedMiddle
P: HProp
H: ~ P
HE: merely Empty

IsHProp P
exact _. Qed.
UA: Univalence
EM: ExcludedMiddle

(Unit -> HProp) = Bool
UA: Univalence
EM: ExcludedMiddle

(Unit -> HProp) = Bool
UA: Univalence
EM: ExcludedMiddle

HProp = Bool
apply path_bool_prop. Qed.
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp

X = {x : X & p x} + {x : X & ~ p x}
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp

X = {x : X & p x} + {x : X & ~ p x}
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp

X <~> {x : X & p x} + {x : X & ~ p x}
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp

X -> {x : X & p x} + {x : X & ~ p x}
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp
{x : X & p x} + {x : X & ~ p x} -> X
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp
?f o ?g == idmap
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp
?g o ?f == idmap
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp

X -> {x : X & p x} + {x : X & ~ p x}
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp
x: X

{x : X & p x} + {x : X & ~ p x}
destruct (LEM (p x) _) as [H|H]; [left | right]; now exists x.
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp

{x : X & p x} + {x : X & ~ p x} -> X
intros [[x _]|[x _]]; exact x.
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp

(fun x : X => let s := LEM (p x) (trunctype_istrunc (p x)) in match s with | inl t => (fun H : p x => inl (x; H)) t | inr n => (fun H : ~ p x => inr (x; H)) n end) o (fun X0 : {x : X & p x} + {x : X & ~ p x} => match X0 with | inl s => (fun s0 : {x : X & p x} => (fun (x : X) (_ : p x) => x) s0.1 s0.2) s | inr s => (fun s0 : {x : X & ~ p x} => (fun (x : X) (_ : ~ p x) => x) s0.1 s0.2) s end) == idmap
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp

(fun x : {x : X & p x} + {x : X & ~ p x} => match LEM (p match x with | inl s => s.1 | inr s => s.1 end) (trunctype_istrunc (p match x with | inl s => s.1 | inr s => s.1 end)) with | inl t => inl (match x with | inl s => s.1 | inr s => s.1 end; t) | inr n => inr (match x with | inl s => s.1 | inr s => s.1 end; n) end) == idmap
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp
x: X
Hx, H: p x

inl (x; H) = inl (x; Hx)
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp
x: X
Hx, H: ~ p x
inr (x; H) = inr (x; Hx)
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp
x: X
Hx, H: p x

inl (x; H) = inl (x; Hx)
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp
x: X
Hx, H: p x

H = Hx
apply path_ishprop.
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp
x: X
Hx, H: ~ p x

inr (x; H) = inr (x; Hx)
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp
x: X
Hx, H: ~ p x

H = Hx
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp
x: X
Hx, H: ~ p x

H == Hx
now intros HP.
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp

(fun X0 : {x : X & p x} + {x : X & ~ p x} => match X0 with | inl s => (fun s0 : {x : X & p x} => (fun (x : X) (_ : p x) => x) s0.1 s0.2) s | inr s => (fun s0 : {x : X & ~ p x} => (fun (x : X) (_ : ~ p x) => x) s0.1 s0.2) s end) o (fun x : X => let s := LEM (p x) (trunctype_istrunc (p x)) in match s with | inl t => (fun H : p x => inl (x; H)) t | inr n => (fun H : ~ p x => inr (x; H)) n end) == idmap
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp

(fun x : X => match match LEM (p x) (trunctype_istrunc (p x)) with | inl t => inl (x; t) | inr n => inr (x; n) end with | inl s => s.1 | inr s => s.1 end) == idmap
UA: Univalence
EM: ExcludedMiddle
X: Type
p: X -> HProp
x: X

match match LEM (p x) (trunctype_istrunc (p x)) with | inl t => inl (x; t) | inr n => inr (x; n) end with | inl s => s.1 | inr s => s.1 end = x
now destruct LEM. Qed. Definition ran {X Y : Type} (f : X -> Y) := fun y => hexists (fun x => f x = y).
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y

IsInjective f -> {y : Y & ran f y} = X
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y

IsInjective f -> {y : Y & ran f y} = X
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f

{y : Y & ran f y} = X
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f

{y : Y & ran f y} <~> X
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f

{y : Y & ran f y} -> X
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
X -> {y : Y & ran f y}
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
?f o ?g == idmap
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
?g o ?f == idmap
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f

{y : Y & ran f y} -> X
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
y: Y
H: ran f y

X
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
y: Y
H: ran f y

hunique (fun x : X => f x = y)
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
y: Y
H: ran f y

atmost1P (fun x : X => f x = y)
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
y: Y
H: ran f y
x, x': X

f x = y -> f x' = y -> x = x'
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
y: Y
H: ran f y
x, x': X

f x = y -> f x' = y -> x = x'
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
y: Y
H: ran f y
x, x': X
Hy: f x = y
Hy': f x' = y

x = x'
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
y: Y
H: ran f y
x, x': X
Hy: f x = f x'
Hy': f x' = y

x = x'
now apply Hf.
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f

X -> {y : Y & ran f y}
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
x: X

{y : Y & ran f y}
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
x: X

ran f (f x)
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
x: X

{x0 : X & f x0 = f x}
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
x: X

f x = f x
reflexivity.
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f

(fun X0 : {y : Y & ran f y} => (fun (y : Y) (H : ran f y) => let s := iota (fun x : X => f x = y) (fun x : X => istrunc_paths Y (-1) (f x) y) (H, (fun x x' : X => (fun (Hy : f x = y) (Hy' : f x' = y) => let Hy0 := internal_paths_rew_r (fun y0 : Y => f x = y0) Hy Hy' in Hf x x' Hy0) : f x = y -> f x' = y -> x = x') : atmost1P (fun x : X => f x = y)) in (fun (x : X) (_ : f x = y) => x) s.1 s.2) X0.1 X0.2) o (fun x : X => (f x; tr (x; 1%path))) == idmap
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f

(fun x : X => (iota (fun x0 : X => f x0 = f x) (fun x0 : X => istrunc_paths Y (-1) (f x0) (f x)) (tr (x; 1%path), fun (x0 x' : X) (Hy : f x0 = f x) (Hy' : f x' = f x) => Hf x0 x' (internal_paths_rew_r (fun y : Y => f x0 = y) Hy Hy'))).1) == idmap
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
x: X

(iota (fun x0 : X => f x0 = f x) (fun x0 : X => istrunc_paths Y (-1) (f x0) (f x)) (tr (x; 1%path), fun (x0 x' : X) (Hy : f x0 = f x) (Hy' : f x' = f x) => Hf x0 x' (internal_paths_rew_r (fun y : Y => f x0 = y) Hy Hy'))).1 = x
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
x, x': X
H: f x' = f x

x' = x
now apply Hf.
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f

(fun x : X => (f x; tr (x; 1%path))) o (fun X0 : {y : Y & ran f y} => (fun (y : Y) (H : ran f y) => let s := iota (fun x : X => f x = y) (fun x : X => istrunc_paths Y (-1) (f x) y) (H, (fun x x' : X => (fun (Hy : f x = y) (Hy' : f x' = y) => let Hy0 := internal_paths_rew_r (fun y0 : Y => f x = y0) Hy Hy' in Hf x x' Hy0) : f x = y -> f x' = y -> x = x') : atmost1P (fun x : X => f x = y)) in (fun (x : X) (_ : f x = y) => x) s.1 s.2) X0.1 X0.2) == idmap
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f

(fun x : {y : Y & Trunc (-1) {x : X & f x = y}} => (f (iota (fun x0 : X => f x0 = x.1) (fun x0 : X => istrunc_paths Y (-1) (f x0) x.1) (x.2, fun (x0 x' : X) (Hy : f x0 = x.1) (Hy' : f x' = x.1) => Hf x0 x' (internal_paths_rew_r (fun y : Y => f x0 = y) Hy Hy'))).1; tr ((iota (fun x0 : X => f x0 = x.1) (fun x0 : X => istrunc_paths Y (-1) (f x0) x.1) (x.2, fun (x0 x' : X) (Hy : f x0 = x.1) (Hy' : f x' = x.1) => Hf x0 x' (internal_paths_rew_r (fun y : Y => f x0 = y) Hy Hy'))).1; 1%path))) == idmap
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
y: Y
x: Trunc (-1) {x : X & f x = y}

(f (iota (fun x : X => f x = y) (fun x : X => istrunc_paths Y (-1) (f x) y) (x, fun (x x' : X) (Hy : f x = y) (Hy' : f x' = y) => Hf x x' (internal_paths_rew_r (fun y : Y => f x = y) Hy Hy'))).1; tr ((iota (fun x : X => f x = y) (fun x : X => istrunc_paths Y (-1) (f x) y) (x, fun (x x' : X) (Hy : f x = y) (Hy' : f x' = y) => Hf x x' (internal_paths_rew_r (fun y : Y => f x = y) Hy Hy'))).1; 1%path)) = (y; x)
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
y: Y
x: Trunc (-1) {x : X & f x = y}

(f (iota (fun x : X => f x = y) (fun x : X => istrunc_paths Y (-1) (f x) y) (x, fun (x x' : X) (Hy : f x = y) (Hy' : f x' = y) => Hf x x' (internal_paths_rew_r (fun y : Y => f x = y) Hy Hy'))).1; tr ((iota (fun x : X => f x = y) (fun x : X => istrunc_paths Y (-1) (f x) y) (x, fun (x x' : X) (Hy : f x = y) (Hy' : f x' = y) => Hf x x' (internal_paths_rew_r (fun y : Y => f x = y) Hy Hy'))).1; 1%path)).1 = (y; x).1
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
y: Y
x: Trunc (-1) {x : X & f x = y}

f (iota (fun x : X => f x = y) (fun x : X => istrunc_paths Y (-1) (f x) y) (x, fun (x x' : X) (Hy : f x = y) (Hy' : f x' = y) => Hf x x' (internal_paths_rew_r (fun y : Y => f x = y) Hy Hy'))).1 = y
UA: Univalence
EM: ExcludedMiddle
X: Type
Y: HSet
f: X -> Y
Hf: IsInjective f
y: Y
x: Trunc (-1) {x : X & f x = y}
x': X
Hx: f x' = y

f x' = y
apply Hx. Qed. (** * Equivalences on infinite sets *)
UA: Univalence
EM: ExcludedMiddle
X: HSet

infinite X -> Unit + X = X
UA: Univalence
EM: ExcludedMiddle
X: HSet

infinite X -> Unit + X = X
UA: Univalence
EM: ExcludedMiddle
X: HSet
f: nat -> X
Hf: IsInjective f

Unit + X = X
UA: Univalence
EM: ExcludedMiddle
X: HSet
f: nat -> X
Hf: IsInjective f

Unit + ({x : X & ran f x} + {x : X & ~ ran f x}) = {x : X & ran f x} + {x : X & ~ ran f x}
UA: Univalence
EM: ExcludedMiddle
X: HSet
f: nat -> X
Hf: IsInjective f

Unit + (nat + {x : X & ~ ran f x}) = nat + {x : X & ~ ran f x}
UA: Univalence
EM: ExcludedMiddle
X: HSet
f: nat -> X
Hf: IsInjective f

Unit + nat + {x : X & ~ ran f x} = nat + {x : X & ~ ran f x}
UA: Univalence
EM: ExcludedMiddle
X: HSet
f: nat -> X
Hf: IsInjective f

nat + {x : X & ~ ran f x} = nat + {x : X & ~ ran f x}
reflexivity. Qed.
UA: Univalence
EM: ExcludedMiddle
X: HSet

infinite X -> (X -> HProp) + (X -> HProp) = (X -> HProp)
UA: Univalence
EM: ExcludedMiddle
X: HSet

infinite X -> (X -> HProp) + (X -> HProp) = (X -> HProp)
UA: Univalence
EM: ExcludedMiddle
X: HSet
H: infinite X

(X -> HProp) + (X -> HProp) = (X -> HProp)
UA: Univalence
EM: ExcludedMiddle
X: HSet
H: infinite X

Bool * (X -> HProp) = (X -> HProp)
UA: Univalence
EM: ExcludedMiddle
X: HSet
H: infinite X

(Unit -> HProp) * (X -> HProp) = (X -> HProp)
UA: Univalence
EM: ExcludedMiddle
X: HSet
H: infinite X

(Unit + X -> HProp) = (X -> HProp)
now rewrite path_infinite_unit. Qed. (** * Variants of Cantors's theorem *) (* For the second ingredient, we give a preliminary version (Cantor_path_inject) to see the idea, as well as a stronger refinement (Cantor_injects_injects) which is then a mere reformulation. *) Context {PR : PropResizing}.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> Type

{p : X -> Type & forall x : X, f x <> p}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> Type

{p : X -> Type & forall x : X, f x <> p}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> Type

forall x : X, f x <> (fun x0 : X => ~ f x0 x0)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> Type
x: X
H: f x = (fun x : X => ~ f x x)

Empty
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> Type
x: X
H: f x = (fun x : X => ~ f x x)
Hx: f x x <-> ~ f x x

Empty
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> Type
x: X
H: f x = (fun x : X => ~ f x x)
f x x <-> ~ f x x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> Type
x: X
H: f x = (fun x : X => ~ f x x)
Hx: f x x <-> ~ f x x

Empty
apply Hx; apply Hx; intros H'; now apply Hx.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> Type
x: X
H: f x = (fun x : X => ~ f x x)

f x x <-> ~ f x x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> Type
x: X
H: f x = (fun x : X => ~ f x x)

(fun T : X -> Type => T x <-> ~ f x x) (f x)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> Type
x: X
H: f x = (fun x : X => ~ f x x)

~ f x x <-> ~ f x x
reflexivity. Qed.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> HProp

{p : X -> HProp & forall x : X, f x <> p}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> HProp

{p : X -> HProp & forall x : X, f x <> p}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> HProp

forall x : X, f x <> (fun x0 : X => Build_HProp (f x0 x0 -> Empty))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> HProp
x: X
H: f x = (fun x : X => Build_HProp (f x x -> Empty))

Empty
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> HProp
x: X
H: f x = (fun x : X => Build_HProp (f x x -> Empty))
Hx: f x x <-> ~ f x x

Empty
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> HProp
x: X
H: f x = (fun x : X => Build_HProp (f x x -> Empty))
f x x <-> ~ f x x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> HProp
x: X
H: f x = (fun x : X => Build_HProp (f x x -> Empty))
Hx: f x x <-> ~ f x x

Empty
apply Hx; apply Hx; intros H'; now apply Hx.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> HProp
x: X
H: f x = (fun x : X => Build_HProp (f x x -> Empty))

f x x <-> ~ f x x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> HProp
x: X
H: f x = (fun x : X => Build_HProp (f x x -> Empty))

(fun t : X -> HProp => t x <-> ~ f x x) (f x)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
f: X -> X -> HProp
x: X
H: f x = (fun x : X => Build_HProp (f x x -> Empty))

Build_HProp (f x x -> Empty) <-> ~ f x x
reflexivity. Qed.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y, Z: Type
f: X -> Y + Z

(forall (x : X) (y : Y), f x <> inl y) -> forall x : X, {z : Z & inr z = f x}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y, Z: Type
f: X -> Y + Z

(forall (x : X) (y : Y), f x <> inl y) -> forall x : X, {z : Z & inr z = f x}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y, Z: Type
f: X -> Y + Z
Hf: forall (x : X) (y : Y), f x <> inl y

forall x : X, {z : Z & inr z = f x}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y, Z: Type
f: X -> Y + Z
Hf: forall (x : X) (y : Y), f x <> inl y
H: forall (x : X) (a : Y + Z), a = f x -> {z : Z & inr z = f x}

forall x : X, {z : Z & inr z = f x}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y, Z: Type
f: X -> Y + Z
Hf: forall (x : X) (y : Y), f x <> inl y
forall (x : X) (a : Y + Z), a = f x -> {z : Z & inr z = f x}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y, Z: Type
f: X -> Y + Z
Hf: forall (x : X) (y : Y), f x <> inl y
H: forall (x : X) (a : Y + Z), a = f x -> {z : Z & inr z = f x}

forall x : X, {z : Z & inr z = f x}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y, Z: Type
f: X -> Y + Z
Hf: forall (x : X) (y : Y), f x <> inl y
H: forall (x : X) (a : Y + Z), a = f x -> {z : Z & inr z = f x}
x: X

{z : Z & inr z = f x}
now apply (H x (f x)).
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y, Z: Type
f: X -> Y + Z
Hf: forall (x : X) (y : Y), f x <> inl y

forall (x : X) (a : Y + Z), a = f x -> {z : Z & inr z = f x}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y, Z: Type
f: X -> Y + Z
Hf: forall (x : X) (y : Y), f x <> inl y
x: X
a: Y + Z
Hxa: a = f x

{z : Z & inr z = f x}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y, Z: Type
f: X -> Y + Z
x: X
Hf: forall y : Y, f x <> inl y
a: Y + Z
Hxa: a = f x

{z : Z & inr z = f x}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y, Z: Type
f: X -> Y + Z
x: X
y: Y
Hf: forall y0 : Y, inl y <> inl y0
a: Y + Z
Hxa: a = inl y

{z : Z & inr z = inl y}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y, Z: Type
f: X -> Y + Z
x: X
z: Z
Hf: forall y : Y, inr z <> inl y
a: Y + Z
Hxa: a = inr z
{z0 : Z & inr z0 = inr z}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y, Z: Type
f: X -> Y + Z
x: X
y: Y
Hf: forall y0 : Y, inl y <> inl y0
a: Y + Z
Hxa: a = inl y

{z : Z & inr z = inl y}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y, Z: Type
f: X -> Y + Z
x: X
y: Y
Hf: forall y0 : Y, inl y <> inl y0
a: Y + Z
Hxa: a = inl y

Empty
now apply (Hf y).
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y, Z: Type
f: X -> Y + Z
x: X
z: Z
Hf: forall y : Y, inr z <> inl y
a: Y + Z
Hxa: a = inr z

{z0 : Z & inr z0 = inr z}
now exists z. Qed.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type

(X -> HProp) = X + Y -> X + X = X -> Injection (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type

(X -> HProp) = X + Y -> X + X = X -> Injection (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X

Injection (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X

X + Y = (X -> HProp) * (X -> HProp)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
H: X + Y = (X -> HProp) * (X -> HProp)
Injection (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X

X + Y = (X -> HProp) * (X -> HProp)
now rewrite <- H1, path_sum_prod, H2.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
H: X + Y = (X -> HProp) * (X -> HProp)

Injection (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap

Injection (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp

Injection (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p

Injection (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y

Injection (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y

forall (q : X -> HProp) (x : X), g' q <> inl x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), g' q <> inl x
Injection (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y

forall (q : X -> HProp) (x : X), g' q <> inl x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
q: X -> HProp
x: X
H: g' q = inl x

Empty
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
q: X -> HProp
x: X
H: g' q = inl x

f' x = p
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
q: X -> HProp
x: X
H: g' q = inl x

fst (f (inl x)) = p
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
q: X -> HProp
x: X
H: g' q = inl x

fst (f (g' q)) = p
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
q: X -> HProp
x: X
H: g' q = inl x

fst (f (g (p, q))) = p
now rewrite Hfg.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), g' q <> inl x

Injection (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), g' q <> inl x

IsInjective (fun x : X -> HProp => (clean_sum g' H' x).1)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), g' q <> inl x
q, q': X -> HProp
H: (clean_sum g' H' q).1 = (clean_sum g' H' q').1

q = q'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), g' q <> inl x
q, q': X -> HProp
H: (clean_sum g' H' q).1 = (clean_sum g' H' q').1

g' q = g' q'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), g' q <> inl x
q, q': X -> HProp
H: (clean_sum g' H' q).1 = (clean_sum g' H' q').1
Hqq': g' q = g' q'
q = q'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), g' q <> inl x
q, q': X -> HProp
H: (clean_sum g' H' q).1 = (clean_sum g' H' q').1

g' q = g' q'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), g' q <> inl x
q, q': X -> HProp
z: Y
H: (z; 1%path).1 = (clean_sum g' H' q').1

inr z = g' q'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), g' q <> inl x
q, q': X -> HProp
z, z': Y
H: (z; 1%path).1 = (z'; 1%path).1

inr z = inr z'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), g' q <> inl x
q, q': X -> HProp
z, z': Y
H: z = z'

inr z = inr z'
now rewrite H.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), g' q <> inl x
q, q': X -> HProp
H: (clean_sum g' H' q).1 = (clean_sum g' H' q').1
Hqq': g' q = g' q'

q = q'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), g' q <> inl x
q, q': X -> HProp
H: (clean_sum g' H' q).1 = (clean_sum g' H' q').1
Hqq': g (p, q) = g (p, q')

q = q'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), g' q <> inl x
q, q': X -> HProp
H: (clean_sum g' H' q).1 = (clean_sum g' H' q').1
Hqq': g (p, q) = g (p, q')

snd (p, q) = snd (p, q')
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
H1: (X -> HProp) = X + Y
H2: X + X = X
f: X + Y -> (X -> HProp) * (X -> HProp)
g: (X -> HProp) * (X -> HProp) -> X + Y
Hfg: (fun x : (X -> HProp) * (X -> HProp) => f (g x)) == idmap
Hgf: (fun x : X + Y => g (f x)) == idmap
f':= fun x : X => fst (f (inl x)): X -> X -> HProp
p: X -> HProp
Hp: forall x : X, f' x <> p
g':= fun q : X -> HProp => g (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), g' q <> inl x
q, q': X -> HProp
H: (clean_sum g' H' q).1 = (clean_sum g' H' q').1
Hqq': g (p, q) = g (p, q')

snd (f (g (p, q))) = snd (f (g (p, q')))
now rewrite Hqq'. Qed. (* Version just requiring propositional injections *)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp

(forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')) -> {p : X -> HProp & forall x : X, ~ R x p}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp

(forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')) -> {p : X -> HProp & forall x : X, ~ R x p}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')

{p : X -> HProp & forall x : X, ~ R x p}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp

{p : X -> HProp & forall x : X, ~ R x p}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp

forall x : X, ~ R x pc
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp
x: X
H: R x pc

Empty
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp
x: X
H: R x pc
Hpc: pc x <-> ~ pc x

Empty
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp
x: X
H: R x pc
pc x <-> ~ pc x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp
x: X
H: R x pc
Hpc: pc x <-> ~ pc x

Empty
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp
x: X
H: R x pc
pc x -> ~ pc x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp
x: X
H: R x pc
~ pc x -> pc x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp
x: X
H: R x pc
Hpc: pc x <-> ~ pc x

Empty
apply Hpc; apply Hpc; intros H'; now apply Hpc.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp
x: X
H: R x pc

pc x -> ~ pc x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp
x: X
H: R x pc
~ pc x -> pc x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp
x: X
H: R x pc

pc x -> ~ pc x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp
x: X
H: R x pc
Hx: pc x

~ pc x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp
x: X
H: R x pc
Hx: forall p : X -> HProp, R x p -> ~ p x

~ pc x
now apply Hx.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp
x: X
H: R x pc

~ pc x -> pc x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp
x: X
H: R x pc
Hx: ~ pc x

pc x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp
x: X
H: R x pc
Hx: ~ pc x

forall p : X -> HProp, R x p -> ~ p x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp
x: X
H: R x pc
Hx: ~ pc x
p: X -> HProp
Hp: R x p

~ p x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X: Type
R: X -> (X -> HProp) -> HProp
HR: forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
pc:= fun x : X => Build_HProp (resize_hprop (forall p : X -> HProp, R x p -> ~ p x)): X -> HProp
x: X
H: R x pc
Hx: ~ pc x
p: X -> HProp
Hp: R x p

p = pc -> ~ p x
now intros ->. Qed.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type

InjectsInto X Y -> InjectsInto (X -> HProp) (Y -> HProp)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type

InjectsInto X Y -> InjectsInto (X -> HProp) (Y -> HProp)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y

InjectsInto (X -> HProp) (Y -> HProp)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y

Injection X Y -> InjectsInto (X -> HProp) (Y -> HProp)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f

InjectsInto (X -> HProp) (Y -> HProp)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f

Injection (X -> HProp) (Y -> HProp)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f

IsInjective (fun (p : X -> HProp) (y : Y) => hexists (fun x : X => p x * (y = f x)))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))

p = q
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))

p == q
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X

p x = q x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X

p x <-> q x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: p x

q x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: q x
p x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: p x

q x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: p x

hexists (fun x0 : X => p x0 * (f x = f x0))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: p x
Hp: (fun y : Y => hexists (fun x : X => p x * (y = f x))) (f x)
q x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: p x

hexists (fun x0 : X => p x0 * (f x = f x0))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: p x

{x0 : X & p x0 * (f x = f x0)}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: p x

p x * (f x = f x)
split; trivial.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: p x
Hp: (fun y : Y => hexists (fun x : X => p x * (y = f x))) (f x)

q x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: p x
Hp: (fun y : Y => trunctype_type ((fun y0 : Y => hexists (fun x : X => p x * (y0 = f x))) y)) (f x)

q x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: p x
Hp: hexists (fun x0 : X => q x0 * (f x = f x0))

q x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: p x
Hp: hexists (fun x0 : X => q x0 * (f x = f x0))

{x0 : X & q x0 * (f x = f x0)} -> q x
now intros [x'[Hq <- % Hf]].
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: q x

p x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: q x

hexists (fun x0 : X => q x0 * (f x = f x0))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: q x
Hq: (fun y : Y => hexists (fun x : X => q x * (y = f x))) (f x)
p x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: q x

hexists (fun x0 : X => q x0 * (f x = f x0))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: q x

{x0 : X & q x0 * (f x = f x0)}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: q x

q x * (f x = f x)
split; trivial.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: q x
Hq: (fun y : Y => hexists (fun x : X => q x * (y = f x))) (f x)

p x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: q x
Hq: (fun y : Y => trunctype_type ((fun y0 : Y => hexists (fun x : X => q x * (y0 = f x))) y)) (f x)

p x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: q x
Hq: hexists (fun x0 : X => p x0 * (f x = f x0))

p x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: Type
HF: InjectsInto X Y
f: X -> Y
Hf: IsInjective f
p, q: X -> HProp
H: (fun y : Y => hexists (fun x : X => p x * (y = f x))) = (fun y : Y => hexists (fun x : X => q x * (y = f x)))
x: X
Hx: q x
Hq: hexists (fun x0 : X => p x0 * (f x = f x0))

{x0 : X & p x0 * (f x = f x0)} -> p x
now intros [x'[Hp <- % Hf]]. Qed.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet

InjectsInto (X -> HProp) (X + Y) -> InjectsInto (X + X) X -> InjectsInto (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet

InjectsInto (X -> HProp) (X + Y) -> InjectsInto (X + X) X -> InjectsInto (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X

InjectsInto (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X

InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
InjectsInto (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X

InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X

InjectsInto ((X -> HProp) * (X -> HProp)) (X -> HProp)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X

InjectsInto ((X -> HProp) * (X -> HProp)) (X + X -> HProp)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X

InjectsInto (X + X -> HProp) (X + X -> HProp)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X

Injection (X + X -> HProp) (X + X -> HProp)
reflexivity.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)

InjectsInto (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)

Injection ((X -> HProp) * (X -> HProp)) (X + Y) -> InjectsInto (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f

InjectsInto (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp

InjectsInto (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp

forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
InjectsInto (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp

forall (x : X) (p p' : X -> HProp), R x p -> R x p' -> merely (p = p')
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
x: X
p, p': X -> HProp
H3: R x p
H4: R x p'

merely (p = p')
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
x: X
p, p': X -> HProp
H3: R x p
H4: R x p'

{q : X -> HProp & f (p, q) = inl x} -> merely (p = p')
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
x: X
p, p': X -> HProp
H3: R x p
H4: R x p'
q: X -> HProp
Hq: f (p, q) = inl x

merely (p = p')
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
x: X
p, p': X -> HProp
H3: R x p
H4: R x p'
q: X -> HProp
Hq: f (p, q) = inl x

{q : X -> HProp & f (p', q) = inl x} -> merely (p = p')
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
x: X
p, p': X -> HProp
H3: R x p
H4: R x p'
q: X -> HProp
Hq: f (p, q) = inl x
q': X -> HProp
Hq': f (p', q') = inl x

merely (p = p')
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
x: X
p, p': X -> HProp
H3: R x p
H4: R x p'
q: X -> HProp
Hq: f (p, q) = inl x
q': X -> HProp
Hq': f (p', q') = inl x

p = p'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
x: X
p, p': X -> HProp
H3: R x p
H4: R x p'
q: X -> HProp
Hq: f (p, q) = inl x
q': X -> HProp
Hq': f (p', q') = inl x

fst (p, q) = p'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
x: X
p, p': X -> HProp
H3: R x p
H4: R x p'
q: X -> HProp
Hq: f (p, q) = inl x
q': X -> HProp
Hq': f (p', q') = inl x

f (p, q) = f (p', q')
now rewrite Hq, Hq'.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p

InjectsInto (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y

InjectsInto (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y

forall (q : X -> HProp) (x : X), f' q <> inl x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), f' q <> inl x
InjectsInto (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y

forall (q : X -> HProp) (x : X), f' q <> inl x
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
q: X -> HProp
x: X
H: f' q = inl x

Empty
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
q: X -> HProp
x: X
H: f' q = inl x

R x p
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
q: X -> HProp
x: X
H: f' q = inl x

{q : X -> HProp & f (p, q) = inl x}
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
q: X -> HProp
x: X
H: f' q = inl x

f (p, q) = inl x
apply H.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), f' q <> inl x

InjectsInto (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), f' q <> inl x

Injection (X -> HProp) Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), f' q <> inl x

IsInjective (fun x : X -> HProp => (clean_sum f' H' x).1)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), f' q <> inl x
q, q': X -> HProp
H: (clean_sum f' H' q).1 = (clean_sum f' H' q').1

q = q'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), f' q <> inl x
q, q': X -> HProp
H: (clean_sum f' H' q).1 = (clean_sum f' H' q').1

f' q = f' q'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), f' q <> inl x
q, q': X -> HProp
H: (clean_sum f' H' q).1 = (clean_sum f' H' q').1
Hqq': f' q = f' q'
q = q'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), f' q <> inl x
q, q': X -> HProp
H: (clean_sum f' H' q).1 = (clean_sum f' H' q').1

f' q = f' q'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), f' q <> inl x
q, q': X -> HProp
z: Y
H: (z; 1%path).1 = (clean_sum f' H' q').1

inr z = f' q'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), f' q <> inl x
q, q': X -> HProp
z, z': Y
H: (z; 1%path).1 = (z'; 1%path).1

inr z = inr z'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), f' q <> inl x
q, q': X -> HProp
z, z': Y
H: z = z'

inr z = inr z'
now rewrite H.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), f' q <> inl x
q, q': X -> HProp
H: (clean_sum f' H' q).1 = (clean_sum f' H' q').1
Hqq': f' q = f' q'

q = q'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), f' q <> inl x
q, q': X -> HProp
H: (clean_sum f' H' q).1 = (clean_sum f' H' q').1
Hqq': (p, q) = (p, q')

q = q'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
X, Y: HSet
H1: InjectsInto (X -> HProp) (X + Y)
H2: InjectsInto (X + X) X
HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y)
f: (X -> HProp) * (X -> HProp) -> X + Y
Hf: IsInjective f
R:= fun (x : X) (p : X -> HProp) => hexists (fun q : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
p: X -> HProp
Hp: forall x : X, ~ R x p
f':= fun q : X -> HProp => f (p, q): (X -> HProp) -> X + Y
H': forall (q : X -> HProp) (x : X), f' q <> inl x
q, q': X -> HProp
H: (clean_sum f' H' q).1 = (clean_sum f' H' q').1
Hqq': (p, q) = (p, q')

snd (p, q) = q'
now rewrite Hqq'. Qed. End Preparation. (** * Sierpinski's Theorem *) Section Sierpinski. Context {UA : Univalence}. Context {EM : ExcludedMiddle}. Context {PR : PropResizing}. Definition powfix X := forall n, (power_iterated X n + power_iterated X n) = (power_iterated X n). Variable HN : HSet -> HSet. Hypothesis HN_ninject : forall X, ~ InjectsInto (HN X) X. Variable HN_bound : nat. Hypothesis HN_inject : forall X, InjectsInto (HN X) (power_iterated X HN_bound). (* This section then concludes the intermediate result that abstractly, any function HN behaving like the Hartogs number is tamed in the presence of GCH. Morally we show that X <= HN(X) for all X, we just ensure that X is large enough by considering P(N + X). *)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type

InjectsInto X X' -> InjectsInto Y Y' -> InjectsInto (X + Y) (X' + Y')
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type

InjectsInto X X' -> InjectsInto Y Y' -> InjectsInto (X + Y) (X' + Y')
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'

InjectsInto (X + Y) (X' + Y')
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'

Injection X X' -> InjectsInto (X + Y) (X' + Y')
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f

InjectsInto (X + Y) (X' + Y')
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f

Injection Y Y' -> InjectsInto (X + Y) (X' + Y')
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f
g: Y -> Y'
Hg: IsInjective g

InjectsInto (X + Y) (X' + Y')
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f
g: Y -> Y'
Hg: IsInjective g

Injection (X + Y) (X' + Y')
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f
g: Y -> Y'
Hg: IsInjective g

IsInjective (fun z : X + Y => match z with | inl x => inl (f x) | inr y => inr (g y) end)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f
g: Y -> Y'
Hg: IsInjective g
x, x': X
H: inl (f x) = inl (f x')

inl x = inl x'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f
g: Y -> Y'
Hg: IsInjective g
x: X
y': Y
H: inl (f x) = inr (g y')
inl x = inr y'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f
g: Y -> Y'
Hg: IsInjective g
y: Y
x': X
H: inr (g y) = inl (f x')
inr y = inl x'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f
g: Y -> Y'
Hg: IsInjective g
y, y': Y
H: inr (g y) = inr (g y')
inr y = inr y'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f
g: Y -> Y'
Hg: IsInjective g
x, x': X
H: inl (f x) = inl (f x')

inl x = inl x'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f
g: Y -> Y'
Hg: IsInjective g
x, x': X
H: inl (f x) = inl (f x')

x = x'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f
g: Y -> Y'
Hg: IsInjective g
x, x': X
H: inl (f x) = inl (f x')

f x = f x'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f
g: Y -> Y'
Hg: IsInjective g
x, x': X
H: inl (f x) = inl (f x')

inl (f x) = inl (f x')
apply H.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f
g: Y -> Y'
Hg: IsInjective g
x: X
y': Y
H: inl (f x) = inr (g y')

inl x = inr y'
now apply inl_ne_inr in H.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f
g: Y -> Y'
Hg: IsInjective g
y: Y
x': X
H: inr (g y) = inl (f x')

inr y = inl x'
now apply inr_ne_inl in H.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f
g: Y -> Y'
Hg: IsInjective g
y, y': Y
H: inr (g y) = inr (g y')

inr y = inr y'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f
g: Y -> Y'
Hg: IsInjective g
y, y': Y
H: inr (g y) = inr (g y')

y = y'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f
g: Y -> Y'
Hg: IsInjective g
y, y': Y
H: inr (g y) = inr (g y')

g y = g y'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X, Y, X', Y': Type
H1: InjectsInto X X'
H2: InjectsInto Y Y'
f: X -> X'
Hf: IsInjective f
g: Y -> Y'
Hg: IsInjective g
y, y': Y
H: inr (g y) = inr (g y')

inr (g y) = inr (g y')
apply H. Qed. (* The main proof is by induction on the cardinality bound for HN. As the Hartogs number is bounded by P^3(X), we'd actually just need finitely many instances of GCH. *)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat

GCH -> infinite X -> powfix X -> InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat

GCH -> infinite X -> powfix X -> InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n)

InjectsInto X (HN X)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X 0)

InjectsInto X (HN X)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
InjectsInto X (HN X)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X 0)

InjectsInto X (HN X)
now apply HN_ninject in Hi.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)

InjectsInto X (HN X)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)

infinite (Build_HSet (power_iterated X n))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
InjectsInto (Build_HSet (power_iterated X n)) (Build_HSet (power_iterated X n + HN X))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
InjectsInto (Build_HSet (power_iterated X n + HN X)) (Build_HSet (power_iterated X n) -> HProp)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
H: InjectsInto (Build_HSet (power_iterated X n + HN X)) (Build_HSet (power_iterated X n))
InjectsInto X (HN X)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
H: InjectsInto (Build_HSet (power_iterated X n) -> HProp) (Build_HSet (power_iterated X n + HN X))
InjectsInto X (HN X)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)

infinite (Build_HSet (power_iterated X n))
now apply infinite_power_iterated.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)

InjectsInto (Build_HSet (power_iterated X n)) (Build_HSet (power_iterated X n + HN X))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)

Injection (Build_HSet (power_iterated X n)) (Build_HSet (power_iterated X n + HN X))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)

IsInjective inl
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
x, x': Build_HSet (power_iterated X n)

inl x = inl x' -> x = x'
apply path_sum_inl.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)

InjectsInto (Build_HSet (power_iterated X n + HN X)) (Build_HSet (power_iterated X n) -> HProp)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)

InjectsInto (Build_HSet (power_iterated X n + HN X)) ?Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
InjectsInto ?Y (Build_HSet (power_iterated X n) -> HProp)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)

InjectsInto (Build_HSet (power_iterated X n + HN X)) ?Y
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)

InjectsInto (power_iterated X n) ?X'
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)

IsHSet (power_iterated X n)
exact _.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)

InjectsInto ((power_iterated X n -> HProp) + power_iterated X n.+1) (Build_HSet (power_iterated X n) -> HProp)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)

Trunc (-1) (Injection ((power_iterated X n -> HProp) + power_type (nat_iter n power_type X)) (power_iterated X n -> HProp))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: power_iterated X n.+1 + power_iterated X n.+1 = power_iterated X n.+1
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)

Trunc (-1) (Injection ((power_iterated X n -> HProp) + power_type (nat_iter n power_type X)) (power_iterated X n -> HProp))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: power_type (nat_iter n power_type X) + power_type (nat_iter n power_type X) = power_type (nat_iter n power_type X)
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)

Trunc (-1) (Injection ((power_iterated X n -> HProp) + power_type (nat_iter n power_type X)) (power_iterated X n -> HProp))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: power_type (nat_iter n power_type X) + power_type (nat_iter n power_type X) = power_type (nat_iter n power_type X)
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)

Trunc (-1) (Injection (power_type (nat_iter n power_type X)) (power_iterated X n -> HProp))
apply tr, Injection_refl.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
H: InjectsInto (Build_HSet (power_iterated X n + HN X)) (Build_HSet (power_iterated X n))

InjectsInto X (HN X)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
H: InjectsInto (Build_HSet (power_iterated X n + HN X)) (Build_HSet (power_iterated X n))

InjectsInto (HN X) (power_iterated X n)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
H: InjectsInto (Build_HSet (power_iterated X n + HN X)) (Build_HSet (power_iterated X n))

InjectsInto (HN X) (Build_HSet (power_iterated X n + HN X))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
H: InjectsInto (Build_HSet (power_iterated X n + HN X)) (Build_HSet (power_iterated X n))

Injection (HN X) (Build_HSet (power_iterated X n + HN X))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
H: InjectsInto (Build_HSet (power_iterated X n + HN X)) (Build_HSet (power_iterated X n))

IsInjective inr
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
H: InjectsInto (Build_HSet (power_iterated X n + HN X)) (Build_HSet (power_iterated X n))
x, y: HN X

inr x = inr y -> x = y
apply path_sum_inr.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
H: InjectsInto (Build_HSet (power_iterated X n) -> HProp) (Build_HSet (power_iterated X n + HN X))

InjectsInto X (HN X)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
H: InjectsInto (Build_HSet (power_iterated X n) -> HProp) (Build_HSet (power_iterated X n + HN X))

InjectsInto (power_iterated X n.+1) (HN X)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
H: InjectsInto (Build_HSet (power_iterated X n) -> HProp) (Build_HSet (power_iterated X n + HN X))

Trunc (-1) (Injection (power_type (nat_iter n power_type X)) (HN X))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
H: InjectsInto (Build_HSet (power_iterated X n) -> HProp) (Build_HSet (power_iterated X n + HN X))

InjectsInto (Build_HSet (power_iterated X n) + Build_HSet (power_iterated X n)) (Build_HSet (power_iterated X n))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
n: nat
gch: GCH
H1: infinite X
H2: powfix X
Hi: InjectsInto (HN X) (power_iterated X n.+1)
IHn: InjectsInto (HN X) (power_iterated X n) -> InjectsInto X (HN X)
H: InjectsInto (Build_HSet (power_iterated X n) -> HProp) (Build_HSet (power_iterated X n + HN X))

InjectsInto (power_iterated X n) (Build_HSet (power_iterated X n))
apply tr, Injection_refl. Qed.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet

GCH -> infinite X -> InjectsInto X (HN (Build_HSet (X -> HProp)))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet

GCH -> infinite X -> InjectsInto X (HN (Build_HSet (X -> HProp)))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
HX: infinite X

InjectsInto X (HN (Build_HSet (X -> HProp)))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
HX: infinite X

InjectsInto (X -> HProp) (HN (Build_HSet (X -> HProp)))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
HX: infinite X

infinite (Build_HSet (X -> HProp))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
HX: infinite X
powfix (Build_HSet (X -> HProp))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
HX: infinite X
InjectsInto (HN (Build_HSet (X -> HProp))) (power_iterated (Build_HSet (X -> HProp)) HN_bound)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
HX: infinite X

infinite (Build_HSet (X -> HProp))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
HX: infinite X

Injection X (Build_HSet (X -> HProp))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
HX: infinite X

IsHSet X
apply X.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
HX: infinite X

powfix (Build_HSet (X -> HProp))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
HX: infinite X
n: nat

power_iterated (Build_HSet (X -> HProp)) n + power_iterated (Build_HSet (X -> HProp)) n = power_iterated (Build_HSet (X -> HProp)) n
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
HX: infinite X
n: nat

power_iterated (X -> HProp) n + power_iterated (X -> HProp) n = power_iterated (X -> HProp) n
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
HX: infinite X
n: nat

(power_iterated X n -> HProp) + (power_iterated X n -> HProp) = (power_iterated X n -> HProp)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
HX: infinite X
n: nat

infinite (default_TruncType 0 (power_iterated X n) (hset_power_iterated X n))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
HX: infinite X
n: nat

infinite (power_iterated X n)
now apply infinite_power_iterated.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
HX: infinite X

InjectsInto (HN (Build_HSet (X -> HProp))) (power_iterated (Build_HSet (X -> HProp)) HN_bound)
apply HN_inject. Qed.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet

GCH -> InjectsInto X (HN (Build_HSet (Build_HSet (nat + X) -> HProp)))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet

GCH -> InjectsInto X (HN (Build_HSet (Build_HSet (nat + X) -> HProp)))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH

InjectsInto X (HN (Build_HSet (Build_HSet (nat + X) -> HProp)))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH

InjectsInto X (nat + X)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
InjectsInto (nat + X) (HN (Build_HSet (Build_HSet (nat + X) -> HProp)))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH

InjectsInto X (nat + X)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH

Injection X (nat + X)
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH

IsInjective inr
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
x, y: X

inr x = inr y -> x = y
apply path_sum_inr.
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH

InjectsInto (nat + X) (HN (Build_HSet (Build_HSet (nat + X) -> HProp)))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH

infinite (Build_HSet (nat + X))
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH

IsInjective inl
UA: Univalence
EM: ExcludedMiddle
PR: PropResizing
HN: HSet -> HSet
HN_ninject: forall X : HSet, ~ InjectsInto (HN X) X
HN_bound: nat
HN_inject: forall X : HSet, InjectsInto (HN X) (power_iterated X HN_bound)
X: HSet
gch: GCH
x, y: nat

inl x = inl y -> x = y
apply path_sum_inl. Qed. End Sierpinski. (* Main result: GCH implies AC *)
UA: Univalence
PR: PropResizing
LEM: ExcludedMiddle

GCH -> Choice_type
UA: Univalence
PR: PropResizing
LEM: ExcludedMiddle

GCH -> Choice_type
UA: Univalence
PR: PropResizing
LEM: ExcludedMiddle
gch: GCH

Choice_type
UA: Univalence
PR: PropResizing
LEM: ExcludedMiddle
gch: GCH

forall X : HSet, hexists (fun A : Ordinal => InjectsInto X A)
UA: Univalence
PR: PropResizing
LEM: ExcludedMiddle
gch: GCH
X: HSet

hexists (fun A : Ordinal => InjectsInto X A)
UA: Univalence
PR: PropResizing
LEM: ExcludedMiddle
gch: GCH
X: HSet

{A : Ordinal & InjectsInto X A}
UA: Univalence
PR: PropResizing
LEM: ExcludedMiddle
gch: GCH
X: HSet

InjectsInto X (hartogs_number (Build_HSet (Build_HSet (nat + X) -> HProp)))
UA: Univalence
PR: PropResizing
LEM: ExcludedMiddle
gch: GCH
X: HSet

forall X : HSet, ~ InjectsInto ((fun A : HSet => ordinal_as_hset (hartogs_number A)) X) X
UA: Univalence
PR: PropResizing
LEM: ExcludedMiddle
gch: GCH
X: HSet
forall X : HSet, InjectsInto ((fun A : HSet => ordinal_as_hset (hartogs_number A)) X) (power_iterated X 3)
UA: Univalence
PR: PropResizing
LEM: ExcludedMiddle
gch: GCH
X: HSet

forall X : HSet, ~ InjectsInto ((fun A : HSet => ordinal_as_hset (hartogs_number A)) X) X
UA: Univalence
PR: PropResizing
LEM: ExcludedMiddle
gch: GCH
X, Y: HSet

~ InjectsInto ((fun A : HSet => ordinal_as_hset (hartogs_number A)) Y) Y
UA: Univalence
PR: PropResizing
LEM: ExcludedMiddle
gch: GCH
X, Y: HSet
H: InjectsInto (hartogs_number Y) Y

Empty
UA: Univalence
PR: PropResizing
LEM: ExcludedMiddle
gch: GCH
X, Y: HSet
H: InjectsInto (hartogs_number Y) Y

Injection (hartogs_number Y) Y -> Empty
apply hartogs_number_no_injection.
UA: Univalence
PR: PropResizing
LEM: ExcludedMiddle
gch: GCH
X: HSet

forall X : HSet, InjectsInto ((fun A : HSet => ordinal_as_hset (hartogs_number A)) X) (power_iterated X 3)
UA: Univalence
PR: PropResizing
LEM: ExcludedMiddle
gch: GCH
X, Y: HSet

InjectsInto ((fun A : HSet => ordinal_as_hset (hartogs_number A)) Y) (power_iterated Y 3)
UA: Univalence
PR: PropResizing
LEM: ExcludedMiddle
gch: GCH
X, Y: HSet

Injection (hartogs_number Y) (power_iterated Y 3)
apply hartogs_number_injection. Qed. (* Note that the assumption of LEM is actually not necessary due to GCH_LEM. *)