src/HOL/NatTransfer.thy
changeset 32554 4ccd84fb19d3
parent 32264 0be31453f698
equal deleted inserted replaced
32553:bf781ef40c81 32554:4ccd84fb19d3
     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