Theorem: Finset.SupIndep.product
File: Mathlib/Order/SupIndep.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
s : Finset ι
t : Finset ι'
f : ι × ι' → α
hs : s.SupIndep fun i => t.sup fun i' => f (i, i')
ht : t.SupIndep fun i' => s.sup fun i => f (i, i')
⊢ (s ×ˢ t).SupIndep f
state_after: case mk
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
s : Finset ι
t : Finset ι'
f : ι × ι' → α
hs : s.SupIndep fun i => t.sup fun i' => f (i, i')
ht : t.SupIndep fun i' => s.sup fun i => f (i, i')
u : Finset (ι × ι')
hu : u ⊆ s ×ˢ t
i : ι
i' : ι'
hi : (i, i') ∈ s ×ˢ t
hiu : (i, i') ∉ u
⊢ Disjoint (f (i, i')) (u.sup f)
tactic: rintro u hu ⟨i, i'⟩ hi hiu
state_before: case mk
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
s : Finset ι
t : Finset ι'
f : ι × ι' → α
hs : s.SupIndep fun i => t.sup fun i' => f (i, i')
ht : t.SupIndep fun i' => s.sup fun i => f (i, i')
u : Finset (ι × ι')
hu : u ⊆ s ×ˢ t
i : ι
i' : ι'
hi : (i, i') ∈ s ×ˢ t
hiu : (i, i') ∉ u
⊢ Disjoint (f (i, i')) (u.sup f)
state_after: case mk
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
s : Finset ι
t : Finset ι'
f : ι × ι' → α
hs : s.SupIndep fun i => t.sup fun i' => f (i, i')
ht : t.SupIndep fun i' => s.sup fun i => f (i, i')
u : Finset (ι × ι')
hu : u ⊆ s ×ˢ t
i : ι
i' : ι'
hi : (i, i') ∈ s ×ˢ t
hiu : (i, i') ∉ u
⊢ ∀ ⦃i_1 : ι × ι'⦄, i_1 ∈ u → Disjoint (f (i, i')) (f i_1)
tactic: rw [Finset.disjoint_sup_right]
state_before: case mk
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
s : Finset ι
t : Finset ι'
f : ι × ι' → α
hs : s.SupIndep fun i => t.sup fun i' => f (i, i')
ht : t.SupIndep fun i' => s.sup fun i => f (i, i')
u : Finset (ι × ι')
hu : u ⊆ s ×ˢ t
i : ι
i' : ι'
hi : (i, i') ∈ s ×ˢ t
hiu : (i, i') ∉ u
⊢ ∀ ⦃i_1 : ι × ι'⦄, i_1 ∈ u → Disjoint (f (i, i')) (f i_1)
state_after: case mk.mk
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
s : Finset ι
t : Finset ι'
f : ι × ι' → α
hs : s.SupIndep fun i => t.sup fun i' => f (i, i')
ht : t.SupIndep fun i' => s.sup fun i => f (i, i')
u : Finset (ι × ι')
hu : u ⊆ s ×ˢ t
i : ι
i' : ι'
hi : (i, i') ∈ s ×ˢ t
hiu : (i, i') ∉ u
j : ι
j' : ι'
hj : (j, j') ∈ u
⊢ Disjoint (f (i, i')) (f (j, j'))
tactic: rintro ⟨j, j'⟩ hj
state_before: case mk.mk
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
s : Finset ι
t : Finset ι'
f : ι × ι' → α
hs : s.SupIndep fun i => t.sup fun i' => f (i, i')
ht : t.SupIndep fun i' => s.sup fun i => f (i, i')
u : Finset (ι × ι')
hu : u ⊆ s ×ˢ t
i : ι
i' : ι'
hi : (i, i') ∈ s ×ˢ t
hiu : (i, i') ∉ u
j : ι
j' : ι'
hj : (j, j') ∈ u
⊢ Disjoint (f (i, i')) (f (j, j'))
state_after: case mk.mk
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
s : Finset ι
t : Finset ι'
f : ι × ι' → α
hs : s.SupIndep fun i => t.sup fun i' => f (i, i')
ht : t.SupIndep fun i' => s.sup fun i => f (i, i')
u : Finset (ι × ι')
hu : u ⊆ s ×ˢ t
i : ι
i' : ι'
hi : (i, i') ∈ s ×ˢ t
hiu : (i, i') ∉ u
j : ι
j' : ι'
hj : (j, j') ∈ u
hij : (i, i') ≠ (j, j')
⊢ Disjoint (f (i, i')) (f (j, j'))
tactic: have hij := (ne_of_mem_of_not_mem hj hiu).symm
state_before: case mk.mk
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
s : Finset ι
t : Finset ι'
f : ι × ι' → α
hs : s.SupIndep fun i => t.sup fun i' => f (i, i')
ht : t.SupIndep fun i' => s.sup fun i => f (i, i')
u : Finset (ι × ι')
hu : u ⊆ s ×ˢ t
i : ι
i' : ι'
hi : (i, i') ∈ s ×ˢ t
hiu : (i, i') ∉ u
j : ι
j' : ι'
hj : (j, j') ∈ u
hij : (i, i') ≠ (j, j')
⊢ Disjoint (f (i, i')) (f (j, j'))
state_after: case mk.mk
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
s : Finset ι
t : Finset ι'
f : ι × ι' → α
hs : s.SupIndep fun i => t.sup fun i' => f (i, i')
ht : t.SupIndep fun i' => s.sup fun i => f (i, i')
u : Finset (ι × ι')
hu : u ⊆ s ×ˢ t
i : ι
i' : ι'
hi : (i, i') ∈ s ×ˢ t
hiu : (i, i') ∉ u
j : ι
j' : ι'
hij : (i, i') ≠ (j, j')
hj : (j, j') ∈ s ×ˢ t
⊢ Disjoint (f (i, i')) (f (j, j'))
tactic: replace hj := hu hj
state_before: case mk.mk
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
s : Finset ι
t : Finset ι'
f : ι × ι' → α
hs : s.SupIndep fun i => t.sup fun i' => f (i, i')
ht : t.SupIndep fun i' => s.sup fun i => f (i, i')
u : Finset (ι × ι')
hu : u ⊆ s ×ˢ t
i : ι
i' : ι'
hi : (i, i') ∈ s ×ˢ t
hiu : (i, i') ∉ u
j : ι
j' : ι'
hij : (i, i') ≠ (j, j')
hj : (j, j') ∈ s ×ˢ t
⊢ Disjoint (f (i, i')) (f (j, j'))
state_after: case mk.mk
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
s : Finset ι
t : Finset ι'
f : ι × ι' → α
hs : s.SupIndep fun i => t.sup fun i' => f (i, i')
ht : t.SupIndep fun i' => s.sup fun i => f (i, i')
u : Finset (ι × ι')
hu : u ⊆ s ×ˢ t
i : ι
i' : ι'
hi : (i, i').1 ∈ s ∧ (i, i').2 ∈ t
hiu : (i, i') ∉ u
j : ι
j' : ι'
hij : (i, i') ≠ (j, j')
hj : (j, j').1 ∈ s ∧ (j, j').2 ∈ t
⊢ Disjoint (f (i, i')) (f (j, j'))
tactic: rw [mem_product] at hi hj
state_before: case mk.mk
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
s : Finset ι
t : Finset ι'
f : ι × ι' → α
hs : s.SupIndep fun i => t.sup fun i' => f (i, i')
ht : t.SupIndep fun i' => s.sup fun i => f (i, i')
u : Finset (ι × ι')
hu : u ⊆ s ×ˢ t
i : ι
i' : ι'
hi : (i, i').1 ∈ s ∧ (i, i').2 ∈ t
hiu : (i, i') ∉ u
j : ι
j' : ι'
hij : (i, i') ≠ (j, j')
hj : (j, j').1 ∈ s ∧ (j, j').2 ∈ t
⊢ Disjoint (f (i, i')) (f (j, j'))
state_after: case mk.mk.inl
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
s : Finset ι
t : Finset ι'
f : ι × ι' → α
hs : s.SupIndep fun i => t.sup fun i' => f (i, i')
ht : t.SupIndep fun i' => s.sup fun i => f (i, i')
u : Finset (ι × ι')
hu : u ⊆ s ×ˢ t
i : ι
i' : ι'
hi : (i, i').1 ∈ s ∧ (i, i').2 ∈ t
hiu : (i, i') ∉ u
j' : ι'
hij : (i, i') ≠ (i, j')
hj : (i, j').1 ∈ s ∧ (i, j').2 ∈ t
⊢ Disjoint (f (i, i')) (f (i, j'))

case mk.mk.inr
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
s : Finset ι
t : Finset ι'
f : ι × ι' → α
hs : s.SupIndep fun i => t.sup fun i' => f (i, i')
ht : t.SupIndep fun i' => s.sup fun i => f (i, i')
u : Finset (ι × ι')
hu : u ⊆ s ×ˢ t
i : ι
i' : ι'
hi : (i, i').1 ∈ s ∧ (i, i').2 ∈ t
hiu : (i, i') ∉ u
j : ι
j' : ι'
hij✝ : (i, i') ≠ (j, j')
hj : (j, j').1 ∈ s ∧ (j, j').2 ∈ t
hij : i ≠ j
⊢ Disjoint (f (i, i')) (f (j, j'))
tactic: obtain rfl | hij := eq_or_ne i j