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.From HoTT Require Import Equiv.BiInv.From HoTT Require Import HIT.unique_choice.From HoTT.Sets Require Import Ordinals Hartogs Powers GCH AC.Open Scope type.Close Scope trunc_scope.(* The proof of Sierpinski's results that GCH implies AC given in this file consists of two ingredients: 1. Adding powers of infinite sets does not increase the cardinality (path_infinite_power). 2. A variant of Cantor's theorem saying that P(X) <= (X + Y) implies P(X) <= Y for large X (Cantor_injects_injects). Those are used to obtain that cardinality-controlled functions are well-behaved in the presence of GCH (Sierpinski), from which we obtain by instantiation with the Hartogs number that every set embeds into an ordinal, which is enough to conclude GCH -> AC (GCH_AC) since the well-ordering theorem implies AC (WO_AC). *)(** * Constructive equivalences *)(* For the first ingredient, we establish a bunch of paths and conclude the desired result by equational reasoning. *)SectionPreparation.Context {UA : Univalence}.
UA: Univalence X, Y, Z: Type
(X -> Z) * (Y -> Z) = (X + Y -> Z)
UA: Univalence X, Y, Z: Type
(X -> Z) * (Y -> Z) = (X + Y -> Z)
UA: Univalence X, Y, Z: Type
(X -> Z) * (Y -> Z) <~> (X + Y -> Z)
apply equiv_sum_distributive.Qed.
UA: Univalence X, Y, Z: Type
X + (Y + Z) = X + Y + Z
UA: Univalence X, Y, Z: Type
X + (Y + Z) = X + Y + Z
UA: Univalence X, Y, Z: Type
X + Y + Z = X + (Y + Z)
UA: Univalence X, Y, Z: Type
X + Y + Z <~> X + (Y + Z)
apply equiv_sum_assoc.Qed.
UA: Univalence X: Type
X + X = Bool * X
UA: Univalence X: Type
X + X = Bool * X
UA: Univalence X: Type
X + X <~> Bool * X
UA: Univalence X: Type
X + X -> Bool * X
UA: Univalence X: Type
Bool * X -> X + X
UA: Univalence X: Type
?f o ?g == idmap
UA: Univalence X: Type
?g o ?f == idmap
UA: Univalence X: Type
X + X -> Bool * X
exact (funx => match x with inl x => (true, x) | inr x => (false, x) end).
UA: Univalence X: Type
Bool * X -> X + X
exact (funx => match x with (true, x) => inl x | (false, x) => inr x end).
UA: Univalence X: Type
(funx : X + X =>
match x with
| inl x0 => (true, x0)
| inr x0 => (false, x0)
end)
o (funx : Bool * X =>
letx0 := x inletfst := fst x0 inletx1 := snd x0 inif fst then inl x1 else inr x1) ==
idmap
intros [[]]; reflexivity.
UA: Univalence X: Type
(funx : Bool * X =>
letx0 := x inletfst := fst x0 inletx1 := snd x0 inif fst then inl x1 else inr x1)
o (funx : X + X =>
match x with
| inl x0 => (true, x0)
| inr x0 => (false, x0)
end) == idmap
intros []; reflexivity.Qed.
UA: Univalence
Unit + nat = nat
UA: Univalence
Unit + nat = nat
UA: Univalence
Unit + nat <~> nat
UA: Univalence
Unit + nat -> nat
UA: Univalence
nat -> Unit + nat
UA: Univalence
?f o ?g == idmap
UA: Univalence
?g o ?f == idmap
UA: Univalence
Unit + nat -> nat
exact (funx => match x with inl _ => O | inr n => S n end).
UA: Univalence
nat -> Unit + nat
exact (funn => match n with O => inl tt | S n => inr n end).
UA: Univalence
(funx : Unit + nat =>
match x with
| inl _ => 0%nat
| inr n => n.+1%nat
end)
o (funn : nat =>
match n with
| 0%nat => inl tt
| n0.+1%nat => inr n0
end) == idmap
byintros [].
UA: Univalence
(funn : nat =>
match n with
| 0%nat => inl tt
| n0.+1%nat => inr n0
end)
o (funx : Unit + nat =>
match x with
| inl _ => 0%nat
| inr n => n.+1%nat
end) == idmap
UA: Univalence EM: ExcludedMiddle X: Type p: X -> HProp
{x : X & p x} + {x : X & ~ p x} -> X
intros [[x _]|[x _]]; exact x.
UA: Univalence EM: ExcludedMiddle X: Type p: X -> HProp
(funx : X =>
lets := LEM (p x) (trunctype_istrunc (p x)) inmatch s with
| inl t => (funH : p x => inl (x; H)) t
| inr n => (funH : ~ p x => inr (x; H)) n
end)
o (funX0 : {x : X & p x} + {x : X & ~ p x} =>
match X0 with
| inl s =>
(funs0 : {x : X & p x} =>
(fun (x : X) (_ : p x) => x) s0.1 s0.2) s
| inr s =>
(funs0 : {x : X & ~ p x} =>
(fun (x : X) (_ : ~ p x) => x) s0.1 s0.2) s
end) == idmap
UA: Univalence EM: ExcludedMiddle X: Type p: X -> HProp
(funx : {x : X & p x} + {x : X & ~ p x} =>
match
LEM
(p match x with
| inl s => s.1
| inr s => s.1end)
(trunctype_istrunc
(p
match x with
| inl s => s.1
| inr s => s.1end))
with
| inl t =>
inl
(match x with
| inl s => s.1
| inr s => s.1end; t)
| inr n =>
inr
(match x with
| inl s => s.1
| inr s => s.1end; n)
end) == idmap
UA: Univalence EM: ExcludedMiddle X: Type p: X -> HProp x: X Hx, H: p x
inl (x; H) = inl (x; Hx)
UA: Univalence EM: ExcludedMiddle X: Type p: X -> HProp x: X Hx, H: ~ p x
inr (x; H) = inr (x; Hx)
UA: Univalence EM: ExcludedMiddle X: Type p: X -> HProp x: X Hx, H: p x
inl (x; H) = inl (x; Hx)
UA: Univalence EM: ExcludedMiddle X: Type p: X -> HProp x: X Hx, H: p x
H = Hx
apply path_ishprop.
UA: Univalence EM: ExcludedMiddle X: Type p: X -> HProp x: X Hx, H: ~ p x
inr (x; H) = inr (x; Hx)
UA: Univalence EM: ExcludedMiddle X: Type p: X -> HProp x: X Hx, H: ~ p x
H = Hx
UA: Univalence EM: ExcludedMiddle X: Type p: X -> HProp x: X Hx, H: ~ p x
H == Hx
byintros HP.
UA: Univalence EM: ExcludedMiddle X: Type p: X -> HProp
(funX0 : {x : X & p x} + {x : X & ~ p x} =>
match X0 with
| inl s =>
(funs0 : {x : X & p x} =>
(fun (x : X) (_ : p x) => x) s0.1 s0.2) s
| inr s =>
(funs0 : {x : X & ~ p x} =>
(fun (x : X) (_ : ~ p x) => x) s0.1 s0.2) s
end)
o (funx : X =>
lets := LEM (p x) (trunctype_istrunc (p x)) inmatch s with
| inl t => (funH : p x => inl (x; H)) t
| inr n => (funH : ~ p x => inr (x; H)) n
end) == idmap
UA: Univalence EM: ExcludedMiddle X: Type p: X -> HProp
(funx : X =>
matchmatch LEM (p x) (trunctype_istrunc (p x)) with
| inl t => inl (x; t)
| inr n => inr (x; n)
endwith
| inl s => s.1
| inr s => s.1end) == idmap
UA: Univalence EM: ExcludedMiddle X: Type p: X -> HProp x: X
matchmatch LEM (p x) (trunctype_istrunc (p x)) with
| inl t => inl (x; t)
| inr n => inr (x; n)
endwith
| inl s => s.1
| inr s => s.1end = x
bydestruct LEM.Qed.Definitionran {XY : Type} (f : X -> Y) :=
funy => hexists (funx => f x = y).
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y
IsInjective f -> {y : Y & ran f y} = X
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y
IsInjective f -> {y : Y & ran f y} = X
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f
{y : Y & ran f y} = X
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f
{y : Y & ran f y} <~> X
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f
{y : Y & ran f y} -> X
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f
X -> {y : Y & ran f y}
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f
?f o ?g == idmap
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f
?g o ?f == idmap
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f
{y : Y & ran f y} -> X
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f y: Y H: ran f y
X
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f y: Y H: ran f y
hunique (funx : X => f x = y)
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f y: Y H: ran f y
atmost1P (funx : X => f x = y)
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f y: Y H: ran f y x, x': X
f x = y -> f x' = y -> x = x'
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f y: Y H: ran f y x, x': X
f x = y -> f x' = y -> x = x'
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f y: Y H: ran f y x, x': X Hy: f x = y Hy': f x' = y
x = x'
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f y: Y H: ran f y x, x': X Hy: f x = f x' Hy': f x' = y
x = x'
byapply Hf.
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f
X -> {y : Y & ran f y}
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f x: X
{y : Y & ran f y}
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f x: X
ran f (f x)
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f x: X
{x0 : X & f x0 = f x}
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f x: X
f x = f x
reflexivity.
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f
(funX0 : {y : Y & ran f y} =>
(fun (y : Y) (H : ran f y) =>
lets :=
iota (funx : X => f x = y)
(funx : X => istrunc_paths Y (-1) (f x) y)
(H,
(funxx' : X =>
(fun (Hy : f x = y) (Hy' : f x' = y) =>
letHy0 :=
internal_paths_rew_r
(funy0 : Y => f x = y0) Hy Hy' in
Hf x x' Hy0)
:
f x = y -> f x' = y -> x = x')
:
atmost1P (funx : X => f x = y)) in
(fun (x : X) (_ : f x = y) => x) s.1 s.2) X0.1 X0.2)
o (funx : X => (f x; tr (x; 1%path))) == idmap
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f
(funx : X =>
(iota (funx0 : X => f x0 = f x)
(funx0 : X => istrunc_paths Y (-1) (f x0) (f x))
(tr (x; 1%path),
fun (x0x' : X) (Hy : f x0 = f x)
(Hy' : f x' = f x) =>
Hf x0 x'
(internal_paths_rew_r (funy : Y => f x0 = y) Hy
Hy'))).1) == idmap
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f x: X
(iota (funx0 : X => f x0 = f x)
(funx0 : X => istrunc_paths Y (-1) (f x0) (f x))
(tr (x; 1%path),
fun (x0x' : X) (Hy : f x0 = f x)
(Hy' : f x' = f x) =>
Hf x0 x'
(internal_paths_rew_r (funy : Y => f x0 = y) Hy
Hy'))).1 = x
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f x, x': X H: f x' = f x
x' = x
byapply Hf.
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f
(funx : X => (f x; tr (x; 1%path)))
o (funX0 : {y : Y & ran f y} =>
(fun (y : Y) (H : ran f y) =>
lets :=
iota (funx : X => f x = y)
(funx : X => istrunc_paths Y (-1) (f x) y)
(H,
(funxx' : X =>
(fun (Hy : f x = y) (Hy' : f x' = y) =>
letHy0 :=
internal_paths_rew_r
(funy0 : Y => f x = y0) Hy Hy' in
Hf x x' Hy0)
:
f x = y -> f x' = y -> x = x')
:
atmost1P (funx : X => f x = y)) in
(fun (x : X) (_ : f x = y) => x) s.1 s.2) X0.1
X0.2) == idmap
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f
(funx : {y : Y & Trunc (-1) {x : X & f x = y}} =>
(f
(iota (funx0 : X => f x0 = x.1)
(funx0 : X => istrunc_paths Y (-1) (f x0) x.1)
(x.2,
fun (x0x' : X) (Hy : f x0 = x.1)
(Hy' : f x' = x.1) =>
Hf x0 x'
(internal_paths_rew_r (funy : Y => f x0 = y)
Hy Hy'))).1;
tr
((iota (funx0 : X => f x0 = x.1)
(funx0 : X => istrunc_paths Y (-1) (f x0) x.1)
(x.2,
fun (x0x' : X) (Hy : f x0 = x.1)
(Hy' : f x' = x.1) =>
Hf x0 x'
(internal_paths_rew_r (funy : Y => f x0 = y)
Hy Hy'))).1; 1%path))) == idmap
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f y: Y x: Trunc (-1) {x : X & f x = y}
(f
(iota (funx : X => f x = y)
(funx : X => istrunc_paths Y (-1) (f x) y)
(x,
fun (xx' : X) (Hy : f x = y) (Hy' : f x' = y)
=>
Hf x x'
(internal_paths_rew_r (funy : Y => f x = y)
Hy Hy'))).1;
tr
((iota (funx : X => f x = y)
(funx : X => istrunc_paths Y (-1) (f x) y)
(x,
fun (xx' : X) (Hy : f x = y) (Hy' : f x' = y)
=>
Hf x x'
(internal_paths_rew_r (funy : Y => f x = y)
Hy Hy'))).1; 1%path)) = (y; x)
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f y: Y x: Trunc (-1) {x : X & f x = y}
(f
(iota (funx : X => f x = y)
(funx : X => istrunc_paths Y (-1) (f x) y)
(x,
fun (xx' : X) (Hy : f x = y) (Hy' : f x' = y)
=>
Hf x x'
(internal_paths_rew_r (funy : Y => f x = y)
Hy Hy'))).1;
tr
((iota (funx : X => f x = y)
(funx : X => istrunc_paths Y (-1) (f x) y)
(x,
fun (xx' : X) (Hy : f x = y) (Hy' : f x' = y)
=>
Hf x x'
(internal_paths_rew_r (funy : Y => f x = y)
Hy Hy'))).1; 1%path)).1 = (y; x).1
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f y: Y x: Trunc (-1) {x : X & f x = y}
f
(iota (funx : X => f x = y)
(funx : X => istrunc_paths Y (-1) (f x) y)
(x,
fun (xx' : X) (Hy : f x = y) (Hy' : f x' = y) =>
Hf x x'
(internal_paths_rew_r (funy : Y => f x = y) Hy
Hy'))).1 = y
UA: Univalence EM: ExcludedMiddle X: Type Y: HSet f: X -> Y Hf: IsInjective f y: Y x: Trunc (-1) {x : X & f x = y} x': X Hx: f x' = y
f x' = y
exact Hx.Qed.(** * Equivalences on infinite sets *)
UA: Univalence EM: ExcludedMiddle X: HSet
infinite X -> Unit + X = X
UA: Univalence EM: ExcludedMiddle X: HSet
infinite X -> Unit + X = X
UA: Univalence EM: ExcludedMiddle X: HSet f: nat -> X Hf: IsInjective f
Unit + X = X
UA: Univalence EM: ExcludedMiddle X: HSet f: nat -> X Hf: IsInjective f
Unit + ({x : X & ran f x} + {x : X & ~ ran f x}) =
{x : X & ran f x} + {x : X & ~ ran f x}
UA: Univalence EM: ExcludedMiddle X: HSet f: nat -> X Hf: IsInjective f
Unit + (nat + {x : X & ~ ran f x}) =
nat + {x : X & ~ ran f x}
UA: Univalence EM: ExcludedMiddle X: HSet f: nat -> X Hf: IsInjective f
Unit + nat + {x : X & ~ ran f x} =
nat + {x : X & ~ ran f x}
UA: Univalence EM: ExcludedMiddle X: HSet f: nat -> X Hf: IsInjective f
nat + {x : X & ~ ran f x} = nat + {x : X & ~ ran f x}
UA: Univalence EM: ExcludedMiddle X: HSet H: infinite X
(X -> HProp) + (X -> HProp) = (X -> HProp)
UA: Univalence EM: ExcludedMiddle X: HSet H: infinite X
Bool * (X -> HProp) = (X -> HProp)
UA: Univalence EM: ExcludedMiddle X: HSet H: infinite X
(Unit -> HProp) * (X -> HProp) = (X -> HProp)
UA: Univalence EM: ExcludedMiddle X: HSet H: infinite X
(Unit + X -> HProp) = (X -> HProp)
byrewrite path_infinite_unit.Qed.(** * Variants of Cantors's theorem *)(* For the second ingredient, we give a preliminary version (Cantor_path_inject) to see the idea, as well as a stronger refinement (Cantor_injects_injects) which is then a mere reformulation. *)Context {PR : PropResizing}.
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> Type
{p : X -> Type & forallx : X, f x <> p}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> Type
{p : X -> Type & forallx : X, f x <> p}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> Type
forallx : X, f x <> (funx0 : X => ~ f x0 x0)
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> Type x: X H: f x = (funx : X => ~ f x x)
Empty
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> Type x: X H: f x = (funx : X => ~ f x x) Hx: f x x <-> ~ f x x
Empty
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> Type x: X H: f x = (funx : X => ~ f x x)
f x x <-> ~ f x x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> Type x: X H: f x = (funx : X => ~ f x x) Hx: f x x <-> ~ f x x
Empty
apply Hx; apply Hx; intros H'; byapply Hx.
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> Type x: X H: f x = (funx : X => ~ f x x)
f x x <-> ~ f x x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> Type x: X H: f x = (funx : X => ~ f x x)
(funT : X -> Type => T x <-> ~ f x x) (f x)
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> Type x: X H: f x = (funx : X => ~ f x x)
~ f x x <-> ~ f x x
reflexivity.Qed.
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> HProp
{p : X -> HProp & forallx : X, f x <> p}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> HProp
{p : X -> HProp & forallx : X, f x <> p}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> HProp
forallx : X,
f x <> (funx0 : X => Build_HProp (f x0 x0 -> Empty))
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> HProp x: X H: f x = (funx : X => Build_HProp (f x x -> Empty))
Empty
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> HProp x: X H: f x = (funx : X => Build_HProp (f x x -> Empty)) Hx: f x x <-> ~ f x x
Empty
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> HProp x: X H: f x = (funx : X => Build_HProp (f x x -> Empty))
f x x <-> ~ f x x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> HProp x: X H: f x = (funx : X => Build_HProp (f x x -> Empty)) Hx: f x x <-> ~ f x x
Empty
apply Hx; apply Hx; intros H'; byapply Hx.
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> HProp x: X H: f x = (funx : X => Build_HProp (f x x -> Empty))
f x x <-> ~ f x x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> HProp x: X H: f x = (funx : X => Build_HProp (f x x -> Empty))
(funt : X -> HProp => t x <-> ~ f x x) (f x)
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type f: X -> X -> HProp x: X H: f x = (funx : X => Build_HProp (f x x -> Empty))
Build_HProp (f x x -> Empty) <-> ~ f x x
reflexivity.Qed.
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y, Z: Type f: X -> Y + Z
(forall (x : X) (y : Y), f x <> inl y) ->
forallx : X, {z : Z & inr z = f x}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y, Z: Type f: X -> Y + Z
(forall (x : X) (y : Y), f x <> inl y) ->
forallx : X, {z : Z & inr z = f x}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y, Z: Type f: X -> Y + Z Hf: forall (x : X) (y : Y), f x <> inl y
forallx : X, {z : Z & inr z = f x}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y, Z: Type f: X -> Y + Z Hf: forall (x : X) (y : Y), f x <> inl y H: forall (x : X) (a : Y + Z),
a = f x -> {z : Z & inr z = f x}
forallx : X, {z : Z & inr z = f x}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y, Z: Type f: X -> Y + Z Hf: forall (x : X) (y : Y), f x <> inl y
forall (x : X) (a : Y + Z),
a = f x -> {z : Z & inr z = f x}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y, Z: Type f: X -> Y + Z Hf: forall (x : X) (y : Y), f x <> inl y H: forall (x : X) (a : Y + Z),
a = f x -> {z : Z & inr z = f x}
forallx : X, {z : Z & inr z = f x}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y, Z: Type f: X -> Y + Z Hf: forall (x : X) (y : Y), f x <> inl y H: forall (x : X) (a : Y + Z),
a = f x -> {z : Z & inr z = f x} x: X
{z : Z & inr z = f x}
byapply (H x (f x)).
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y, Z: Type f: X -> Y + Z Hf: forall (x : X) (y : Y), f x <> inl y
forall (x : X) (a : Y + Z),
a = f x -> {z : Z & inr z = f x}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y, Z: Type f: X -> Y + Z Hf: forall (x : X) (y : Y), f x <> inl y x: X a: Y + Z Hxa: a = f x
{z : Z & inr z = f x}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y, Z: Type f: X -> Y + Z x: X Hf: forally : Y, f x <> inl y a: Y + Z Hxa: a = f x
{z : Z & inr z = f x}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y, Z: Type f: X -> Y + Z x: X y: Y Hf: forally0 : Y, inl y <> inl y0 a: Y + Z Hxa: a = inl y
{z : Z & inr z = inl y}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y, Z: Type f: X -> Y + Z x: X z: Z Hf: forally : Y, inr z <> inl y a: Y + Z Hxa: a = inr z
{z0 : Z & inr z0 = inr z}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y, Z: Type f: X -> Y + Z x: X y: Y Hf: forally0 : Y, inl y <> inl y0 a: Y + Z Hxa: a = inl y
{z : Z & inr z = inl y}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y, Z: Type f: X -> Y + Z x: X y: Y Hf: forally0 : Y, inl y <> inl y0 a: Y + Z Hxa: a = inl y
Empty
byapply (Hf y).
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y, Z: Type f: X -> Y + Z x: X z: Z Hf: forally : Y, inr z <> inl y a: Y + Z Hxa: a = inr z
{z0 : Z & inr z0 = inr z}
byexistsz.Qed.
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type
(X -> HProp) = X + Y ->
X + X = X -> Injection (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type
(X -> HProp) = X + Y ->
X + X = X -> Injection (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X
Injection (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X
X + Y = (X -> HProp) * (X -> HProp)
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X H: X + Y = (X -> HProp) * (X -> HProp)
Injection (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X
X + Y = (X -> HProp) * (X -> HProp)
byrewrite <- H1, path_sum_prod, H2.
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X H: X + Y = (X -> HProp) * (X -> HProp)
Injection (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap
Injection (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp
Injection (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p
Injection (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y
Injection (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y
forall (q : X -> HProp) (x : X), g' q <> inl x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), g' q <> inl x
Injection (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y
forall (q : X -> HProp) (x : X), g' q <> inl x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y q: X -> HProp x: X H: g' q = inl x
Empty
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y q: X -> HProp x: X H: g' q = inl x
f' x = p
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y q: X -> HProp x: X H: g' q = inl x
fst (f (inl x)) = p
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y q: X -> HProp x: X H: g' q = inl x
fst (f (g' q)) = p
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y q: X -> HProp x: X H: g' q = inl x
fst (f (g (p, q))) = p
byrewrite Hfg.
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), g' q <> inl x
Injection (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), g' q <> inl x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), g' q <> inl x q, q': X -> HProp H: (clean_sum g' H' q).1 = (clean_sum g' H' q').1
q = q'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), g' q <> inl x q, q': X -> HProp H: (clean_sum g' H' q).1 = (clean_sum g' H' q').1
g' q = g' q'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), g' q <> inl x q, q': X -> HProp H: (clean_sum g' H' q).1 = (clean_sum g' H' q').1 Hqq': g' q = g' q'
q = q'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), g' q <> inl x q, q': X -> HProp H: (clean_sum g' H' q).1 = (clean_sum g' H' q').1
g' q = g' q'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), g' q <> inl x q, q': X -> HProp z: Y H: (z; 1%path).1 = (clean_sum g' H' q').1
inr z = g' q'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), g' q <> inl x q, q': X -> HProp z, z': Y H: (z; 1%path).1 = (z'; 1%path).1
inr z = inr z'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), g' q <> inl x q, q': X -> HProp z, z': Y H: z = z'
inr z = inr z'
byrewrite H.
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), g' q <> inl x q, q': X -> HProp H: (clean_sum g' H' q).1 = (clean_sum g' H' q').1 Hqq': g' q = g' q'
q = q'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), g' q <> inl x q, q': X -> HProp H: (clean_sum g' H' q).1 = (clean_sum g' H' q').1 Hqq': g (p, q) = g (p, q')
q = q'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), g' q <> inl x q, q': X -> HProp H: (clean_sum g' H' q).1 = (clean_sum g' H' q').1 Hqq': g (p, q) = g (p, q')
snd (p, q) = snd (p, q')
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type H1: (X -> HProp) = X + Y H2: X + X = X f: X + Y -> (X -> HProp) * (X -> HProp) g: (X -> HProp) * (X -> HProp) -> X + Y Hfg: (funx : (X -> HProp) * (X -> HProp) => f (g x)) == idmap Hgf: (funx : X + Y => g (f x)) == idmap f':= funx : X => fst (f (inl x)): X -> X -> HProp p: X -> HProp Hp: forallx : X, f' x <> p g':= funq : X -> HProp => g (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), g' q <> inl x q, q': X -> HProp H: (clean_sum g' H' q).1 = (clean_sum g' H' q').1 Hqq': g (p, q) = g (p, q')
snd (f (g (p, q))) = snd (f (g (p, q')))
byrewrite Hqq'.Qed.(* Version just requiring propositional injections *)
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp
(forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p')) ->
{p : X -> HProp & forallx : X, ~ R x p}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp
(forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p')) ->
{p : X -> HProp & forallx : X, ~ R x p}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p')
{p : X -> HProp & forallx : X, ~ R x p}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp
{p : X -> HProp & forallx : X, ~ R x p}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp
forallx : X, ~ R x pc
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp x: X H: R x pc
Empty
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp x: X H: R x pc Hpc: pc x <-> ~ pc x
Empty
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp x: X H: R x pc
pc x <-> ~ pc x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp x: X H: R x pc Hpc: pc x <-> ~ pc x
Empty
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp x: X H: R x pc
pc x -> ~ pc x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp x: X H: R x pc
~ pc x -> pc x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp x: X H: R x pc Hpc: pc x <-> ~ pc x
Empty
apply Hpc; apply Hpc; intros H'; byapply Hpc.
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp x: X H: R x pc
pc x -> ~ pc x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp x: X H: R x pc
~ pc x -> pc x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp x: X H: R x pc
pc x -> ~ pc x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp x: X H: R x pc Hx: pc x
~ pc x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp x: X H: R x pc Hx: forallp : X -> HProp, R x p -> ~ p x
~ pc x
byapply Hx.
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp x: X H: R x pc
~ pc x -> pc x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp x: X H: R x pc Hx: ~ pc x
pc x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp x: X H: R x pc Hx: ~ pc x
forallp : X -> HProp, R x p -> ~ p x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp x: X H: R x pc Hx: ~ pc x p: X -> HProp Hp: R x p
~ p x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X: Type R: X -> (X -> HProp) -> HProp HR: forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p') pc:= funx : X =>
Build_HProp
(smalltype
(forallp : X -> HProp, R x p -> ~ p x)): X -> HProp x: X H: R x pc Hx: ~ pc x p: X -> HProp Hp: R x p
p = pc -> ~ p x
byintros ->.Qed.
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type
InjectsInto X Y ->
InjectsInto (X -> HProp) (Y -> HProp)
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type
InjectsInto X Y ->
InjectsInto (X -> HProp) (Y -> HProp)
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y
InjectsInto (X -> HProp) (Y -> HProp)
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y
Injection X Y -> InjectsInto (X -> HProp) (Y -> HProp)
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f
InjectsInto (X -> HProp) (Y -> HProp)
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f
Injection (X -> HProp) (Y -> HProp)
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f
IsInjective
(fun (p : X -> HProp) (y : Y) =>
hexists (funx : X => p x * (y = f x)))
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x)))
p = q
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x)))
p == q
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X
p x = q x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X
p x <-> q x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: p x
q x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: q x
p x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: p x
q x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: p x
hexists (funx0 : X => p x0 * (f x = f x0))
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: p x Hp: (funy : Y =>
hexists (funx : X => p x * (y = f x))) (f x)
q x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: p x
hexists (funx0 : X => p x0 * (f x = f x0))
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: p x
{x0 : X & p x0 * (f x = f x0)}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: p x
p x * (f x = f x)
split; trivial.
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: p x Hp: (funy : Y =>
hexists (funx : X => p x * (y = f x))) (f x)
q x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: p x Hp: (funy : Y =>
trunctype_type
((funy0 : Y =>
hexists (funx : X => p x * (y0 = f x))) y))
(f x)
q x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: p x Hp: hexists (funx0 : X => q x0 * (f x = f x0))
q x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: p x Hp: hexists (funx0 : X => q x0 * (f x = f x0))
{x0 : X & q x0 * (f x = f x0)} -> q x
byintros [x'[Hq <- % Hf]].
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: q x
p x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: q x
hexists (funx0 : X => q x0 * (f x = f x0))
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: q x Hq: (funy : Y =>
hexists (funx : X => q x * (y = f x))) (f x)
p x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: q x
hexists (funx0 : X => q x0 * (f x = f x0))
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: q x
{x0 : X & q x0 * (f x = f x0)}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: q x
q x * (f x = f x)
split; trivial.
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: q x Hq: (funy : Y =>
hexists (funx : X => q x * (y = f x))) (f x)
p x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: q x Hq: (funy : Y =>
trunctype_type
((funy0 : Y =>
hexists (funx : X => q x * (y0 = f x))) y))
(f x)
p x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: q x Hq: hexists (funx0 : X => p x0 * (f x = f x0))
p x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: Type HF: InjectsInto X Y f: X -> Y Hf: IsInjective f p, q: X -> HProp H: (funy : Y =>
hexists (funx : X => p x * (y = f x))) =
(funy : Y =>
hexists (funx : X => q x * (y = f x))) x: X Hx: q x Hq: hexists (funx0 : X => p x0 * (f x = f x0))
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
InjectsInto (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p')
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p
InjectsInto (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp
forall (x : X) (pp' : X -> HProp),
R x p -> R x p' -> merely (p = p')
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp x: X p, p': X -> HProp H3: R x p H4: R x p'
merely (p = p')
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp x: X p, p': X -> HProp H3: R x p H4: R x p'
{q : X -> HProp & f (p, q) = inl x} -> merely (p = p')
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp x: X p, p': X -> HProp H3: R x p H4: R x p' q: X -> HProp Hq: f (p, q) = inl x
merely (p = p')
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp x: X p, p': X -> HProp H3: R x p H4: R x p' q: X -> HProp Hq: f (p, q) = inl x
{q : X -> HProp & f (p', q) = inl x} ->
merely (p = p')
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp x: X p, p': X -> HProp H3: R x p H4: R x p' q: X -> HProp Hq: f (p, q) = inl x q': X -> HProp Hq': f (p', q') = inl x
merely (p = p')
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp x: X p, p': X -> HProp H3: R x p H4: R x p' q: X -> HProp Hq: f (p, q) = inl x q': X -> HProp Hq': f (p', q') = inl x
p = p'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp x: X p, p': X -> HProp H3: R x p H4: R x p' q: X -> HProp Hq: f (p, q) = inl x q': X -> HProp Hq': f (p', q') = inl x
fst (p, q) = p'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp x: X p, p': X -> HProp H3: R x p H4: R x p' q: X -> HProp Hq: f (p, q) = inl x q': X -> HProp Hq': f (p', q') = inl x
f (p, q) = f (p', q')
byrewrite Hq, Hq'.
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p
InjectsInto (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y
InjectsInto (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y
forall (q : X -> HProp) (x : X), f' q <> inl x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), f' q <> inl x
InjectsInto (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y
forall (q : X -> HProp) (x : X), f' q <> inl x
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y q: X -> HProp x: X H: f' q = inl x
Empty
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y q: X -> HProp x: X H: f' q = inl x
R x p
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y q: X -> HProp x: X H: f' q = inl x
{q : X -> HProp & f (p, q) = inl x}
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y q: X -> HProp x: X H: f' q = inl x
f (p, q) = inl x
exact H.
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), f' q <> inl x
InjectsInto (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), f' q <> inl x
Injection (X -> HProp) Y
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), f' q <> inl x
IsInjective
(funx : X -> HProp => (clean_sum f' H' x).1)
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), f' q <> inl x q, q': X -> HProp H: (clean_sum f' H' q).1 = (clean_sum f' H' q').1
q = q'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), f' q <> inl x q, q': X -> HProp H: (clean_sum f' H' q).1 = (clean_sum f' H' q').1
f' q = f' q'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), f' q <> inl x q, q': X -> HProp H: (clean_sum f' H' q).1 = (clean_sum f' H' q').1 Hqq': f' q = f' q'
q = q'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), f' q <> inl x q, q': X -> HProp H: (clean_sum f' H' q).1 = (clean_sum f' H' q').1
f' q = f' q'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), f' q <> inl x q, q': X -> HProp z: Y H: (z; 1%path).1 = (clean_sum f' H' q').1
inr z = f' q'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), f' q <> inl x q, q': X -> HProp z, z': Y H: (z; 1%path).1 = (z'; 1%path).1
inr z = inr z'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), f' q <> inl x q, q': X -> HProp z, z': Y H: z = z'
inr z = inr z'
byrewrite H.
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), f' q <> inl x q, q': X -> HProp H: (clean_sum f' H' q).1 = (clean_sum f' H' q').1 Hqq': f' q = f' q'
q = q'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), f' q <> inl x q, q': X -> HProp H: (clean_sum f' H' q).1 = (clean_sum f' H' q').1 Hqq': (p, q) = (p, q')
q = q'
UA: Univalence EM: ExcludedMiddle PR: PropResizing X, Y: HSet H1: InjectsInto (X -> HProp) (X + Y) H2: InjectsInto (X + X) X HF: InjectsInto ((X -> HProp) * (X -> HProp)) (X + Y) f: (X -> HProp) * (X -> HProp) -> X + Y Hf: IsInjective f R:= fun (x : X) (p : X -> HProp) =>
hexists (funq : X -> HProp => f (p, q) = inl x): X -> (X -> HProp) -> HProp p: X -> HProp Hp: forallx : X, ~ R x p f':= funq : X -> HProp => f (p, q): (X -> HProp) -> X + Y H': forall (q : X -> HProp) (x : X), f' q <> inl x q, q': X -> HProp H: (clean_sum f' H' q).1 = (clean_sum f' H' q').1 Hqq': (p, q) = (p, q')
snd (p, q) = q'
byrewrite Hqq'.Qed.EndPreparation.(** * Sierpinski's Theorem *)SectionSierpinski.Context {UA : Univalence}.Context {EM : ExcludedMiddle}.Context {PR : PropResizing}.DefinitionpowfixX :=
foralln, (power_iterated X n + power_iterated X n) = (power_iterated X n).VariableHN : HSet -> HSet.HypothesisHN_ninject : forallX, ~ InjectsInto (HN X) X.VariableHN_bound : nat.HypothesisHN_inject : forallX, InjectsInto (HN X) (power_iterated X HN_bound).(* This section then concludes the intermediate result that abstractly, any function [HN] behaving like the Hartogs number is tamed in the presence of GCH. Morally we show that [X <= HN X] for all [X], we just ensure that [X] is large enough by considering P(N + X). *)
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type
InjectsInto X X' ->
InjectsInto Y Y' -> InjectsInto (X + Y) (X' + Y')
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type
InjectsInto X X' ->
InjectsInto Y Y' -> InjectsInto (X + Y) (X' + Y')
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y'
InjectsInto (X + Y) (X' + Y')
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y'
Injection X X' -> InjectsInto (X + Y) (X' + Y')
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f
InjectsInto (X + Y) (X' + Y')
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f
Injection Y Y' -> InjectsInto (X + Y) (X' + Y')
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f g: Y -> Y' Hg: IsInjective g
InjectsInto (X + Y) (X' + Y')
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f g: Y -> Y' Hg: IsInjective g
Injection (X + Y) (X' + Y')
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f g: Y -> Y' Hg: IsInjective g
IsInjective
(funz : X + Y =>
match z with
| inl x => inl (f x)
| inr y => inr (g y)
end)
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f g: Y -> Y' Hg: IsInjective g x, x': X H: inl (f x) = inl (f x')
inl x = inl x'
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f g: Y -> Y' Hg: IsInjective g x: X y': Y H: inl (f x) = inr (g y')
inl x = inr y'
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f g: Y -> Y' Hg: IsInjective g y: Y x': X H: inr (g y) = inl (f x')
inr y = inl x'
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f g: Y -> Y' Hg: IsInjective g y, y': Y H: inr (g y) = inr (g y')
inr y = inr y'
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f g: Y -> Y' Hg: IsInjective g x, x': X H: inl (f x) = inl (f x')
inl x = inl x'
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f g: Y -> Y' Hg: IsInjective g x, x': X H: inl (f x) = inl (f x')
x = x'
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f g: Y -> Y' Hg: IsInjective g x, x': X H: inl (f x) = inl (f x')
f x = f x'
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f g: Y -> Y' Hg: IsInjective g x, x': X H: inl (f x) = inl (f x')
inl (f x) = inl (f x')
exact H.
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f g: Y -> Y' Hg: IsInjective g x: X y': Y H: inl (f x) = inr (g y')
inl x = inr y'
byapply inl_ne_inr in H.
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f g: Y -> Y' Hg: IsInjective g y: Y x': X H: inr (g y) = inl (f x')
inr y = inl x'
byapply inr_ne_inl in H.
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f g: Y -> Y' Hg: IsInjective g y, y': Y H: inr (g y) = inr (g y')
inr y = inr y'
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f g: Y -> Y' Hg: IsInjective g y, y': Y H: inr (g y) = inr (g y')
y = y'
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f g: Y -> Y' Hg: IsInjective g y, y': Y H: inr (g y) = inr (g y')
g y = g y'
UA: Univalence EM: ExcludedMiddle PR: PropResizing HN: HSet -> HSet HN_ninject: forallX : HSet, ~ InjectsInto (HN X) X HN_bound: nat HN_inject: forallX : HSet,
InjectsInto (HN X)
(power_iterated X HN_bound) X, Y, X', Y': Type H1: InjectsInto X X' H2: InjectsInto Y Y' f: X -> X' Hf: IsInjective f g: Y -> Y' Hg: IsInjective g y, y': Y H: inr (g y) = inr (g y')
inr (g y) = inr (g y')
exact H.Qed.(* The main proof is by induction on the cardinality bound for [HN]. As the Hartogs number is bounded by P^3(X), we'd actually just need finitely many instances of GCH. *)