equal
deleted
inserted
replaced
1 (* Title: HOL/Library/NatTransfer.thy |
1 |
2 Authors: Jeremy Avigad and Amine Chaieb |
2 (* Authors: Jeremy Avigad and Amine Chaieb *) |
3 |
3 |
4 Sets up transfer from nats to ints and |
4 header {* Sets up transfer from nats to ints and back. *} |
5 back. |
|
6 *) |
|
7 |
|
8 |
|
9 header {* NatTransfer *} |
|
10 |
5 |
11 theory NatTransfer |
6 theory NatTransfer |
12 imports Main Parity |
7 imports Main Parity |
13 uses ("Tools/transfer_data.ML") |
|
14 begin |
8 begin |
15 |
|
16 subsection {* A transfer Method between isomorphic domains*} |
|
17 |
|
18 definition TransferMorphism:: "('b \<Rightarrow> 'a) \<Rightarrow> 'b set \<Rightarrow> bool" |
|
19 where "TransferMorphism a B = True" |
|
20 |
|
21 use "Tools/transfer_data.ML" |
|
22 |
|
23 setup TransferData.setup |
|
24 |
|
25 |
9 |
26 subsection {* Set up transfer from nat to int *} |
10 subsection {* Set up transfer from nat to int *} |
27 |
11 |
28 (* set up transfer direction *) |
12 (* set up transfer direction *) |
29 |
13 |
495 |
479 |
496 declare TransferMorphism_int_nat[transfer add |
480 declare TransferMorphism_int_nat[transfer add |
497 return: transfer_int_nat_sum_prod transfer_int_nat_sum_prod2 |
481 return: transfer_int_nat_sum_prod transfer_int_nat_sum_prod2 |
498 cong: setsum_cong setprod_cong] |
482 cong: setsum_cong setprod_cong] |
499 |
483 |
500 |
|
501 subsection {* Test it out *} |
|
502 |
|
503 (* nat to int *) |
|
504 |
|
505 lemma ex1: "(x::nat) + y = y + x" |
|
506 by auto |
|
507 |
|
508 thm ex1 [transferred] |
|
509 |
|
510 lemma ex2: "(a::nat) div b * b + a mod b = a" |
|
511 by (rule mod_div_equality) |
|
512 |
|
513 thm ex2 [transferred] |
|
514 |
|
515 lemma ex3: "ALL (x::nat). ALL y. EX z. z >= x + y" |
|
516 by auto |
|
517 |
|
518 thm ex3 [transferred natint] |
|
519 |
|
520 lemma ex4: "(x::nat) >= y \<Longrightarrow> (x - y) + y = x" |
|
521 by auto |
|
522 |
|
523 thm ex4 [transferred] |
|
524 |
|
525 lemma ex5: "(2::nat) * (SUM i <= n. i) = n * (n + 1)" |
|
526 by (induct n rule: nat_induct, auto) |
|
527 |
|
528 thm ex5 [transferred] |
|
529 |
|
530 theorem ex6: "0 <= (n::int) \<Longrightarrow> 2 * \<Sum>{0..n} = n * (n + 1)" |
|
531 by (rule ex5 [transferred]) |
|
532 |
|
533 thm ex6 [transferred] |
|
534 |
|
535 thm ex5 [transferred, transferred] |
|
536 |
|
537 end |
484 end |