src/HOL/NumberTheory/Factorization.thy
changeset 19670 2e4a143c73c5
parent 16663 13e9c402308b
child 21404 eb85850d3eb7
--- a/src/HOL/NumberTheory/Factorization.thy	Wed May 17 01:23:40 2006 +0200
+++ b/src/HOL/NumberTheory/Factorization.thy	Wed May 17 01:23:41 2006 +0200
@@ -11,16 +11,16 @@
 
 subsection {* Definitions *}
 
+definition
+  primel :: "nat list => bool "
+  "primel xs = (\<forall>p \<in> set xs. prime p)"
+
 consts
-  primel :: "nat list => bool "
   nondec :: "nat list => bool "
   prod :: "nat list => nat"
   oinsert :: "nat => nat list => nat list"
   sort :: "nat list => nat list"
 
-defs
-  primel_def: "primel xs == \<forall>p \<in> set xs. prime p"
-
 primrec
   "nondec [] = True"
   "nondec (x # xs) = (case xs of [] => True | y # ys => x \<le> y \<and> nondec xs)"
@@ -41,12 +41,12 @@
 subsection {* Arithmetic *}
 
 lemma one_less_m: "(m::nat) \<noteq> m * k ==> m \<noteq> Suc 0 ==> Suc 0 < m"
-  apply (case_tac m)
+  apply (cases m)
    apply auto
   done
 
 lemma one_less_k: "(m::nat) \<noteq> m * k ==> Suc 0 < m * k ==> Suc 0 < k"
-  apply (case_tac k)
+  apply (cases k)
    apply auto
   done
 
@@ -55,7 +55,7 @@
   done
 
 lemma mn_eq_m_one: "(0::nat) < m ==> m * n = m ==> n = Suc 0"
-  apply (case_tac n)
+  apply (cases n)
    apply auto
   done
 
@@ -116,9 +116,8 @@
   done
 
 lemma primel_one_empty: "primel xs ==> prod xs = Suc 0 ==> xs = []"
-  apply (unfold primel_def prime_def)
-  apply (case_tac xs)
-   apply simp_all
+  apply (cases xs)
+   apply (simp_all add: primel_def prime_def)
   done
 
 lemma prime_g_one: "prime p ==> Suc 0 < p"
@@ -131,25 +130,25 @@
   apply auto
   done
 
-lemma primel_nempty_g_one [rule_format]:
-    "primel xs --> xs \<noteq> [] --> Suc 0 < prod xs"
-  apply (unfold primel_def prime_def)
+lemma primel_nempty_g_one:
+    "primel xs \<Longrightarrow> xs \<noteq> [] \<Longrightarrow> Suc 0 < prod xs"
   apply (induct xs)
-   apply (auto elim: one_less_mult)
+   apply simp
+  apply (fastsimp simp: primel_def prime_def elim: one_less_mult)
   done
 
 lemma primel_prod_gz: "primel xs ==> 0 < prod xs"
-  apply (unfold primel_def prime_def)
   apply (induct xs)
-   apply auto
+   apply (auto simp: primel_def prime_def)
   done
 
 
 subsection {* Sorting *}
 
-lemma nondec_oinsert [rule_format]: "nondec xs --> nondec (oinsert x xs)"
+lemma nondec_oinsert: "nondec xs \<Longrightarrow> nondec (oinsert x xs)"
   apply (induct xs)
-   apply (case_tac [2] xs)
+   apply simp
+   apply (case_tac xs)
     apply (simp_all cong del: list.weak_case_cong)
   done
 
@@ -163,7 +162,7 @@
   apply simp_all
   done
 
-lemma nondec_sort_eq [rule_format]: "nondec xs --> xs = sort xs"
+lemma nondec_sort_eq [rule_format]: "nondec xs \<longrightarrow> xs = sort xs"
   apply (induct xs)
    apply safe
     apply simp_all
@@ -185,7 +184,7 @@
 
 lemma perm_primel [rule_format]: "xs <~~> ys ==> primel xs --> primel ys"
   apply (unfold primel_def)
-  apply (erule perm.induct)
+  apply (induct set: perm)
      apply simp
     apply simp
    apply (simp (no_asm))
@@ -193,13 +192,13 @@
   apply blast
   done
 
-lemma perm_prod [rule_format]: "xs <~~> ys ==> prod xs = prod ys"
-  apply (erule perm.induct)
+lemma perm_prod: "xs <~~> ys ==> prod xs = prod ys"
+  apply (induct set: perm)
      apply (simp_all add: mult_ac)
   done
 
 lemma perm_subst_oinsert: "xs <~~> ys ==> oinsert a xs <~~> oinsert a ys"
-  apply (erule perm.induct)
+  apply (induct set: perm)
      apply auto
   done
 
@@ -214,7 +213,7 @@
   done
 
 lemma perm_sort_eq: "xs <~~> ys ==> sort xs = sort ys"
-  apply (erule perm.induct)
+  apply (induct set: perm)
      apply (simp_all add: oinsert_x_y)
   done