@[irreducible]
noncomputable
def
classical.indefinite_description
{α : Sort u}
(p : α → Prop)
(h : ∃ (x : α), p x) :
{x // p x}
Equations
- classical.indefinite_description p h = classical.choice _
- _ = _
Equations
Equations
Equations
All propositions are decidable
Equations
Equations
Equations
- classical.type_decidable_eq α = λ (x y : α), classical.prop_decidable (x = y)
Equations
- classical.type_decidable α = classical.type_decidable._match_1 α (classical.prop_decidable (nonempty α))
- classical.type_decidable._match_1 α (decidable.is_true hp) = psum.inl inhabited.default
- classical.type_decidable._match_1 α (decidable.is_false hn) = psum.inr _
@[irreducible]
noncomputable
def
classical.strong_indefinite_description
{α : Sort u}
(p : α → Prop)
(h : nonempty α) :
Equations
- classical.strong_indefinite_description p h = dite (∃ (x : α), p x) (λ (hp : ∃ (x : α), p x), let xp : {x // p x} := classical.indefinite_description (λ (x : α), p x) hp in ⟨xp.val, _⟩) (λ (hp : ¬∃ (x : α), p x), ⟨classical.choice h, _⟩)
The Hilbert epsilon function
Equations
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)