Equivalences for Option α
#
We define
Equiv.optionCongr
: theOption α ≃ Option β
constructed frome : α ≃ β
by sendingnone
tonone
, and applyinge
elsewhere.Equiv.removeNone
: theα ≃ β
constructed fromOption α ≃ Option β
by removingnone
from both sides.
@[simp]
theorem
Equiv.optionCongr_apply
{α : Type u_1}
{β : Type u_2}
(e : α ≃ β)
:
∀ (a : Option α), (Equiv.optionCongr e) a = Option.map (⇑e) a
A universe-polymorphic version of EquivFunctor.mapEquiv Option e
.
Equations
- Equiv.optionCongr e = { toFun := Option.map ⇑e, invFun := Option.map ⇑e.symm, left_inv := ⋯, right_inv := ⋯ }
Instances For
@[simp]
theorem
Equiv.optionCongr_refl
{α : Type u_1}
:
Equiv.optionCongr (Equiv.refl α) = Equiv.refl (Option α)
@[simp]
theorem
Equiv.optionCongr_symm
{α : Type u_1}
{β : Type u_2}
(e : α ≃ β)
:
(Equiv.optionCongr e).symm = Equiv.optionCongr e.symm
@[simp]
theorem
Equiv.optionCongr_trans
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
(e₁ : α ≃ β)
(e₂ : β ≃ γ)
:
(Equiv.optionCongr e₁).trans (Equiv.optionCongr e₂) = Equiv.optionCongr (e₁.trans 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
Equations
- Equiv.removeNone_aux e x = if h : Option.isSome (e (some x)) = true then Option.get (e (some x)) h else Option.get (e none) ⋯
Instances For
theorem
Equiv.removeNone_aux_inv
{α : Type u_1}
{β : Type u_2}
(e : Option α ≃ Option β)
(x : α)
:
Equiv.removeNone_aux e.symm (Equiv.removeNone_aux e x) = x
Given an equivalence between two Option
types, eliminate none
from that equivalence by
mapping e.symm none
to e none
.
Equations
- Equiv.removeNone e = { toFun := Equiv.removeNone_aux e, invFun := Equiv.removeNone_aux e.symm, left_inv := ⋯, right_inv := ⋯ }
Instances For
@[simp]
theorem
Equiv.removeNone_symm
{α : Type u_1}
{β : Type u_2}
(e : Option α ≃ Option β)
:
(Equiv.removeNone e).symm = Equiv.removeNone e.symm
@[simp]
theorem
Equiv.optionCongr_injective
{α : Type u_1}
{β : Type u_2}
:
Function.Injective Equiv.optionCongr
Equivalences between Option α
and β
that send none
to x
are equivalent to
equivalences between α
and {y : β // y ≠ x}
.
Equations
- One or more equations did not get rendered due to their size.
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)
:
((Equiv.optionSubtype x) e) a = { val := ↑e (some a), property := h }
@[simp]
theorem
Equiv.coe_optionSubtype_apply_apply
{α : Type u_1}
{β : Type u_2}
[DecidableEq β]
(x : β)
(e : { e : Option α ≃ β // e none = x })
(a : α)
:
↑(((Equiv.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 (((Equiv.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 : α)
:
↑((Equiv.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 : α)
:
↑((Equiv.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 })
:
↑((Equiv.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 })
:
(↑((Equiv.optionSubtype x).symm e)).symm ↑b = some (e.symm b)
@[simp]
theorem
Equiv.optionSubtypeNe_apply
{α : Type u_1}
[DecidableEq α]
(a : α)
(a : Option { y : α // y ≠ a✝ })
:
(Equiv.optionSubtypeNe a✝) a = Option.casesOn' a a✝ Subtype.val
@[simp]
theorem
Equiv.optionSubtypeNe_symm_apply
{α : Type u_1}
[DecidableEq α]
(a : α)
(b : α)
:
(Equiv.optionSubtypeNe a).symm b = if h : b = a then none else some { val := b, property := h }
Any type with a distinguished element is equivalent to an Option
type on the subtype excluding
that element.
Equations
- Equiv.optionSubtypeNe a = ↑((Equiv.optionSubtype a).symm (Equiv.refl { y : α // y ≠ a }))
Instances For
theorem
Equiv.optionSubtypeNe_symm_self
{α : Type u_1}
[DecidableEq α]
(a : α)
:
(Equiv.optionSubtypeNe a).symm a = none
theorem
Equiv.optionSubtypeNe_symm_of_ne
{α : Type u_1}
[DecidableEq α]
{a : α}
{b : α}
(hba : b ≠ a)
:
(Equiv.optionSubtypeNe a).symm b = some { val := b, property := hba }
@[simp]
theorem
Equiv.optionSubtypeNe_none
{α : Type u_1}
[DecidableEq α]
(a : α)
:
(Equiv.optionSubtypeNe a) none = a
@[simp]
theorem
Equiv.optionSubtypeNe_some
{α : Type u_1}
[DecidableEq α]
(a : α)
(b : { b : α // b ≠ a })
:
(Equiv.optionSubtypeNe a) (some b) = ↑b