Theory Ramsey


section "Ramsey's Theorem"

theory Ramsey
  imports Main "HOL-Library.Infinite_Set" "HOL-Library.Ramsey" 

begin

text ‹Please note: this entire development has been updated and incorporated into 
@{theory "HOL-Library.Ramsey"}  above. Below, some of the results of the original development are 
linked to their current versions elsewhere in the Isabelle libraries. ›

subsection "Library lemmas"

lemma infinite_inj_infinite_image: "infinite Z ⟹ inj_on f Z ⟹ infinite (f ` Z)"
  using finite_imageD by blast

lemma infinite_dom_finite_rng: "[| infinite A; finite (f ` A) |] ==> ∃b ∈ f ` A. infinite {a : A. f a = b}"
  by (simp add: pigeonhole_infinite)

lemma infinite_mem: "infinite X ⟹ ∃x. x ∈ X"
  using finite_insert by fastforce

lemma not_empty_least: "(Y::nat set) ≠ {} ⟹ ∃m. m ∈ Y ∧ (∀m'. m' ∈ Y ⟶ m ≤ m')"
  by (meson Inf_nat_def1 bdd_below_bot cInf_lower)


subsection "Dependent Choice Variant"
  
lemma dc:
  assumes trans: "trans r"
    and P0: "P x0"
    and Pstep: "⋀x. P x ⟹ ∃y. P y ∧ (x, y) ∈ r"
  obtains f :: "nat ⇒ 'a" where "⋀n. P (f n)" and "⋀n m. n < m ⟹ (f n, f m) ∈ r"
  by (metis P0 Pstep dependent_choice local.trans)

subsection "Ramsey's theorem"

lemma ramsey: "∀(s::nat) (r::nat) (YY::'a set) (f::'a set ⇒ nat).
  infinite YY 
  ∧ (∀X. X ⊆ YY ∧ finite X ∧ card X = r ⟶ f X < s)
  ⟶ (∃Y' t'.
  Y' ⊆ YY 
  ∧ infinite Y' 
  ∧ t' < s 
  ∧ (∀X. X ⊆ Y' ∧ finite X ∧ card X = r ⟶ f X = t'))"
  using Ramsey by fastforce

end