Theorem: Finset.exists_subset_or_subset_of_two_mul_lt_card
File: Mathlib/Data/Finset/Card.lean

tactic: have h₁ : (X ∩ (Y \ X)).card = 0 := Finset.card_eq_zero.mpr (Finset.inter_sdiff_self X Y)
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : 2 * n < (X ∪ Y).card
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)
state_after: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : 2 * n < (X ∪ Y).card
h₁ : (X ∩ (Y \ X)).card = 0
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)

tactic: have h₂ : (X ∪ Y).card = X.card + (Y \ X).card := by
  rw [← card_union_add_card_inter X (Y \ X), Finset.union_sdiff_self_eq_union, h₁, add_zero]
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : 2 * n < (X ∪ Y).card
h₁ : (X ∩ (Y \ X)).card = 0
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)
state_after: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : 2 * n < (X ∪ Y).card
h₁ : (X ∩ (Y \ X)).card = 0
h₂ : (X ∪ Y).card = X.card + (Y \ X).card
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)

tactic: rw [h₂, Nat.two_mul] at hXY
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : 2 * n < (X ∪ Y).card
h₁ : (X ∩ (Y \ X)).card = 0
h₂ : (X ∪ Y).card = X.card + (Y \ X).card
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)
state_after: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : n + n < X.card + (Y \ X).card
h₁ : (X ∩ (Y \ X)).card = 0
h₂ : (X ∪ Y).card = X.card + (Y \ X).card
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)

tactic: obtain h | h : n < X.card ∨ n < (Y \ X).card := by contrapose! hXY; omega
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : n + n < X.card + (Y \ X).card
h₁ : (X ∩ (Y \ X)).card = 0
h₂ : (X ∪ Y).card = X.card + (Y \ X).card
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)
state_after: case inl
α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : n + n < X.card + (Y \ X).card
h₁ : (X ∩ (Y \ X)).card = 0
h₂ : (X ∪ Y).card = X.card + (Y \ X).card
h : n < X.card
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)

case inr
α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : n + n < X.card + (Y \ X).card
h₁ : (X ∩ (Y \ X)).card = 0
h₂ : (X ∪ Y).card = X.card + (Y \ X).card
h : n < (Y \ X).card
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)

tactic: rw [← card_union_add_card_inter X (Y \ X), Finset.union_sdiff_self_eq_union, h₁, add_zero]
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : 2 * n < (X ∪ Y).card
h₁ : (X ∩ (Y \ X)).card = 0
⊢ (X ∪ Y).card = X.card + (Y \ X).card
state_after: no goals

tactic: contrapose! hXY
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : n + n < X.card + (Y \ X).card
h₁ : (X ∩ (Y \ X)).card = 0
h₂ : (X ∪ Y).card = X.card + (Y \ X).card
⊢ n < X.card ∨ n < (Y \ X).card
state_after: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
h₁ : (X ∩ (Y \ X)).card = 0
h₂ : (X ∪ Y).card = X.card + (Y \ X).card
hXY : X.card ≤ n ∧ (Y \ X).card ≤ n
⊢ X.card + (Y \ X).card ≤ n + n

tactic: omega
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
h₁ : (X ∩ (Y \ X)).card = 0
h₂ : (X ∪ Y).card = X.card + (Y \ X).card
hXY : X.card ≤ n ∧ (Y \ X).card ≤ n
⊢ X.card + (Y \ X).card ≤ n + n
state_after: no goals

tactic: exact ⟨X, h, Or.inl (Finset.Subset.refl X)⟩
state_before: case inl
α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : n + n < X.card + (Y \ X).card
h₁ : (X ∩ (Y \ X)).card = 0
h₂ : (X ∪ Y).card = X.card + (Y \ X).card
h : n < X.card
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)
state_after: no goals

tactic: exact ⟨Y \ X, h, Or.inr sdiff_subset⟩
state_before: case inr
α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : n + n < X.card + (Y \ X).card
h₁ : (X ∩ (Y \ X)).card = 0
h₂ : (X ∪ Y).card = X.card + (Y \ X).card
h : n < (Y \ X).card
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)
state_after: no goals