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

tactic: intro t _ i _ hi
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : Lattice α
inst✝ : OrderBot α
s t : Finset ι
f : ι → α
i : ι
hs : s.SupIndep f
⊢ s.attach.SupIndep fun a => f ↑a
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : Lattice α
inst✝ : OrderBot α
s t✝ : Finset ι
f : ι → α
i✝ : ι
hs : s.SupIndep f
t : Finset { x // x ∈ s }
a✝¹ : t ⊆ s.attach
i : { x // x ∈ s }
a✝ : i ∈ s.attach
hi : i ∉ t
⊢ Disjoint ((fun a => f ↑a) i) (t.sup fun a => f ↑a)

tactic: classical
  have : (fun (a : { x // x ∈ s }) => f ↑a) = f ∘ (fun a : { x // x ∈ s } => ↑a) := rfl
  rw [this, ← Finset.sup_image]
  refine hs (image_subset_iff.2 fun (j : { x // x ∈ s }) _ => j.2) i.2 fun hi' => hi ?_
  rw [mem_image] at hi'
  obtain ⟨j, hj, hji⟩ := hi'
  rwa [Subtype.ext hji] at hj
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : Lattice α
inst✝ : OrderBot α
s t✝ : Finset ι
f : ι → α
i✝ : ι
hs : s.SupIndep f
t : Finset { x // x ∈ s }
a✝¹ : t ⊆ s.attach
i : { x // x ∈ s }
a✝ : i ∈ s.attach
hi : i ∉ t
⊢ Disjoint ((fun a => f ↑a) i) (t.sup fun a => f ↑a)
state_after: no goals

tactic: have : (fun (a : { x // x ∈ s }) => f ↑a) = f ∘ (fun a : { x // x ∈ s } => ↑a) := rfl
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : Lattice α
inst✝ : OrderBot α
s t✝ : Finset ι
f : ι → α
i✝ : ι
hs : s.SupIndep f
t : Finset { x // x ∈ s }
a✝¹ : t ⊆ s.attach
i : { x // x ∈ s }
a✝ : i ∈ s.attach
hi : i ∉ t
⊢ Disjoint ((fun a => f ↑a) i) (t.sup fun a => f ↑a)
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : Lattice α
inst✝ : OrderBot α
s t✝ : Finset ι
f : ι → α
i✝ : ι
hs : s.SupIndep f
t : Finset { x // x ∈ s }
a✝¹ : t ⊆ s.attach
i : { x // x ∈ s }
a✝ : i ∈ s.attach
hi : i ∉ t
this : (fun a => f ↑a) = f ∘ fun a => ↑a
⊢ Disjoint ((fun a => f ↑a) i) (t.sup fun a => f ↑a)

tactic: rw [this, ← Finset.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✝ : ι
hs : s.SupIndep f
t : Finset { x // x ∈ s }
a✝¹ : t ⊆ s.attach
i : { x // x ∈ s }
a✝ : i ∈ s.attach
hi : i ∉ t
this : (fun a => f ↑a) = f ∘ fun a => ↑a
⊢ Disjoint ((fun a => f ↑a) i) (t.sup fun a => f ↑a)
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : Lattice α
inst✝ : OrderBot α
s t✝ : Finset ι
f : ι → α
i✝ : ι
hs : s.SupIndep f
t : Finset { x // x ∈ s }
a✝¹ : t ⊆ s.attach
i : { x // x ∈ s }
a✝ : i ∈ s.attach
hi : i ∉ t
this : (fun a => f ↑a) = f ∘ fun a => ↑a
⊢ Disjoint ((f ∘ fun a => ↑a) i) ((Finset.image (fun a => ↑a) t).sup f)

tactic: refine hs (image_subset_iff.2 fun (j : { x // x ∈ s }) _ => j.2) i.2 fun hi' => hi ?_
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : Lattice α
inst✝ : OrderBot α
s t✝ : Finset ι
f : ι → α
i✝ : ι
hs : s.SupIndep f
t : Finset { x // x ∈ s }
a✝¹ : t ⊆ s.attach
i : { x // x ∈ s }
a✝ : i ∈ s.attach
hi : i ∉ t
this : (fun a => f ↑a) = f ∘ fun a => ↑a
⊢ Disjoint ((f ∘ fun a => ↑a) i) ((Finset.image (fun a => ↑a) 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✝ : ι
hs : s.SupIndep f
t : Finset { x // x ∈ s }
a✝¹ : t ⊆ s.attach
i : { x // x ∈ s }
a✝ : i ∈ s.attach
hi : i ∉ t
this : (fun a => f ↑a) = f ∘ fun a => ↑a
hi' : (fun a => ↑a) i ∈ Finset.image Subtype.val t
⊢ i ∈ t

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✝ : ι
hs : s.SupIndep f
t : Finset { x // x ∈ s }
a✝¹ : t ⊆ s.attach
i : { x // x ∈ s }
a✝ : i ∈ s.attach
hi : i ∉ t
this : (fun a => f ↑a) = f ∘ fun a => ↑a
hi' : (fun a => ↑a) i ∈ Finset.image Subtype.val t
⊢ i ∈ t
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : Lattice α
inst✝ : OrderBot α
s t✝ : Finset ι
f : ι → α
i✝ : ι
hs : s.SupIndep f
t : Finset { x // x ∈ s }
a✝¹ : t ⊆ s.attach
i : { x // x ∈ s }
a✝ : i ∈ s.attach
hi : i ∉ t
this : (fun a => f ↑a) = f ∘ fun a => ↑a
hi' : ∃ a ∈ t, ↑a = (fun a => ↑a) i
⊢ i ∈ t

tactic: obtain ⟨j, hj, hji⟩ := hi'
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
ι' : Type u_4
inst✝¹ : Lattice α
inst✝ : OrderBot α
s t✝ : Finset ι
f : ι → α
i✝ : ι
hs : s.SupIndep f
t : Finset { x // x ∈ s }
a✝¹ : t ⊆ s.attach
i : { x // x ∈ s }
a✝ : i ∈ s.attach
hi : i ∉ t
this : (fun a => f ↑a) = f ∘ fun a => ↑a
hi' : ∃ a ∈ t, ↑a = (fun a => ↑a) i
⊢ i ∈ t
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✝ : ι
hs : s.SupIndep f
t : Finset { x // x ∈ s }
a✝¹ : t ⊆ s.attach
i : { x // x ∈ s }
a✝ : i ∈ s.attach
hi : i ∉ t
this : (fun a => f ↑a) = f ∘ fun a => ↑a
j : { x // x ∈ s }
hj : j ∈ t
hji : ↑j = (fun a => ↑a) i
⊢ i ∈ t

tactic: rwa [Subtype.ext hji] at hj
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✝ : ι
hs : s.SupIndep f
t : Finset { x // x ∈ s }
a✝¹ : t ⊆ s.attach
i : { x // x ∈ s }
a✝ : i ∈ s.attach
hi : i ∉ t
this : (fun a => f ↑a) = f ∘ fun a => ↑a
j : { x // x ∈ s }
hj : j ∈ t
hji : ↑j = (fun a => ↑a) i
⊢ i ∈ t
state_after: no goals