src/HOL/Predicate.thy
changeset 31222 4a84ae57b65f
parent 31216 29da4d396e1f
child 31932 685e7b450ab5
equal deleted inserted replaced
31218:fa54c1e614df 31222:4a84ae57b65f
   635 sig
   635 sig
   636   datatype 'a pred = Seq of (unit -> 'a seq)
   636   datatype 'a pred = Seq of (unit -> 'a seq)
   637   and 'a seq = Empty | Insert of 'a * 'a pred | Join of 'a pred * 'a seq
   637   and 'a seq = Empty | Insert of 'a * 'a pred | Join of 'a pred * 'a seq
   638   val yield: 'a pred -> ('a * 'a pred) option
   638   val yield: 'a pred -> ('a * 'a pred) option
   639   val yieldn: int -> 'a pred -> 'a list * 'a pred
   639   val yieldn: int -> 'a pred -> 'a list * 'a pred
       
   640   val map: ('a -> 'b) -> 'a pred -> 'b pred
   640 end;
   641 end;
   641 
   642 
   642 structure Predicate : PREDICATE =
   643 structure Predicate : PREDICATE =
   643 struct
   644 struct
   644 
   645 
   658     | SOME (v, y) => let
   659     | SOME (v, y) => let
   659         val (vs, z) = anamorph f (k - 1) y
   660         val (vs, z) = anamorph f (k - 1) y
   660       in (v :: vs, z) end)
   661       in (v :: vs, z) end)
   661 
   662 
   662 fun yieldn P = anamorph yield P;
   663 fun yieldn P = anamorph yield P;
       
   664 
       
   665 fun map f = @{code map} f;
   663 
   666 
   664 end;
   667 end;
   665 *}
   668 *}
   666 
   669 
   667 code_reserved Eval Predicate
   670 code_reserved Eval Predicate