Theorem: Finpartition.biUnion_filter_atomise
File: Mathlib/Order/Partition/Finpartition.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : DecidableEq α
s t u : Finset α
P : Finpartition s
a : α
inst✝ : Fintype α
F : Finset (Finset α)
ht : t ∈ F
hts : t ⊆ s
⊢ (filter (fun u => u ⊆ t ∧ u.Nonempty) (atomise s F).parts).biUnion id = t
state_after: case a
α : Type u_1
inst✝¹ : DecidableEq α
s t u : Finset α
P : Finpartition s
a✝ : α
inst✝ : Fintype α
F : Finset (Finset α)
ht : t ∈ F
hts : t ⊆ s
a : α
⊢ a ∈ (filter (fun u => u ⊆ t ∧ u.Nonempty) (atomise s F).parts).biUnion id ↔ a ∈ t
tactic: ext a
state_before: case a
α : Type u_1
inst✝¹ : DecidableEq α
s t u : Finset α
P : Finpartition s
a✝ : α
inst✝ : Fintype α
F : Finset (Finset α)
ht : t ∈ F
hts : t ⊆ s
a : α
⊢ a ∈ (filter (fun u => u ⊆ t ∧ u.Nonempty) (atomise s F).parts).biUnion id ↔ a ∈ t
state_after: case a
α : Type u_1
inst✝¹ : DecidableEq α
s t u : Finset α
P : Finpartition s
a✝ : α
inst✝ : Fintype α
F : Finset (Finset α)
ht : t ∈ F
hts : t ⊆ s
a : α
ha : a ∈ t
⊢ ∃ a_1 ∈ filter (fun u => u ⊆ t ∧ u.Nonempty) (atomise s F).parts, a ∈ id a_1
tactic: refine mem_biUnion.trans ⟨fun ⟨u, hu, ha⟩ ↦ (mem_filter.1 hu).2.1 ha, fun ha ↦ ?_⟩
state_before: case a
α : Type u_1
inst✝¹ : DecidableEq α
s t u : Finset α
P : Finpartition s
a✝ : α
inst✝ : Fintype α
F : Finset (Finset α)
ht : t ∈ F
hts : t ⊆ s
a : α
ha : a ∈ t
⊢ ∃ a_1 ∈ filter (fun u => u ⊆ t ∧ u.Nonempty) (atomise s F).parts, a ∈ id a_1
state_after: case a.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
s t u✝ : Finset α
P : Finpartition s
a✝ : α
inst✝ : Fintype α
F : Finset (Finset α)
ht : t ∈ F
hts : t ⊆ s
a : α
ha : a ∈ t
u : Finset α
hu : u ∈ (atomise s F).parts
hau : a ∈ u
⊢ ∃ a_1 ∈ filter (fun u => u ⊆ t ∧ u.Nonempty) (atomise s F).parts, a ∈ id a_1
tactic: obtain ⟨u, hu, hau⟩ := (atomise s F).exists_mem (hts ha)
state_before: case a.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
s t u✝ : Finset α
P : Finpartition s
a✝ : α
inst✝ : Fintype α
F : Finset (Finset α)
ht : t ∈ F
hts : t ⊆ s
a : α
ha : a ∈ t
u : Finset α
hu : u ∈ (atomise s F).parts
hau : a ∈ u
⊢ ∃ a_1 ∈ filter (fun u => u ⊆ t ∧ u.Nonempty) (atomise s F).parts, a ∈ id a_1
state_after: case a.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
s t u✝ : Finset α
P : Finpartition s
a✝ : α
inst✝ : Fintype α
F : Finset (Finset α)
ht : t ∈ F
hts : t ⊆ s
a : α
ha : a ∈ t
u : Finset α
hu : u ∈ (atomise s F).parts
hau : a ∈ u
b : α
hb : b ∈ u
⊢ b ∈ t
tactic: refine ⟨u, mem_filter.2 ⟨hu, fun b hb ↦ ?_, _, hau⟩, hau⟩
state_before: case a.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
s t u✝ : Finset α
P : Finpartition s
a✝ : α
inst✝ : Fintype α
F : Finset (Finset α)
ht : t ∈ F
hts : t ⊆ s
a : α
ha : a ∈ t
u : Finset α
hu : u ∈ (atomise s F).parts
hau : a ∈ u
b : α
hb : b ∈ u
⊢ b ∈ t
state_after: case a.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
s t u : Finset α
P : Finpartition s
a✝ : α
inst✝ : Fintype α
F : Finset (Finset α)
ht : t ∈ F
hts : t ⊆ s
a : α
ha : a ∈ t
b : α
Q : Finset (Finset α)
_hQ : Q ⊆ F
hu : filter (fun i => ∀ u ∈ F, u ∈ Q ↔ i ∈ u) s ∈ (atomise s F).parts
hau : a ∈ filter (fun i => ∀ u ∈ F, u ∈ Q ↔ i ∈ u) s
hb : b ∈ filter (fun i => ∀ u ∈ F, u ∈ Q ↔ i ∈ u) s
⊢ b ∈ t
tactic: obtain ⟨Q, _hQ, rfl⟩ := (mem_atomise.1 hu).2
state_before: case a.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
s t u : Finset α
P : Finpartition s
a✝ : α
inst✝ : Fintype α
F : Finset (Finset α)
ht : t ∈ F
hts : t ⊆ s
a : α
ha : a ∈ t
b : α
Q : Finset (Finset α)
_hQ : Q ⊆ F
hu : filter (fun i => ∀ u ∈ F, u ∈ Q ↔ i ∈ u) s ∈ (atomise s F).parts
hau : a ∈ filter (fun i => ∀ u ∈ F, u ∈ Q ↔ i ∈ u) s
hb : b ∈ filter (fun i => ∀ u ∈ F, u ∈ Q ↔ i ∈ u) s
⊢ b ∈ t
state_after: case a.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
s t u : Finset α
P : Finpartition s
a✝ : α
inst✝ : Fintype α
F : Finset (Finset α)
ht : t ∈ F
hts : t ⊆ s
a : α
ha : a ∈ t
b : α
Q : Finset (Finset α)
_hQ : Q ⊆ F
hu : filter (fun i => ∀ u ∈ F, u ∈ Q ↔ i ∈ u) s ∈ (atomise s F).parts
hau : a ∈ s ∧ ∀ u ∈ F, u ∈ Q ↔ a ∈ u
hb : b ∈ s ∧ ∀ u ∈ F, u ∈ Q ↔ b ∈ u
⊢ b ∈ t
tactic: rw [mem_filter] at hau hb
state_before: case a.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
s t u : Finset α
P : Finpartition s
a✝ : α
inst✝ : Fintype α
F : Finset (Finset α)
ht : t ∈ F
hts : t ⊆ s
a : α
ha : a ∈ t
b : α
Q : Finset (Finset α)
_hQ : Q ⊆ F
hu : filter (fun i => ∀ u ∈ F, u ∈ Q ↔ i ∈ u) s ∈ (atomise s F).parts
hau : a ∈ s ∧ ∀ u ∈ F, u ∈ Q ↔ a ∈ u
hb : b ∈ s ∧ ∀ u ∈ F, u ∈ Q ↔ b ∈ u
⊢ b ∈ t
state_after: no goals
tactic: rwa [← hb.2 _ ht, hau.2 _ ht]