src/HOL/Library/Ramsey.thy
changeset 54580 7b9336176a1c
parent 53374 a14d2a854c02
child 58622 aa99568f56de
equal deleted inserted replaced
54579:9733ab5c1df6 54580:7b9336176a1c
   245     have "finite (range ?gt)"
   245     have "finite (range ?gt)"
   246       by (simp add: finite_nat_iff_bounded rangeg)
   246       by (simp add: finite_nat_iff_bounded rangeg)
   247     then obtain s' and n'
   247     then obtain s' and n'
   248       where s': "s' = ?gt n'"
   248       where s': "s' = ?gt n'"
   249         and infeqs': "infinite {n. ?gt n = s'}"
   249         and infeqs': "infinite {n. ?gt n = s'}"
   250       by (rule inf_img_fin_domE) (auto simp add: vimage_def intro: nat_infinite)
   250       by (rule inf_img_fin_domE) (auto simp add: vimage_def intro: infinite_UNIV_nat)
   251     with pg [of n'] have less': "s'<s" by (cases "g n'") auto
   251     with pg [of n'] have less': "s'<s" by (cases "g n'") auto
   252     have inj_gy: "inj ?gy"
   252     have inj_gy: "inj ?gy"
   253     proof (rule linorder_injI)
   253     proof (rule linorder_injI)
   254       fix m m' :: nat assume less: "m < m'" show "?gy m \<noteq> ?gy m'"
   254       fix m m' :: nat assume less: "m < m'" show "?gy m \<noteq> ?gy m'"
   255         using rg [OF less] pg [of m] by (cases "g m", cases "g m'") auto
   255         using rg [OF less] pg [of m] by (cases "g m", cases "g m'") auto
   408     apply (blast dest: s_in_T transition_idx_less)
   408     apply (blast dest: s_in_T transition_idx_less)
   409     done
   409     done
   410   have
   410   have
   411    "\<exists>K k. K \<subseteq> UNIV & infinite K & k < n &
   411    "\<exists>K k. K \<subseteq> UNIV & infinite K & k < n &
   412           (\<forall>i\<in>K. \<forall>j\<in>K. i\<noteq>j --> transition_idx s T {i,j} = k)"
   412           (\<forall>i\<in>K. \<forall>j\<in>K. i\<noteq>j --> transition_idx s T {i,j} = k)"
   413     by (rule Ramsey2) (auto intro: trless nat_infinite)
   413     by (rule Ramsey2) (auto intro: trless infinite_UNIV_nat)
   414   then obtain K and k
   414   then obtain K and k
   415     where infK: "infinite K" and less: "k < n" and
   415     where infK: "infinite K" and less: "k < n" and
   416           allk: "\<forall>i\<in>K. \<forall>j\<in>K. i\<noteq>j --> transition_idx s T {i,j} = k"
   416           allk: "\<forall>i\<in>K. \<forall>j\<in>K. i\<noteq>j --> transition_idx s T {i,j} = k"
   417     by auto
   417     by auto
   418   have "\<forall>m. (s (enumerate K (Suc m)), s(enumerate K m)) \<in> T k"
   418   have "\<forall>m. (s (enumerate K (Suc m)), s(enumerate K m)) \<in> T k"