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

tactic: obtain ⟨xa, hfa, hga⟩ := mem_disjiUnion.mp hxa
state_before: α : Type ?u.491855
β : Type ?u.491858
γ : Type ?u.491861
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
s : Finset α
f : α → Finset β
g : β → Finset γ
h1 : Set.PairwiseDisjoint (↑s) f
h2 : Set.PairwiseDisjoint (↑(disjiUnion s f h1)) g
a : { x // x ∈ s }
x✝¹ : a ∈ ↑(attach s)
b : { x // x ∈ s }
x✝ : b ∈ ↑(attach s)
hab : a ≠ b
x : γ
hxa :
  x ∈
    (fun a =>
        disjiUnion (f ↑a) g (_ : ∀ (b : β), b ∈ ↑(f ↑a) → ∀ (c : β), c ∈ ↑(f ↑a) → b ≠ c → (_root_.Disjoint on g) b c))
      a
hxb :
  x ∈
    (fun a =>
        disjiUnion (f ↑a) g (_ : ∀ (b : β), b ∈ ↑(f ↑a) → ∀ (c : β), c ∈ ↑(f ↑a) → b ≠ c → (_root_.Disjoint on g) b c))
      b
⊢ False

tactic: obtain ⟨xb, hfb, hgb⟩ := mem_disjiUnion.mp hxb
state_before: case intro.intro
α : Type ?u.491855
β : Type ?u.491858
γ : Type ?u.491861
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
s : Finset α
f : α → Finset β
g : β → Finset γ
h1 : Set.PairwiseDisjoint (↑s) f
h2 : Set.PairwiseDisjoint (↑(disjiUnion s f h1)) g
a : { x // x ∈ s }
x✝¹ : a ∈ ↑(attach s)
b : { x // x ∈ s }
x✝ : b ∈ ↑(attach s)
hab : a ≠ b
x : γ
hxa :
  x ∈
    (fun a =>
        disjiUnion (f ↑a) g (_ : ∀ (b : β), b ∈ ↑(f ↑a) → ∀ (c : β), c ∈ ↑(f ↑a) → b ≠ c → (_root_.Disjoint on g) b c))
      a
hxb :
  x ∈
    (fun a =>
        disjiUnion (f ↑a) g (_ : ∀ (b : β), b ∈ ↑(f ↑a) → ∀ (c : β), c ∈ ↑(f ↑a) → b ≠ c → (_root_.Disjoint on g) b c))
      b
xa : β
hfa : xa ∈ f ↑a
hga : x ∈ g xa
⊢ False

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.491855
β : Type ?u.491858
γ : Type ?u.491861
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
s : Finset α
f : α → Finset β
g : β → Finset γ
h1 : Set.PairwiseDisjoint (↑s) f
h2 : Set.PairwiseDisjoint (↑(disjiUnion s f h1)) g
a : { x // x ∈ s }
x✝¹ : a ∈ ↑(attach s)
b : { x // x ∈ s }
x✝ : b ∈ ↑(attach s)
hab : a ≠ b
x : γ
hxa :
  x ∈
    (fun a =>
        disjiUnion (f ↑a) g (_ : ∀ (b : β), b ∈ ↑(f ↑a) → ∀ (c : β), c ∈ ↑(f ↑a) → b ≠ c → (_root_.Disjoint on g) b c))
      a
hxb :
  x ∈
    (fun a =>
        disjiUnion (f ↑a) g (_ : ∀ (b : β), b ∈ ↑(f ↑a) → ∀ (c : β), c ∈ ↑(f ↑a) → b ≠ c → (_root_.Disjoint on g) b c))
      b
xa : β
hfa : xa ∈ f ↑a
hga : x ∈ g xa
xb : β
hfb : xb ∈ f ↑b
hgb : x ∈ g xb
⊢ False

tactic: rintro rfl
state_before: case intro.intro.intro.intro
α : Type ?u.491855
β : Type ?u.491858
γ : Type ?u.491861
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
s : Finset α
f : α → Finset β
g : β → Finset γ
h1 : Set.PairwiseDisjoint (↑s) f
h2 : Set.PairwiseDisjoint (↑(disjiUnion s f h1)) g
a : { x // x ∈ s }
x✝¹ : a ∈ ↑(attach s)
b : { x // x ∈ s }
x✝ : b ∈ ↑(attach s)
hab : a ≠ b
x : γ
hxa :
  x ∈
    (fun a =>
        disjiUnion (f ↑a) g (_ : ∀ (b : β), b ∈ ↑(f ↑a) → ∀ (c : β), c ∈ ↑(f ↑a) → b ≠ c → (_root_.Disjoint on g) b c))
      a
hxb :
  x ∈
    (fun a =>
        disjiUnion (f ↑a) g (_ : ∀ (b : β), b ∈ ↑(f ↑a) → ∀ (c : β), c ∈ ↑(f ↑a) → b ≠ c → (_root_.Disjoint on g) b c))
      b
xa : β
hfa : xa ∈ f ↑a
hga : x ∈ g xa
xb : β
hfb : xb ∈ f ↑b
hgb : x ∈ g xb
⊢ xa ≠ xb

tactic: exact disjoint_left.mp (h1 a.prop b.prop <| Subtype.coe_injective.ne hab) hfa hfb
state_before: case intro.intro.intro.intro
α : Type ?u.491855
β : Type ?u.491858
γ : Type ?u.491861
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
s : Finset α
f : α → Finset β
g : β → Finset γ
h1 : Set.PairwiseDisjoint (↑s) f
h2 : Set.PairwiseDisjoint (↑(disjiUnion s f h1)) g
a : { x // x ∈ s }
x✝¹ : a ∈ ↑(attach s)
b : { x // x ∈ s }
x✝ : b ∈ ↑(attach s)
hab : a ≠ b
x : γ
hxa :
  x ∈
    (fun a =>
        disjiUnion (f ↑a) g (_ : ∀ (b : β), b ∈ ↑(f ↑a) → ∀ (c : β), c ∈ ↑(f ↑a) → b ≠ c → (_root_.Disjoint on g) b c))
      a
hxb :
  x ∈
    (fun a =>
        disjiUnion (f ↑a) g (_ : ∀ (b : β), b ∈ ↑(f ↑a) → ∀ (c : β), c ∈ ↑(f ↑a) → b ≠ c → (_root_.Disjoint on g) b c))
      b
xa : β
hfa : xa ∈ f ↑a
hga : x ∈ g xa
hfb : xa ∈ f ↑b
hgb : x ∈ g xa
⊢ False