diff -r b933700f0384 -r 3d4953e88449 src/HOL/Library/Nat_Infinity.thy --- a/src/HOL/Library/Nat_Infinity.thy Sun Oct 21 14:21:54 2007 +0200 +++ b/src/HOL/Library/Nat_Infinity.thy Sun Oct 21 14:53:44 2007 +0200 @@ -51,132 +51,132 @@ subsection "Constructors" lemma Fin_0: "Fin 0 = 0" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma Infty_ne_i0 [simp]: "\ \ 0" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma i0_ne_Infty [simp]: "0 \ \" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma iSuc_Fin [simp]: "iSuc (Fin n) = Fin (Suc n)" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma iSuc_Infty [simp]: "iSuc \ = \" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma iSuc_ne_0 [simp]: "iSuc n \ 0" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma iSuc_inject [simp]: "(iSuc x = iSuc y) = (x = y)" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) subsection "Ordering relations" lemma Infty_ilessE [elim!]: "\ < Fin m ==> R" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma iless_linear: "m < n \ m = n \ n < (m::inat)" - by (simp add: inat_defs split:inat_splits, arith) +by (simp add: inat_defs split:inat_splits, arith) lemma iless_not_refl [simp]: "\ n < (n::inat)" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma iless_trans: "i < j ==> j < k ==> i < (k::inat)" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma iless_not_sym: "n < m ==> \ m < (n::inat)" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma Fin_iless_mono [simp]: "(Fin n < Fin m) = (n < m)" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma Fin_iless_Infty [simp]: "Fin n < \" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma Infty_eq [simp]: "(n < \) = (n \ \)" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma i0_eq [simp]: "((0::inat) < n) = (n \ 0)" - by (simp add: neq0_conv inat_defs split:inat_splits) +by (fastsimp simp: inat_defs split:inat_splits) lemma i0_iless_iSuc [simp]: "0 < iSuc n" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma not_ilessi0 [simp]: "\ n < (0::inat)" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma Fin_iless: "n < Fin m ==> \k. n = Fin k" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma iSuc_mono [simp]: "(iSuc n < iSuc m) = (n < m)" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma ile_def2: "(m \ n) = (m < n \ m = (n::inat))" - by (simp add: inat_defs split:inat_splits, arith) +by (simp add: inat_defs split:inat_splits, arith) lemma ile_refl [simp]: "n \ (n::inat)" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma ile_trans: "i \ j ==> j \ k ==> i \ (k::inat)" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma ile_iless_trans: "i \ j ==> j < k ==> i < (k::inat)" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma iless_ile_trans: "i < j ==> j \ k ==> i < (k::inat)" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma Infty_ub [simp]: "n \ \" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma i0_lb [simp]: "(0::inat) \ n" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma Infty_ileE [elim!]: "\ \ Fin m ==> R" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma Fin_ile_mono [simp]: "(Fin n \ Fin m) = (n \ m)" - by (simp add: inat_defs split:inat_splits, arith) +by (simp add: inat_defs split:inat_splits, arith) lemma ilessI1: "n \ m ==> n \ m ==> n < (m::inat)" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma ileI1: "m < n ==> iSuc m \ n" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma Suc_ile_eq: "(Fin (Suc m) \ n) = (Fin m < n)" - by (simp add: inat_defs split:inat_splits, arith) +by (simp add: inat_defs split:inat_splits, arith) lemma iSuc_ile_mono [simp]: "(iSuc n \ iSuc m) = (n \ m)" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma iless_Suc_eq [simp]: "(Fin m < iSuc n) = (Fin m \ n)" - by (simp add: inat_defs split:inat_splits, arith) +by (simp add: inat_defs split:inat_splits, arith) lemma not_iSuc_ilei0 [simp]: "\ iSuc n \ 0" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma ile_iSuc [simp]: "n \ iSuc n" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma Fin_ile: "n \ Fin m ==> \k. n = Fin k" - by (simp add: inat_defs split:inat_splits) +by (simp add: inat_defs split:inat_splits) lemma chain_incr: "\i. \j. Y i < Y j ==> \j. Fin k < Y j" - apply (induct_tac k) - apply (simp (no_asm) only: Fin_0) - apply (fast intro: ile_iless_trans i0_lb) - apply (erule exE) - apply (drule spec) - apply (erule exE) - apply (drule ileI1) - apply (rule iSuc_Fin [THEN subst]) - apply (rule exI) - apply (erule (1) ile_iless_trans) - done +apply (induct_tac k) + apply (simp (no_asm) only: Fin_0) + apply (fast intro: ile_iless_trans i0_lb) +apply (erule exE) +apply (drule spec) +apply (erule exE) +apply (drule ileI1) +apply (rule iSuc_Fin [THEN subst]) +apply (rule exI) +apply (erule (1) ile_iless_trans) +done end