mathlib documentation

data.​option.​basic

data.​option.​basic

theorem option.​some_ne_none {α : Type u_1} (x : α) :

@[simp]
theorem option.​get_mem {α : Type u_1} {o : option α} (h : (o.is_some)) :

theorem option.​get_of_mem {α : Type u_1} {a : α} {o : option α} (h : (o.is_some)) :
a ooption.get h = a

@[simp]
theorem option.​not_mem_none {α : Type u_1} (a : α) :

@[simp]
theorem option.​some_get {α : Type u_1} {x : option α} (h : (x.is_some)) :

@[simp]
theorem option.​get_some {α : Type u_1} (x : α) (h : ((option.some x).is_some)) :

@[simp]
theorem option.​get_or_else_some {α : Type u_1} (x y : α) :

theorem option.​get_or_else_of_ne_none {α : Type u_1} {x : option α} (hx : x option.none) (y : α) :

theorem option.​mem_unique {α : Type u_1} {o : option α} {a b : α} :
a ob oa = b

theorem option.​map_injective {α : Type u_1} {β : Type u_2} {f : α → β} :

option.map f is injective if f is injective.

@[ext]
theorem option.​ext {α : Type u_1} {o₁ o₂ : option α} :
(∀ (a : α), a o₁ a o₂)o₁ = o₂

theorem option.​eq_none_iff_forall_not_mem {α : Type u_1} {o : option α} :
o = option.none ∀ (a : α), a o

@[simp]
theorem option.​none_bind {α β : Type u_1} (f : α → option β) :

@[simp]
theorem option.​some_bind {α β : Type u_1} (a : α) (f : α → option β) :
option.some a >>= f = f a

@[simp]
theorem option.​none_bind' {α : Type u_1} {β : Type u_2} (f : α → option β) :

@[simp]
theorem option.​some_bind' {α : Type u_1} {β : Type u_2} (a : α) (f : α → option β) :
(option.some a).bind f = f a

@[simp]
theorem option.​bind_some {α : Type u_1} (x : option α) :

@[simp]
theorem option.​bind_eq_some {α β : Type u_1} {x : option α} {f : α → option β} {b : β} :
x >>= f = option.some b ∃ (a : α), x = option.some a f a = option.some b

@[simp]
theorem option.​bind_eq_some' {α : Type u_1} {β : Type u_2} {x : option α} {f : α → option β} {b : β} :
x.bind f = option.some b ∃ (a : α), x = option.some a f a = option.some b

@[simp]
theorem option.​bind_eq_none' {α : Type u_1} {β : Type u_2} {o : option α} {f : α → option β} :
o.bind f = option.none ∀ (b : β) (a : α), a ob f a

@[simp]
theorem option.​bind_eq_none {α β : Type u_1} {o : option α} {f : α → option β} :
o >>= f = option.none ∀ (b : β) (a : α), a ob f a

theorem option.​bind_comm {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : α → β → option γ} (a : option α) (b : option β) :
a.bind (λ (x : α), b.bind (f x)) = b.bind (λ (y : β), a.bind (λ (x : α), f x y))

theorem option.​bind_assoc {α : Type u_1} {β : Type u_2} {γ : Type u_3} (x : option α) (f : α → option β) (g : β → option γ) :
(x.bind f).bind g = x.bind (λ (y : α), (f y).bind g)

@[simp]
theorem option.​map_none {α β : Type u_1} {f : α → β} :

@[simp]
theorem option.​map_some {α β : Type u_1} {a : α} {f : α → β} :

@[simp]
theorem option.​map_none' {α : Type u_1} {β : Type u_2} {f : α → β} :

@[simp]
theorem option.​map_some' {α : Type u_1} {β : Type u_2} {a : α} {f : α → β} :

@[simp]
theorem option.​map_eq_some {α β : Type u_1} {x : option α} {f : α → β} {b : β} :
f <$> x = option.some b ∃ (a : α), x = option.some a f a = b

@[simp]
theorem option.​map_eq_some' {α : Type u_1} {β : Type u_2} {x : option α} {f : α → β} {b : β} :
option.map f x = option.some b ∃ (a : α), x = option.some a f a = b

@[simp]
theorem option.​map_id' {α : Type u_1} :

@[simp]
theorem option.​seq_some {α β : Type u_1} {a : α} {f : α → β} :

@[simp]
theorem option.​some_orelse' {α : Type u_1} (a : α) (x : option α) :

@[simp]
theorem option.​some_orelse {α : Type u_1} (a : α) (x : option α) :

@[simp]
theorem option.​none_orelse' {α : Type u_1} (x : option α) :

@[simp]
theorem option.​none_orelse {α : Type u_1} (x : option α) :

@[simp]
theorem option.​orelse_none' {α : Type u_1} (x : option α) :

@[simp]
theorem option.​orelse_none {α : Type u_1} (x : option α) :

@[simp]
theorem option.​is_some_none {α : Type u_1} :

@[simp]
theorem option.​is_some_some {α : Type u_1} {a : α} :

theorem option.​is_some_iff_exists {α : Type u_1} {x : option α} :
(x.is_some) ∃ (a : α), x = option.some a

@[simp]
theorem option.​is_none_none {α : Type u_1} :

@[simp]
theorem option.​is_none_some {α : Type u_1} {a : α} :

@[simp]
theorem option.​not_is_some {α : Type u_1} {a : option α} :

theorem option.​eq_some_iff_get_eq {α : Type u_1} {o : option α} {a : α} :
o = option.some a ∃ (h : (o.is_some)), option.get h = a

theorem option.​not_is_some_iff_eq_none {α : Type u_1} {o : option α} :

theorem option.​ne_none_iff_is_some {α : Type u_1} {o : option α} :

theorem option.​ne_none_iff_exists {α : Type u_1} {o : option α} :
o option.none ∃ (x : α), o = option.some x

theorem option.​ne_none_iff_exists' {α : Type u_1} {o : option α} :
o option.none ∃ (x : α), o = x

theorem option.​bex_ne_none {α : Type u_1} {p : option α → Prop} :
(∃ (x : option α) (H : x option.none), p x) ∃ (x : α), p (option.some x)

theorem option.​ball_ne_none {α : Type u_1} {p : option α → Prop} :
(∀ (x : option α), x option.nonep x) ∀ (x : α), p (option.some x)

theorem option.​iget_mem {α : Type u_1} [inhabited α] {o : option α} :
(o.is_some) → o.iget o

theorem option.​iget_of_mem {α : Type u_1} [inhabited α] {a : α} {o : option α} :
a oo.iget = a

@[simp]
theorem option.​guard_eq_some {α : Type u_1} {p : α → Prop} [decidable_pred p] {a b : α} :

@[simp]
theorem option.​guard_eq_some' {p : Prop} [decidable p] (u : unit) :

theorem option.​lift_or_get_choice {α : Type u_1} {f : α → α → α} (h : ∀ (a b : α), f a b = a f a b = b) (o₁ o₂ : option α) :
option.lift_or_get f o₁ o₂ = o₁ option.lift_or_get f o₁ o₂ = o₂

@[simp]
theorem option.​lift_or_get_none_left {α : Type u_1} {f : α → α → α} {b : option α} :

@[simp]
theorem option.​lift_or_get_none_right {α : Type u_1} {f : α → α → α} {a : option α} :

@[simp]
theorem option.​lift_or_get_some_some {α : Type u_1} {f : α → α → α} {a b : α} :

def option.​cases_on' {α : Type u_1} {β : Type u_2} :
option αβ → (α → β) → β

given an element of a : option α, a default element b : β and a function α → β, apply this function to a if it comes from α, and return b otherwise.

Equations