Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
From HoTT Require Import Universes.Smallness.From HoTT Require Import Spaces.Nat.Core Spaces.Card.LocalOpen Scope type.LocalOpen 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. *)DefinitionGCH :=
forallXY : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp, i q = n -> ~ q n)): X -> HProp
Empty
PR: PropResizing FE: Funext X: Type i: (X -> HProp) -> X HI: IsInjective i p:= funn : X =>
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp, i q = n -> ~ q n)): X -> HProp Hp: p (i p) <-> ~ p (i p)
Empty
apply Hp; apply Hp; intros H; byapply Hp.
PR: PropResizing FE: Funext X: Type i: (X -> HProp) -> X HI: IsInjective i p:= funn : X =>
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp, i q = n -> ~ q n)): X -> HProp
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp, i q = n -> ~ q n)): X -> HProp
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp, i q = n -> ~ q n)): X -> HProp
~ p (i p) ->
Build_HProp
(smalltype
(forallq : X -> HProp, i q = i p -> ~ q (i p)))
PR: PropResizing FE: Funext X: Type i: (X -> HProp) -> X HI: IsInjective i p:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp, i q = n -> ~ q n)): X -> HProp
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp, i q = n -> ~ q n)): X -> HProp H: Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp, i q = n -> ~ q n)): X -> HProp H: forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp, i q = n -> ~ q n)): X -> HProp H: forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp, i q = n -> ~ q n)): X -> HProp
~ p (i p) ->
Build_HProp
(smalltype
(forallq : X -> HProp, i q = i p -> ~ q (i p)))
PR: PropResizing FE: Funext X: Type i: (X -> HProp) -> X HI: IsInjective i p:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp, i q = n -> ~ q n)): X -> HProp H: ~ p (i p)
Build_HProp
(smalltype
(forallq : X -> HProp, i q = i p -> ~ q (i p)))
PR: PropResizing FE: Funext X: Type i: (X -> HProp) -> X HI: IsInjective i p:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp, i q = n -> ~ q n)): X -> HProp H: ~ p (i p)
forallq : X -> HProp, i q = i p -> ~ q (i p)
PR: PropResizing FE: Funext X: Type i: (X -> HProp) -> X HI: IsInjective i p:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp, i q = n -> ~ q n)): X -> HProp H: ~ p (i p)
~ p (i p)
exact H.Qed.(* The concluding disjunction of GCH is exclusive 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)
forallxy : 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)
byapply 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)
byapply 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 *)SectionLEM.VariableX : HSet.VariableP : HProp.Context {PR : PropResizing}.Context {FE : Funext}.Definitionhpaths (xy : X) :=
Build_HProp (paths x y).Definitionsing (p : X -> HProp) :=
existsx, p = hpaths x.Letsings :=
{ 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:= funn : X =>
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : 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; byapply 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:= funn : X =>
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp,
i q = hpaths n -> ~ q n)): X -> HProp n: X HN: i p = hpaths n
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp,
i q = hpaths n -> ~ q n)): X -> HProp n: X HN: i p = hpaths n
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp,
i q = hpaths n -> ~ q n)): X -> HProp n: X HN: i p = hpaths n
~ p n ->
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp,
i q = hpaths n -> ~ q n)): X -> HProp n: X HN: i p = hpaths n
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp,
i q = hpaths n -> ~ q n)): X -> HProp n: X HN: i p = hpaths n H: Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp,
i q = hpaths n -> ~ q n)): X -> HProp n: X HN: i p = hpaths n H: forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp,
i q = hpaths n -> ~ q n)): X -> HProp n: X HN: i p = hpaths n
~ p n ->
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp,
i q = hpaths n -> ~ q n)): X -> HProp n: X HN: i p = hpaths n H: ~ p n
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : X -> HProp,
i q = hpaths n -> ~ q n)): X -> HProp n: X HN: i p = hpaths n H: ~ p n
forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : 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:= funn : X =>
Build_HProp
(smalltype
(forallq : 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
byapply 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 (funx : 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 (funx : 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)
byright.
X: HSet P: HProp PR: PropResizing FE: Funext sings:= {p : X -> HProp & sing p \/ P + ~ P}: Type HP: 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, 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
byrewrite 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
byapply 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
byleft.
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
byeapply (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 (funp : 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 (funp : 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
byapply 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)|byapply tr].Qed.EndLEM.(* We can instantiate the previous lemma with nat to obtain GCH -> LEM. *)
PR: PropResizing UA: Univalence
GCH -> forallP : HProp, P \/ ~ P
PR: PropResizing UA: Univalence
GCH -> forallP : 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