Built with Alectryon. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
From HoTT Require Import TruncType abstract_algebra.From HoTT Require Import TruncType abstract_algebra.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:= {p0 : X -> HProp & sing p0 \/ 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
{p0 : X -> HProp & ~ sing (i p0)}
X: HSet P: HProp PR: PropResizing FE: Funext sings:= {p0 : X -> HProp & sing p0 \/ 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:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type i: (X -> HProp) -> X -> HProp HI: IsInjective i p:= funn0 : X =>
Build_HProp (smalltype (forallq : X -> HProp, i q = hpaths n0 -> ~ q n0)): X -> HProp n: X HN: i p = hpaths n
Empty
X: HSet P: HProp PR: PropResizing FE: Funext sings:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type i: (X -> HProp) -> X -> HProp HI: IsInjective i p:= funn0 : X =>
Build_HProp (smalltype (forallq : X -> HProp, i q = hpaths n0 -> ~ q n0)): X -> HProp n: X HN: i p = hpaths n Hp: p n <-> ~ p n
Empty
X: HSet P: HProp PR: PropResizing FE: Funext sings:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type i: (X -> HProp) -> X -> HProp HI: IsInjective i p:= funn0 : X =>
Build_HProp (smalltype (forallq : X -> HProp, i q = hpaths n0 -> ~ q n0)): X -> HProp n: X HN: i p = hpaths n
p n <-> ~ p n
X: HSet P: HProp PR: PropResizing FE: Funext sings:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type i: (X -> HProp) -> X -> HProp HI: IsInjective i p:= funn0 : X =>
Build_HProp (smalltype (forallq : X -> HProp, i q = hpaths n0 -> ~ q n0)): 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:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type i: (X -> HProp) -> X -> HProp HI: IsInjective i p:= funn0 : X =>
Build_HProp (smalltype (forallq : X -> HProp, i q = hpaths n0 -> ~ q n0)): X -> HProp n: X HN: i p = hpaths n
p n <-> ~ p n
X: HSet P: HProp PR: PropResizing FE: Funext sings:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type i: (X -> HProp) -> X -> HProp HI: IsInjective i p:= funn0 : X =>
Build_HProp (smalltype (forallq : X -> HProp, i q = hpaths n0 -> ~ q n0)): 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:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type i: (X -> HProp) -> X -> HProp HI: IsInjective i p:= funn0 : X =>
Build_HProp (smalltype (forallq : X -> HProp, i q = hpaths n0 -> ~ q n0)): 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:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type i: (X -> HProp) -> X -> HProp HI: IsInjective i p:= funn0 : X =>
Build_HProp (smalltype (forallq : X -> HProp, i q = hpaths n0 -> ~ q n0)): 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:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type i: (X -> HProp) -> X -> HProp HI: IsInjective i p:= funn0 : X =>
Build_HProp (smalltype (forallq : X -> HProp, i q = hpaths n0 -> ~ q n0)): 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:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type i: (X -> HProp) -> X -> HProp HI: IsInjective i p:= funn0 : X =>
Build_HProp (smalltype (forallq : X -> HProp, i q = hpaths n0 -> ~ q n0)): 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:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type i: (X -> HProp) -> X -> HProp HI: IsInjective i p:= funn0 : X =>
Build_HProp (smalltype (forallq : X -> HProp, i q = hpaths n0 -> ~ q n0)): 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:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type i: (X -> HProp) -> X -> HProp HI: IsInjective i p:= funn0 : X =>
Build_HProp (smalltype (forallq : X -> HProp, i q = hpaths n0 -> ~ q n0)): 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:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type i: (X -> HProp) -> X -> HProp HI: IsInjective i p:= funn0 : X =>
Build_HProp (smalltype (forallq : X -> HProp, i q = hpaths n0 -> ~ q n0)): 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:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type i: (X -> HProp) -> X -> HProp HI: IsInjective i p:= funn0 : X =>
Build_HProp (smalltype (forallq : X -> HProp, i q = hpaths n0 -> ~ q n0)): 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:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type i: (X -> HProp) -> X -> HProp HI: IsInjective i p:= funn0 : X =>
Build_HProp (smalltype (forallq0 : X -> HProp, i q0 = hpaths n0 -> ~ q0 n0)): 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:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type i: (X -> HProp) -> X -> HProp HI: IsInjective i p:= funn0 : X =>
Build_HProp (smalltype (forallq0 : X -> HProp, i q0 = hpaths n0 -> ~ q0 n0)): 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:= {p0 : X -> HProp & sing p0 \/ 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:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type HP: P + ~ P p: X -> HProp
sings
X: HSet P: HProp PR: PropResizing FE: Funext sings:= {p0 : X -> HProp & sing p0 \/ P + ~ P}: Type HP: P + ~ P p: X -> HProp
sing p \/ P + ~ P
X: HSet P: HProp PR: PropResizing FE: Funext sings:= {p0 : X -> HProp & sing p0 \/ 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:= {p0 : X -> HProp & sing p0 \/ 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:= {p0 : X -> HProp & sing p0 \/ 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:= {p0 : X -> HProp & sing p0 \/ 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:= {p0 : X -> HProp & sing p0 \/ 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