src/HOL/ex/Primes.ML
changeset 2102 41a667d2c3fa
parent 1804 cfa0052d5fe9
child 3242 406ae5ced4e9
equal deleted inserted replaced
2101:5d44339454a4 2102:41a667d2c3fa
    90 (* Property 1: egcd m n divides m and n *)
    90 (* Property 1: egcd m n divides m and n *)
    91 
    91 
    92 goal thy "ALL m. (egcd m n dvd m) & (egcd m n dvd n)";
    92 goal thy "ALL m. (egcd m n dvd m) & (egcd m n dvd n)";
    93 by (res_inst_tac [("n","n")] less_induct 1);
    93 by (res_inst_tac [("n","n")] less_induct 1);
    94 by (rtac allI 1);
    94 by (rtac allI 1);
    95 by (excluded_middle_tac "n=0" 1);
    95 by (case_tac "n=0" 1);
    96 (* case n = 0 *)
    96 (* case n = 0 *)
    97 by (Asm_simp_tac 2);
    97 by (Asm_simp_tac 1);
    98 (* case n > 0 *)
    98 (* case n > 0 *)
    99 by (asm_full_simp_tac (!simpset addsimps [zero_less_eq RS sym]) 1);
    99 by (asm_full_simp_tac (!simpset addsimps [zero_less_eq RS sym]) 1);
   100 by (eres_inst_tac [("x","m mod n")] allE 1);
   100 by (eres_inst_tac [("x","m mod n")] allE 1);
   101 by (asm_full_simp_tac (!simpset addsimps [mod_less_divisor]) 1);
   101 by (asm_full_simp_tac (!simpset addsimps [mod_less_divisor]) 1);
   102 by (fast_tac (!claset addIs [gcd_ind]) 1);
   102 by (fast_tac (!claset addIs [gcd_ind]) 1);
   124 (* Property 2: for all m,n,f naturals, 
   124 (* Property 2: for all m,n,f naturals, 
   125                if f divides m and f divides n then f divides egcd m n*)
   125                if f divides m and f divides n then f divides egcd m n*)
   126 goal thy "!!k. ALL m. (f dvd m) & (f dvd k) --> f dvd egcd m k";
   126 goal thy "!!k. ALL m. (f dvd m) & (f dvd k) --> f dvd egcd m k";
   127 by (res_inst_tac [("n","k")] less_induct 1);
   127 by (res_inst_tac [("n","k")] less_induct 1);
   128 by (rtac allI 1);
   128 by (rtac allI 1);
   129 by (excluded_middle_tac "n=0" 1);
   129 by (case_tac "n=0" 1);
   130 (* case n = 0 *)
   130 (* case n = 0 *)
   131 by (Asm_simp_tac 2);
   131 by (Asm_simp_tac 1);
   132 (* case n > 0 *)
   132 (* case n > 0 *)
   133 by (Step_tac 1);
   133 by (Step_tac 1);
   134 by (asm_full_simp_tac (!simpset addsimps [zero_less_eq RS sym]) 1);
   134 by (asm_full_simp_tac (!simpset addsimps [zero_less_eq RS sym]) 1);
   135 by (eres_inst_tac [("x","m mod n")] allE 1);
   135 by (eres_inst_tac [("x","m mod n")] allE 1);
   136 by (asm_full_simp_tac (!simpset addsimps [mod_less_divisor]) 1);
   136 by (asm_full_simp_tac (!simpset addsimps [mod_less_divisor]) 1);