internlm/Lean-Github huggingface dataset:
Theorem: Usa2002P1.usa2002_p1_generalized
Proof state before:
case h.left.intro.intro.inr.inl
k : ℕ
ih :
  ∀ {α : Type} [inst : DecidableEq α] [inst_1 : Fintype α],
    Fintype.card α = k →
      ∀ N ≤ 2 ^ k,
        ∃ f, (∀ (s1 s2 : Finset α), f s1 = f s2 → f (s1 ∪ s2) = f s1) ∧ Fintype.card { a // f a = Color.red } = N
S : Type
hde : DecidableEq S
hft : Fintype S
hs : Fintype.card S = k + 1
N : ℕ
hN : N ≤ 2 ^ (k + 1)
s : S
S' : Type := { a // a ≠ s }
hs' : Fintype.card S' = k
hl : N ≤ 2 ^ k
f' : Finset S' → Color
hf1' : ∀ (s1 s2 : Finset S'), f' s1 = f' s2 → f' (s1 ∪ s2) = f' s1
hf2' : Fintype.card { a // f' a = Color.red } = N
f : Finset S → Color := fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)
h2 : ∀ (a : Finset S), f a = Color.red ↔ s ∉ a ∧ f' (Finset.subtype (fun a => a ≠ s) a) = Color.red
s1 s2 : Finset S
hs12 : f s1 = f s2
h4 : f s1 = Color.red → s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red
mpr✝¹ : s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red → f s1 = Color.red
h4' : f s2 = Color.red → s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red
mpr✝ : s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red → f s2 = Color.red
hfs1 : ¬f s1 = Color.red
hss : s ∈ s1 ∪ s2
⊢ (fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)) (s1 ∪ s2) =
    (fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)) s1
Tactic:
simp only [Finset.mem_union] at hss
Proof state after:
case h.left.intro.intro.inr.inl
k : ℕ
ih :
  ∀ {α : Type} [inst : DecidableEq α] [inst_1 : Fintype α],
    Fintype.card α = k →
      ∀ N ≤ 2 ^ k,
        ∃ f, (∀ (s1 s2 : Finset α), f s1 = f s2 → f (s1 ∪ s2) = f s1) ∧ Fintype.card { a // f a = Color.red } = N
S : Type
hde : DecidableEq S
hft : Fintype S
hs : Fintype.card S = k + 1
N : ℕ
hN : N ≤ 2 ^ (k + 1)
s : S
S' : Type := { a // a ≠ s }
hs' : Fintype.card S' = k
hl : N ≤ 2 ^ k
f' : Finset S' → Color
hf1' : ∀ (s1 s2 : Finset S'), f' s1 = f' s2 → f' (s1 ∪ s2) = f' s1
hf2' : Fintype.card { a // f' a = Color.red } = N
f : Finset S → Color := fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)
h2 : ∀ (a : Finset S), f a = Color.red ↔ s ∉ a ∧ f' (Finset.subtype (fun a => a ≠ s) a) = Color.red
s1 s2 : Finset S
hs12 : f s1 = f s2
h4 : f s1 = Color.red → s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red
mpr✝¹ : s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red → f s1 = Color.red
h4' : f s2 = Color.red → s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red
mpr✝ : s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red → f s2 = Color.red
hfs1 : ¬f s1 = Color.red
hss : s ∈ s1 ∨ s ∈ s2
⊢ (fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)) (s1 ∪ s2) =
    (fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)) s1
Theorem: Usa2002P1.usa2002_p1_generalized
Proof state before:
case h.left.intro.intro.inr.inl
k : ℕ
ih :
  ∀ {α : Type} [inst : DecidableEq α] [inst_1 : Fintype α],
    Fintype.card α = k →
      ∀ N ≤ 2 ^ k,
        ∃ f, (∀ (s1 s2 : Finset α), f s1 = f s2 → f (s1 ∪ s2) = f s1) ∧ Fintype.card { a // f a = Color.red } = N
S : Type
hde : DecidableEq S
hft : Fintype S
hs : Fintype.card S = k + 1
N : ℕ
hN : N ≤ 2 ^ (k + 1)
s : S
S' : Type := { a // a ≠ s }
hs' : Fintype.card S' = k
hl : N ≤ 2 ^ k
f' : Finset S' → Color
hf1' : ∀ (s1 s2 : Finset S'), f' s1 = f' s2 → f' (s1 ∪ s2) = f' s1
hf2' : Fintype.card { a // f' a = Color.red } = N
f : Finset S → Color := fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)
h2 : ∀ (a : Finset S), f a = Color.red ↔ s ∉ a ∧ f' (Finset.subtype (fun a => a ≠ s) a) = Color.red
s1 s2 : Finset S
hs12 : f s1 = f s2
h4 : f s1 = Color.red → s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red
mpr✝¹ : s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red → f s1 = Color.red
h4' : f s2 = Color.red → s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red
mpr✝ : s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red → f s2 = Color.red
hfs1 : ¬f s1 = Color.red
hss : s ∈ s1 ∨ s ∈ s2
⊢ (fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)) (s1 ∪ s2) =
    (fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)) s1
Tactic:
simp only [Finset.mem_union, hss, dite_eq_ite, ite_true]
Proof state after:
case h.left.intro.intro.inr.inl
k : ℕ
ih :
  ∀ {α : Type} [inst : DecidableEq α] [inst_1 : Fintype α],
    Fintype.card α = k →
      ∀ N ≤ 2 ^ k,
        ∃ f, (∀ (s1 s2 : Finset α), f s1 = f s2 → f (s1 ∪ s2) = f s1) ∧ Fintype.card { a // f a = Color.red } = N
S : Type
hde : DecidableEq S
hft : Fintype S
hs : Fintype.card S = k + 1
N : ℕ
hN : N ≤ 2 ^ (k + 1)
s : S
S' : Type := { a // a ≠ s }
hs' : Fintype.card S' = k
hl : N ≤ 2 ^ k
f' : Finset S' → Color
hf1' : ∀ (s1 s2 : Finset S'), f' s1 = f' s2 → f' (s1 ∪ s2) = f' s1
hf2' : Fintype.card { a // f' a = Color.red } = N
f : Finset S → Color := fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)
h2 : ∀ (a : Finset S), f a = Color.red ↔ s ∉ a ∧ f' (Finset.subtype (fun a => a ≠ s) a) = Color.red
s1 s2 : Finset S
hs12 : f s1 = f s2
h4 : f s1 = Color.red → s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red
mpr✝¹ : s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red → f s1 = Color.red
h4' : f s2 = Color.red → s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red
mpr✝ : s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red → f s2 = Color.red
hfs1 : ¬f s1 = Color.red
hss : s ∈ s1 ∨ s ∈ s2
⊢ Color.blue = if s ∈ s1 then Color.blue else f' (Finset.subtype (fun a => a ≠ s) s1)
Theorem: Usa2002P1.usa2002_p1_generalized
Proof state before:
case h.left.intro.intro.inr.inl.inl
k : ℕ
ih :
  ∀ {α : Type} [inst : DecidableEq α] [inst_1 : Fintype α],
    Fintype.card α = k →
      ∀ N ≤ 2 ^ k,
        ∃ f, (∀ (s1 s2 : Finset α), f s1 = f s2 → f (s1 ∪ s2) = f s1) ∧ Fintype.card { a // f a = Color.red } = N
S : Type
hde : DecidableEq S
hft : Fintype S
hs : Fintype.card S = k + 1
N : ℕ
hN : N ≤ 2 ^ (k + 1)
s : S
S' : Type := { a // a ≠ s }
hs' : Fintype.card S' = k
hl : N ≤ 2 ^ k
f' : Finset S' → Color
hf1' : ∀ (s1 s2 : Finset S'), f' s1 = f' s2 → f' (s1 ∪ s2) = f' s1
hf2' : Fintype.card { a // f' a = Color.red } = N
f : Finset S → Color := fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)
h2 : ∀ (a : Finset S), f a = Color.red ↔ s ∉ a ∧ f' (Finset.subtype (fun a => a ≠ s) a) = Color.red
s1 s2 : Finset S
hs12 : f s1 = f s2
h4 : f s1 = Color.red → s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red
mpr✝¹ : s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red → f s1 = Color.red
h4' : f s2 = Color.red → s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red
mpr✝ : s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red → f s2 = Color.red
hfs1 : ¬f s1 = Color.red
hss : s ∈ s1
⊢ Color.blue = if s ∈ s1 then Color.blue else f' (Finset.subtype (fun a => a ≠ s) s1)
Tactic:
simp [hss]
Proof state after:
no goals
Theorem: Usa2002P1.usa2002_p1_generalized
Proof state before:
case pos
k : ℕ
ih :
  ∀ {α : Type} [inst : DecidableEq α] [inst_1 : Fintype α],
    Fintype.card α = k →
      ∀ N ≤ 2 ^ k,
        ∃ f, (∀ (s1 s2 : Finset α), f s1 = f s2 → f (s1 ∪ s2) = f s1) ∧ Fintype.card { a // f a = Color.red } = N
S : Type
hde : DecidableEq S
hft : Fintype S
hs : Fintype.card S = k + 1
N : ℕ
hN : N ≤ 2 ^ (k + 1)
s : S
S' : Type := { a // a ≠ s }
hs' : Fintype.card S' = k
hl : N ≤ 2 ^ k
f' : Finset S' → Color
hf1' : ∀ (s1 s2 : Finset S'), f' s1 = f' s2 → f' (s1 ∪ s2) = f' s1
hf2' : Fintype.card { a // f' a = Color.red } = N
f : Finset S → Color := fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)
h2 : ∀ (a : Finset S), f a = Color.red ↔ s ∉ a ∧ f' (Finset.subtype (fun a => a ≠ s) a) = Color.red
s1 s2 : Finset S
hs12 : f s1 = f s2
h4 : f s1 = Color.red → s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red
mpr✝¹ : s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red → f s1 = Color.red
h4' : f s2 = Color.red → s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red
mpr✝ : s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red → f s2 = Color.red
hfs1 : ¬f s1 = Color.red
hss : s ∈ s2
h : s ∈ s1
⊢ Color.blue = Color.blue
Tactic:
rfl
Proof state after:
no goals
Theorem: Usa2002P1.usa2002_p1_generalized
Proof state before:
case neg
k : ℕ
ih :
  ∀ {α : Type} [inst : DecidableEq α] [inst_1 : Fintype α],
    Fintype.card α = k →
      ∀ N ≤ 2 ^ k,
        ∃ f, (∀ (s1 s2 : Finset α), f s1 = f s2 → f (s1 ∪ s2) = f s1) ∧ Fintype.card { a // f a = Color.red } = N
S : Type
hde : DecidableEq S
hft : Fintype S
hs : Fintype.card S = k + 1
N : ℕ
hN : N ≤ 2 ^ (k + 1)
s : S
S' : Type := { a // a ≠ s }
hs' : Fintype.card S' = k
hl : N ≤ 2 ^ k
f' : Finset S' → Color
hf1' : ∀ (s1 s2 : Finset S'), f' s1 = f' s2 → f' (s1 ∪ s2) = f' s1
hf2' : Fintype.card { a // f' a = Color.red } = N
f : Finset S → Color := fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)
h2 : ∀ (a : Finset S), f a = Color.red ↔ s ∉ a ∧ f' (Finset.subtype (fun a => a ≠ s) a) = Color.red
s1 s2 : Finset S
hs12 : f s1 = f s2
h4 : f s1 = Color.red → s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red
mpr✝¹ : s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red → f s1 = Color.red
h4' : f s2 = Color.red → s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red
mpr✝ : s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red → f s2 = Color.red
hfs1 : ¬f s1 = Color.red
hss : s ∈ s2
h : s ∉ s1
⊢ Color.blue = f' (Finset.subtype (fun a => a ≠ s) s1)
Tactic:
simp only [h, dite_eq_ite, f] at hfs1
Proof state after:
case neg
k : ℕ
ih :
  ∀ {α : Type} [inst : DecidableEq α] [inst_1 : Fintype α],
    Fintype.card α = k →
      ∀ N ≤ 2 ^ k,
        ∃ f, (∀ (s1 s2 : Finset α), f s1 = f s2 → f (s1 ∪ s2) = f s1) ∧ Fintype.card { a // f a = Color.red } = N
S : Type
hde : DecidableEq S
hft : Fintype S
hs : Fintype.card S = k + 1
N : ℕ
hN : N ≤ 2 ^ (k + 1)
s : S
S' : Type := { a // a ≠ s }
hs' : Fintype.card S' = k
hl : N ≤ 2 ^ k
f' : Finset S' → Color
hf1' : ∀ (s1 s2 : Finset S'), f' s1 = f' s2 → f' (s1 ∪ s2) = f' s1
hf2' : Fintype.card { a // f' a = Color.red } = N
f : Finset S → Color := fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)
h2 : ∀ (a : Finset S), f a = Color.red ↔ s ∉ a ∧ f' (Finset.subtype (fun a => a ≠ s) a) = Color.red
s1 s2 : Finset S
hs12 : f s1 = f s2
h4 : f s1 = Color.red → s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red
mpr✝¹ : s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red → f s1 = Color.red
h4' : f s2 = Color.red → s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red
mpr✝ : s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red → f s2 = Color.red
hss : s ∈ s2
h : s ∉ s1
hfs1 : ¬(if False then Color.blue else f' (Finset.subtype (fun a => a ≠ s) s1)) = Color.red
⊢ Color.blue = f' (Finset.subtype (fun a => a ≠ s) s1)
Theorem: Usa2002P1.usa2002_p1_generalized
Proof state before:
case neg
k : ℕ
ih :
  ∀ {α : Type} [inst : DecidableEq α] [inst_1 : Fintype α],
    Fintype.card α = k →
      ∀ N ≤ 2 ^ k,
        ∃ f, (∀ (s1 s2 : Finset α), f s1 = f s2 → f (s1 ∪ s2) = f s1) ∧ Fintype.card { a // f a = Color.red } = N
S : Type
hde : DecidableEq S
hft : Fintype S
hs : Fintype.card S = k + 1
N : ℕ
hN : N ≤ 2 ^ (k + 1)
s : S
S' : Type := { a // a ≠ s }
hs' : Fintype.card S' = k
hl : N ≤ 2 ^ k
f' : Finset S' → Color
hf1' : ∀ (s1 s2 : Finset S'), f' s1 = f' s2 → f' (s1 ∪ s2) = f' s1
hf2' : Fintype.card { a // f' a = Color.red } = N
f : Finset S → Color := fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)
h2 : ∀ (a : Finset S), f a = Color.red ↔ s ∉ a ∧ f' (Finset.subtype (fun a => a ≠ s) a) = Color.red
s1 s2 : Finset S
hs12 : f s1 = f s2
h4 : f s1 = Color.red → s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red
mpr✝¹ : s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red → f s1 = Color.red
h4' : f s2 = Color.red → s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red
mpr✝ : s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red → f s2 = Color.red
hss : s ∈ s2
h : s ∉ s1
hfs1 : ¬(if False then Color.blue else f' (Finset.subtype (fun a => a ≠ s) s1)) = Color.red
⊢ Color.blue = f' (Finset.subtype (fun a => a ≠ s) s1)
Tactic:
match h20 : (f' (Finset.subtype (fun a => ¬a = s) s1)) with
| Color.red => exact (hfs1 h20).elim
| Color.blue => rfl
Proof state after:
no goals
Theorem: Usa2002P1.usa2002_p1_generalized
Proof state before:
k : ℕ
ih :
  ∀ {α : Type} [inst : DecidableEq α] [inst_1 : Fintype α],
    Fintype.card α = k →
      ∀ N ≤ 2 ^ k,
        ∃ f, (∀ (s1 s2 : Finset α), f s1 = f s2 → f (s1 ∪ s2) = f s1) ∧ Fintype.card { a // f a = Color.red } = N
S : Type
hde : DecidableEq S
hft : Fintype S
hs : Fintype.card S = k + 1
N : ℕ
hN : N ≤ 2 ^ (k + 1)
s : S
S' : Type := { a // a ≠ s }
hs' : Fintype.card S' = k
hl : N ≤ 2 ^ k
f' : Finset S' → Color
hf1' : ∀ (s1 s2 : Finset S'), f' s1 = f' s2 → f' (s1 ∪ s2) = f' s1
hf2' : Fintype.card { a // f' a = Color.red } = N
f : Finset S → Color := fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)
h2 : ∀ (a : Finset S), f a = Color.red ↔ s ∉ a ∧ f' (Finset.subtype (fun a => a ≠ s) a) = Color.red
s1 s2 : Finset S
hs12 : f s1 = f s2
h4 : f s1 = Color.red → s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red
mpr✝¹ : s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red → f s1 = Color.red
h4' : f s2 = Color.red → s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red
mpr✝ : s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red → f s2 = Color.red
hss : s ∈ s2
h : s ∉ s1
hfs1 : ¬(if False then Color.blue else f' (Finset.subtype (fun a => a ≠ s) s1)) = Color.red
h20 : f' (Finset.subtype (fun a => ¬a = s) s1) = Color.red
⊢ Color.blue = Color.red
Tactic:
exact (hfs1 h20).elim
Proof state after:
no goals
Theorem: Usa2002P1.usa2002_p1_generalized
Proof state before:
k : ℕ
ih :
  ∀ {α : Type} [inst : DecidableEq α] [inst_1 : Fintype α],
    Fintype.card α = k →
      ∀ N ≤ 2 ^ k,
        ∃ f, (∀ (s1 s2 : Finset α), f s1 = f s2 → f (s1 ∪ s2) = f s1) ∧ Fintype.card { a // f a = Color.red } = N
S : Type
hde : DecidableEq S
hft : Fintype S
hs : Fintype.card S = k + 1
N : ℕ
hN : N ≤ 2 ^ (k + 1)
s : S
S' : Type := { a // a ≠ s }
hs' : Fintype.card S' = k
hl : N ≤ 2 ^ k
f' : Finset S' → Color
hf1' : ∀ (s1 s2 : Finset S'), f' s1 = f' s2 → f' (s1 ∪ s2) = f' s1
hf2' : Fintype.card { a // f' a = Color.red } = N
f : Finset S → Color := fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)
h2 : ∀ (a : Finset S), f a = Color.red ↔ s ∉ a ∧ f' (Finset.subtype (fun a => a ≠ s) a) = Color.red
s1 s2 : Finset S
hs12 : f s1 = f s2
h4 : f s1 = Color.red → s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red
mpr✝¹ : s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red → f s1 = Color.red
h4' : f s2 = Color.red → s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red
mpr✝ : s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red → f s2 = Color.red
hss : s ∈ s2
h : s ∉ s1
hfs1 : ¬(if False then Color.blue else f' (Finset.subtype (fun a => a ≠ s) s1)) = Color.red
h20 : f' (Finset.subtype (fun a => ¬a = s) s1) = Color.blue
⊢ Color.blue = Color.blue
Tactic:
rfl
Proof state after:
no goals
Theorem: Usa2002P1.usa2002_p1_generalized
Proof state before:
case h.left.intro.intro.inr.inr
k : ℕ
ih :
  ∀ {α : Type} [inst : DecidableEq α] [inst_1 : Fintype α],
    Fintype.card α = k →
      ∀ N ≤ 2 ^ k,
        ∃ f, (∀ (s1 s2 : Finset α), f s1 = f s2 → f (s1 ∪ s2) = f s1) ∧ Fintype.card { a // f a = Color.red } = N
S : Type
hde : DecidableEq S
hft : Fintype S
hs : Fintype.card S = k + 1
N : ℕ
hN : N ≤ 2 ^ (k + 1)
s : S
S' : Type := { a // a ≠ s }
hs' : Fintype.card S' = k
hl : N ≤ 2 ^ k
f' : Finset S' → Color
hf1' : ∀ (s1 s2 : Finset S'), f' s1 = f' s2 → f' (s1 ∪ s2) = f' s1
hf2' : Fintype.card { a // f' a = Color.red } = N
f : Finset S → Color := fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)
h2 : ∀ (a : Finset S), f a = Color.red ↔ s ∉ a ∧ f' (Finset.subtype (fun a => a ≠ s) a) = Color.red
s1 s2 : Finset S
hs12 : f s1 = f s2
h4 : f s1 = Color.red → s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red
mpr✝¹ : s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red → f s1 = Color.red
h4' : f s2 = Color.red → s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red
mpr✝ : s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red → f s2 = Color.red
hfs1 : ¬f s1 = Color.red
hss : s ∉ s1 ∪ s2
⊢ f (s1 ∪ s2) = f s1
Tactic:
simp only [hss, f]
Proof state after:
case h.left.intro.intro.inr.inr
k : ℕ
ih :
  ∀ {α : Type} [inst : DecidableEq α] [inst_1 : Fintype α],
    Fintype.card α = k →
      ∀ N ≤ 2 ^ k,
        ∃ f, (∀ (s1 s2 : Finset α), f s1 = f s2 → f (s1 ∪ s2) = f s1) ∧ Fintype.card { a // f a = Color.red } = N
S : Type
hde : DecidableEq S
hft : Fintype S
hs : Fintype.card S = k + 1
N : ℕ
hN : N ≤ 2 ^ (k + 1)
s : S
S' : Type := { a // a ≠ s }
hs' : Fintype.card S' = k
hl : N ≤ 2 ^ k
f' : Finset S' → Color
hf1' : ∀ (s1 s2 : Finset S'), f' s1 = f' s2 → f' (s1 ∪ s2) = f' s1
hf2' : Fintype.card { a // f' a = Color.red } = N
f : Finset S → Color := fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)
h2 : ∀ (a : Finset S), f a = Color.red ↔ s ∉ a ∧ f' (Finset.subtype (fun a => a ≠ s) a) = Color.red
s1 s2 : Finset S
hs12 : f s1 = f s2
h4 : f s1 = Color.red → s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red
mpr✝¹ : s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red → f s1 = Color.red
h4' : f s2 = Color.red → s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red
mpr✝ : s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red → f s2 = Color.red
hfs1 : ¬f s1 = Color.red
hss : s ∉ s1 ∪ s2
⊢ (if False then Color.blue else f' (Finset.subtype (fun a => a ≠ s) (s1 ∪ s2))) =
    if s ∈ s1 then Color.blue else f' (Finset.subtype (fun a => a ≠ s) s1)
Theorem: Usa2002P1.usa2002_p1_generalized
Proof state before:
case h.left.intro.intro.inr.inr
k : ℕ
ih :
  ∀ {α : Type} [inst : DecidableEq α] [inst_1 : Fintype α],
    Fintype.card α = k →
      ∀ N ≤ 2 ^ k,
        ∃ f, (∀ (s1 s2 : Finset α), f s1 = f s2 → f (s1 ∪ s2) = f s1) ∧ Fintype.card { a // f a = Color.red } = N
S : Type
hde : DecidableEq S
hft : Fintype S
hs : Fintype.card S = k + 1
N : ℕ
hN : N ≤ 2 ^ (k + 1)
s : S
S' : Type := { a // a ≠ s }
hs' : Fintype.card S' = k
hl : N ≤ 2 ^ k
f' : Finset S' → Color
hf1' : ∀ (s1 s2 : Finset S'), f' s1 = f' s2 → f' (s1 ∪ s2) = f' s1
hf2' : Fintype.card { a // f' a = Color.red } = N
f : Finset S → Color := fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)
h2 : ∀ (a : Finset S), f a = Color.red ↔ s ∉ a ∧ f' (Finset.subtype (fun a => a ≠ s) a) = Color.red
s1 s2 : Finset S
hs12 : f s1 = f s2
h4 : f s1 = Color.red → s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red
mpr✝¹ : s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red → f s1 = Color.red
h4' : f s2 = Color.red → s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red
mpr✝ : s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red → f s2 = Color.red
hfs1 : ¬f s1 = Color.red
hss : s ∉ s1 ∪ s2
⊢ (if False then Color.blue else f' (Finset.subtype (fun a => a ≠ s) (s1 ∪ s2))) =
    if s ∈ s1 then Color.blue else f' (Finset.subtype (fun a => a ≠ s) s1)
Tactic:
rw [Finset.mem_union, not_or] at hss
Proof state after:
case h.left.intro.intro.inr.inr
k : ℕ
ih :
  ∀ {α : Type} [inst : DecidableEq α] [inst_1 : Fintype α],
    Fintype.card α = k →
      ∀ N ≤ 2 ^ k,
        ∃ f, (∀ (s1 s2 : Finset α), f s1 = f s2 → f (s1 ∪ s2) = f s1) ∧ Fintype.card { a // f a = Color.red } = N
S : Type
hde : DecidableEq S
hft : Fintype S
hs : Fintype.card S = k + 1
N : ℕ
hN : N ≤ 2 ^ (k + 1)
s : S
S' : Type := { a // a ≠ s }
hs' : Fintype.card S' = k
hl : N ≤ 2 ^ k
f' : Finset S' → Color
hf1' : ∀ (s1 s2 : Finset S'), f' s1 = f' s2 → f' (s1 ∪ s2) = f' s1
hf2' : Fintype.card { a // f' a = Color.red } = N
f : Finset S → Color := fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)
h2 : ∀ (a : Finset S), f a = Color.red ↔ s ∉ a ∧ f' (Finset.subtype (fun a => a ≠ s) a) = Color.red
s1 s2 : Finset S
hs12 : f s1 = f s2
h4 : f s1 = Color.red → s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red
mpr✝¹ : s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red → f s1 = Color.red
h4' : f s2 = Color.red → s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red
mpr✝ : s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red → f s2 = Color.red
hfs1 : ¬f s1 = Color.red
hss : s ∉ s1 ∧ s ∉ s2
⊢ (if False then Color.blue else f' (Finset.subtype (fun a => a ≠ s) (s1 ∪ s2))) =
    if s ∈ s1 then Color.blue else f' (Finset.subtype (fun a => a ≠ s) s1)
Theorem: Usa2002P1.usa2002_p1_generalized
Proof state before:
case h.left.intro.intro.inr.inr
k : ℕ
ih :
  ∀ {α : Type} [inst : DecidableEq α] [inst_1 : Fintype α],
    Fintype.card α = k →
      ∀ N ≤ 2 ^ k,
        ∃ f, (∀ (s1 s2 : Finset α), f s1 = f s2 → f (s1 ∪ s2) = f s1) ∧ Fintype.card { a // f a = Color.red } = N
S : Type
hde : DecidableEq S
hft : Fintype S
hs : Fintype.card S = k + 1
N : ℕ
hN : N ≤ 2 ^ (k + 1)
s : S
S' : Type := { a // a ≠ s }
hs' : Fintype.card S' = k
hl : N ≤ 2 ^ k
f' : Finset S' → Color
hf1' : ∀ (s1 s2 : Finset S'), f' s1 = f' s2 → f' (s1 ∪ s2) = f' s1
hf2' : Fintype.card { a // f' a = Color.red } = N
f : Finset S → Color := fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)
h2 : ∀ (a : Finset S), f a = Color.red ↔ s ∉ a ∧ f' (Finset.subtype (fun a => a ≠ s) a) = Color.red
s1 s2 : Finset S
hs12 : f s1 = f s2
h4 : f s1 = Color.red → s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red
mpr✝¹ : s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red → f s1 = Color.red
h4' : f s2 = Color.red → s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red
mpr✝ : s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red → f s2 = Color.red
hfs1 : ¬f s1 = Color.red
hss : s ∉ s1 ∧ s ∉ s2
⊢ (if False then Color.blue else f' (Finset.subtype (fun a => a ≠ s) (s1 ∪ s2))) =
    if s ∈ s1 then Color.blue else f' (Finset.subtype (fun a => a ≠ s) s1)
Tactic:
simp only [hss.1, dite_false]
Proof state after:
case h.left.intro.intro.inr.inr
k : ℕ
ih :
  ∀ {α : Type} [inst : DecidableEq α] [inst_1 : Fintype α],
    Fintype.card α = k →
      ∀ N ≤ 2 ^ k,
        ∃ f, (∀ (s1 s2 : Finset α), f s1 = f s2 → f (s1 ∪ s2) = f s1) ∧ Fintype.card { a // f a = Color.red } = N
S : Type
hde : DecidableEq S
hft : Fintype S
hs : Fintype.card S = k + 1
N : ℕ
hN : N ≤ 2 ^ (k + 1)
s : S
S' : Type := { a // a ≠ s }
hs' : Fintype.card S' = k
hl : N ≤ 2 ^ k
f' : Finset S' → Color
hf1' : ∀ (s1 s2 : Finset S'), f' s1 = f' s2 → f' (s1 ∪ s2) = f' s1
hf2' : Fintype.card { a // f' a = Color.red } = N
f : Finset S → Color := fun x => if s ∈ x then Color.blue else f' (Finset.subtype (fun a => a ≠ s) x)
h2 : ∀ (a : Finset S), f a = Color.red ↔ s ∉ a ∧ f' (Finset.subtype (fun a => a ≠ s) a) = Color.red
s1 s2 : Finset S
hs12 : f s1 = f s2
h4 : f s1 = Color.red → s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red
mpr✝¹ : s ∉ s1 ∧ f' (Finset.subtype (fun a => a ≠ s) s1) = Color.red → f s1 = Color.red
h4' : f s2 = Color.red → s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red
mpr✝ : s ∉ s2 ∧ f' (Finset.subtype (fun a => a ≠ s) s2) = Color.red → f s2 = Color.red
hfs1 : ¬f s1 = Color.red
hss : s ∉ s1 ∧ s ∉ s2
⊢ (if False then Color.blue else f' (Finset.subtype (fun a => a ≠ s) (s1 ∪ s2))) =
    if False then Color.blue else f' (Finset.subtype (fun a => a ≠ s) s1)