src/HOL/Tools/dseq.ML
author wenzelm
Sun, 21 Oct 2007 14:21:53 +0200
changeset 25132 dffe405b090d
parent 24625 0398a5e802d3
child 25308 fc01c83a466d
permissions -rw-r--r--
removed obsolete ML bindings;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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);