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 |