Theorem: Filter.map_atTop_finset_prod_le_of_prod_eq
File: Mathlib/Order/Filter/AtTopBot.lean

tactic: classical
  refine ((atTop_basis.map _).le_basis_iff (atTop_basis.map _)).2 fun b _ => ?_
  let ⟨v, hv⟩ := h_eq b
  refine ⟨v, trivial, ?_⟩
  simpa [image_subset_iff] using hv
state_before: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝ : CommMonoid α
f : β → α
g : γ → α
h_eq : ∀ (u : Finset γ), ∃ v, ∀ (v' : Finset β), v ⊆ v' → ∃ u', u ⊆ u' ∧ ∏ x ∈ u', g x = ∏ b ∈ v', f b
⊢ map (fun s => ∏ b ∈ s, f b) atTop ≤ map (fun s => ∏ x ∈ s, g x) atTop
state_after: no goals

tactic: refine ((atTop_basis.map _).le_basis_iff (atTop_basis.map _)).2 fun b _ => ?_
state_before: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝ : CommMonoid α
f : β → α
g : γ → α
h_eq : ∀ (u : Finset γ), ∃ v, ∀ (v' : Finset β), v ⊆ v' → ∃ u', u ⊆ u' ∧ ∏ x ∈ u', g x = ∏ b ∈ v', f b
⊢ map (fun s => ∏ b ∈ s, f b) atTop ≤ map (fun s => ∏ x ∈ s, g x) atTop
state_after: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝ : CommMonoid α
f : β → α
g : γ → α
h_eq : ∀ (u : Finset γ), ∃ v, ∀ (v' : Finset β), v ⊆ v' → ∃ u', u ⊆ u' ∧ ∏ x ∈ u', g x = ∏ b ∈ v', f b
b : Finset γ
x✝ : True
⊢ ∃ i, True ∧ (fun s => ∏ b ∈ s, f b) '' Ici i ⊆ (fun s => ∏ x ∈ s, g x) '' Ici b

tactic: let ⟨v, hv⟩ := h_eq b
state_before: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝ : CommMonoid α
f : β → α
g : γ → α
h_eq : ∀ (u : Finset γ), ∃ v, ∀ (v' : Finset β), v ⊆ v' → ∃ u', u ⊆ u' ∧ ∏ x ∈ u', g x = ∏ b ∈ v', f b
b : Finset γ
x✝ : True
⊢ ∃ i, True ∧ (fun s => ∏ b ∈ s, f b) '' Ici i ⊆ (fun s => ∏ x ∈ s, g x) '' Ici b
state_after: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝ : CommMonoid α
f : β → α
g : γ → α
h_eq : ∀ (u : Finset γ), ∃ v, ∀ (v' : Finset β), v ⊆ v' → ∃ u', u ⊆ u' ∧ ∏ x ∈ u', g x = ∏ b ∈ v', f b
b : Finset γ
x✝ : True
v : Finset β
hv : ∀ (v' : Finset β), v ⊆ v' → ∃ u', b ⊆ u' ∧ ∏ x ∈ u', g x = ∏ b ∈ v', f b
⊢ ∃ i, True ∧ (fun s => ∏ b ∈ s, f b) '' Ici i ⊆ (fun s => ∏ x ∈ s, g x) '' Ici b

tactic: refine ⟨v, trivial, ?_⟩
state_before: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝ : CommMonoid α
f : β → α
g : γ → α
h_eq : ∀ (u : Finset γ), ∃ v, ∀ (v' : Finset β), v ⊆ v' → ∃ u', u ⊆ u' ∧ ∏ x ∈ u', g x = ∏ b ∈ v', f b
b : Finset γ
x✝ : True
v : Finset β
hv : ∀ (v' : Finset β), v ⊆ v' → ∃ u', b ⊆ u' ∧ ∏ x ∈ u', g x = ∏ b ∈ v', f b
⊢ ∃ i, True ∧ (fun s => ∏ b ∈ s, f b) '' Ici i ⊆ (fun s => ∏ x ∈ s, g x) '' Ici b
state_after: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝ : CommMonoid α
f : β → α
g : γ → α
h_eq : ∀ (u : Finset γ), ∃ v, ∀ (v' : Finset β), v ⊆ v' → ∃ u', u ⊆ u' ∧ ∏ x ∈ u', g x = ∏ b ∈ v', f b
b : Finset γ
x✝ : True
v : Finset β
hv : ∀ (v' : Finset β), v ⊆ v' → ∃ u', b ⊆ u' ∧ ∏ x ∈ u', g x = ∏ b ∈ v', f b
⊢ (fun s => ∏ b ∈ s, f b) '' Ici v ⊆ (fun s => ∏ x ∈ s, g x) '' Ici b

tactic: simpa [image_subset_iff] using hv
state_before: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝ : CommMonoid α
f : β → α
g : γ → α
h_eq : ∀ (u : Finset γ), ∃ v, ∀ (v' : Finset β), v ⊆ v' → ∃ u', u ⊆ u' ∧ ∏ x ∈ u', g x = ∏ b ∈ v', f b
b : Finset γ
x✝ : True
v : Finset β
hv : ∀ (v' : Finset β), v ⊆ v' → ∃ u', b ⊆ u' ∧ ∏ x ∈ u', g x = ∏ b ∈ v', f b
⊢ (fun s => ∏ b ∈ s, f b) '' Ici v ⊆ (fun s => ∏ x ∈ s, g x) '' Ici b
state_after: no goals