Theorem: Qpf.suppPreservation_iff_liftpPreservation
File: Mathlib/Data/QPF/Univariate/Basic.lean

tactic: constructor <;> intro h
state_before: F : Type u → Type u
inst✝ : Functor F
q : Qpf F
⊢ SuppPreservation ↔ LiftpPreservation

tactic: rintro α p ⟨a, f⟩
state_before: case mp
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : SuppPreservation
⊢ LiftpPreservation

tactic: have h' := h
state_before: case mp.mk
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : SuppPreservation
α : Type u
p : α → Prop
a : (P F).A
f : PFunctor.B (P F) a → α
⊢ Liftp p (abs { fst := a, snd := f }) ↔ Liftp p { fst := a, snd := f }

tactic: rw [suppPreservation_iff_uniform] at h'
state_before: case mp.mk
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : SuppPreservation
α : Type u
p : α → Prop
a : (P F).A
f : PFunctor.B (P F) a → α
h' : SuppPreservation
⊢ Liftp p (abs { fst := a, snd := f }) ↔ Liftp p { fst := a, snd := f }

tactic: dsimp only [SuppPreservation, supp] at h
state_before: case mp.mk
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : SuppPreservation
α : Type u
p : α → Prop
a : (P F).A
f : PFunctor.B (P F) a → α
h' : IsUniform
⊢ Liftp p (abs { fst := a, snd := f }) ↔ Liftp p { fst := a, snd := f }

tactic: rw [liftp_iff_of_isUniform h', supp_eq_of_isUniform h', PFunctor.liftp_iff']
state_before: case mp.mk
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h :
  ∀ ⦃α : Type u⦄ (x : PFunctor.Obj (P F) α),
    {y | ∀ ⦃p : α → Prop⦄, Liftp p (abs x) → p y} = {y | ∀ ⦃p : α → Prop⦄, Liftp p x → p y}
α : Type u
p : α → Prop
a : (P F).A
f : PFunctor.B (P F) a → α
h' : IsUniform
⊢ Liftp p (abs { fst := a, snd := f }) ↔ Liftp p { fst := a, snd := f }

tactic: simp only [image_univ, mem_range, exists_imp]
state_before: case mp.mk
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h :
  ∀ ⦃α : Type u⦄ (x : PFunctor.Obj (P F) α),
    {y | ∀ ⦃p : α → Prop⦄, Liftp p (abs x) → p y} = {y | ∀ ⦃p : α → Prop⦄, Liftp p x → p y}
α : Type u
p : α → Prop
a : (P F).A
f : PFunctor.B (P F) a → α
h' : IsUniform
⊢ (∀ (u : α), u ∈ f '' univ → p u) ↔ ∀ (i : PFunctor.B (P F) a), p (f i)

tactic: constructor <;> intros <;> subst_vars <;> solve_by_elim
state_before: case mp.mk
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h :
  ∀ ⦃α : Type u⦄ (x : PFunctor.Obj (P F) α),
    {y | ∀ ⦃p : α → Prop⦄, Liftp p (abs x) → p y} = {y | ∀ ⦃p : α → Prop⦄, Liftp p x → p y}
α : Type u
p : α → Prop
a : (P F).A
f : PFunctor.B (P F) a → α
h' : IsUniform
⊢ (∀ (u : α) (x : PFunctor.B (P F) a), f x = u → p u) ↔ ∀ (i : PFunctor.B (P F) a), p (f i)

tactic: rintro α ⟨a, f⟩
state_before: case mpr
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : LiftpPreservation
⊢ SuppPreservation

tactic: simp only [LiftpPreservation] at h
state_before: case mpr.mk
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : LiftpPreservation
α : Type u
a : (P F).A
f : PFunctor.B (P F) a → α
⊢ supp (abs { fst := a, snd := f }) = supp { fst := a, snd := f }

tactic: simp only [supp, h]
state_before: case mpr.mk
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : ∀ ⦃α : Type u⦄ (p : α → Prop) (x : PFunctor.Obj (P F) α), Liftp p (abs x) ↔ Liftp p x
α : Type u
a : (P F).A
f : PFunctor.B (P F) a → α
⊢ supp (abs { fst := a, snd := f }) = supp { fst := a, snd := f }