src/Provers/IsaPlanner/zipper.ML
changeset 19861 620d90091788
parent 19853 cb73c3c367db
child 19871 88e8f6173bab
equal deleted inserted replaced
19860:6e44610bdd76 19861:620d90091788
   319           | lzyl ((Here z) :: more) () = SOME(z, Seq.make (lzyl more))
   319           | lzyl ((Here z) :: more) () = SOME(z, Seq.make (lzyl more))
   320           | lzyl ((LookIn z) :: more) () =
   320           | lzyl ((LookIn z) :: more) () =
   321             (case lzy z
   321             (case lzy z
   322               of NONE => NONE
   322               of NONE => NONE
   323                | SOME (hz,mz) => 
   323                | SOME (hz,mz) => 
   324                  SOME (hz, Seq.append (mz, Seq.make (lzyl more))))
   324                  SOME (hz, Seq.append mz (Seq.make (lzyl more))))
   325         and lzy z = lzyl (fsearch z) ()
   325         and lzy z = lzyl (fsearch z) ()
   326       in Seq.make o lzyl o fsearch end;
   326       in Seq.make o lzyl o fsearch end;
   327 
   327 
   328   (* path folded lazy search - the search list is defined in terms of
   328   (* path folded lazy search - the search list is defined in terms of
   329   the path passed through: the data a is updated with every zipper
   329   the path passed through: the data a is updated with every zipper
   333         fun lzyl a [] () = NONE
   333         fun lzyl a [] () = NONE
   334           | lzyl a ((Here z) :: more) () = SOME(z, Seq.make (lzyl a more))
   334           | lzyl a ((Here z) :: more) () = SOME(z, Seq.make (lzyl a more))
   335           | lzyl a ((LookIn z) :: more) () =
   335           | lzyl a ((LookIn z) :: more) () =
   336             (case lzy a z
   336             (case lzy a z
   337               of NONE => lzyl a more ()
   337               of NONE => lzyl a more ()
   338                | SOME(hz,mz) => SOME(hz,Seq.append(mz,Seq.make(lzyl a more))))
   338                | SOME(hz,mz) => SOME(hz,Seq.append mz (Seq.make(lzyl a more))))
   339         and lzy a z = 
   339         and lzy a z = 
   340             let val (a2, slist) = (fsearch a z) in lzyl a2 slist () end
   340             let val (a2, slist) = (fsearch a z) in lzyl a2 slist () end
   341 
   341 
   342         val (a,slist) = fsearch a0 z
   342         val (a,slist) = fsearch a0 z
   343       in Seq.make (lzyl a slist) end;
   343       in Seq.make (lzyl a slist) end;
   349           | lzyl ((a, Here z) :: more) () = 
   349           | lzyl ((a, Here z) :: more) () = 
   350             SOME((a,z), Seq.make (lzyl more))
   350             SOME((a,z), Seq.make (lzyl more))
   351           | lzyl ((a, LookIn z) :: more) () =
   351           | lzyl ((a, LookIn z) :: more) () =
   352             (case lzyl (fsearch a z) () of 
   352             (case lzyl (fsearch a z) () of 
   353                NONE => lzyl more ()
   353                NONE => lzyl more ()
   354              | SOME (z,mz) => SOME (z,Seq.append(mz, Seq.make (lzyl more))))
   354              | SOME (z,mz) => SOME (z,Seq.append mz (Seq.make (lzyl more))))
   355       in Seq.make (lzyl (fsearch a0 z)) end;
   355       in Seq.make (lzyl (fsearch a0 z)) end;
   356 
   356 
   357 
   357 
   358   fun limit_pcapply f z = 
   358   fun limit_pcapply f z = 
   359       let val (z2,c) = split z
   359       let val (z2,c) = split z