Nonempty types #
This file proves a few extra facts about Nonempty, which is defined in core Lean.
Main declarations #
Nonempty.some: Extracts a witness of nonemptiness using choice. TakesNonempty αexplicitly.Classical.arbitrary: Extracts a witness of nonemptiness using choice. TakesNonempty αas an instance.
@[simp]
theorem
Nonempty.forall
{α : Sort u_3}
{p : Nonempty α → Prop}
:
(∀ (h : Nonempty α), p h) ↔ ∀ (a : α), p ⋯
@[simp]
theorem
Nonempty.exists
{α : Sort u_3}
{p : Nonempty α → Prop}
:
(∃ (h : Nonempty α), p h) ↔ ∃ (a : α), p ⋯
@[simp]
theorem
nonempty_psigma
{α : Sort u_4}
{β : α → Sort u_3}
:
Nonempty (PSigma β) ↔ ∃ (a : α), Nonempty (β a)
@[simp]
@[simp]
@[simp]
@[implicit_reducible]
Using Classical.choice, lifts a (Prop-valued) Nonempty instance to a (Type-valued)
Inhabited instance. Classical.inhabited_of_nonempty already exists, in Init/Classical.lean,
but the assumption is not a type class argument, which makes it unsuitable for some applications.
Instances For
@[reducible, inline]
Using Classical.choice, extracts a term from a Nonempty type.
Instances For
@[reducible, inline]
Using Classical.choice, extracts a term from a Nonempty type.
Instances For
Given f : α → β, if α is nonempty then β is also nonempty.
Nonempty cannot be a functor, because Functor is restricted to Type.
theorem
Nonempty.map2
{α : Sort u_3}
{β : Sort u_4}
{γ : Sort u_5}
(f : α → β → γ)
:
Nonempty α → Nonempty β → Nonempty γ
theorem
Nonempty.congr
{α : Sort u_3}
{β : Sort u_4}
(f : α → β)
(g : β → α)
:
Nonempty α ↔ Nonempty β
theorem
Nonempty.elim_to_inhabited
{α : Sort u_3}
[h : Nonempty α]
{p : Prop}
(f : ∀ (a : Inhabited α), p)
:
p
theorem
Classical.nonempty_pi
{ι : Sort u_4}
{α : ι → Sort u_3}
:
Nonempty ((i : ι) → α i) ↔ ∀ (i : ι), Nonempty (α i)
theorem
Function.Surjective.nonempty
{α : Sort u_1}
{β : Sort u_2}
[h : Nonempty β]
{f : α → β}
(hf : Surjective f)
:
Nonempty α
@[simp]
theorem
nonempty_sigma
{α : Type u_1}
{γ : α → Type u_3}
:
Nonempty ((a : α) × γ a) ↔ ∃ (a : α), Nonempty (γ a)
@[simp]
@[simp]