-- Mathlib/Order/SupIndep.lean
theorem SupIndep.sigma {β : ι → Type*} {s : Finset ι} {g : ∀ i, Finset (β i)}
    {f : Sigma β → α} (hs : s.SupIndep fun i => (g i).sup fun b => f ⟨i, b⟩)
    (hg : ∀ i ∈ s, (g i).SupIndep fun b => f ⟨i, b⟩) : (s.sigma g).SupIndep f

Proof state:
case mk.mk
α : Type u_1
ι : Type u_3
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
β : ι → Type u_5
s : Finset ι
g : (i : ι) → Finset (β i)
f : Sigma β → α
hs : s.SupIndep fun i => (g i).sup fun b => f ⟨i, b⟩
hg : ∀ i ∈ s, (g i).SupIndep fun b => f ⟨i, b⟩
t : Finset ((i : ι) × β i)
ht : t ⊆ s.sigma g
i : ι
b : β i
hi : ⟨i, b⟩.fst ∈ s ∧ ⟨i, b⟩.snd ∈ g ⟨i, b⟩.fst
hit : ⟨i, b⟩ ∉ t
j : ι
c : β j
hbc : ⟨i, b⟩ ≠ ⟨j, c⟩
hj : ⟨j, c⟩.fst ∈ s ∧ ⟨j, c⟩.snd ∈ g ⟨j, c⟩.fst
⊢ Disjoint (f ⟨i, b⟩) (f ⟨j, c⟩)

Tactic:
obtain rfl | hij := eq_or_ne i j

Result:
case mk.mk.inl
α : Type u_1
ι : Type u_3
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
β : ι → Type u_5
s : Finset ι
g : (i : ι) → Finset (β i)
f : Sigma β → α
hs : s.SupIndep fun i => (g i).sup fun b => f ⟨i, b⟩
hg : ∀ i ∈ s, (g i).SupIndep fun b => f ⟨i, b⟩
t : Finset ((i : ι) × β i)
ht : t ⊆ s.sigma g
i : ι
b : β i
hi : ⟨i, b⟩.fst ∈ s ∧ ⟨i, b⟩.snd ∈ g ⟨i, b⟩.fst
hit : ⟨i, b⟩ ∉ t
c : β i
hbc : ⟨i, b⟩ ≠ ⟨i, c⟩
hj : ⟨i, c⟩.fst ∈ s ∧ ⟨i, c⟩.snd ∈ g ⟨i, c⟩.fst
⊢ Disjoint (f ⟨i, b⟩) (f ⟨i, c⟩)

case mk.mk.inr
α : Type u_1
ι : Type u_3
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
β : ι → Type u_5
s : Finset ι
g : (i : ι) → Finset (β i)
f : Sigma β → α
hs : s.SupIndep fun i => (g i).sup fun b => f ⟨i, b⟩
hg : ∀ i ∈ s, (g i).SupIndep fun b => f ⟨i, b⟩
t : Finset ((i : ι) × β i)
ht : t ⊆ s.sigma g
i : ι
b : β i
hi : ⟨i, b⟩.fst ∈ s ∧ ⟨i, b⟩.snd ∈ g ⟨i, b⟩.fst
hit : ⟨i, b⟩ ∉ t
j : ι
c : β j
hbc : ⟨i, b⟩ ≠ ⟨j, c⟩
hj : ⟨j, c⟩.fst ∈ s ∧ ⟨j, c⟩.snd ∈ g ⟨j, c⟩.fst
hij : i ≠ j
⊢ Disjoint (f ⟨i, b⟩) (f ⟨j, c⟩)

Proof state:
case mk.mk
α : Type u_1
ι : Type u_3
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
β : ι → Type u_5
s : Finset ι
g : (i : ι) → Finset (β i)
f : Sigma β → α
hs : s.SupIndep fun i => (g i).sup fun b => f ⟨i, b⟩
hg : ∀ i ∈ s, (g i).SupIndep fun b => f ⟨i, b⟩
t : Finset ((i : ι) × β i)
ht : t ⊆ s.sigma g
i : ι
b : β i
hi : ⟨i, b⟩ ∈ s.sigma g
hit : ⟨i, b⟩ ∉ t
j : ι
c : β j
hj : ⟨j, c⟩ ∈ t
hbc : ⟨i, b⟩ ≠ ⟨j, c⟩
⊢ Disjoint (f ⟨i, b⟩) (f ⟨j, c⟩)

Tactic:
replace hj := ht hj

Result:
case mk.mk
α : Type u_1
ι : Type u_3
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
β : ι → Type u_5
s : Finset ι
g : (i : ι) → Finset (β i)
f : Sigma β → α
hs : s.SupIndep fun i => (g i).sup fun b => f ⟨i, b⟩
hg : ∀ i ∈ s, (g i).SupIndep fun b => f ⟨i, b⟩
t : Finset ((i : ι) × β i)
ht : t ⊆ s.sigma g
i : ι
b : β i
hi : ⟨i, b⟩ ∈ s.sigma g
hit : ⟨i, b⟩ ∉ t
j : ι
c : β j
hbc : ⟨i, b⟩ ≠ ⟨j, c⟩
hj : ⟨j, c⟩ ∈ s.sigma g
⊢ Disjoint (f ⟨i, b⟩) (f ⟨j, c⟩)

Proof state:
case mk.mk
α : Type u_1
ι : Type u_3
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
β : ι → Type u_5
s : Finset ι
g : (i : ι) → Finset (β i)
f : Sigma β → α
hs : s.SupIndep fun i => (g i).sup fun b => f ⟨i, b⟩
hg : ∀ i ∈ s, (g i).SupIndep fun b => f ⟨i, b⟩
t : Finset ((i : ι) × β i)
ht : t ⊆ s.sigma g
i : ι
b : β i
hi : ⟨i, b⟩ ∈ s.sigma g
hit : ⟨i, b⟩ ∉ t
j : ι
c : β j
hj : ⟨j, c⟩ ∈ t
⊢ Disjoint (f ⟨i, b⟩) (f ⟨j, c⟩)

Tactic:
have hbc := (ne_of_mem_of_not_mem hj hit).symm

Result:
case mk.mk
α : Type u_1
ι : Type u_3
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
β : ι → Type u_5
s : Finset ι
g : (i : ι) → Finset (β i)
f : Sigma β → α
hs : s.SupIndep fun i => (g i).sup fun b => f ⟨i, b⟩
hg : ∀ i ∈ s, (g i).SupIndep fun b => f ⟨i, b⟩
t : Finset ((i : ι) × β i)
ht : t ⊆ s.sigma g
i : ι
b : β i
hi : ⟨i, b⟩ ∈ s.sigma g
hit : ⟨i, b⟩ ∉ t
j : ι
c : β j
hj : ⟨j, c⟩ ∈ t
hbc : ⟨i, b⟩ ≠ ⟨j, c⟩
⊢ Disjoint (f ⟨i, b⟩) (f ⟨j, c⟩)

Proof state:
α : Type u_1
ι : Type u_3
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
β : ι → Type u_5
s : Finset ι
g : (i : ι) → Finset (β i)
f : Sigma β → α
hs : s.SupIndep fun i => (g i).sup fun b => f ⟨i, b⟩
hg : ∀ i ∈ s, (g i).SupIndep fun b => f ⟨i, b⟩
⊢ (s.sigma g).SupIndep f

Tactic:
rintro t ht ⟨i, b⟩ hi hit

Result:
case mk
α : Type u_1
ι : Type u_3
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
β : ι → Type u_5
s : Finset ι
g : (i : ι) → Finset (β i)
f : Sigma β → α
hs : s.SupIndep fun i => (g i).sup fun b => f ⟨i, b⟩
hg : ∀ i ∈ s, (g i).SupIndep fun b => f ⟨i, b⟩
t : Finset ((i : ι) × β i)
ht : t ⊆ s.sigma g
i : ι
b : β i
hi : ⟨i, b⟩ ∈ s.sigma g
hit : ⟨i, b⟩ ∉ t
⊢ Disjoint (f ⟨i, b⟩) (t.sup f)

Proof state:
case mk.mk.inr.refine_2
α : Type u_1
ι : Type u_3
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
β : ι → Type u_5
s : Finset ι
g : (i : ι) → Finset (β i)
f : Sigma β → α
hs : s.SupIndep fun i => (g i).sup fun b => f ⟨i, b⟩
hg : ∀ i ∈ s, (g i).SupIndep fun b => f ⟨i, b⟩
t : Finset ((i : ι) × β i)
ht : t ⊆ s.sigma g
i : ι
b : β i
hi : ⟨i, b⟩.fst ∈ s ∧ ⟨i, b⟩.snd ∈ g ⟨i, b⟩.fst
hit : ⟨i, b⟩ ∉ t
j : ι
c : β j
hbc : ⟨i, b⟩ ≠ ⟨j, c⟩
hj : ⟨j, c⟩.fst ∈ s ∧ ⟨j, c⟩.snd ∈ g ⟨j, c⟩.fst
hij : i ≠ j
⊢ f ⟨j, c⟩ ≤ (fun i => (g i).sup fun b => f ⟨i, b⟩) ⟨j, c⟩.fst

Tactic:
convert le_sup (α := α) hj.2

Result:
case h.e'_3
α : Type u_1
ι : Type u_3
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
β : ι → Type u_5
s : Finset ι
g : (i : ι) → Finset (β i)
f : Sigma β → α
hs : s.SupIndep fun i => (g i).sup fun b => f ⟨i, b⟩
hg : ∀ i ∈ s, (g i).SupIndep fun b => f ⟨i, b⟩
t : Finset ((i : ι) × β i)
ht : t ⊆ s.sigma g
i : ι
b : β i
hi : ⟨i, b⟩.fst ∈ s ∧ ⟨i, b⟩.snd ∈ g ⟨i, b⟩.fst
hit : ⟨i, b⟩ ∉ t
j : ι
c : β j
hbc : ⟨i, b⟩ ≠ ⟨j, c⟩
hj : ⟨j, c⟩.fst ∈ s ∧ ⟨j, c⟩.snd ∈ g ⟨j, c⟩.fst
hij : i ≠ j
⊢ f ⟨j, c⟩ = f ⟨⟨j, c⟩.fst, ⟨j, c⟩.snd⟩

Proof state:
case mk.mk.inr.refine_1
α : Type u_1
ι : Type u_3
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
β : ι → Type u_5
s : Finset ι
g : (i : ι) → Finset (β i)
f : Sigma β → α
hs : s.SupIndep fun i => (g i).sup fun b => f ⟨i, b⟩
hg : ∀ i ∈ s, (g i).SupIndep fun b => f ⟨i, b⟩
t : Finset ((i : ι) × β i)
ht : t ⊆ s.sigma g
i : ι
b : β i
hi : ⟨i, b⟩.fst ∈ s ∧ ⟨i, b⟩.snd ∈ g ⟨i, b⟩.fst
hit : ⟨i, b⟩ ∉ t
j : ι
c : β j
hbc : ⟨i, b⟩ ≠ ⟨j, c⟩
hj : ⟨j, c⟩.fst ∈ s ∧ ⟨j, c⟩.snd ∈ g ⟨j, c⟩.fst
hij : i ≠ j
⊢ f ⟨i, b⟩ ≤ (fun i => (g i).sup fun b => f ⟨i, b⟩) ⟨i, b⟩.fst

Tactic:
convert le_sup (α := α) hi.2

Result:
case h.e'_3
α : Type u_1
ι : Type u_3
inst✝¹ : DistribLattice α
inst✝ : OrderBot α
β : ι → Type u_5
s : Finset ι
g : (i : ι) → Finset (β i)
f : Sigma β → α
hs : s.SupIndep fun i => (g i).sup fun b => f ⟨i, b⟩
hg : ∀ i ∈ s, (g i).SupIndep fun b => f ⟨i, b⟩
t : Finset ((i : ι) × β i)
ht : t ⊆ s.sigma g
i : ι
b : β i
hi : ⟨i, b⟩.fst ∈ s ∧ ⟨i, b⟩.snd ∈ g ⟨i, b⟩.fst
hit : ⟨i, b⟩ ∉ t
j : ι
c : β j
hbc : ⟨i, b⟩ ≠ ⟨j, c⟩
hj : ⟨j, c⟩.fst ∈ s ∧ ⟨j, c⟩.snd ∈ g ⟨j, c⟩.fst
hij : i ≠ j
⊢ f ⟨i, b⟩ = f ⟨⟨i, b⟩.fst, ⟨i, b⟩.snd⟩