Theorem: CompleteLattice.independent_iff_supIndep
File: Mathlib/Order/SupIndep.lean

tactic: classical
  rw [Finset.supIndep_iff_disjoint_erase]
  refine Subtype.forall.trans (forall₂_congr fun a b => ?_)
  rw [Finset.sup_eq_iSup]
  congr! 1
  refine iSup_subtype.trans ?_
  congr! 1
  simp [iSup_and, @iSup_comm _ (_ ∈ s)]
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝ : CompleteLattice α
s : Finset ι
f : ι → α
⊢ Independent (f ∘ Subtype.val) ↔ s.SupIndep f
state_after: no goals

tactic: rw [Finset.supIndep_iff_disjoint_erase]
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝ : CompleteLattice α
s : Finset ι
f : ι → α
⊢ Independent (f ∘ Subtype.val) ↔ s.SupIndep f
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝ : CompleteLattice α
s : Finset ι
f : ι → α
⊢ Independent (f ∘ Subtype.val) ↔ ∀ i ∈ s, Disjoint (f i) ((s.erase i).sup f)

tactic: refine Subtype.forall.trans (forall₂_congr fun a b => ?_)
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝ : CompleteLattice α
s : Finset ι
f : ι → α
⊢ Independent (f ∘ Subtype.val) ↔ ∀ i ∈ s, Disjoint (f i) ((s.erase i).sup f)
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝ : CompleteLattice α
s : Finset ι
f : ι → α
a : ι
b : a ∈ s
⊢ Disjoint ((f ∘ Subtype.val) ⟨a, b⟩) (⨆ j, ⨆ (_ : j ≠ ⟨a, b⟩), (f ∘ Subtype.val) j) ↔
    Disjoint (f a) ((s.erase a).sup f)

tactic: rw [Finset.sup_eq_iSup]
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝ : CompleteLattice α
s : Finset ι
f : ι → α
a : ι
b : a ∈ s
⊢ Disjoint ((f ∘ Subtype.val) ⟨a, b⟩) (⨆ j, ⨆ (_ : j ≠ ⟨a, b⟩), (f ∘ Subtype.val) j) ↔
    Disjoint (f a) ((s.erase a).sup f)
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝ : CompleteLattice α
s : Finset ι
f : ι → α
a : ι
b : a ∈ s
⊢ Disjoint ((f ∘ Subtype.val) ⟨a, b⟩) (⨆ j, ⨆ (_ : j ≠ ⟨a, b⟩), (f ∘ Subtype.val) j) ↔
    Disjoint (f a) (⨆ a_1 ∈ s.erase a, f a_1)

tactic: congr! 1
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝ : CompleteLattice α
s : Finset ι
f : ι → α
a : ι
b : a ∈ s
⊢ Disjoint ((f ∘ Subtype.val) ⟨a, b⟩) (⨆ j, ⨆ (_ : j ≠ ⟨a, b⟩), (f ∘ Subtype.val) j) ↔
    Disjoint (f a) (⨆ a_1 ∈ s.erase a, f a_1)
state_after: case a.h.e'_5
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝ : CompleteLattice α
s : Finset ι
f : ι → α
a : ι
b : a ∈ s
⊢ ⨆ j, ⨆ (_ : j ≠ ⟨a, b⟩), (f ∘ Subtype.val) j = ⨆ a_1 ∈ s.erase a, f a_1

tactic: refine iSup_subtype.trans ?_
state_before: case a.h.e'_5
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝ : CompleteLattice α
s : Finset ι
f : ι → α
a : ι
b : a ∈ s
⊢ ⨆ j, ⨆ (_ : j ≠ ⟨a, b⟩), (f ∘ Subtype.val) j = ⨆ a_1 ∈ s.erase a, f a_1
state_after: case a.h.e'_5
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝ : CompleteLattice α
s : Finset ι
f : ι → α
a : ι
b : a ∈ s
⊢ ⨆ i, ⨆ (h : i ∈ s), ⨆ (_ : ⟨i, h⟩ ≠ ⟨a, b⟩), (f ∘ Subtype.val) ⟨i, h⟩ = ⨆ a_1 ∈ s.erase a, f a_1

tactic: congr! 1
state_before: case a.h.e'_5
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝ : CompleteLattice α
s : Finset ι
f : ι → α
a : ι
b : a ∈ s
⊢ ⨆ i, ⨆ (h : i ∈ s), ⨆ (_ : ⟨i, h⟩ ≠ ⟨a, b⟩), (f ∘ Subtype.val) ⟨i, h⟩ = ⨆ a_1 ∈ s.erase a, f a_1
state_after: case a.h.e'_5.h.e'_4
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝ : CompleteLattice α
s : Finset ι
f : ι → α
a : ι
b : a ∈ s
⊢ (fun i => ⨆ (h : i ∈ s), ⨆ (_ : ⟨i, h⟩ ≠ ⟨a, b⟩), (f ∘ Subtype.val) ⟨i, h⟩) = fun a_1 =>
    ⨆ (_ : a_1 ∈ s.erase a), f a_1

tactic: simp [iSup_and, @iSup_comm _ (_ ∈ s)]
state_before: case a.h.e'_5.h.e'_4
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝ : CompleteLattice α
s : Finset ι
f : ι → α
a : ι
b : a ∈ s
⊢ (fun i => ⨆ (h : i ∈ s), ⨆ (_ : ⟨i, h⟩ ≠ ⟨a, b⟩), (f ∘ Subtype.val) ⟨i, h⟩) = fun a_1 =>
    ⨆ (_ : a_1 ∈ s.erase a), f a_1
state_after: no goals