| author | paulson | 
| Fri, 05 Oct 2007 09:59:03 +0200 | |
| changeset 24854 | 0ebcd575d3c6 | 
| parent 24625 | 0398a5e802d3 | 
| child 25308 | fc01c83a466d | 
| permissions | -rw-r--r-- | 
| 
24625
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
1  | 
(* Title: HOL/Tools/DSeq.ML  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
2  | 
ID: $Id$  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
3  | 
Author: Stefan Berghofer, TU Muenchen  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
4  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
5  | 
Sequences with recursion depth limit.  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
6  | 
*)  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
7  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
8  | 
structure DSeq =  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
9  | 
struct  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
10  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
11  | 
fun maps f s 0 = Seq.empty  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
12  | 
| maps f s i = Seq.maps (fn a => f a i) (s (i - 1));  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
13  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
14  | 
fun map f s i = Seq.map f (s i);  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
15  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
16  | 
fun append s1 s2 i = Seq.append (s1 i) (s2 i);  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
17  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
18  | 
fun interleave s1 s2 i = Seq.interleave (s1 i, s2 i);  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
19  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
20  | 
fun single x i = Seq.single x;  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
21  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
22  | 
fun empty i = Seq.empty;  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
23  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
24  | 
fun guard b = if b then single () else empty;  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
25  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
26  | 
fun of_list xs i = Seq.of_list xs;  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
27  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
28  | 
fun list_of s = Seq.list_of (s ~1);  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
29  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
30  | 
fun pull s = Seq.pull (s ~1);  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
31  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
32  | 
fun hd s = Seq.hd (s ~1);  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
33  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
34  | 
end;  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
35  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
36  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
37  | 
(* combinators for code generated from inductive predicates *)  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
38  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
39  | 
infix 5 :->;  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
40  | 
infix 3 ++;  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
41  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
42  | 
fun s :-> f = DSeq.maps f s;  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
43  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
44  | 
fun f ++ g = DSeq.append f g;  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
45  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
46  | 
val ?? = DSeq.guard;  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
47  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
48  | 
fun ??? f g = f o g;  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
49  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
50  | 
fun ?! s = is_some (DSeq.pull s);  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
51  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
52  | 
fun equal__1 x = DSeq.single x;  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
53  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
54  | 
val equal__2 = equal__1;  | 
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
55  | 
|
| 
 
0398a5e802d3
separated code for inductive sequences from inductive_codegen.ML
 
haftmann 
parents:  
diff
changeset
 | 
56  | 
fun equal__1_2 (x, y) = ?? (x = y);  |