Theorem: Finset.prodMk_sup'_sup'
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 α✝
s✝ : Finset β✝
H : s✝.Nonempty
f✝ : β✝ → α✝
ι : Type u_7
κ : Type u_8
α : Type u_9
β : Type u_10
inst✝¹ : SemilatticeSup α
inst✝ : SemilatticeSup β
s : Finset ι
t : Finset κ
hs : s.Nonempty
ht : t.Nonempty
f : ι → α
g : κ → β
i : α × β
⊢ (s.sup' hs f, t.sup' ht g) ≤ i ↔ (s ×ˢ t).sup' ⋯ (Prod.map f 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 α✝
s✝ : Finset β✝
H : s✝.Nonempty
f✝ : β✝ → α✝
ι : Type u_7
κ : Type u_8
α : Type u_9
β : Type u_10
inst✝¹ : SemilatticeSup α
inst✝ : SemilatticeSup β
s : Finset ι
t : Finset κ
ht : t.Nonempty
f : ι → α
g : κ → β
i : α × β
a : ι
ha : a ∈ s
⊢ (s.sup' ⋯ f, t.sup' ht g) ≤ i ↔ (s ×ˢ t).sup' ⋯ (Prod.map f 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 α✝
s✝ : Finset β✝
H : s✝.Nonempty
f✝ : β✝ → α✝
ι : Type u_7
κ : Type u_8
α : Type u_9
β : Type u_10
inst✝¹ : SemilatticeSup α
inst✝ : SemilatticeSup β
s : Finset ι
t : Finset κ
ht : t.Nonempty
f : ι → α
g : κ → β
i : α × β
a : ι
ha : a ∈ s
⊢ (s.sup' ⋯ f, t.sup' ht g) ≤ i ↔ (s ×ˢ t).sup' ⋯ (Prod.map f 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 α✝
s✝ : Finset β✝
H : s✝.Nonempty
f✝ : β✝ → α✝
ι : Type u_7
κ : Type u_8
α : Type u_9
β : Type u_10
inst✝¹ : SemilatticeSup α
inst✝ : SemilatticeSup β
s : Finset ι
t : Finset κ
f : ι → α
g : κ → β
i : α × β
a : ι
ha : a ∈ s
b : κ
hb : b ∈ t
⊢ (s.sup' ⋯ f, t.sup' ⋯ g) ≤ i ↔ (s ×ˢ t).sup' ⋯ (Prod.map f 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 α✝
s✝ : Finset β✝
H : s✝.Nonempty
f✝ : β✝ → α✝
ι : Type u_7
κ : Type u_8
α : Type u_9
β : Type u_10
inst✝¹ : SemilatticeSup α
inst✝ : SemilatticeSup β
s : Finset ι
t : Finset κ
f : ι → α
g : κ → β
i : α × β
a : ι
ha : a ∈ s
b : κ
hb : b ∈ t
⊢ (s.sup' ⋯ f, t.sup' ⋯ g) ≤ i ↔ (s ×ˢ t).sup' ⋯ (Prod.map f 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 α✝
s✝ : Finset β✝
H : s✝.Nonempty
f✝ : β✝ → α✝
ι : Type u_7
κ : Type u_8
α : Type u_9
β : Type u_10
inst✝¹ : SemilatticeSup α
inst✝ : SemilatticeSup β
s : Finset ι
t : Finset κ
f : ι → α
g : κ → β
i : α × β
a : ι
ha : a ∈ s
b : κ
hb : b ∈ t
⊢ ((∀ b ∈ s, f b ≤ i.1) ∧ ∀ b ∈ t, g b ≤ i.2) ↔ ∀ (a : ι) (b : κ), a ∈ s → b ∈ t → f a ≤ i.1 ∧ g b ≤ i.2
tactic: simp only [Prod.map, 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 α✝
s✝ : Finset β✝
H : s✝.Nonempty
f✝ : β✝ → α✝
ι : Type u_7
κ : Type u_8
α : Type u_9
β : Type u_10
inst✝¹ : SemilatticeSup α
inst✝ : SemilatticeSup β
s : Finset ι
t : Finset κ
f : ι → α
g : κ → β
i : α × β
a : ι
ha : a ∈ s
b : κ
hb : b ∈ t
⊢ ((∀ b ∈ s, f b ≤ i.1) ∧ ∀ b ∈ t, g b ≤ i.2) ↔ ∀ (a : ι) (b : κ), a ∈ s → b ∈ t → f a ≤ i.1 ∧ g b ≤ i.2
state_after: no goals
tactic: exact ⟨by aesop, fun h ↦ ⟨fun i hi ↦ (h _ _ hi hb).1, fun j hj ↦ (h _ _ ha hj).2⟩⟩