Theorem: Finset.disjiUnion_disjiUnion
File: Mathlib/Data/Finset/Union.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
s : Finset α
f : α → Finset β
g : β → Finset γ
h1 : (↑s).PairwiseDisjoint f
h2 : (↑(s.disjiUnion f h1)).PairwiseDisjoint g
a : { x // x ∈ s }
x✝¹ : a ∈ ↑s.attach
b : { x // x ∈ s }
x✝ : b ∈ ↑s.attach
hab : a ≠ b
x : γ
hxa : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) a
hxb : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) b
⊢ False
state_after: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
s : Finset α
f : α → Finset β
g : β → Finset γ
h1 : (↑s).PairwiseDisjoint f
h2 : (↑(s.disjiUnion f h1)).PairwiseDisjoint g
a : { x // x ∈ s }
x✝¹ : a ∈ ↑s.attach
b : { x // x ∈ s }
x✝ : b ∈ ↑s.attach
hab : a ≠ b
x : γ
hxa : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) a
hxb : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) b
xa : β
hfa : xa ∈ f ↑a
hga : x ∈ g xa
⊢ False
tactic: obtain ⟨xa, hfa, hga⟩ := mem_disjiUnion.mp hxa
state_before: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
s : Finset α
f : α → Finset β
g : β → Finset γ
h1 : (↑s).PairwiseDisjoint f
h2 : (↑(s.disjiUnion f h1)).PairwiseDisjoint g
a : { x // x ∈ s }
x✝¹ : a ∈ ↑s.attach
b : { x // x ∈ s }
x✝ : b ∈ ↑s.attach
hab : a ≠ b
x : γ
hxa : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) a
hxb : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) b
xa : β
hfa : xa ∈ f ↑a
hga : x ∈ g xa
⊢ False
state_after: case intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
s : Finset α
f : α → Finset β
g : β → Finset γ
h1 : (↑s).PairwiseDisjoint f
h2 : (↑(s.disjiUnion f h1)).PairwiseDisjoint g
a : { x // x ∈ s }
x✝¹ : a ∈ ↑s.attach
b : { x // x ∈ s }
x✝ : b ∈ ↑s.attach
hab : a ≠ b
x : γ
hxa : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) a
hxb : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) b
xa : β
hfa : xa ∈ f ↑a
hga : x ∈ g xa
xb : β
hfb : xb ∈ f ↑b
hgb : x ∈ g xb
⊢ False
tactic: obtain ⟨xb, hfb, hgb⟩ := mem_disjiUnion.mp hxb
state_before: case intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
s : Finset α
f : α → Finset β
g : β → Finset γ
h1 : (↑s).PairwiseDisjoint f
h2 : (↑(s.disjiUnion f h1)).PairwiseDisjoint g
a : { x // x ∈ s }
x✝¹ : a ∈ ↑s.attach
b : { x // x ∈ s }
x✝ : b ∈ ↑s.attach
hab : a ≠ b
x : γ
hxa : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) a
hxb : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) b
xa : β
hfa : xa ∈ f ↑a
hga : x ∈ g xa
xb : β
hfb : xb ∈ f ↑b
hgb : x ∈ g xb
⊢ False
state_after: case intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
s : Finset α
f : α → Finset β
g : β → Finset γ
h1 : (↑s).PairwiseDisjoint f
h2 : (↑(s.disjiUnion f h1)).PairwiseDisjoint g
a : { x // x ∈ s }
x✝¹ : a ∈ ↑s.attach
b : { x // x ∈ s }
x✝ : b ∈ ↑s.attach
hab : a ≠ b
x : γ
hxa : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) a
hxb : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) b
xa : β
hfa : xa ∈ f ↑a
hga : x ∈ g xa
xb : β
hfb : xb ∈ f ↑b
hgb : x ∈ g xb
⊢ xa ≠ xb
tactic: refine disjoint_left.mp
            (h2 (mem_disjiUnion.mpr ⟨_, a.prop, hfa⟩) (mem_disjiUnion.mpr ⟨_, b.prop, hfb⟩) ?_) hga
            hgb
state_before: case intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
s : Finset α
f : α → Finset β
g : β → Finset γ
h1 : (↑s).PairwiseDisjoint f
h2 : (↑(s.disjiUnion f h1)).PairwiseDisjoint g
a : { x // x ∈ s }
x✝¹ : a ∈ ↑s.attach
b : { x // x ∈ s }
x✝ : b ∈ ↑s.attach
hab : a ≠ b
x : γ
hxa : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) a
hxb : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) b
xa : β
hfa : xa ∈ f ↑a
hga : x ∈ g xa
xb : β
hfb : xb ∈ f ↑b
hgb : x ∈ g xb
⊢ xa ≠ xb
state_after: case intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
s : Finset α
f : α → Finset β
g : β → Finset γ
h1 : (↑s).PairwiseDisjoint f
h2 : (↑(s.disjiUnion f h1)).PairwiseDisjoint g
a : { x // x ∈ s }
x✝¹ : a ∈ ↑s.attach
b : { x // x ∈ s }
x✝ : b ∈ ↑s.attach
hab : a ≠ b
x : γ
hxa : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) a
hxb : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) b
xa : β
hfa : xa ∈ f ↑a
hga : x ∈ g xa
hfb : xa ∈ f ↑b
hgb : x ∈ g xa
⊢ False
tactic: rintro rfl
state_before: case intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
s : Finset α
f : α → Finset β
g : β → Finset γ
h1 : (↑s).PairwiseDisjoint f
h2 : (↑(s.disjiUnion f h1)).PairwiseDisjoint g
a : { x // x ∈ s }
x✝¹ : a ∈ ↑s.attach
b : { x // x ∈ s }
x✝ : b ∈ ↑s.attach
hab : a ≠ b
x : γ
hxa : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) a
hxb : x ∈ (fun a => (f ↑a).disjiUnion g ⋯) b
xa : β
hfa : xa ∈ f ↑a
hga : x ∈ g xa
hfb : xa ∈ f ↑b
hgb : x ∈ g xa
⊢ False
state_after: no goals
tactic: exact disjoint_left.mp (h1 a.prop b.prop <| Subtype.coe_injective.ne hab) hfa hfb