41 None => None |
41 None => None |
42 | Some yq => (case map_seq f xq' i pol of |
42 | Some yq => (case map_seq f xq' i pol of |
43 None => None |
43 None => None |
44 | Some zq => Some (Lazy_Sequence.append yq zq))))" |
44 | Some zq => Some (Lazy_Sequence.append yq zq))))" |
45 |
45 |
46 fun bind :: "'a dseq => ('a => 'b dseq) => 'b dseq" |
46 definition bind :: "'a dseq => ('a => 'b dseq) => 'b dseq" |
47 where |
47 where |
48 "bind x f = (%i pol. |
48 "bind x f = (%i pol. |
49 if i = 0 then |
49 if i = 0 then |
50 (if pol then Some Lazy_Sequence.empty else None) |
50 (if pol then Some Lazy_Sequence.empty else None) |
51 else |
51 else |
52 (case x (i - 1) pol of |
52 (case x (i - 1) pol of |
53 None => None |
53 None => None |
54 | Some xq => map_seq f xq i pol))" |
54 | Some xq => map_seq f xq i pol))" |
55 |
55 |
56 fun union :: "'a dseq => 'a dseq => 'a dseq" |
56 definition union :: "'a dseq => 'a dseq => 'a dseq" |
57 where |
57 where |
58 "union x y = (%i pol. case (x i pol, y i pol) of |
58 "union x y = (%i pol. case (x i pol, y i pol) of |
59 (Some xq, Some yq) => Some (Lazy_Sequence.append xq yq) |
59 (Some xq, Some yq) => Some (Lazy_Sequence.append xq yq) |
60 | _ => None)" |
60 | _ => None)" |
61 |
61 |
62 definition if_seq :: "bool => unit dseq" |
62 definition if_seq :: "bool => unit dseq" |
63 where |
63 where |
64 "if_seq b = (if b then single () else empty)" |
64 "if_seq b = (if b then single () else empty)" |
65 |
65 |
66 fun not_seq :: "unit dseq => unit dseq" |
66 definition not_seq :: "unit dseq => unit dseq" |
67 where |
67 where |
68 "not_seq x = (%i pol. case x i (\<not>pol) of |
68 "not_seq x = (%i pol. case x i (\<not>pol) of |
69 None => Some Lazy_Sequence.empty |
69 None => Some Lazy_Sequence.empty |
70 | Some xq => (case Lazy_Sequence.yield xq of |
70 | Some xq => (case Lazy_Sequence.yield xq of |
71 None => Some (Lazy_Sequence.single ()) |
71 None => Some (Lazy_Sequence.single ()) |
72 | Some _ => Some (Lazy_Sequence.empty)))" |
72 | Some _ => Some (Lazy_Sequence.empty)))" |
73 |
73 |
74 fun map :: "('a => 'b) => 'a dseq => 'b dseq" |
74 definition map :: "('a => 'b) => 'a dseq => 'b dseq" |
75 where |
75 where |
76 "map f g = (%i pol. case g i pol of |
76 "map f g = (%i pol. case g i pol of |
77 None => None |
77 None => None |
78 | Some xq => Some (Lazy_Sequence.map f xq))" |
78 | Some xq => Some (Lazy_Sequence.map f xq))" |
79 |
79 |
104 |
104 |
105 hide const Sequence.Seq Sequence.yield Sequence.yieldn Sequence.empty Sequence.single |
105 hide const Sequence.Seq Sequence.yield Sequence.yieldn Sequence.empty Sequence.single |
106 Sequence.append Sequence.flat Sequence.map Sequence.bind Sequence.ifpred Sequence.not_seq |
106 Sequence.append Sequence.flat Sequence.map Sequence.bind Sequence.ifpred Sequence.not_seq |
107 *) |
107 *) |
108 hide (open) const empty single eval map_seq bind union if_seq not_seq map |
108 hide (open) const empty single eval map_seq bind union if_seq not_seq map |
109 hide (open) fact empty_def single_def eval.simps map_seq.simps bind.simps union.simps |
109 hide (open) fact empty_def single_def eval.simps map_seq.simps bind_def union_def |
110 if_seq_def not_seq.simps map.simps |
110 if_seq_def not_seq_def map_def |
111 |
111 |
112 end |
112 end |