src/HOL/List.thy
changeset 1908 55d8e38262a8
parent 1898 260a9711f507
child 2262 c7ee913746fd
equal deleted inserted replaced
1907:d069f23e941f 1908:55d8e38262a8
     4     Copyright   1994 TU Muenchen
     4     Copyright   1994 TU Muenchen
     5 
     5 
     6 Definition of type 'a list as a datatype. This allows primrec to work.
     6 Definition of type 'a list as a datatype. This allows primrec to work.
     7 
     7 
     8 TODO: delete list_all from this theory and from ex/Sorting, etc.
     8 TODO: delete list_all from this theory and from ex/Sorting, etc.
     9       use setOfList instead
     9       use set_of_list instead
    10 *)
    10 *)
    11 
    11 
    12 List = Arith +
    12 List = Arith +
    13 
    13 
    14 datatype 'a list = "[]" ("[]") | "#" 'a ('a list) (infixr 65)
    14 datatype 'a list = "[]" ("[]") | "#" 'a ('a list) (infixr 65)
    15 
    15 
    16 consts
    16 consts
    17 
    17 
    18   "@"       :: ['a list, 'a list] => 'a list            (infixr 65)
    18   "@"         :: ['a list, 'a list] => 'a list            (infixr 65)
    19   drop      :: [nat, 'a list] => 'a list
    19   drop        :: [nat, 'a list] => 'a list
    20   filter    :: ['a => bool, 'a list] => 'a list
    20   filter      :: ['a => bool, 'a list] => 'a list
    21   flat      :: 'a list list => 'a list
    21   flat        :: 'a list list => 'a list
    22   foldl     :: [['b,'a] => 'b, 'b, 'a list] => 'b
    22   foldl       :: [['b,'a] => 'b, 'b, 'a list] => 'b
    23   hd        :: 'a list => 'a
    23   hd          :: 'a list => 'a
    24   length    :: 'a list => nat
    24   length      :: 'a list => nat
    25   setOfList :: ('a list => 'a set)
    25   set_of_list :: ('a list => 'a set)
    26   list_all  :: ('a => bool) => ('a list => bool)
    26   list_all    :: ('a => bool) => ('a list => bool)
    27   map       :: ('a=>'b) => ('a list => 'b list)
    27   map         :: ('a=>'b) => ('a list => 'b list)
    28   mem       :: ['a, 'a list] => bool                    (infixl 55)
    28   mem         :: ['a, 'a list] => bool                    (infixl 55)
    29   nth       :: [nat, 'a list] => 'a
    29   nth         :: [nat, 'a list] => 'a
    30   take      :: [nat, 'a list] => 'a list
    30   take        :: [nat, 'a list] => 'a list
    31   tl,ttl    :: 'a list => 'a list
    31   tl,ttl      :: 'a list => 'a list
    32   rev       :: 'a list => 'a list
    32   rev         :: 'a list => 'a list
    33 
    33 
    34 syntax
    34 syntax
    35   (* list Enumeration *)
    35   (* list Enumeration *)
    36   "@list"   :: args => 'a list                        ("[(_)]")
    36   "@list"     :: args => 'a list                        ("[(_)]")
    37 
    37 
    38   (* Special syntax for list_all and filter *)
    38   (* Special syntax for list_all and filter *)
    39   "@Alls"       :: [idt, 'a list, bool] => bool ("(2Alls _:_./ _)" 10)
    39   "@Alls"     :: [idt, 'a list, bool] => bool         ("(2Alls _:_./ _)" 10)
    40   "@filter"     :: [idt, 'a list, bool] => 'a list      ("(1[_:_ ./ _])")
    40   "@filter"   :: [idt, 'a list, bool] => 'a list      ("(1[_:_ ./ _])")
    41 
    41 
    42 translations
    42 translations
    43   "[x, xs]"     == "x#[xs]"
    43   "[x, xs]"     == "x#[xs]"
    44   "[x]"         == "x#[]"
    44   "[x]"         == "x#[]"
    45 
    45 
    57   "ttl([]) = []"
    57   "ttl([]) = []"
    58   "ttl(x#xs) = xs"
    58   "ttl(x#xs) = xs"
    59 primrec "op mem" list
    59 primrec "op mem" list
    60   "x mem [] = False"
    60   "x mem [] = False"
    61   "x mem (y#ys) = (if y=x then True else x mem ys)"
    61   "x mem (y#ys) = (if y=x then True else x mem ys)"
    62 primrec setOfList list
    62 primrec set_of_list list
    63   "setOfList [] = {}"
    63   "set_of_list [] = {}"
    64   "setOfList (x#xs) = insert x (setOfList xs)"
    64   "set_of_list (x#xs) = insert x (set_of_list xs)"
    65 primrec list_all list
    65 primrec list_all list
    66   list_all_Nil  "list_all P [] = True"
    66   list_all_Nil  "list_all P [] = True"
    67   list_all_Cons "list_all P (x#xs) = (P(x) & list_all P xs)"
    67   list_all_Cons "list_all P (x#xs) = (P(x) & list_all P xs)"
    68 primrec map list
    68 primrec map list
    69   "map f [] = []"
    69   "map f [] = []"