Extra lemmas about ULift and PLift #
In this file we provide Subsingleton, Unique, DecidableEq, and isEmpty instances for
ULift α and PLift α. We also prove ULift.forall, ULift.exists, PLift.forall, and
PLift.exists.
@[implicit_reducible]
@[implicit_reducible]
theorem
PLift.forall
{α : Sort u}
{p : PLift α → Prop}
:
(∀ (x : PLift α), p x) ↔ ∀ (x : α), p { down := x }
@[simp]
theorem
PLift.exists
{α : Sort u}
{p : PLift α → Prop}
:
(∃ (x : PLift α), p x) ↔ ∃ (x : α), p { down := x }
@[simp]
theorem
PLift.map_injective
{α : Sort u}
{β : Sort v}
{f : α → β}
:
Function.Injective (PLift.map f) ↔ Function.Injective f
@[simp]
theorem
PLift.map_surjective
{α : Sort u}
{β : Sort v}
{f : α → β}
:
Function.Surjective (PLift.map f) ↔ Function.Surjective f
@[simp]
@[implicit_reducible]
@[implicit_reducible]
@[simp]
theorem
ULift.forall
{α : Type u}
{p : ULift.{u_1, u} α → Prop}
:
(∀ (x : ULift.{u_1, u} α), p x) ↔ ∀ (x : α), p { down := x }
@[simp]
theorem
ULift.exists
{α : Type u}
{p : ULift.{u_1, u} α → Prop}
:
(∃ (x : ULift.{u_1, u} α), p x) ↔ ∃ (x : α), p { down := x }
@[simp]
theorem
ULift.map_injective
{α : Type u}
{β : Type v}
{f : α → β}
:
Function.Injective (ULift.map f) ↔ Function.Injective f
@[simp]
theorem
ULift.map_surjective
{α : Type u}
{β : Type v}
{f : α → β}
:
Function.Surjective (ULift.map f) ↔ Function.Surjective f
@[simp]
@[simp]
theorem
ULift.rec_update
{α : Type u}
{β : ULift.{u_2, u} α → Type u_1}
[DecidableEq α]
(f : (a : α) → β { down := a })
(a : α)
(x : β { down := a })
:
(fun (t : ULift.{u_2, u} α) => rec (Function.update f a x) t) = Function.update (fun (t : ULift.{u_2, u} α) => rec f t) { down := a } x