equal
deleted
inserted
replaced
134 addEs [make_elim Suc_inject, Suc_neq_Zero]) 1); |
134 addEs [make_elim Suc_inject, Suc_neq_Zero]) 1); |
135 qed "nat_case_Suc"; |
135 qed "nat_case_Suc"; |
136 |
136 |
137 (** Introduction rules for 'pred_nat' **) |
137 (** Introduction rules for 'pred_nat' **) |
138 |
138 |
139 goalw Nat.thy [pred_nat_def] "<n, Suc(n)> : pred_nat"; |
139 goalw Nat.thy [pred_nat_def] "(n, Suc(n)) : pred_nat"; |
140 by (fast_tac set_cs 1); |
140 by (fast_tac set_cs 1); |
141 qed "pred_natI"; |
141 qed "pred_natI"; |
142 |
142 |
143 val major::prems = goalw Nat.thy [pred_nat_def] |
143 val major::prems = goalw Nat.thy [pred_nat_def] |
144 "[| p : pred_nat; !!x n. [| p = <n, Suc(n)> |] ==> R \ |
144 "[| p : pred_nat; !!x n. [| p = (n, Suc(n)) |] ==> R \ |
145 \ |] ==> R"; |
145 \ |] ==> R"; |
146 by (rtac (major RS CollectE) 1); |
146 by (rtac (major RS CollectE) 1); |
147 by (REPEAT (eresolve_tac ([asm_rl,exE]@prems) 1)); |
147 by (REPEAT (eresolve_tac ([asm_rl,exE]@prems) 1)); |
148 qed "pred_natE"; |
148 qed "pred_natE"; |
149 |
149 |
202 |
202 |
203 goalw Nat.thy [less_def] "n < Suc(n)"; |
203 goalw Nat.thy [less_def] "n < Suc(n)"; |
204 by (rtac (pred_natI RS r_into_trancl) 1); |
204 by (rtac (pred_natI RS r_into_trancl) 1); |
205 qed "lessI"; |
205 qed "lessI"; |
206 |
206 |
207 (* i<j ==> i<Suc(j) *) |
207 (* i(j ==> i(Suc(j) *) |
208 val less_SucI = lessI RSN (2, less_trans); |
208 val less_SucI = lessI RSN (2, less_trans); |
209 |
209 |
210 goal Nat.thy "0 < Suc(n)"; |
210 goal Nat.thy "0 < Suc(n)"; |
211 by (nat_ind_tac "n" 1); |
211 by (nat_ind_tac "n" 1); |
212 by (rtac lessI 1); |
212 by (rtac lessI 1); |
218 |
218 |
219 val prems = goalw Nat.thy [less_def] "n<m ==> ~ m<(n::nat)"; |
219 val prems = goalw Nat.thy [less_def] "n<m ==> ~ m<(n::nat)"; |
220 by(fast_tac (HOL_cs addIs ([wf_pred_nat, wf_trancl RS wf_asym]@prems))1); |
220 by(fast_tac (HOL_cs addIs ([wf_pred_nat, wf_trancl RS wf_asym]@prems))1); |
221 qed "less_not_sym"; |
221 qed "less_not_sym"; |
222 |
222 |
223 (* [| n<m; m<n |] ==> R *) |
223 (* [| n(m; m(n |] ==> R *) |
224 bind_thm ("less_asym", (less_not_sym RS notE)); |
224 bind_thm ("less_asym", (less_not_sym RS notE)); |
225 |
225 |
226 goalw Nat.thy [less_def] "~ n<(n::nat)"; |
226 goalw Nat.thy [less_def] "~ n<(n::nat)"; |
227 by (rtac notI 1); |
227 by (rtac notI 1); |
228 by (etac (wf_pred_nat RS wf_trancl RS wf_anti_refl) 1); |
228 by (etac (wf_pred_nat RS wf_trancl RS wf_anti_refl) 1); |
229 qed "less_not_refl"; |
229 qed "less_not_refl"; |
230 |
230 |
231 (* n<n ==> R *) |
231 (* n(n ==> R *) |
232 bind_thm ("less_anti_refl", (less_not_refl RS notE)); |
232 bind_thm ("less_anti_refl", (less_not_refl RS notE)); |
233 |
233 |
234 goal Nat.thy "!!m. n<m ==> m ~= (n::nat)"; |
234 goal Nat.thy "!!m. n<m ==> m ~= (n::nat)"; |
235 by(fast_tac (HOL_cs addEs [less_anti_refl]) 1); |
235 by(fast_tac (HOL_cs addEs [less_anti_refl]) 1); |
236 qed "less_not_refl2"; |
236 qed "less_not_refl2"; |