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

tactic: intro t ht i hi hit
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t : Finset ι
f : ι → α
i : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
⊢ (Finset.image g s).SupIndep f
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t✝ : Finset ι
f : ι → α
i✝ : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
t : Finset ι
ht : t ⊆ Finset.image g s
i : ι
hi : i ∈ Finset.image g s
hit : i ∉ t
⊢ Disjoint (f i) (t.sup f)

tactic: rw [mem_image] at hi
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t✝ : Finset ι
f : ι → α
i✝ : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
t : Finset ι
ht : t ⊆ Finset.image g s
i : ι
hi : i ∈ Finset.image g s
hit : i ∉ t
⊢ Disjoint (f i) (t.sup f)
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t✝ : Finset ι
f : ι → α
i✝ : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
t : Finset ι
ht : t ⊆ Finset.image g s
i : ι
hi : ∃ a ∈ s, g a = i
hit : i ∉ t
⊢ Disjoint (f i) (t.sup f)

tactic: obtain ⟨i, hi, rfl⟩ := hi
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t✝ : Finset ι
f : ι → α
i✝ : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
t : Finset ι
ht : t ⊆ Finset.image g s
i : ι
hi : ∃ a ∈ s, g a = i
hit : i ∉ t
⊢ Disjoint (f i) (t.sup f)
state_after: case intro.intro
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t✝ : Finset ι
f : ι → α
i✝ : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
t : Finset ι
ht : t ⊆ Finset.image g s
i : ι'
hi : i ∈ s
hit : g i ∉ t
⊢ Disjoint (f (g i)) (t.sup f)

tactic: haveI : DecidableEq ι' := Classical.decEq _
state_before: case intro.intro
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t✝ : Finset ι
f : ι → α
i✝ : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
t : Finset ι
ht : t ⊆ Finset.image g s
i : ι'
hi : i ∈ s
hit : g i ∉ t
⊢ Disjoint (f (g i)) (t.sup f)
state_after: case intro.intro
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t✝ : Finset ι
f : ι → α
i✝ : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
t : Finset ι
ht : t ⊆ Finset.image g s
i : ι'
hi : i ∈ s
hit : g i ∉ t
this : DecidableEq ι'
⊢ Disjoint (f (g i)) (t.sup f)

tactic: suffices hts : t ⊆ (s.erase i).image g by
  refine (supIndep_iff_disjoint_erase.1 hs i hi).mono_right ((sup_mono hts).trans ?_)
  rw [sup_image]
state_before: case intro.intro
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t✝ : Finset ι
f : ι → α
i✝ : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
t : Finset ι
ht : t ⊆ Finset.image g s
i : ι'
hi : i ∈ s
hit : g i ∉ t
this : DecidableEq ι'
⊢ Disjoint (f (g i)) (t.sup f)
state_after: case intro.intro
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t✝ : Finset ι
f : ι → α
i✝ : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
t : Finset ι
ht : t ⊆ Finset.image g s
i : ι'
hi : i ∈ s
hit : g i ∉ t
this : DecidableEq ι'
⊢ t ⊆ Finset.image g (s.erase i)

tactic: rintro j hjt
state_before: case intro.intro
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t✝ : Finset ι
f : ι → α
i✝ : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
t : Finset ι
ht : t ⊆ Finset.image g s
i : ι'
hi : i ∈ s
hit : g i ∉ t
this : DecidableEq ι'
⊢ t ⊆ Finset.image g (s.erase i)
state_after: case intro.intro
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t✝ : Finset ι
f : ι → α
i✝ : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
t : Finset ι
ht : t ⊆ Finset.image g s
i : ι'
hi : i ∈ s
hit : g i ∉ t
this : DecidableEq ι'
j : ι
hjt : j ∈ t
⊢ j ∈ Finset.image g (s.erase i)

tactic: obtain ⟨j, hj, rfl⟩ := mem_image.1 (ht hjt)
state_before: case intro.intro
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t✝ : Finset ι
f : ι → α
i✝ : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
t : Finset ι
ht : t ⊆ Finset.image g s
i : ι'
hi : i ∈ s
hit : g i ∉ t
this : DecidableEq ι'
j : ι
hjt : j ∈ t
⊢ j ∈ Finset.image g (s.erase i)
state_after: case intro.intro.intro.intro
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t✝ : Finset ι
f : ι → α
i✝ : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
t : Finset ι
ht : t ⊆ Finset.image g s
i : ι'
hi : i ∈ s
hit : g i ∉ t
this : DecidableEq ι'
j : ι'
hj : j ∈ s
hjt : g j ∈ t
⊢ g j ∈ Finset.image g (s.erase i)

tactic: exact mem_image_of_mem _ (mem_erase.2 ⟨ne_of_apply_ne g (ne_of_mem_of_not_mem hjt hit), hj⟩)
state_before: case intro.intro.intro.intro
α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t✝ : Finset ι
f : ι → α
i✝ : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
t : Finset ι
ht : t ⊆ Finset.image g s
i : ι'
hi : i ∈ s
hit : g i ∉ t
this : DecidableEq ι'
j : ι'
hj : j ∈ s
hjt : g j ∈ t
⊢ g j ∈ Finset.image g (s.erase i)
state_after: no goals

tactic: refine (supIndep_iff_disjoint_erase.1 hs i hi).mono_right ((sup_mono hts).trans ?_)
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t✝ : Finset ι
f : ι → α
i✝ : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
t : Finset ι
ht : t ⊆ Finset.image g s
i : ι'
hi : i ∈ s
hit : g i ∉ t
this : DecidableEq ι'
hts : t ⊆ Finset.image g (s.erase i)
⊢ Disjoint (f (g i)) (t.sup f)
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t✝ : Finset ι
f : ι → α
i✝ : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
t : Finset ι
ht : t ⊆ Finset.image g s
i : ι'
hi : i ∈ s
hit : g i ∉ t
this : DecidableEq ι'
hts : t ⊆ Finset.image g (s.erase i)
⊢ (Finset.image g (s.erase i)).sup f ≤ (s.erase i).sup (f ∘ g)

tactic: rw [sup_image]
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝² : Lattice α
inst✝¹ : OrderBot α
s✝ t✝ : Finset ι
f : ι → α
i✝ : ι
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → ι
hs : s.SupIndep (f ∘ g)
t : Finset ι
ht : t ⊆ Finset.image g s
i : ι'
hi : i ∈ s
hit : g i ∉ t
this : DecidableEq ι'
hts : t ⊆ Finset.image g (s.erase i)
⊢ (Finset.image g (s.erase i)).sup f ≤ (s.erase i).sup (f ∘ g)
state_after: no goals