349 Suc_not_Zero, Zero_not_Suc, Suc_Suc_eq, |
349 Suc_not_Zero, Zero_not_Suc, Suc_Suc_eq, |
350 nat_case_0, nat_case_Suc, nat_rec_0, nat_rec_Suc]; |
350 nat_case_0, nat_case_Suc, nat_rec_0, nat_rec_Suc]; |
351 |
351 |
352 val nat_ss = pair_ss addsimps nat_simps; |
352 val nat_ss = pair_ss addsimps nat_simps; |
353 |
353 |
|
354 (*Prevents simplification of f and g: much faster*) |
|
355 val nat_case_weak_cong = prove_goal Nat.thy |
|
356 "m=n ==> nat_case(m,a,f) = nat_case(n,a,f)" |
|
357 (fn [prem] => [rtac (prem RS arg_cong) 1]); |
|
358 |
|
359 val nat_rec_weak_cong = prove_goal Nat.thy |
|
360 "m=n ==> nat_rec(m,a,f) = nat_rec(n,a,f)" |
|
361 (fn [prem] => [rtac (prem RS arg_cong) 1]); |
|
362 |
354 val prems = goalw Nat.thy [le_def] "~(n<m) ==> m<=n::nat"; |
363 val prems = goalw Nat.thy [le_def] "~(n<m) ==> m<=n::nat"; |
355 by (resolve_tac prems 1); |
364 by (resolve_tac prems 1); |
356 val leI = result(); |
365 val leI = result(); |
357 |
366 |
358 val prems = goalw Nat.thy [le_def] "m<=n ==> ~(n<m::nat)"; |
367 val prems = goalw Nat.thy [le_def] "m<=n ==> ~(n<m::nat)"; |