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

tactic: rw [liftp_iff, ← abs_repr x]
state_before: F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : IsUniform
α : Type u
x : F α
p : α → Prop
⊢ Liftp p x ↔ ∀ (u : α), u ∈ supp x → p u

tactic: cases' repr x with a f
state_before: F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : IsUniform
α : Type u
x : F α
p : α → Prop
⊢ (∃ a f, abs (repr x) = abs { fst := a, snd := f } ∧ ∀ (i : PFunctor.B (P F) a), p (f i)) ↔
    ∀ (u : α), u ∈ supp (abs (repr x)) → p u

tactic: constructor
state_before: case mk
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : IsUniform
α : Type u
x : F α
p : α → Prop
a : (P F).A
f : PFunctor.B (P F) a → α
⊢ (∃ a_1 f_1, abs { fst := a, snd := f } = abs { fst := a_1, snd := f_1 } ∧ ∀ (i : PFunctor.B (P F) a_1), p (f_1 i)) ↔
    ∀ (u : α), u ∈ supp (abs { fst := a, snd := f }) → p u

tactic: intro h'
state_before: case mk.mpr
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : IsUniform
α : Type u
x : F α
p : α → Prop
a : (P F).A
f : PFunctor.B (P F) a → α
⊢ (∀ (u : α), u ∈ supp (abs { fst := a, snd := f }) → p u) →
    ∃ a_2 f_1, abs { fst := a, snd := f } = abs { fst := a_2, snd := f_1 } ∧ ∀ (i : PFunctor.B (P F) a_2), p (f_1 i)

tactic: refine' ⟨a, f, rfl, fun i => h' _ _⟩
state_before: case mk.mpr
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : IsUniform
α : Type u
x : F α
p : α → Prop
a : (P F).A
f : PFunctor.B (P F) a → α
h' : ∀ (u : α), u ∈ supp (abs { fst := a, snd := f }) → p u
⊢ ∃ a_1 f_1, abs { fst := a, snd := f } = abs { fst := a_1, snd := f_1 } ∧ ∀ (i : PFunctor.B (P F) a_1), p (f_1 i)

tactic: rw [supp_eq_of_isUniform h]
state_before: case mk.mpr
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : IsUniform
α : Type u
x : F α
p : α → Prop
a : (P F).A
f : PFunctor.B (P F) a → α
h' : ∀ (u : α), u ∈ supp (abs { fst := a, snd := f }) → p u
i : PFunctor.B (P F) a
⊢ f i ∈ supp (abs { fst := a, snd := f })

tactic: exact ⟨i, mem_univ i, rfl⟩
state_before: case mk.mpr
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : IsUniform
α : Type u
x : F α
p : α → Prop
a : (P F).A
f : PFunctor.B (P F) a → α
h' : ∀ (u : α), u ∈ supp (abs { fst := a, snd := f }) → p u
i : PFunctor.B (P F) a
⊢ f i ∈ f '' univ

tactic: rintro ⟨a', f', abseq, hf⟩ u
state_before: case mk.mp
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : IsUniform
α : Type u
x : F α
p : α → Prop
a : (P F).A
f : PFunctor.B (P F) a → α
⊢ (∃ a_1 f_1, abs { fst := a, snd := f } = abs { fst := a_1, snd := f_1 } ∧ ∀ (i : PFunctor.B (P F) a_1), p (f_1 i)) →
    ∀ (u : α), u ∈ supp (abs { fst := a, snd := f }) → p u

tactic: rw [supp_eq_of_isUniform h, h _ _ _ _ abseq]
state_before: case mk.mp.intro.intro.intro
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : IsUniform
α : Type u
x : F α
p : α → Prop
a : (P F).A
f : PFunctor.B (P F) a → α
a' : (P F).A
f' : PFunctor.B (P F) a' → α
abseq : abs { fst := a, snd := f } = abs { fst := a', snd := f' }
hf : ∀ (i : PFunctor.B (P F) a'), p (f' i)
u : α
⊢ u ∈ supp (abs { fst := a, snd := f }) → p u

tactic: rintro ⟨i, _, hi⟩
state_before: case mk.mp.intro.intro.intro
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : IsUniform
α : Type u
x : F α
p : α → Prop
a : (P F).A
f : PFunctor.B (P F) a → α
a' : (P F).A
f' : PFunctor.B (P F) a' → α
abseq : abs { fst := a, snd := f } = abs { fst := a', snd := f' }
hf : ∀ (i : PFunctor.B (P F) a'), p (f' i)
u : α
⊢ u ∈ f' '' univ → p u

tactic: rw [← hi]
state_before: case mk.mp.intro.intro.intro.intro.intro
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : IsUniform
α : Type u
x : F α
p : α → Prop
a : (P F).A
f : PFunctor.B (P F) a → α
a' : (P F).A
f' : PFunctor.B (P F) a' → α
abseq : abs { fst := a, snd := f } = abs { fst := a', snd := f' }
hf : ∀ (i : PFunctor.B (P F) a'), p (f' i)
u : α
i : PFunctor.B (P F) a'
left✝ : i ∈ univ
hi : f' i = u
⊢ p u

tactic: apply hf
state_before: case mk.mp.intro.intro.intro.intro.intro
F : Type u → Type u
inst✝ : Functor F
q : Qpf F
h : IsUniform
α : Type u
x : F α
p : α → Prop
a : (P F).A
f : PFunctor.B (P F) a → α
a' : (P F).A
f' : PFunctor.B (P F) a' → α
abseq : abs { fst := a, snd := f } = abs { fst := a', snd := f' }
hf : ∀ (i : PFunctor.B (P F) a'), p (f' i)
u : α
i : PFunctor.B (P F) a'
left✝ : i ∈ univ
hi : f' i = u
⊢ p (f' i)