Classical reasoning support #
noncomputable def
Classical.indefiniteDescription
{α : Sort u}
(p : α → Prop)
(h : ∃ x, p x)
:
{ x // p x }
Equations
- Classical.indefiniteDescription p h = Classical.choice (_ : Nonempty { x // p x })
Instances For
Equations
- Classical.choose h = (Classical.indefiniteDescription p h).val
Instances For
Diaconescu's theorem: excluded middle from choice, Function extensionality and propositional extensionality.
Equations
- Classical.inhabited_of_nonempty h = { default := Classical.choice h }
Instances For
Equations
Instances For
All propositions are Decidable
.
Equations
- Classical.propDecidable a = Classical.choice (_ : Nonempty (Decidable a))
Instances For
Equations
- Classical.decidableInhabited a = { default := inferInstance }
Instances For
Equations
- Classical.typeDecidableEq α x x = inferInstance
Instances For
Equations
- Classical.typeDecidable α = match Classical.propDecidable (Nonempty α) with | isTrue hp => PSum.inl default | isFalse hn => PSum.inr (_ : α → False)
Instances For
noncomputable def
Classical.strongIndefiniteDescription
{α : Sort u}
(p : α → Prop)
(h : Nonempty α)
:
{ x // (∃ y, p y) → p x }
Equations
- One or more equations did not get rendered due to their size.
Instances For
the Hilbert epsilon Function
Equations
- Classical.epsilon p = (Classical.strongIndefiniteDescription p h).val
Instances For
theorem
Classical.epsilon_spec_aux
{α : Sort u}
(h : Nonempty α)
(p : α → Prop)
:
(∃ y, p y) → p (Classical.epsilon p)
theorem
Classical.epsilon_spec
{α : Sort u}
{p : α → Prop}
(hex : ∃ y, p y)
:
p (Classical.epsilon p)
theorem
Classical.axiomOfChoice
{α : Sort u}
{β : α → Sort v}
{r : (x : α) → β x → Prop}
(h : ∀ (x : α), ∃ y, r x y)
:
∃ f, (x : α) → r x (f x)
the axiom of choice
by_cases (h :)? p
splits the main goal into two cases, assuming h : p
in the first branch, and h : ¬ p
in the second branch.
Equations
- One or more equations did not get rendered due to their size.