Theorem: Configuration.Nondegenerate.exists_injective_of_card_le
File: Mathlib/Combinatorics/Configuration.lean

tactic: let t : L → Finset P := fun l => Set.toFinset { p | p ∉ l }
state_before: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
⊢ ∃ f, Function.Injective f ∧ ∀ (l : L), f l ∉ l
state_after: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
⊢ ∃ f, Function.Injective f ∧ ∀ (l : L), f l ∉ l

tactic: suffices ∀ s : Finset L, s.card ≤ (s.biUnion t).card by
  obtain ⟨f, hf1, hf2⟩ := (Finset.all_card_le_biUnion_card_iff_exists_injective t).mp this
  exact ⟨f, hf1, fun l => Set.mem_toFinset.mp (hf2 l)⟩
state_before: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
⊢ ∃ f, Function.Injective f ∧ ∀ (l : L), f l ∉ l
state_after: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
⊢ ∀ (s : Finset L), s.card ≤ (s.biUnion t).card

tactic: intro s
state_before: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
⊢ ∀ (s : Finset L), s.card ≤ (s.biUnion t).card
state_after: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
⊢ s.card ≤ (s.biUnion t).card

tactic: by_cases hs₀ : s.card = 0
state_before: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
⊢ s.card ≤ (s.biUnion t).card
state_after: case pos
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : s.card = 0
⊢ s.card ≤ (s.biUnion t).card

case neg
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
⊢ s.card ≤ (s.biUnion t).card

tactic: by_cases hs₁ : s.card = 1
state_before: case neg
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
⊢ s.card ≤ (s.biUnion t).card
state_after: case pos
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : s.card = 1
⊢ s.card ≤ (s.biUnion t).card

case neg
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
⊢ s.card ≤ (s.biUnion t).card

tactic: suffices (s.biUnion t)ᶜ.card ≤ sᶜ.card by
  rw [Finset.card_compl, Finset.card_compl, tsub_le_iff_left] at this
  replace := h.trans this
  rwa [← add_tsub_assoc_of_le s.card_le_univ, le_tsub_iff_left (le_add_left s.card_le_univ),
    add_le_add_iff_right] at this
state_before: case neg
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
⊢ s.card ≤ (s.biUnion t).card
state_after: case neg
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
⊢ (s.biUnion t)ᶜ.card ≤ sᶜ.card

tactic: have hs₂ : (s.biUnion t)ᶜ.card ≤ 1 := by
  refine Finset.card_le_one_iff.mpr @fun p₁ p₂ hp₁ hp₂ => ?_
  simp_rw [t, Finset.mem_compl, Finset.mem_biUnion, not_exists, not_and,
    Set.mem_toFinset, Set.mem_setOf_eq, Classical.not_not] at hp₁ hp₂
  obtain ⟨l₁, l₂, hl₁, hl₂, hl₃⟩ :=
    Finset.one_lt_card_iff.mp (Nat.one_lt_iff_ne_zero_and_ne_one.mpr ⟨hs₀, hs₁⟩)
  exact (eq_or_eq (hp₁ l₁ hl₁) (hp₂ l₁ hl₁) (hp₁ l₂ hl₂) (hp₂ l₂ hl₂)).resolve_right hl₃
state_before: case neg
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
⊢ (s.biUnion t)ᶜ.card ≤ sᶜ.card
state_after: case neg
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
hs₂ : (s.biUnion t)ᶜ.card ≤ 1
⊢ (s.biUnion t)ᶜ.card ≤ sᶜ.card

tactic: by_cases hs₃ : sᶜ.card = 0
state_before: case neg
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
hs₂ : (s.biUnion t)ᶜ.card ≤ 1
⊢ (s.biUnion t)ᶜ.card ≤ sᶜ.card
state_after: case pos
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
hs₂ : (s.biUnion t)ᶜ.card ≤ 1
hs₃ : sᶜ.card = 0
⊢ (s.biUnion t)ᶜ.card ≤ sᶜ.card

case neg
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
hs₂ : (s.biUnion t)ᶜ.card ≤ 1
hs₃ : ¬sᶜ.card = 0
⊢ (s.biUnion t)ᶜ.card ≤ sᶜ.card

tactic: obtain ⟨f, hf1, hf2⟩ := (Finset.all_card_le_biUnion_card_iff_exists_injective t).mp this
state_before: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
this : ∀ (s : Finset L), s.card ≤ (s.biUnion t).card
⊢ ∃ f, Function.Injective f ∧ ∀ (l : L), f l ∉ l
state_after: case intro.intro
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
this : ∀ (s : Finset L), s.card ≤ (s.biUnion t).card
f : L → P
hf1 : Function.Injective f
hf2 : ∀ (x : L), f x ∈ t x
⊢ ∃ f, Function.Injective f ∧ ∀ (l : L), f l ∉ l

tactic: exact ⟨f, hf1, fun l => Set.mem_toFinset.mp (hf2 l)⟩
state_before: case intro.intro
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
this : ∀ (s : Finset L), s.card ≤ (s.biUnion t).card
f : L → P
hf1 : Function.Injective f
hf2 : ∀ (x : L), f x ∈ t x
⊢ ∃ f, Function.Injective f ∧ ∀ (l : L), f l ∉ l
state_after: no goals

tactic: simp_rw [hs₀, zero_le]
state_before: case pos
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : s.card = 0
⊢ s.card ≤ (s.biUnion t).card
state_after: no goals

tactic: obtain ⟨l, rfl⟩ := Finset.card_eq_one.mp hs₁
state_before: case pos
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : s.card = 1
⊢ s.card ≤ (s.biUnion t).card
state_after: case pos.intro
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
l : L
hs₀ : ¬{l}.card = 0
hs₁ : {l}.card = 1
⊢ {l}.card ≤ ({l}.biUnion t).card

tactic: obtain ⟨p, hl⟩ := exists_point l
state_before: case pos.intro
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
l : L
hs₀ : ¬{l}.card = 0
hs₁ : {l}.card = 1
⊢ {l}.card ≤ ({l}.biUnion t).card
state_after: case pos.intro.intro
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
l : L
hs₀ : ¬{l}.card = 0
hs₁ : {l}.card = 1
p : P
hl : p ∉ l
⊢ {l}.card ≤ ({l}.biUnion t).card

tactic: rw [Finset.card_singleton, Finset.singleton_biUnion, Nat.one_le_iff_ne_zero]
state_before: case pos.intro.intro
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
l : L
hs₀ : ¬{l}.card = 0
hs₁ : {l}.card = 1
p : P
hl : p ∉ l
⊢ {l}.card ≤ ({l}.biUnion t).card
state_after: case pos.intro.intro
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
l : L
hs₀ : ¬{l}.card = 0
hs₁ : {l}.card = 1
p : P
hl : p ∉ l
⊢ (t l).card ≠ 0

tactic: exact Finset.card_ne_zero_of_mem (Set.mem_toFinset.mpr hl)
state_before: case pos.intro.intro
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
l : L
hs₀ : ¬{l}.card = 0
hs₁ : {l}.card = 1
p : P
hl : p ∉ l
⊢ (t l).card ≠ 0
state_after: no goals

tactic: rw [Finset.card_compl, Finset.card_compl, tsub_le_iff_left] at this
state_before: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
this : (s.biUnion t)ᶜ.card ≤ sᶜ.card
⊢ s.card ≤ (s.biUnion t).card
state_after: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
this : Fintype.card P ≤ (s.biUnion t).card + (Fintype.card L - s.card)
⊢ s.card ≤ (s.biUnion t).card

tactic: replace := h.trans this
state_before: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
this : Fintype.card P ≤ (s.biUnion t).card + (Fintype.card L - s.card)
⊢ s.card ≤ (s.biUnion t).card
state_after: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
this : Fintype.card L ≤ (s.biUnion t).card + (Fintype.card L - s.card)
⊢ s.card ≤ (s.biUnion t).card

tactic: rwa [← add_tsub_assoc_of_le s.card_le_univ, le_tsub_iff_left (le_add_left s.card_le_univ),
  add_le_add_iff_right] at this
state_before: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
this : Fintype.card L ≤ (s.biUnion t).card + (Fintype.card L - s.card)
⊢ s.card ≤ (s.biUnion t).card
state_after: no goals

tactic: refine Finset.card_le_one_iff.mpr @fun p₁ p₂ hp₁ hp₂ => ?_
state_before: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
⊢ (s.biUnion t)ᶜ.card ≤ 1
state_after: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
p₁ p₂ : P
hp₁ : p₁ ∈ (s.biUnion t)ᶜ
hp₂ : p₂ ∈ (s.biUnion t)ᶜ
⊢ p₁ = p₂

tactic: simp_rw [t, Finset.mem_compl, Finset.mem_biUnion, not_exists, not_and,
  Set.mem_toFinset, Set.mem_setOf_eq, Classical.not_not] at hp₁ hp₂
state_before: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
p₁ p₂ : P
hp₁ : p₁ ∈ (s.biUnion t)ᶜ
hp₂ : p₂ ∈ (s.biUnion t)ᶜ
⊢ p₁ = p₂
state_after: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
p₁ p₂ : P
hp₁ : ∀ x ∈ s, p₁ ∈ x
hp₂ : ∀ x ∈ s, p₂ ∈ x
⊢ p₁ = p₂

tactic: obtain ⟨l₁, l₂, hl₁, hl₂, hl₃⟩ :=
  Finset.one_lt_card_iff.mp (Nat.one_lt_iff_ne_zero_and_ne_one.mpr ⟨hs₀, hs₁⟩)
state_before: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
p₁ p₂ : P
hp₁ : ∀ x ∈ s, p₁ ∈ x
hp₂ : ∀ x ∈ s, p₂ ∈ x
⊢ p₁ = p₂
state_after: case intro.intro.intro.intro
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
p₁ p₂ : P
hp₁ : ∀ x ∈ s, p₁ ∈ x
hp₂ : ∀ x ∈ s, p₂ ∈ x
l₁ l₂ : L
hl₁ : l₁ ∈ s
hl₂ : l₂ ∈ s
hl₃ : l₁ ≠ l₂
⊢ p₁ = p₂

tactic: exact (eq_or_eq (hp₁ l₁ hl₁) (hp₂ l₁ hl₁) (hp₁ l₂ hl₂) (hp₂ l₂ hl₂)).resolve_right hl₃
state_before: case intro.intro.intro.intro
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
p₁ p₂ : P
hp₁ : ∀ x ∈ s, p₁ ∈ x
hp₂ : ∀ x ∈ s, p₂ ∈ x
l₁ l₂ : L
hl₁ : l₁ ∈ s
hl₂ : l₂ ∈ s
hl₃ : l₁ ≠ l₂
⊢ p₁ = p₂
state_after: no goals

tactic: rw [hs₃, Nat.le_zero]
state_before: case pos
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
hs₂ : (s.biUnion t)ᶜ.card ≤ 1
hs₃ : sᶜ.card = 0
⊢ (s.biUnion t)ᶜ.card ≤ sᶜ.card
state_after: case pos
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
hs₂ : (s.biUnion t)ᶜ.card ≤ 1
hs₃ : sᶜ.card = 0
⊢ (s.biUnion t)ᶜ.card = 0

tactic: rw [Finset.card_compl, tsub_eq_zero_iff_le, LE.le.le_iff_eq (Finset.card_le_univ _), eq_comm,
  Finset.card_eq_iff_eq_univ] at hs₃ ⊢
state_before: case pos
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
hs₂ : (s.biUnion t)ᶜ.card ≤ 1
hs₃ : sᶜ.card = 0
⊢ (s.biUnion t)ᶜ.card = 0
state_after: case pos
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
hs₂ : (s.biUnion t)ᶜ.card ≤ 1
hs₃ : s = univ
⊢ s.biUnion t = univ

tactic: rw [hs₃]
state_before: case pos
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
hs₂ : (s.biUnion t)ᶜ.card ≤ 1
hs₃ : s = univ
⊢ s.biUnion t = univ
state_after: case pos
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
hs₂ : (s.biUnion t)ᶜ.card ≤ 1
hs₃ : s = univ
⊢ univ.biUnion t = univ

tactic: rw [Finset.eq_univ_iff_forall] at hs₃ ⊢
state_before: case pos
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
hs₂ : (s.biUnion t)ᶜ.card ≤ 1
hs₃ : s = univ
⊢ univ.biUnion t = univ
state_after: case pos
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
hs₂ : (s.biUnion t)ᶜ.card ≤ 1
hs₃ : ∀ (x : L), x ∈ s
⊢ ∀ (x : P), x ∈ univ.biUnion t

tactic: exact fun p =>
  Exists.elim (exists_line p)fun l hl => Finset.mem_biUnion.mpr ⟨l, Finset.mem_univ l, Set.mem_toFinset.mpr hl⟩
state_before: case pos
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
hs₂ : (s.biUnion t)ᶜ.card ≤ 1
hs₃ : ∀ (x : L), x ∈ s
⊢ ∀ (x : P), x ∈ univ.biUnion t
state_after: no goals

tactic: exact hs₂.trans (Nat.one_le_iff_ne_zero.mpr hs₃)
state_before: case neg
P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : Nondegenerate P L
inst✝¹ : Fintype P
inst✝ : Fintype L
h : Fintype.card L ≤ Fintype.card P
t : L → Finset P := fun l => {p | p ∉ l}.toFinset
s : Finset L
hs₀ : ¬s.card = 0
hs₁ : ¬s.card = 1
hs₂ : (s.biUnion t)ᶜ.card ≤ 1
hs₃ : ¬sᶜ.card = 0
⊢ (s.biUnion t)ᶜ.card ≤ sᶜ.card
state_after: no goals