Theorem: Finset.sup_prodMap
File: Mathlib/Data/Finset/Lattice.lean

Proof steps:
state_before: F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
ι✝ : Type u_5
κ✝ : Type u_6
inst✝⁵ : SemilatticeSup α✝
inst✝⁴ : OrderBot α✝
s✝ s₁ s₂ : Finset β✝
f✝ g✝ : β✝ → α✝
a : α✝
ι : Type u_7
κ : Type u_8
α : Type u_9
β : Type u_10
inst✝³ : SemilatticeSup α
inst✝² : SemilatticeSup β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
s : Finset ι
t : Finset κ
hs : s.Nonempty
ht : t.Nonempty
f : ι → α
g : κ → β
i : α × β
⊢ (s ×ˢ t).sup (Prod.map f g) ≤ i ↔ (s.sup f, t.sup g) ≤ i
state_after: case intro
F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
ι✝ : Type u_5
κ✝ : Type u_6
inst✝⁵ : SemilatticeSup α✝
inst✝⁴ : OrderBot α✝
s✝ s₁ s₂ : Finset β✝
f✝ g✝ : β✝ → α✝
a✝ : α✝
ι : Type u_7
κ : Type u_8
α : Type u_9
β : Type u_10
inst✝³ : SemilatticeSup α
inst✝² : SemilatticeSup β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
s : Finset ι
t : Finset κ
ht : t.Nonempty
f : ι → α
g : κ → β
i : α × β
a : ι
ha : a ∈ s
⊢ (s ×ˢ t).sup (Prod.map f g) ≤ i ↔ (s.sup f, t.sup g) ≤ i
tactic: obtain ⟨a, ha⟩ := hs
state_before: case intro
F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
ι✝ : Type u_5
κ✝ : Type u_6
inst✝⁵ : SemilatticeSup α✝
inst✝⁴ : OrderBot α✝
s✝ s₁ s₂ : Finset β✝
f✝ g✝ : β✝ → α✝
a✝ : α✝
ι : Type u_7
κ : Type u_8
α : Type u_9
β : Type u_10
inst✝³ : SemilatticeSup α
inst✝² : SemilatticeSup β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
s : Finset ι
t : Finset κ
ht : t.Nonempty
f : ι → α
g : κ → β
i : α × β
a : ι
ha : a ∈ s
⊢ (s ×ˢ t).sup (Prod.map f g) ≤ i ↔ (s.sup f, t.sup g) ≤ i
state_after: case intro.intro
F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
ι✝ : Type u_5
κ✝ : Type u_6
inst✝⁵ : SemilatticeSup α✝
inst✝⁴ : OrderBot α✝
s✝ s₁ s₂ : Finset β✝
f✝ g✝ : β✝ → α✝
a✝ : α✝
ι : Type u_7
κ : Type u_8
α : Type u_9
β : Type u_10
inst✝³ : SemilatticeSup α
inst✝² : SemilatticeSup β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
s : Finset ι
t : Finset κ
f : ι → α
g : κ → β
i : α × β
a : ι
ha : a ∈ s
b : κ
hb : b ∈ t
⊢ (s ×ˢ t).sup (Prod.map f g) ≤ i ↔ (s.sup f, t.sup g) ≤ i
tactic: obtain ⟨b, hb⟩ := ht
state_before: case intro.intro
F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
ι✝ : Type u_5
κ✝ : Type u_6
inst✝⁵ : SemilatticeSup α✝
inst✝⁴ : OrderBot α✝
s✝ s₁ s₂ : Finset β✝
f✝ g✝ : β✝ → α✝
a✝ : α✝
ι : Type u_7
κ : Type u_8
α : Type u_9
β : Type u_10
inst✝³ : SemilatticeSup α
inst✝² : SemilatticeSup β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
s : Finset ι
t : Finset κ
f : ι → α
g : κ → β
i : α × β
a : ι
ha : a ∈ s
b : κ
hb : b ∈ t
⊢ (s ×ˢ t).sup (Prod.map f g) ≤ i ↔ (s.sup f, t.sup g) ≤ i
state_after: case intro.intro
F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
ι✝ : Type u_5
κ✝ : Type u_6
inst✝⁵ : SemilatticeSup α✝
inst✝⁴ : OrderBot α✝
s✝ s₁ s₂ : Finset β✝
f✝ g✝ : β✝ → α✝
a✝ : α✝
ι : Type u_7
κ : Type u_8
α : Type u_9
β : Type u_10
inst✝³ : SemilatticeSup α
inst✝² : SemilatticeSup β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
s : Finset ι
t : Finset κ
f : ι → α
g : κ → β
i : α × β
a : ι
ha : a ∈ s
b : κ
hb : b ∈ t
⊢ (∀ (a : ι) (b : κ), a ∈ s → b ∈ t → f a ≤ i.1 ∧ g b ≤ i.2) ↔ (∀ b ∈ s, f b ≤ i.1) ∧ ∀ b ∈ t, g b ≤ i.2
tactic: simp only [Prod.map, Finset.sup_le_iff, mem_product, and_imp, Prod.forall, Prod.le_def]
state_before: case intro.intro
F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
ι✝ : Type u_5
κ✝ : Type u_6
inst✝⁵ : SemilatticeSup α✝
inst✝⁴ : OrderBot α✝
s✝ s₁ s₂ : Finset β✝
f✝ g✝ : β✝ → α✝
a✝ : α✝
ι : Type u_7
κ : Type u_8
α : Type u_9
β : Type u_10
inst✝³ : SemilatticeSup α
inst✝² : SemilatticeSup β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
s : Finset ι
t : Finset κ
f : ι → α
g : κ → β
i : α × β
a : ι
ha : a ∈ s
b : κ
hb : b ∈ t
⊢ (∀ (a : ι) (b : κ), a ∈ s → b ∈ t → f a ≤ i.1 ∧ g b ≤ i.2) ↔ (∀ b ∈ s, f b ≤ i.1) ∧ ∀ b ∈ t, g b ≤ i.2
state_after: no goals
tactic: exact ⟨fun h ↦ ⟨fun i hi ↦ (h _ _ hi hb).1, fun j hj ↦ (h _ _ ha hj).2⟩, by aesop⟩