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. Local Open Scope type. Local Open Scope hprop_scope. (** * Formulation of GCH *) (* GCH states that for any infinite set X with Y between X and P(X) either Y embeds into X or P(X) embeds into Y. *) Definition GCH := forall X Y : HSet, infinite X -> InjectsInto X Y -> InjectsInto Y (X -> HProp) -> InjectsInto Y X + InjectsInto (X -> HProp) Y. (** * GCH is a proposition *)
PR: PropResizing
FE: Funext
X: Type

~ Injection (X -> HProp) X
PR: PropResizing
FE: Funext
X: Type

~ Injection (X -> HProp) X
PR: PropResizing
FE: Funext
X: Type
i: (X -> HProp) -> X
HI: IsInjective i

Empty
PR: PropResizing
FE: Funext
X: Type
i: (X -> HProp) -> X
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = n -> ~ q n)): X -> HProp

Empty
PR: PropResizing
FE: Funext
X: Type
i: (X -> HProp) -> X
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = n -> ~ q n)): X -> HProp
Hp: p (i p) <-> ~ p (i p)

Empty
PR: PropResizing
FE: Funext
X: Type
i: (X -> HProp) -> X
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = n -> ~ q n)): X -> HProp
p (i p) <-> ~ p (i p)
PR: PropResizing
FE: Funext
X: Type
i: (X -> HProp) -> X
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = n -> ~ q n)): X -> HProp
Hp: p (i p) <-> ~ p (i p)

Empty
apply Hp; apply Hp; intros H; now apply Hp.
PR: PropResizing
FE: Funext
X: Type
i: (X -> HProp) -> X
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = n -> ~ q n)): X -> HProp

p (i p) <-> ~ p (i p)
PR: PropResizing
FE: Funext
X: Type
i: (X -> HProp) -> X
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = n -> ~ q n)): X -> HProp

Build_HProp (resize_hprop (forall q : X -> HProp, i q = i p -> ~ q (i p))) <-> ~ p (i p)
PR: PropResizing
FE: Funext
X: Type
i: (X -> HProp) -> X
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = n -> ~ q n)): X -> HProp

Build_HProp (resize_hprop (forall q : X -> HProp, i q = i p -> ~ q (i p))) -> ~ p (i p)
PR: PropResizing
FE: Funext
X: Type
i: (X -> HProp) -> X
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = n -> ~ q n)): X -> HProp
~ p (i p) -> Build_HProp (resize_hprop (forall q : X -> HProp, i q = i p -> ~ q (i p)))
PR: PropResizing
FE: Funext
X: Type
i: (X -> HProp) -> X
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = n -> ~ q n)): X -> HProp

Build_HProp (resize_hprop (forall q : X -> HProp, i q = i p -> ~ q (i p))) -> ~ p (i p)
PR: PropResizing
FE: Funext
X: Type
i: (X -> HProp) -> X
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = n -> ~ q n)): X -> HProp
H: Build_HProp (resize_hprop (forall q : X -> HProp, i q = i p -> ~ q (i p)))

~ p (i p)
PR: PropResizing
FE: Funext
X: Type
i: (X -> HProp) -> X
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = n -> ~ q n)): X -> HProp
H: forall q : X -> HProp, i q = i p -> ~ q (i p)

~ p (i p)
PR: PropResizing
FE: Funext
X: Type
i: (X -> HProp) -> X
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = n -> ~ q n)): X -> HProp
H: forall q : X -> HProp, i q = i p -> ~ q (i p)

i p = i p
reflexivity.
PR: PropResizing
FE: Funext
X: Type
i: (X -> HProp) -> X
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = n -> ~ q n)): X -> HProp

~ p (i p) -> Build_HProp (resize_hprop (forall q : X -> HProp, i q = i p -> ~ q (i p)))
PR: PropResizing
FE: Funext
X: Type
i: (X -> HProp) -> X
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = n -> ~ q n)): X -> HProp
H: ~ p (i p)

Build_HProp (resize_hprop (forall q : X -> HProp, i q = i p -> ~ q (i p)))
PR: PropResizing
FE: Funext
X: Type
i: (X -> HProp) -> X
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = n -> ~ q n)): X -> HProp
H: ~ p (i p)

forall q : X -> HProp, i q = i p -> ~ q (i p)
PR: PropResizing
FE: Funext
X: Type
i: (X -> HProp) -> X
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = n -> ~ q n)): X -> HProp
H: ~ p (i p)

~ p (i p)
apply H. Qed. (* The concluding disjunction of GCH is excluse since otherwise we'd obtain an injection of P(X) into X. *)
PR: PropResizing
FE: Funext

IsHProp GCH
PR: PropResizing
FE: Funext

IsHProp GCH
PR: PropResizing
FE: Funext
a, a0: HSet
a1: infinite a
a2: InjectsInto a a0
a3: InjectsInto a0 (a -> HProp)

IsHProp (InjectsInto a0 a + InjectsInto (a -> HProp) a0)
PR: PropResizing
FE: Funext
a, a0: HSet
a1: infinite a
a2: InjectsInto a a0
a3: InjectsInto a0 (a -> HProp)

forall x y : InjectsInto a0 a + InjectsInto (a -> HProp) a0, x = y
PR: PropResizing
FE: Funext
a, a0: HSet
a1: infinite a
a2: InjectsInto a a0
a3: InjectsInto a0 (a -> HProp)
H, H': InjectsInto a0 a

inl H = inl H'
PR: PropResizing
FE: Funext
a, a0: HSet
a1: infinite a
a2: InjectsInto a a0
a3: InjectsInto a0 (a -> HProp)
H: InjectsInto a0 a
H': InjectsInto (a -> HProp) a0
inl H = inr H'
PR: PropResizing
FE: Funext
a, a0: HSet
a1: infinite a
a2: InjectsInto a a0
a3: InjectsInto a0 (a -> HProp)
H: InjectsInto (a -> HProp) a0
H': InjectsInto a0 a
inr H = inl H'
PR: PropResizing
FE: Funext
a, a0: HSet
a1: infinite a
a2: InjectsInto a a0
a3: InjectsInto a0 (a -> HProp)
H, H': InjectsInto (a -> HProp) a0
inr H = inr H'
PR: PropResizing
FE: Funext
a, a0: HSet
a1: infinite a
a2: InjectsInto a a0
a3: InjectsInto a0 (a -> HProp)
H, H': InjectsInto a0 a

inl H = inl H'
PR: PropResizing
FE: Funext
a, a0: HSet
a1: infinite a
a2: InjectsInto a a0
a3: InjectsInto a0 (a -> HProp)
H, H': InjectsInto a0 a

H = H'
apply path_ishprop.
PR: PropResizing
FE: Funext
a, a0: HSet
a1: infinite a
a2: InjectsInto a a0
a3: InjectsInto a0 (a -> HProp)
H: InjectsInto a0 a
H': InjectsInto (a -> HProp) a0

inl H = inr H'
PR: PropResizing
FE: Funext
a, a0: HSet
a1: infinite a
a2: InjectsInto a a0
a3: InjectsInto a0 (a -> HProp)
H: InjectsInto a0 a
H': InjectsInto (a -> HProp) a0

Empty
PR: PropResizing
FE: Funext
a, a0: HSet
a1: infinite a
a2: InjectsInto a a0
a3: InjectsInto a0 (a -> HProp)
H: InjectsInto a0 a
H': InjectsInto (a -> HProp) a0

merely (Injection (a -> HProp) a)
now apply InjectsInto_trans with a0.
PR: PropResizing
FE: Funext
a, a0: HSet
a1: infinite a
a2: InjectsInto a a0
a3: InjectsInto a0 (a -> HProp)
H: InjectsInto (a -> HProp) a0
H': InjectsInto a0 a

inr H = inl H'
PR: PropResizing
FE: Funext
a, a0: HSet
a1: infinite a
a2: InjectsInto a a0
a3: InjectsInto a0 (a -> HProp)
H: InjectsInto (a -> HProp) a0
H': InjectsInto a0 a

Empty
PR: PropResizing
FE: Funext
a, a0: HSet
a1: infinite a
a2: InjectsInto a a0
a3: InjectsInto a0 (a -> HProp)
H: InjectsInto (a -> HProp) a0
H': InjectsInto a0 a

merely (Injection (a -> HProp) a)
now apply InjectsInto_trans with a0.
PR: PropResizing
FE: Funext
a, a0: HSet
a1: infinite a
a2: InjectsInto a a0
a3: InjectsInto a0 (a -> HProp)
H, H': InjectsInto (a -> HProp) a0

inr H = inr H'
PR: PropResizing
FE: Funext
a, a0: HSet
a1: infinite a
a2: InjectsInto a a0
a3: InjectsInto a0 (a -> HProp)
H, H': InjectsInto (a -> HProp) a0

H = H'
apply path_ishprop. Qed. (** * GCH implies LEM *) Section LEM. Variable X : HSet. Variable P : HProp. Context {PR : PropResizing}. Context {FE : Funext}. Definition hpaths (x y : X) := Build_HProp (paths x y). Definition sing (p : X -> HProp) := exists x, p = hpaths x. Let sings := { p : X -> HProp | sing p \/ (P + ~ P) }. (* The main idea is that for a given set X and proposition P, the set sings fits between X and P(X). Then CH for X implies that either sings embeds into X (which can be refuted constructively), or that P(X) embeds into sings, from which we can extract a proof of P + ~P. *)
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp

IsInjective i -> {p : X -> HProp & ~ sing (i p)}
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp

IsInjective i -> {p : X -> HProp & ~ sing (i p)}
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i

{p : X -> HProp & ~ sing (i p)}
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp

{p : X -> HProp & ~ sing (i p)}
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp

~ sing (i p)
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp
n: X
HN: i p = hpaths n

Empty
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp
n: X
HN: i p = hpaths n
Hp: p n <-> ~ p n

Empty
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp
n: X
HN: i p = hpaths n
p n <-> ~ p n
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp
n: X
HN: i p = hpaths n
Hp: p n <-> ~ p n

Empty
apply Hp; apply Hp; intros H; now apply Hp.
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp
n: X
HN: i p = hpaths n

p n <-> ~ p n
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp
n: X
HN: i p = hpaths n

Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)) <-> ~ p n
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp
n: X
HN: i p = hpaths n

Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)) -> ~ p n
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp
n: X
HN: i p = hpaths n
~ p n -> Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n))
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp
n: X
HN: i p = hpaths n

Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)) -> ~ p n
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp
n: X
HN: i p = hpaths n
H: Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n))

~ p n
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp
n: X
HN: i p = hpaths n
H: forall q : X -> HProp, i q = hpaths n -> ~ q n

~ p n
apply H, HN.
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp
n: X
HN: i p = hpaths n

~ p n -> Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n))
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp
n: X
HN: i p = hpaths n
H: ~ p n

Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n))
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp
n: X
HN: i p = hpaths n
H: ~ p n

forall q : X -> HProp, i q = hpaths n -> ~ q n
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp
n: X
HN: i p = hpaths n
H: ~ p n
q: X -> HProp
HQ: i q = hpaths n

~ q n
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
i: (X -> HProp) -> X -> HProp
HI: IsInjective i
p:= fun n : X => Build_HProp (resize_hprop (forall q : X -> HProp, i q = hpaths n -> ~ q n)): X -> HProp
n: X
HN: i p = hpaths n
H: ~ p n
q: X -> HProp
HQ: i q = i p

~ q n
now apply HI in HQ as ->. Qed.
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
Z: Type
r: Z -> HProp

IsInjective pr1
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
Z: Type
r: Z -> HProp

IsInjective pr1
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
Z: Type
r: Z -> HProp
p: Z
Hp: r p
q: Z
Hq: r q

p = q -> (p; Hp) = (q; Hq)
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
Z: Type
r: Z -> HProp
q: Z
Hp, Hq: r q

(q; Hp) = (q; Hq)
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
Z: Type
r: Z -> HProp
q: Z
Hp, Hq: r q

q = q
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
Z: Type
r: Z -> HProp
q: Z
Hp, Hq: r q
transport (fun x : Z => r x) ?Goal Hp = Hq
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
Z: Type
r: Z -> HProp
q: Z
Hp, Hq: r q

q = q
reflexivity.
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
Z: Type
r: Z -> HProp
q: Z
Hp, Hq: r q

transport (fun x : Z => r x) 1 Hp = Hq
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
Z: Type
r: Z -> HProp
q: Z
Hp, Hq: r q

Hp = Hq
apply path_ishprop. Qed.
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type

P + ~ P -> Injection (X -> HProp) sings
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type

P + ~ P -> Injection (X -> HProp) sings
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
HP: P + ~ P

Injection (X -> HProp) sings
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
HP: P + ~ P

(X -> HProp) -> sings
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
HP: P + ~ P
IsInjective ?f
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
HP: P + ~ P

(X -> HProp) -> sings
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
HP: P + ~ P
p: X -> HProp

sings
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
HP: P + ~ P
p: X -> HProp

sing p \/ P + ~ P
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
HP: P + ~ P
p: X -> HProp

sing p + (P + ~ P)
now right.
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
HP: P + ~ P

IsInjective (fun p : X -> HProp => (p; tr (inr HP)))
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
HP: P + ~ P
p, q: X -> HProp

(p; tr (inr HP)) = (q; tr (inr HP)) -> p = q
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
HP: P + ~ P
p, q: X -> HProp
H: (p; tr (inr HP)) = (q; tr (inr HP))

p = q
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
HP: P + ~ P
p, q: X -> HProp
H: (p; tr (inr HP)) = (q; tr (inr HP))

(p; tr (inr HP)).1 = q
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
HP: P + ~ P
p, q: X -> HProp
H: (p; tr (inr HP)) = (q; tr (inr HP))

(q; tr (inr HP)).1 = q
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
HP: P + ~ P
p, q: X -> HProp
H: (p; tr (inr HP)) = (q; tr (inr HP))

q = q
reflexivity. Qed.
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type

(Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings) -> P \/ ~ P
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type

(Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings) -> P \/ ~ P
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings

P \/ ~ P
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings

Injection X sings
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
Injection sings (X -> HProp)
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
~ Injection sings X
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
Injection (X -> HProp) sings -> P \/ ~ P
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings

Injection X sings
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings

X -> sings
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
IsInjective ?f
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings

X -> sings
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
x: X

sings
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
x: X

sing (hpaths x) \/ P + ~ P
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
x: X

sing (hpaths x) + (P + ~ P)
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
x: X

sing (hpaths x)
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
x: X

hpaths x = hpaths x
reflexivity.
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings

IsInjective (fun x : X => (hpaths x; tr (inl (x; 1%path))))
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
x, y: X

(hpaths x; tr (inl (x; 1%path))) = (hpaths y; tr (inl (y; 1%path))) -> x = y
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
x, y: X
H: (hpaths x; tr (inl (x; 1%path))).1 = (hpaths y; tr (inl (y; 1%path))).1

x = y
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
x, y: X
H: hpaths x = hpaths y

x = y
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
x, y: X
H: hpaths x = hpaths y

hpaths x y
now rewrite H.
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings

Injection sings (X -> HProp)
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings

IsInjective pr1
now apply injective_proj1.
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings

~ Injection sings X
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
H: Injection sings X

Empty
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
H: Injection sings X

~~ (P + ~ P)
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
H: Injection sings X
HP': ~~ (P + ~ P)
Empty
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
H: Injection sings X

~~ (P + ~ P)
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
H: Injection sings X
HP: ~ (P + ~ P)

Empty
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
H: Injection sings X
HP: ~ (P + ~ P)

P + ~ P
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
H: Injection sings X
HP: ~ (P + ~ P)

~ P
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
H: Injection sings X
HP: ~ (P + ~ P)
p: P

Empty
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
H: Injection sings X
HP: ~ (P + ~ P)
p: P

P + ~ P
now left.
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
H: Injection sings X
HP': ~~ (P + ~ P)

Empty
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
H: Injection sings X
HP': ~~ (P + ~ P)

~ (P + ~ P)
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
H: Injection sings X
HP': ~~ (P + ~ P)
HP: Injection (X -> HProp) sings

Empty
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
H: Injection sings X
HP: Injection (X -> HProp) sings

Empty
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
H: Injection sings X
HP: Injection (X -> HProp) sings

Injection (X -> HProp) X
now eapply (Injection_trans _ _ _ HP).
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings

Injection (X -> HProp) sings -> P \/ ~ P
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
i: (X -> HProp) -> sings
Hi: IsInjective i

P \/ ~ P
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
i: (X -> HProp) -> sings
Hi: IsInjective i

IsInjective (fun p : X -> HProp => (i p).1)
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
i: (X -> HProp) -> sings
Hi: IsInjective i
p: X -> HProp
HP: ~ sing (i p).1
P \/ ~ P
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
i: (X -> HProp) -> sings
Hi: IsInjective i

IsInjective (fun p : X -> HProp => (i p).1)
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
i: (X -> HProp) -> sings
Hi: IsInjective i
x, y: X -> HProp
H: i x = i y

x = y
now apply Hi.
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> InjectsInto (X -> HProp) sings
i: (X -> HProp) -> sings
Hi: IsInjective i
p: X -> HProp
HP: ~ sing (i p).1

P \/ ~ P
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & Trunc (-1) (sing p + (P + ~ P))}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> Trunc (-1) (Injection (X -> HProp) sings)
i: (X -> HProp) -> sings
Hi: IsInjective i
p, q: X -> HProp
Hq: Trunc (-1) (sing q + (P + ~ P))
HP: ~ sing q

Trunc (-1) (P + ~ P)
X: HSet
P: HProp
PR: PropResizing
FE: Funext
sings:= {p : X -> HProp & Trunc (-1) (sing p + (P + ~ P))}: Type
ch: Injection X sings -> Injection sings (X -> HProp) -> ~ Injection sings X -> Trunc (-1) (Injection (X -> HProp) sings)
i: (X -> HProp) -> sings
Hi: IsInjective i
p, q: X -> HProp
Hq: Trunc (-1) (sing q + (P + ~ P))
HP: ~ sing q

sing q + (P + ~ P) -> Trunc (-1) (P + ~ P)
intros [H|H]; [destruct (HP H)|now apply tr]. Qed. End LEM. (* We can instantiate the previous lemma with nat to obtain GCH -> LEM. *)
PR: PropResizing
UA: Univalence

GCH -> forall P : HProp, P \/ ~ P
PR: PropResizing
UA: Univalence

GCH -> forall P : HProp, P \/ ~ P
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp

P \/ ~ P
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp

Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} -> Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp) -> ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat) -> InjectsInto (Build_HSet nat -> HProp) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)

InjectsInto (Build_HSet nat -> HProp) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)
sings:= {p : nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}: Type

InjectsInto (Build_HSet nat -> HProp) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)
sings:= {p : nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}: Type

infinite (Build_HSet nat)
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)
sings:= {p : nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}: Type
InjectsInto (Build_HSet nat) (Build_HSet sings)
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)
sings:= {p : nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}: Type
InjectsInto (Build_HSet sings) (Build_HSet nat -> HProp)
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)
sings:= {p : nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}: Type
H: InjectsInto (Build_HSet sings) (Build_HSet nat)
InjectsInto (Build_HSet nat -> HProp) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)
sings:= {p : nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}: Type
H: InjectsInto (Build_HSet nat -> HProp) (Build_HSet sings)
InjectsInto (Build_HSet nat -> HProp) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)
sings:= {p : nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}: Type

infinite (Build_HSet nat)
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)
sings:= {p : nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}: Type

infinite nat
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)
sings:= {p : nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}: Type

IsInjective idmap
apply isinj_idmap.
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)
sings:= {p : nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}: Type

InjectsInto (Build_HSet nat) (Build_HSet sings)
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)
sings:= {p : nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}: Type

Injection (Build_HSet nat) (Build_HSet sings)
apply H1.
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)
sings:= {p : nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}: Type

InjectsInto (Build_HSet sings) (Build_HSet nat -> HProp)
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)
sings:= {p : nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}: Type

Injection (Build_HSet sings) (Build_HSet nat -> HProp)
apply H2.
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)
sings:= {p : nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}: Type
H: InjectsInto (Build_HSet sings) (Build_HSet nat)

InjectsInto (Build_HSet nat -> HProp) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)
sings:= {p : nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}: Type
H: InjectsInto (Build_HSet sings) (Build_HSet nat)

Empty
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)
sings:= {p : nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}: Type
H: InjectsInto (Build_HSet sings) (Build_HSet nat)

Injection (Build_HSet sings) (Build_HSet nat) -> Empty
apply H3.
PR: PropResizing
UA: Univalence
gch: GCH
P: HProp
H1: Injection (Build_HSet nat) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
H2: Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat -> HProp)
H3: ~ Injection {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P} (Build_HSet nat)
sings:= {p : nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}: Type
H: InjectsInto (Build_HSet nat -> HProp) (Build_HSet sings)

InjectsInto (Build_HSet nat -> HProp) {p : Build_HSet nat -> HProp & sing (Build_HSet nat) p \/ P + ~ P}
apply H. Qed.