thys/#MyFirst.thy#
changeset 16 a92c10af61bd
equal deleted inserted replaced
15:bdabf71fa35b 16:a92c10af61bd
       
     1 theory MyFirst
       
     2 imports Main
       
     3 begin
       
     4 
       
     5 datatype 'a list = Nil | Cons 'a "'a list"
       
     6 
       
     7 fun app :: "'a list \<Rightarrow> 'a list \<Rightarrow> 'a list" where
       
     8 "app Nil ys = ys" |
       
     9 "app (Cons x xs) ys = Cons x (app xs ys)"
       
    10 
       
    11 fun rev :: "'a list \<Rightarrow> 'a list" where
       
    12 "rev Nil = Nil" |
       
    13 "rev (Cons x xs) = app (rev xs) (Cons x Nil)"
       
    14 
       
    15 value "rev(Cons True (Cons False Nil))"
       
    16 
       
    17 value "1 + (2::nat)"
       
    18 value "1 + (2::int)"
       
    19 value "1 - (2::nat)"
       
    20 value "1 - (2::int)"
       
    21 
       
    22 lemma app_Nil2 [simp]: "app xs Nil = xs"
       
    23 apply(induction xs)
       
    24 apply(auto)
       
    25 done
       
    26 
       
    27 lemma app_assoc [simp]: "app (app xs ys) zs = app xs (app ys zs)"
       
    28 apply(induction xs)
       
    29 apply(auto)
       
    30 done
       
    31 
       
    32 lemma rev_app [simp]: "rev(app xs ys) = app (rev ys) (rev xs)"
       
    33 apply (induction xs)
       
    34 apply (auto)
       
    35 done
       
    36 
       
    37 theorem rev_rev [simp]: "rev(rev xs) = xs"
       
    38 apply (induction xs)
       
    39 apply (auto)
       
    40 done
       
    41 
       
    42 fun add :: "nat \<Rightarrow> nat \<Rightarrow> nat" where
       
    43 "add 0 n = n" |
       
    44 "add (Suc m) n = Suc(add m n)"
       
    45 
       
    46 lemma add_02: "add m 0 = m"
       
    47 apply(induction m)
       
    48 apply(auto)
       
    49 done
       
    50 
       
    51 value "add 2 3"
       
    52 
       
    53 (**commutative-associative**)
       
    54 lemma add_04: "add m (add n k) = add k (add m n)"
       
    55 apply(induct)
       
    56 apply(auto)
       
    57 oops
       
    58 
       
    59 fun dub :: "nat \<Rightarrow> nat" where
       
    60 "dub 0 = 0" |
       
    61 "dub m = add m m"
       
    62 
       
    63 lemma dub_01: "dub 0 = 0"
       
    64 apply(induct)
       
    65 apply(auto)
       
    66 done
       
    67 
       
    68 lemma dub_02: "dub m = add m m"
       
    69 apply(induction m)
       
    70 apply(auto)
       
    71 done
       
    72 
       
    73 value "dub 2"
       
    74 
       
    75 fun trip :: "nat \<Rightarrow> nat" where
       
    76 "trip 0 = 0" |
       
    77 "trip m = add m (add m m)"
       
    78 
       
    79 lemma trip_01: "trip 0 = 0"
       
    80 apply(induct)
       
    81 apply(auto)
       
    82 done
       
    83 
       
    84 lemma trip_02: "trip m = add m (add m m)"
       
    85 apply(induction m)
       
    86 apply(auto)
       
    87 done
       
    88 
       
    89 value "trip 1"
       
    90 value "trip 2"
       
    91 
       
    92 fun mull :: "nat \<Rightarrow> nat \<Rightarrow> nat" where
       
    93 "mull 0 0 = 0" |
       
    94 "mull m 0 = 0" |
       
    95 (**"mull m 1 = m" | **)
       
    96 "mull m n = m*n" 
       
    97 
       
    98 (**Define a function that counts the
       
    99 number of occurrences of an element in a list **)
       
   100 (**
       
   101 fun count :: "'a\<Rightarrow>'a list\<Rightarrow>nat" where
       
   102 "count  "
       
   103 **)
       
   104 
       
   105 
       
   106 
       
   107 
       
   108 
       
   109 
       
   110 
       
   111 
       
   112 
       
   113