equal
deleted
inserted
replaced
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); |