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

Proof steps:
state_before: α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a b c : α
P✝ : Finpartition a
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a
Q : (i : α) → i ∈ P.parts → Finpartition i
⊢ (P.parts.attach.biUnion fun i => (Q ↑i ⋯).parts).SupIndep id
state_after: α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a b c : α
P✝ : Finpartition a
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a
Q : (i : α) → i ∈ P.parts → Finpartition i
⊢ (↑(P.parts.attach.biUnion fun i => (Q ↑i ⋯).parts)).PairwiseDisjoint id
tactic: rw [supIndep_iff_pairwiseDisjoint]
state_before: α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a b c : α
P✝ : Finpartition a
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a
Q : (i : α) → i ∈ P.parts → Finpartition i
⊢ (↑(P.parts.attach.biUnion fun i => (Q ↑i ⋯).parts)).PairwiseDisjoint id
state_after: α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a✝ b✝ c : α
P✝ : Finpartition a✝
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a✝
Q : (i : α) → i ∈ P.parts → Finpartition i
a : α
ha : a ∈ ↑(P.parts.attach.biUnion fun i => (Q ↑i ⋯).parts)
b : α
hb : b ∈ ↑(P.parts.attach.biUnion fun i => (Q ↑i ⋯).parts)
h : a ≠ b
⊢ (Disjoint on id) a b
tactic: rintro a ha b hb h
state_before: α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a✝ b✝ c : α
P✝ : Finpartition a✝
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a✝
Q : (i : α) → i ∈ P.parts → Finpartition i
a : α
ha : a ∈ ↑(P.parts.attach.biUnion fun i => (Q ↑i ⋯).parts)
b : α
hb : b ∈ ↑(P.parts.attach.biUnion fun i => (Q ↑i ⋯).parts)
h : a ≠ b
⊢ (Disjoint on id) a b
state_after: α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a✝ b✝ c : α
P✝ : Finpartition a✝
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a✝
Q : (i : α) → i ∈ P.parts → Finpartition i
a : α
ha : ∃ a_1 ∈ P.parts.attach, a ∈ (Q ↑a_1 ⋯).parts
b : α
hb : ∃ a ∈ P.parts.attach, b ∈ (Q ↑a ⋯).parts
h : a ≠ b
⊢ (Disjoint on id) a b
tactic: rw [Finset.mem_coe, Finset.mem_biUnion] at ha hb
state_before: α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a✝ b✝ c : α
P✝ : Finpartition a✝
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a✝
Q : (i : α) → i ∈ P.parts → Finpartition i
a : α
ha : ∃ a_1 ∈ P.parts.attach, a ∈ (Q ↑a_1 ⋯).parts
b : α
hb : ∃ a ∈ P.parts.attach, b ∈ (Q ↑a ⋯).parts
h : a ≠ b
⊢ (Disjoint on id) a b
state_after: case intro.mk.intro
α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a✝ b✝ c : α
P✝ : Finpartition a✝
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a✝
Q : (i : α) → i ∈ P.parts → Finpartition i
a b : α
hb : ∃ a ∈ P.parts.attach, b ∈ (Q ↑a ⋯).parts
h : a ≠ b
A : α
hA : A ∈ P.parts
ha : a ∈ (Q ↑⟨A, hA⟩ ⋯).parts
⊢ (Disjoint on id) a b
tactic: obtain ⟨⟨A, hA⟩, -, ha⟩ := ha
state_before: case intro.mk.intro
α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a✝ b✝ c : α
P✝ : Finpartition a✝
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a✝
Q : (i : α) → i ∈ P.parts → Finpartition i
a b : α
hb : ∃ a ∈ P.parts.attach, b ∈ (Q ↑a ⋯).parts
h : a ≠ b
A : α
hA : A ∈ P.parts
ha : a ∈ (Q ↑⟨A, hA⟩ ⋯).parts
⊢ (Disjoint on id) a b
state_after: case intro.mk.intro.intro.mk.intro
α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a✝ b✝ c : α
P✝ : Finpartition a✝
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a✝
Q : (i : α) → i ∈ P.parts → Finpartition i
a b : α
h : a ≠ b
A : α
hA : A ∈ P.parts
ha : a ∈ (Q ↑⟨A, hA⟩ ⋯).parts
B : α
hB : B ∈ P.parts
hb : b ∈ (Q ↑⟨B, hB⟩ ⋯).parts
⊢ (Disjoint on id) a b
tactic: obtain ⟨⟨B, hB⟩, -, hb⟩ := hb
state_before: case intro.mk.intro.intro.mk.intro
α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a✝ b✝ c : α
P✝ : Finpartition a✝
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a✝
Q : (i : α) → i ∈ P.parts → Finpartition i
a b : α
h : a ≠ b
A : α
hA : A ∈ P.parts
ha : a ∈ (Q ↑⟨A, hA⟩ ⋯).parts
B : α
hB : B ∈ P.parts
hb : b ∈ (Q ↑⟨B, hB⟩ ⋯).parts
⊢ (Disjoint on id) a b
state_after: case intro.mk.intro.intro.mk.intro.inl
α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a✝ b✝ c : α
P✝ : Finpartition a✝
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a✝
Q : (i : α) → i ∈ P.parts → Finpartition i
a b : α
h : a ≠ b
A : α
hA : A ∈ P.parts
ha : a ∈ (Q ↑⟨A, hA⟩ ⋯).parts
hB : A ∈ P.parts
hb : b ∈ (Q ↑⟨A, hB⟩ ⋯).parts
⊢ (Disjoint on id) a b

case intro.mk.intro.intro.mk.intro.inr
α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a✝ b✝ c : α
P✝ : Finpartition a✝
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a✝
Q : (i : α) → i ∈ P.parts → Finpartition i
a b : α
h : a ≠ b
A : α
hA : A ∈ P.parts
ha : a ∈ (Q ↑⟨A, hA⟩ ⋯).parts
B : α
hB : B ∈ P.parts
hb : b ∈ (Q ↑⟨B, hB⟩ ⋯).parts
hAB : A ≠ B
⊢ (Disjoint on id) a b
tactic: obtain rfl | hAB := eq_or_ne A B
state_before: α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a b c : α
P✝ : Finpartition a
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a
Q : (i : α) → i ∈ P.parts → Finpartition i
⊢ (P.parts.attach.biUnion fun i => (Q ↑i ⋯).parts).sup id = a
state_after: α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a b c : α
P✝ : Finpartition a
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a
Q : (i : α) → i ∈ P.parts → Finpartition i
⊢ (P.parts.attach.sup fun x => (Q ↑x ⋯).parts.sup id) = a
tactic: simp_rw [sup_biUnion]
state_before: α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a b c : α
P✝ : Finpartition a
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a
Q : (i : α) → i ∈ P.parts → Finpartition i
⊢ (P.parts.attach.sup fun x => (Q ↑x ⋯).parts.sup id) = a
state_after: α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a b c : α
P✝ : Finpartition a
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a
Q : (i : α) → i ∈ P.parts → Finpartition i
⊢ (P.parts.attach.sup fun x => (Q ↑x ⋯).parts.sup id) = P.parts.sup id

α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a b c : α
P✝ : Finpartition a
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a
Q : (i : α) → i ∈ P.parts → Finpartition i
⊢ P.parts.sup id = a
tactic: trans (sup P.parts id)
state_before: α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a b c : α
P✝ : Finpartition a
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a
Q : (i : α) → i ∈ P.parts → Finpartition i
h : ⊥ ∈ P.parts.attach.biUnion fun i => (Q ↑i ⋯).parts
⊢ False
state_after: α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a b c : α
P✝ : Finpartition a
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a
Q : (i : α) → i ∈ P.parts → Finpartition i
h : ∃ a_1 ∈ P.parts.attach, ⊥ ∈ (Q ↑a_1 ⋯).parts
⊢ False
tactic: rw [Finset.mem_biUnion] at h
state_before: α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a b c : α
P✝ : Finpartition a
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a
Q : (i : α) → i ∈ P.parts → Finpartition i
h : ∃ a_1 ∈ P.parts.attach, ⊥ ∈ (Q ↑a_1 ⋯).parts
⊢ False
state_after: case intro.mk.intro
α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a b c : α
P✝ : Finpartition a
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a
Q : (i : α) → i ∈ P.parts → Finpartition i
A : α
hA : A ∈ P.parts
h : ⊥ ∈ (Q ↑⟨A, hA⟩ ⋯).parts
⊢ False
tactic: obtain ⟨⟨A, hA⟩, -, h⟩ := h
state_before: case intro.mk.intro
α : Type u_1
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
inst✝ : DecidableEq α
a b c : α
P✝ : Finpartition a
Q✝ : (i : α) → i ∈ P✝.parts → Finpartition i
P : Finpartition a
Q : (i : α) → i ∈ P.parts → Finpartition i
A : α
hA : A ∈ P.parts
h : ⊥ ∈ (Q ↑⟨A, hA⟩ ⋯).parts
⊢ False
state_after: no goals
tactic: exact (Q A hA).not_bot_mem h