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 ExcludedMiddle canonical_names.From HoTT Require Import ExcludedMiddle canonical_names.From HoTT Require Import HIT.unique_choice.From HoTT Require Import Spaces.Card.From HoTT.Sets Require Import Ordinals.LocalOpen Scope hprop_scope.(** * Set-theoretic formulation of the axiom of choice (AC) *)MonomorphicAxiomChoice : Type0.Existing ClassChoice.DefinitionChoice_type :=
forall (XY : HSet) (R : X -> Y -> HProp), (forallx, hexists (R x)) -> hexists (funf => forallx, R x (f x)).AxiomAC : forall `{Choice}, Choice_type.Instanceis_global_axiom_propresizing : IsGlobalAxiom Choice := {}.(** * The well-ordering theorem implies AC *)
LEM: ExcludedMiddle H: forallX0 : HSet, hexists (funA : Ordinal => InjectsInto X0 A) X, Y: HSet R: X -> Y -> HProp HR: forallx : X, hexists (funx0 : Y => R x x0)
hexists (funf : X -> Y => forallx : X, R x (f x))
LEM: ExcludedMiddle Y: HSet H: hexists (funA : Ordinal => InjectsInto Y A) X: HSet R: X -> Y -> HProp HR: forallx : X, hexists (funx0 : Y => R x x0)
hexists (funf : X -> Y => forallx : X, R x (f x))
LEM: ExcludedMiddle Y: HSet H: hexists (funA : Ordinal => InjectsInto Y A) X: HSet R: X -> Y -> HProp HR: forallx : X, hexists (funx0 : Y => R x x0)
{A : Ordinal & InjectsInto Y A} ->
hexists (funf : X -> Y => forallx : X, R x (f x))
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx : X, hexists (funx0 : Y => R x x0) A: Ordinal HA: InjectsInto Y A
hexists (funf : X -> Y => forallx : X, R x (f x))
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx : X, hexists (funx0 : Y => R x x0) A: Ordinal HA: InjectsInto Y A
Injection Y A -> hexists (funf : X -> Y => forallx : X, R x (f x))
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx : X, hexists (funx0 : Y => R x x0) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f
hexists (funf0 : X -> Y => forallx : X, R x (f0 x))
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx : X, hexists (funx0 : Y => R x x0) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f
{f0 : X -> Y & forallx : X, R x (f0 x)}
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx : X, hexists (funx0 : Y => R x x0) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f
X -> Y
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx : X, hexists (funx0 : Y => R x x0) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f
forallx : X, R x (?f x)
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx : X, hexists (funx0 : Y => R x x0) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f
X -> Y
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X
Y
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X
hexists
(funy : Y =>
merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y')))
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy : Y =>
merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y')))
Y
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X
hexists
(funy : Y =>
merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y')))
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y : Y & ((f y = a0) * R x y)%type})) a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y : Y & (f y = a0) * R x y})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y : Y & (f y = a0) * R x y})) b ->
a < b \/ a = b))%type}
hexists
(funy : Y =>
merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y')))
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y : Y & ((f y = a0) * R x y)%type})) a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y : Y & (f y = a0) * R x y})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y : Y & (f y = a0) * R x y})) b ->
a < b \/ a = b))%type}
merely {a : A & Build_HProp (merely {y : Y & ((f y = a) * R x y)%type})}
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y : Y & ((f y = a0) * R x y)%type})) a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y : Y & (f y = a0) * R x y})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y : Y & (f y = a0) * R x y})) b ->
a < b \/ a = b))%type}
{a : A &
(Build_HProp (merely {y : Y & (f y = a) * R x y}) *
(forallb : A,
Build_HProp (merely {y : Y & (f y = b) * R x y}) -> a < b \/ a = b))%type} ->
hexists
(funy : Y =>
merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y')))
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y : Y & ((f y = a0) * R x y)%type})) a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y : Y & (f y = a0) * R x y})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y : Y & (f y = a0) * R x y})) b ->
a < b \/ a = b))%type}
merely {a : A & Build_HProp (merely {y : Y & ((f y = a) * R x y)%type})}
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y : Y & ((f y = a0) * R x y)%type})) a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y : Y & (f y = a0) * R x y})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y : Y & (f y = a0) * R x y})) b ->
a < b \/ a = b))%type}
{x0 : Y & R x x0} ->
merely {a : A & Build_HProp (merely {y : Y & ((f y = a) * R x y)%type})}
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y0 : Y & ((f y0 = a0) * R x y0)%type}))
a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) b ->
a < b \/ a = b))%type} y: Y Hy: R x y
merely {a : A & Build_HProp (merely {y0 : Y & ((f y0 = a) * R x y0)%type})}
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y0 : Y & ((f y0 = a0) * R x y0)%type}))
a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) b ->
a < b \/ a = b))%type} y: Y Hy: R x y
{a : A & Build_HProp (merely {y0 : Y & ((f y0 = a) * R x y0)%type})}
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y0 : Y & ((f y0 = a0) * R x y0)%type}))
a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) b ->
a < b \/ a = b))%type} y: Y Hy: R x y
Build_HProp (merely {y0 : Y & ((f y0 = f y) * R x y0)%type})
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y0 : Y & ((f y0 = a0) * R x y0)%type}))
a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) b ->
a < b \/ a = b))%type} y: Y Hy: R x y
{y0 : Y & ((f y0 = f y) * R x y0)%type}
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y0 : Y & ((f y0 = a0) * R x y0)%type}))
a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) b ->
a < b \/ a = b))%type} y: Y Hy: R x y
(f y = f y) * R x y
bysplit.
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y : Y & ((f y = a0) * R x y)%type})) a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y : Y & (f y = a0) * R x y})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y : Y & (f y = a0) * R x y})) b ->
a < b \/ a = b))%type}
{a : A &
(Build_HProp (merely {y : Y & (f y = a) * R x y}) *
(forallb : A,
Build_HProp (merely {y : Y & (f y = b) * R x y}) -> a < b \/ a = b))%type} ->
hexists
(funy : Y =>
merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y')))
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a0 : A &
(funa1 : A => Build_HProp (merely {y : Y & ((f y = a1) * R x y)%type})) a0} ->
merely
{a0 : A &
((funa1 : A => Build_HProp (merely {y : Y & (f y = a1) * R x y})) a0 *
(forallb : A,
(funa1 : A => Build_HProp (merely {y : Y & (f y = a1) * R x y})) b ->
a0 < b \/ a0 = b))%type} a: A H1: Build_HProp (merely {y : Y & ((f y = a) * R x y)%type}) H2: forallb : A,
Build_HProp (merely {y : Y & ((f y = b) * R x y)%type}) -> a < b \/ a = b
hexists
(funy : Y =>
merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y')))
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a0 : A &
(funa1 : A => Build_HProp (merely {y : Y & ((f y = a1) * R x y)%type})) a0} ->
merely
{a0 : A &
((funa1 : A => Build_HProp (merely {y : Y & (f y = a1) * R x y})) a0 *
(forallb : A,
(funa1 : A => Build_HProp (merely {y : Y & (f y = a1) * R x y})) b ->
a0 < b \/ a0 = b))%type} a: A H1: Build_HProp (merely {y : Y & ((f y = a) * R x y)%type}) H2: forallb : A,
Build_HProp (merely {y : Y & ((f y = b) * R x y)%type}) -> a < b \/ a = b
{y : Y & ((f y = a) * R x y)%type} ->
hexists
(funy : Y =>
merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y')))
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y0 : Y & ((f y0 = a0) * R x y0)%type}))
a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) b ->
a < b \/ a = b))%type} y: Y H2: forallb : A,
Build_HProp (merely {y0 : Y & ((f y0 = b) * R x y0)%type}) ->
f y < b \/ f y = b H1: Build_HProp (merely {y0 : Y & ((f y0 = f y) * R x y0)%type}) Hy: R x y
hexists
(funy0 : Y =>
merely (R x y0 * (forally' : Y, R x y' -> f y0 < f y' \/ f y0 = f y')))
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y0 : Y & ((f y0 = a0) * R x y0)%type}))
a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) b ->
a < b \/ a = b))%type} y: Y H2: forallb : A,
Build_HProp (merely {y0 : Y & ((f y0 = b) * R x y0)%type}) ->
f y < b \/ f y = b H1: Build_HProp (merely {y0 : Y & ((f y0 = f y) * R x y0)%type}) Hy: R x y
{y0 : Y &
merely (R x y0 * (forally' : Y, R x y' -> f y0 < f y' \/ f y0 = f y'))}
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y0 : Y & ((f y0 = a0) * R x y0)%type}))
a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) b ->
a < b \/ a = b))%type} y: Y H2: forallb : A,
Build_HProp (merely {y0 : Y & ((f y0 = b) * R x y0)%type}) ->
f y < b \/ f y = b H1: Build_HProp (merely {y0 : Y & ((f y0 = f y) * R x y0)%type}) Hy: R x y
merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y'))
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y0 : Y & ((f y0 = a0) * R x y0)%type}))
a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) b ->
a < b \/ a = b))%type} y: Y H2: forallb : A,
Build_HProp (merely {y0 : Y & ((f y0 = b) * R x y0)%type}) ->
f y < b \/ f y = b H1: Build_HProp (merely {y0 : Y & ((f y0 = f y) * R x y0)%type}) Hy: R x y
R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y')
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y0 : Y & ((f y0 = a0) * R x y0)%type}))
a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) b ->
a < b \/ a = b))%type} y: Y H2: forallb : A,
Build_HProp (merely {y0 : Y & ((f y0 = b) * R x y0)%type}) ->
f y < b \/ f y = b H1: Build_HProp (merely {y0 : Y & ((f y0 = f y) * R x y0)%type}) Hy: R x y
forally' : Y, R x y' -> f y < f y' \/ f y = f y'
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y0 : Y & ((f y0 = a0) * R x y0)%type}))
a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) b ->
a < b \/ a = b))%type} y: Y H2: forallb : A,
Build_HProp (merely {y0 : Y & ((f y0 = b) * R x y0)%type}) ->
f y < b \/ f y = b H1: Build_HProp (merely {y0 : Y & ((f y0 = f y) * R x y0)%type}) Hy: R x y y': Y Hy': R x y'
f y < f y' \/ f y = f y'
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y0 : Y & ((f y0 = a0) * R x y0)%type}))
a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) b ->
a < b \/ a = b))%type} y: Y H2: forallb : A,
Build_HProp (merely {y0 : Y & ((f y0 = b) * R x y0)%type}) ->
f y < b \/ f y = b H1: Build_HProp (merely {y0 : Y & ((f y0 = f y) * R x y0)%type}) Hy: R x y y': Y Hy': R x y'
Build_HProp (merely {y0 : Y & ((f y0 = f y') * R x y0)%type})
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y0 : Y & ((f y0 = a0) * R x y0)%type}))
a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) b ->
a < b \/ a = b))%type} y: Y H2: forallb : A,
Build_HProp (merely {y0 : Y & ((f y0 = b) * R x y0)%type}) ->
f y < b \/ f y = b H1: Build_HProp (merely {y0 : Y & ((f y0 = f y) * R x y0)%type}) Hy: R x y y': Y Hy': R x y'
{y0 : Y & ((f y0 = f y') * R x y0)%type}
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HAR: merely
{a : A &
(funa0 : A => Build_HProp (merely {y0 : Y & ((f y0 = a0) * R x y0)%type}))
a} ->
merely
{a : A &
((funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) a *
(forallb : A,
(funa0 : A => Build_HProp (merely {y0 : Y & (f y0 = a0) * R x y0})) b ->
a < b \/ a = b))%type} y: Y H2: forallb : A,
Build_HProp (merely {y0 : Y & ((f y0 = b) * R x y0)%type}) ->
f y < b \/ f y = b H1: Build_HProp (merely {y0 : Y & ((f y0 = f y) * R x y0)%type}) Hy: R x y y': Y Hy': R x y'
(f y' = f y') * R x y'
split; trivial.
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy : Y =>
merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y')))
Y
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy : Y =>
merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y')))
forallx0 : Y, IsHProp (?P x0)
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy : Y =>
merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y')))
hunique ?P
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy : Y =>
merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y')))
forallx0 : Y,
IsHProp
((funy : Y =>
trunctype_type
(merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y'))))
x0)
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy : Y =>
merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y')))
atmost1P
(funy : Y =>
merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y')))
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy : Y =>
merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y')))
atmost1P
(funy : Y =>
merely (R x y * (forally' : Y, R x y' -> f y < f y' \/ f y = f y')))
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy0 : Y =>
merely
(R x y0 * (forally'0 : Y, R x y'0 -> f y0 < f y'0 \/ f y0 = f y'0))) y, y': Y Hy: merely (R x y * (forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0)) Hy': merely (R x y' * (forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0))
y = y'
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy0 : Y =>
merely
(R x y0 * (forally'0 : Y, R x y'0 -> f y0 < f y'0 \/ f y0 = f y'0))) y, y': Y Hy: merely (R x y * (forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0)) Hy': merely (R x y' * (forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0))
R x y * (forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0) -> y = y'
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy0 : Y =>
merely
(R x y0 * (forally'0 : Y, R x y'0 -> f y0 < f y'0 \/ f y0 = f y'0))) y, y': Y Hy: merely (R x y * (forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0)) Hy': merely (R x y' * (forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0)) H1: R x y H2: forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0
y = y'
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy0 : Y =>
merely
(R x y0 * (forally'0 : Y, R x y'0 -> f y0 < f y'0 \/ f y0 = f y'0))) y, y': Y Hy: merely (R x y * (forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0)) Hy': merely (R x y' * (forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0)) H1: R x y H2: forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0
R x y' * (forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0) -> y = y'
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy0 : Y =>
merely
(R x y0 * (forally'0 : Y, R x y'0 -> f y0 < f y'0 \/ f y0 = f y'0))) y, y': Y Hy: merely (R x y * (forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0)) Hy': merely (R x y' * (forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0)) H1: R x y H2: forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0 H3: R x y' H4: forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0
y = y'
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy0 : Y =>
merely
(R x y0 * (forally'0 : Y, R x y'0 -> f y0 < f y'0 \/ f y0 = f y'0))) y, y': Y Hy: merely (R x y * (forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0)) Hy': merely (R x y' * (forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0)) H1: R x y H2: forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0 H3: R x y' H4: forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0
f y = f y'
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy0 : Y =>
merely
(R x y0 * (forally'0 : Y, R x y'0 -> f y0 < f y'0 \/ f y0 = f y'0))) y, y': Y Hy: merely (R x y * (forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0)) Hy': merely (R x y' * (forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0)) H1: R x y H2: forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0 H3: R x y' H4: forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0
(f y < f y') + (f y = f y') -> f y = f y'
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy0 : Y =>
merely
(R x y0 * (forally'0 : Y, R x y'0 -> f y0 < f y'0 \/ f y0 = f y'0))) y, y': Y Hy: merely (R x y * (forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0)) Hy': merely (R x y' * (forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0)) H1: R x y H2: forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0 H3: R x y' H4: forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0 H5: f y < f y'
f y = f y'
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy0 : Y =>
merely
(R x y0 * (forally'0 : Y, R x y'0 -> f y0 < f y'0 \/ f y0 = f y'0))) y, y': Y Hy: merely (R x y * (forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0)) Hy': merely (R x y' * (forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0)) H1: R x y H2: forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0 H3: R x y' H4: forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0 H5: f y < f y'
(f y' < f y) + (f y' = f y) -> f y = f y'
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy0 : Y =>
merely
(R x y0 * (forally'0 : Y, R x y'0 -> f y0 < f y'0 \/ f y0 = f y'0))) y, y': Y Hy: merely (R x y * (forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0)) Hy': merely (R x y' * (forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0)) H1: R x y H2: forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0 H3: R x y' H4: forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0 H5: f y < f y' H6: f y' < f y
f y = f y'
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy0 : Y =>
merely
(R x y0 * (forally'0 : Y, R x y'0 -> f y0 < f y'0 \/ f y0 = f y'0))) y, y': Y Hy: merely (R x y * (forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0)) Hy': merely (R x y' * (forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0)) H1: R x y H2: forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0 H3: R x y' H4: forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0 H5: f y < f y' H6: f y' < f y
Empty
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X HR': hexists
(funy0 : Y =>
merely
(R x y0 * (forally'0 : Y, R x y'0 -> f y0 < f y'0 \/ f y0 = f y'0))) y, y': Y Hy: merely (R x y * (forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0)) Hy': merely (R x y' * (forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0)) H1: R x y H2: forally'0 : Y, R x y'0 -> f y < f y'0 \/ f y = f y'0 H3: R x y' H4: forally'0 : Y, R x y'0 -> f y' < f y'0 \/ f y' = f y'0 H5: f y < f y' H6: f y' < f y
f y < f y
apply (ordinal_transitivity _ (f y')); trivial.
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx : X, hexists (funx0 : Y => R x x0) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f
forallx : X,
R x
((funx0 : X =>
letHR' :=
letHAR :=
ordinal_has_minimal_hsolutions A
(funa : A =>
Build_HProp (merely {y : Y & ((f y = a) * R x0 y)%type}))
in
merely_destruct
(HAR
(merely_destruct (HR x0)
(funX0 : {x1 : Y & R x0 x1} =>
(fun (y : Y) (Hy : R x0 y) => tr (f y; tr (y; (1%path, Hy))))
X0.1 X0.2)))
(funX0 : {a : A &
(Build_HProp (merely {y : Y & (f y = a) * R x0 y}) *
(forallb : A,
Build_HProp (merely {y : Y & (f y = b) * R x0 y}) ->
a < b \/ a = b))%type} =>
(fun (a : A)
(proj2 : Build_HProp (merely {y : Y & ((f y = a) * R x0 y)%type}) *
(forallb : A,
Build_HProp
(merely {y : Y & ((f y = b) * R x0 y)%type}) ->
a < b \/ a = b)) =>
(fun
(H1 : Build_HProp (merely {y : Y & ((f y = a) * R x0 y)%type}))
(H2 : forallb : A,
Build_HProp (merely {y : Y & ((f y = b) * R x0 y)%type}) ->
a < b \/ a = b) =>
merely_destruct H1
(funX1 : {y : Y & ((f y = a) * R x0 y)%type} =>
(fun (y : Y) (proj3 : (f y = a) * R x0 y) =>
(funfst : f y = a =>
internal_paths_rew
(funa0 : A =>
Build_HProp
(merely {y0 : Y & ((f y0 = a0) * R x0 y0)%type}) ->
(forallb : A,
Build_HProp
(merely {y0 : Y & ((f y0 = b) * R x0 y0)%type}) ->
a0 < b \/ a0 = b) ->
R x0 y ->
hexists
(funy0 : Y =>
merely
(R x0 y0 *
(forally' : Y,
R x0 y' -> f y0 < f y' \/ f y0 = f y'))))
(fun
(_ : Build_HProp
(merely {y0 : Y & ((f y0 = f y) * R x0 y0)%type}))
(H3 : forallb : A,
Build_HProp
(merely {y0 : Y & ((f y0 = b) * R x0 y0)%type}) ->
f y < b \/ f y = b)
(Hy : R x0 y) =>
tr
(y;
tr
(Hy,
fun (y' : Y) (Hy' : R x0 y') =>
H3 (f y') (tr (y'; (1%path, Hy'))))))
fst H1 H2)
(fst proj3) (snd proj3))
X1.1 X1.2))
(fst proj2) (snd proj2))
X0.1 X0.2)
inlets :=
iota
(funy : Y =>
merely
(R x0 y * (forally' : Y, R x0 y' -> f y < f y' \/ f y = f y')))
(funx1 : Y =>
istrunc_truncation (-1)
(R x0 x1 * (forally' : Y, R x0 y' -> f x1 < f y' \/ f x1 = f y')))
(HR',
(fun (yy' : Y)
(Hy : merely
(R x0 y *
(forally'0 : Y, R x0 y'0 -> f y < f y'0 \/ f y = f y'0)))
(Hy' : merely
(R x0 y' *
(forally'0 : Y,
R x0 y'0 -> f y' < f y'0 \/ f y' = f y'0))) =>
merely_destruct Hy
(funX0 : R x0 y *
(forally'0 : Y, R x0 y'0 -> f y < f y'0 \/ f y = f y'0) =>
(fun (H1 : R x0 y)
(H2 : forally'0 : Y, R x0 y'0 -> f y < f y'0 \/ f y = f y'0) =>
merely_destruct Hy'
(funX1 : R x0 y' *
(forally'0 : Y,
R x0 y'0 -> f y' < f y'0 \/ f y' = f y'0) =>
(fun (H3 : R x0 y')
(H4 : forally'0 : Y,
R x0 y'0 -> f y' < f y'0 \/ f y' = f y'0) =>
Hf y y'
(merely_destruct (H2 y' H3)
(funX2 : (f y < f y') + (f y = f y') =>
match X2 with
| inl l =>
(funH5 : f y < f y' =>
merely_destruct (H4 y H1)
(funX3 : (f y' < f y) + (f y' = f y) =>
match X3 with
| inl l0 =>
(funH6 : f y' < f y =>
Empty_rec
(irreflexive_ordinal_relation A lt
(ordinal_property A)
(f y)
(ordinal_transitivity
(f y)
(f y')
(f y) H5 H6)))
l0
| inr p =>
(funp0 : f y' = f y =>
internal_paths_rew_r
(funt : A => f y = t) 1%path p0)
p
end))
l
| inr p => idmap p
end)))
(fst X1) (snd X1)))
(fst X0) (snd X0)))
:
atmost1P
(funy : Y =>
merely
(R x0 y * (forally' : Y, R x0 y' -> f y < f y' \/ f y = f y'))))
in
(fun (y : Y)
(_ : (funy0 : Y =>
trunctype_type
(merely
(R x0 y0 *
(forally' : Y, R x0 y' -> f y0 < f y' \/ f y0 = f y'))))
y) =>
y) s.1 s.2) x)
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X
R x
((funx0 : X =>
letHR' :=
letHAR :=
ordinal_has_minimal_hsolutions A
(funa : A =>
Build_HProp (merely {y : Y & ((f y = a) * R x0 y)%type}))
in
merely_destruct
(HAR
(merely_destruct (HR x0)
(funX0 : {x1 : Y & R x0 x1} =>
(fun (y : Y) (Hy : R x0 y) => tr (f y; tr (y; (1%path, Hy))))
X0.1 X0.2)))
(funX0 : {a : A &
(Build_HProp (merely {y : Y & (f y = a) * R x0 y}) *
(forallb : A,
Build_HProp (merely {y : Y & (f y = b) * R x0 y}) ->
a < b \/ a = b))%type} =>
(fun (a : A)
(proj2 : Build_HProp (merely {y : Y & ((f y = a) * R x0 y)%type}) *
(forallb : A,
Build_HProp
(merely {y : Y & ((f y = b) * R x0 y)%type}) ->
a < b \/ a = b)) =>
(fun
(H1 : Build_HProp (merely {y : Y & ((f y = a) * R x0 y)%type}))
(H2 : forallb : A,
Build_HProp (merely {y : Y & ((f y = b) * R x0 y)%type}) ->
a < b \/ a = b) =>
merely_destruct H1
(funX1 : {y : Y & ((f y = a) * R x0 y)%type} =>
(fun (y : Y) (proj3 : (f y = a) * R x0 y) =>
(funfst : f y = a =>
internal_paths_rew
(funa0 : A =>
Build_HProp
(merely {y0 : Y & ((f y0 = a0) * R x0 y0)%type}) ->
(forallb : A,
Build_HProp
(merely {y0 : Y & ((f y0 = b) * R x0 y0)%type}) ->
a0 < b \/ a0 = b) ->
R x0 y ->
hexists
(funy0 : Y =>
merely
(R x0 y0 *
(forally' : Y,
R x0 y' -> f y0 < f y' \/ f y0 = f y'))))
(fun
(_ : Build_HProp
(merely {y0 : Y & ((f y0 = f y) * R x0 y0)%type}))
(H3 : forallb : A,
Build_HProp
(merely {y0 : Y & ((f y0 = b) * R x0 y0)%type}) ->
f y < b \/ f y = b)
(Hy : R x0 y) =>
tr
(y;
tr
(Hy,
fun (y' : Y) (Hy' : R x0 y') =>
H3 (f y') (tr (y'; (1%path, Hy'))))))
fst H1 H2)
(fst proj3) (snd proj3))
X1.1 X1.2))
(fst proj2) (snd proj2))
X0.1 X0.2)
inlets :=
iota
(funy : Y =>
merely
(R x0 y * (forally' : Y, R x0 y' -> f y < f y' \/ f y = f y')))
(funx1 : Y =>
istrunc_truncation (-1)
(R x0 x1 * (forally' : Y, R x0 y' -> f x1 < f y' \/ f x1 = f y')))
(HR',
(fun (yy' : Y)
(Hy : merely
(R x0 y *
(forally'0 : Y, R x0 y'0 -> f y < f y'0 \/ f y = f y'0)))
(Hy' : merely
(R x0 y' *
(forally'0 : Y,
R x0 y'0 -> f y' < f y'0 \/ f y' = f y'0))) =>
merely_destruct Hy
(funX0 : R x0 y *
(forally'0 : Y, R x0 y'0 -> f y < f y'0 \/ f y = f y'0) =>
(fun (H1 : R x0 y)
(H2 : forally'0 : Y, R x0 y'0 -> f y < f y'0 \/ f y = f y'0) =>
merely_destruct Hy'
(funX1 : R x0 y' *
(forally'0 : Y,
R x0 y'0 -> f y' < f y'0 \/ f y' = f y'0) =>
(fun (H3 : R x0 y')
(H4 : forally'0 : Y,
R x0 y'0 -> f y' < f y'0 \/ f y' = f y'0) =>
Hf y y'
(merely_destruct (H2 y' H3)
(funX2 : (f y < f y') + (f y = f y') =>
match X2 with
| inl l =>
(funH5 : f y < f y' =>
merely_destruct (H4 y H1)
(funX3 : (f y' < f y) + (f y' = f y) =>
match X3 with
| inl l0 =>
(funH6 : f y' < f y =>
Empty_rec
(irreflexive_ordinal_relation A lt
(ordinal_property A)
(f y)
(ordinal_transitivity
(f y)
(f y')
(f y) H5 H6)))
l0
| inr p =>
(funp0 : f y' = f y =>
internal_paths_rew_r
(funt : A => f y = t) 1%path p0)
p
end))
l
| inr p => idmap p
end)))
(fst X1) (snd X1)))
(fst X0) (snd X0)))
:
atmost1P
(funy : Y =>
merely
(R x0 y * (forally' : Y, R x0 y' -> f y < f y' \/ f y = f y'))))
in
(fun (y : Y)
(_ : (funy0 : Y =>
trunctype_type
(merely
(R x0 y0 *
(forally' : Y, R x0 y' -> f y0 < f y' \/ f y0 = f y'))))
y) =>
y) s.1 s.2) x)
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X
R x
(iota
(funy : Y =>
Trunc (-1)
(R x y *
(forally' : Y, R x y' -> Trunc (-1) ((f y < f y') + (f y = f y')))))
(funx0 : Y =>
istrunc_truncation (-1)
(R x x0 *
(forally' : Y, R x y' -> Trunc (-1) ((f x0 < f y') + (f x0 = f y')))))
(merely_destruct
(ordinal_has_minimal_hsolutions A
(funa : ordinal_carrier A =>
Build_HProp (Trunc (-1) {y : Y & ((f y = a) * R x y)%type}))
(merely_destruct (HR x)
(funX0 : {x0 : Y & R x x0} =>
tr (f X0.1; tr (X0.1; (1%path, X0.2))))))
(funX0 : {a : ordinal_carrier A &
(Trunc (-1) {y : Y & (f y = a) * R x y} *
(forallb : ordinal_carrier A,
Trunc (-1) {y : Y & (f y = b) * R x y} ->
Trunc (-1) ((a < b) + (a = b))))%type} =>
merely_destruct (fst X0.2)
(funX1 : {y : Y & ((f y = X0.1) * R x y)%type} =>
internal_paths_rew
(funa : ordinal_carrier A =>
Trunc (-1) {y : Y & ((f y = a) * R x y)%type} ->
(forallb : ordinal_carrier A,
Trunc (-1) {y : Y & ((f y = b) * R x y)%type} ->
Trunc (-1) ((a < b) + (a = b))) ->
R x X1.1 ->
Trunc (-1)
{y : Y &
Trunc (-1)
(R x y *
(forally' : Y,
R x y' -> Trunc (-1) ((f y < f y') + (f y = f y'))))})
(fun (_ : Trunc (-1) {y : Y & ((f y = f X1.1) * R x y)%type})
(H2 : forallb : ordinal_carrier A,
Trunc (-1) {y : Y & ((f y = b) * R x y)%type} ->
Trunc (-1) ((f X1.1 < b) + (f X1.1 = b)))
(Hy : R x X1.1) =>
tr
(X1.1;
tr
(Hy,
fun (y' : Y) (Hy' : R x y') =>
H2 (f y') (tr (y'; (1%path, Hy'))))))
(fst X1.2) (fst X0.2) (snd X0.2) (snd X1.2))),
fun (yy' : Y)
(Hy : Trunc (-1)
(R x y *
(forally'0 : Y,
R x y'0 -> Trunc (-1) ((f y < f y'0) + (f y = f y'0)))))
(Hy' : Trunc (-1)
(R x y' *
(forally'0 : Y,
R x y'0 -> Trunc (-1) ((f y' < f y'0) + (f y' = f y'0))))) =>
merely_destruct Hy
(funX0 : R x y *
(forally'0 : Y,
R x y'0 -> Trunc (-1) ((f y < f y'0) + (f y = f y'0))) =>
merely_destruct Hy'
(funX1 : R x y' *
(forally'0 : Y,
R x y'0 -> Trunc (-1) ((f y' < f y'0) + (f y' = f y'0))) =>
Hf y y'
(merely_destruct (snd X0 y' (fst X1))
(funX2 : (f y < f y') + (f y = f y') =>
match X2 with
| inl l =>
merely_destruct (snd X1 y (fst X0))
(funX3 : (f y' < f y) + (f y' = f y) =>
match X3 with
| inl l0 =>
Empty_rec
(irreflexive_ordinal_relation
(ordinal_carrier A) lt
(ordinal_property A)
(f y)
(ordinal_transitivity
(f y) (f y') (f y) l l0))
| inr p =>
internal_paths_rew_r
(funt : ordinal_carrier A => f y = t) 1%path p
end)
| inr p => p
end)))))).1
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X y: Y Hy: Trunc (-1)
(R x y *
(forally' : Y, R x y' -> Trunc (-1) ((f y < f y') + (f y = f y'))))
R x y
LEM: ExcludedMiddle Y: HSet H: hexists (funA0 : Ordinal => InjectsInto Y A0) X: HSet R: X -> Y -> HProp HR: forallx0 : X, hexists (funx1 : Y => R x0 x1) A: Ordinal HA: InjectsInto Y A f: Y -> A Hf: IsInjective f x: X y: Y Hy: Trunc (-1)
(R x y *
(forally' : Y, R x y' -> Trunc (-1) ((f y < f y') + (f y = f y'))))
R x y * (forally' : Y, R x y' -> Trunc (-1) ((f y < f y') + (f y = f y'))) ->
R x y