Equivalences for Option α #
We define
Equiv.optionCongr: theOption α ≃ Option βconstructed frome : α ≃ βby sendingnonetonone, and applyingeelsewhere.Equiv.removeNone: theα ≃ βconstructed fromOption α ≃ Option βby removingnonefrom both sides.
A universe-polymorphic version of EquivFunctor.mapEquiv Option e.
Instances For
@[simp]
theorem
Equiv.optionCongr_apply
{α : Type u_1}
{β : Type u_2}
(e : α ≃ β)
(a✝ : Option α)
:
e.optionCongr a✝ = Option.map (⇑e) a✝
@[simp]
@[simp]
theorem
Equiv.optionCongr_symm
{α : Type u_1}
{β : Type u_2}
(e : α ≃ β)
:
e.symm.optionCongr = e.optionCongr.symm
@[simp]
theorem
Equiv.optionCongr_trans
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
(e₁ : α ≃ β)
(e₂ : β ≃ γ)
:
(e₁.trans e₂).optionCongr = e₁.optionCongr.trans e₂.optionCongr
theorem
Equiv.optionCongr_eq_equivFunctor_mapEquiv
{α β : Type u}
(e : α ≃ β)
:
e.optionCongr = EquivFunctor.mapEquiv Option e
When α and β are in the same universe, this is the same as the result of
EquivFunctor.mapEquiv.
If we have a value on one side of an Equiv of Option
we also have a value on the other side of the equivalence
Instances For
theorem
Equiv.removeNone_aux_some
{α : Type u_1}
{β : Type u_2}
(e : Option α ≃ Option β)
{x : α}
(h : ∃ (x' : β), e (some x) = some x')
:
some (e.removeNone_aux x) = e (some x)
theorem
Equiv.removeNone_aux_none
{α : Type u_1}
{β : Type u_2}
(e : Option α ≃ Option β)
{x : α}
(h : e (some x) = none)
:
some (e.removeNone_aux x) = e none
theorem
Equiv.removeNone_aux_inv
{α : Type u_1}
{β : Type u_2}
(e : Option α ≃ Option β)
(x : α)
:
e.symm.removeNone_aux (e.removeNone_aux x) = x
Given an equivalence between two Option types, eliminate none from that equivalence by
mapping e.symm none to e none.
Instances For
@[simp]
theorem
Equiv.removeNone_symm
{α : Type u_1}
{β : Type u_2}
(e : Option α ≃ Option β)
:
e.removeNone.symm = e.symm.removeNone
theorem
Equiv.removeNone_some
{α : Type u_1}
{β : Type u_2}
(e : Option α ≃ Option β)
{x : α}
(h : ∃ (x' : β), e (some x) = some x')
:
some (e.removeNone x) = e (some x)
theorem
Equiv.removeNone_none
{α : Type u_1}
{β : Type u_2}
(e : Option α ≃ Option β)
{x : α}
(h : e (some x) = none)
:
some (e.removeNone x) = e none
@[simp]
theorem
Equiv.option_symm_apply_none_iff
{α : Type u_1}
{β : Type u_2}
(e : Option α ≃ Option β)
:
e.symm none = none ↔ e none = none
theorem
Equiv.some_removeNone_iff
{α : Type u_1}
{β : Type u_2}
(e : Option α ≃ Option β)
{x : α}
:
some (e.removeNone x) = e none ↔ e.symm none = some x
@[simp]
theorem
Equiv.removeNone_optionCongr
{α : Type u_1}
{β : Type u_2}
(e : α ≃ β)
:
e.optionCongr.removeNone = e
Equivalences between Option α and β that send none to x are equivalent to
equivalences between α and {y : β // y ≠ x}.
Instances For
@[simp]
theorem
Equiv.optionSubtype_apply_apply
{α : Type u_1}
{β : Type u_2}
[DecidableEq β]
(x : β)
(e : { e : Option α ≃ β // e none = x })
(a : α)
(h : ↑e (some a) ≠ x)
:
((optionSubtype x) e) a = ⟨↑e (some a), h⟩
@[simp]
theorem
Equiv.coe_optionSubtype_apply_apply
{α : Type u_1}
{β : Type u_2}
[DecidableEq β]
(x : β)
(e : { e : Option α ≃ β // e none = x })
(a : α)
:
↑(((optionSubtype x) e) a) = ↑e (some a)
@[simp]
theorem
Equiv.optionSubtype_apply_symm_apply
{α : Type u_1}
{β : Type u_2}
[DecidableEq β]
(x : β)
(e : { e : Option α ≃ β // e none = x })
(b : { y : β // y ≠ x })
:
some (((optionSubtype x) e).symm b) = (↑e).symm ↑b
@[simp]
theorem
Equiv.optionSubtype_symm_apply_apply_coe
{α : Type u_1}
{β : Type u_2}
[DecidableEq β]
(x : β)
(e : α ≃ { y : β // y ≠ x })
(a : α)
:
↑((optionSubtype x).symm e) (some a) = ↑(e a)
@[simp]
theorem
Equiv.optionSubtype_symm_apply_apply_some
{α : Type u_1}
{β : Type u_2}
[DecidableEq β]
(x : β)
(e : α ≃ { y : β // y ≠ x })
(a : α)
:
↑((optionSubtype x).symm e) (some a) = ↑(e a)
@[simp]
theorem
Equiv.optionSubtype_symm_apply_apply_none
{α : Type u_1}
{β : Type u_2}
[DecidableEq β]
(x : β)
(e : α ≃ { y : β // y ≠ x })
:
↑((optionSubtype x).symm e) none = x
@[simp]
theorem
Equiv.optionSubtype_symm_apply_symm_apply
{α : Type u_1}
{β : Type u_2}
[DecidableEq β]
(x : β)
(e : α ≃ { y : β // y ≠ x })
(b : { y : β // y ≠ x })
:
(↑((optionSubtype x).symm e)).symm ↑b = some (e.symm b)
Any type with a distinguished element is equivalent to an Option type on the subtype excluding
that element.
Instances For
@[simp]
theorem
Equiv.optionSubtypeNe_apply
{α : Type u_1}
[DecidableEq α]
(a : α)
(a✝ : Option { y : α // y ≠ a })
:
(optionSubtypeNe a) a✝ = a✝.casesOn' a Subtype.val
@[simp]
theorem
Equiv.optionSubtypeNe_symm_apply
{α : Type u_1}
[DecidableEq α]
(a b : α)
:
(optionSubtypeNe a).symm b = if h : b = a then none else some ⟨b, h⟩
theorem
Equiv.optionSubtypeNe_symm_self
{α : Type u_1}
[DecidableEq α]
(a : α)
:
(optionSubtypeNe a).symm a = none
theorem
Equiv.optionSubtypeNe_symm_of_ne
{α : Type u_1}
[DecidableEq α]
{a b : α}
(hba : b ≠ a)
:
(optionSubtypeNe a).symm b = some ⟨b, hba⟩
@[simp]
theorem
Equiv.optionSubtypeNe_none
{α : Type u_1}
[DecidableEq α]
(a : α)
:
(optionSubtypeNe a) none = a
@[simp]
theorem
Equiv.optionSubtypeNe_some
{α : Type u_1}
[DecidableEq α]
(a : α)
(b : { b : α // b ≠ a })
:
(optionSubtypeNe a) (some b) = ↑b
Option α is equivalent to α ⊕ PUnit
Instances For
@[simp]
theorem
Equiv.optionEquivSumPUnit_none
{α : Type u_4}
:
(optionEquivSumPUnit α) none = Sum.inr PUnit.unit
@[simp]
theorem
Equiv.optionEquivSumPUnit_some
{α : Type u_4}
(a : α)
:
(optionEquivSumPUnit α) (some a) = Sum.inl a
@[simp]
theorem
Equiv.optionEquivSumPUnit_coe
{α : Type u_4}
(a : α)
:
(optionEquivSumPUnit α) (some a) = Sum.inl a
@[simp]
theorem
Equiv.optionEquivSumPUnit_symm_inl
{α : Type u_4}
(a : α)
:
(optionEquivSumPUnit α).symm (Sum.inl a) = some a
@[simp]
theorem
Equiv.optionEquivSumPUnit_symm_inr
{α : Type u_4}
(a : PUnit.{u_5 + 1})
:
(optionEquivSumPUnit α).symm (Sum.inr a) = none
The set of x : Option α such that isSome x is equivalent to α.
Instances For
@[simp]
theorem
Equiv.optionIsSomeEquiv_symm_apply_coe
(α : Type u_4)
(x : α)
:
↑((optionIsSomeEquiv α).symm x) = some x
@[simp]
theorem
Equiv.optionIsSomeEquiv_apply
(α : Type u_4)
(o : { x : Option α // x.isSome = true })
:
(optionIsSomeEquiv α) o = (↑o).get ⋯