Plan 9 from Bell Labs’s /usr/web/sources/contrib/fernan/nhc98/tests/nofib/real/veritas/Tactics.hs

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


module Tactics where

import Core_datatype
import X_interface

import Vtslib

import Globals

import Lookup

import Kernel

import Edlib

import Goals

import Tags	-- partain

import Tree

import Type_defs

data TACTIC 
	= Tactic String		
		 ( Global_state -> Lookup_table -> Obj -> Xin ->
				Xst ( MayBe ( Option [String] ) String ) )
		 ( Global_state -> Sgn -> Lookup_table -> Option [String] -> Obj
		    -> MayBe ([Obj] , ( [Option Done] -> Option Done )) String )

data Ordered_tactic 
	= OrdTactic String
		    ( Global_state -> Lookup_table -> Obj -> Xin ->
				Xst ( MayBe ( Option [String] ) String ) )
		    ( Global_state -> Sgn -> Lookup_table -> 
			Option [String] -> Obj -> 
			 MayBe ( [Obj] , [Lookup_table] , [Bool] ,
			    ([Option Done] -> [Bool] -> 
				( [Bool] , [Sgn] , Option Done ))) String )




lift_tactic (Tactic name arg_fn subgoal_fn) 
    = ( name , lift )
      where
      lift (TreeSt t@(Tree g [] dn vf u) spine gst ) 
	  = arg_fn gst lt obj /./
	    exp
	    where
	    (Goal NONE NONE com uid obj rw sg lt) = g
	    exp args 
		= return_val ( subgoal_fn gst sg lt args obj ) /./
		  exp'
	          where
		  exp' ( subgoals , valid_fn ) 
			= make_goal1 sg lt subgoals [] /./
			  exp'' 
			  where
	                  exp'' subtrees
			       = reTurn ( TreeSt (vf' gst t1) spine gst )
			  	 where
	  	  	         vf' = lift_tactic_valid valid_fn
	  	                 g1 =Goal (SOME name) args com uid obj rw sg lt
	  	                 t1 = Tree g1 subtrees NONE vf' (SOME t)
      lift _ = return_err "cannot apply tactic" 



lift_ordtactic (OrdTactic name arg_fn subgoal_fn) 
    = ( name , lift )
      where
      lift (TreeSt t@(Tree g [] dn vf u) spine gst ) 
	  = arg_fn gst lt obj /./
	    exp
	    where
	    (Goal NONE NONE com uid obj rw sg lt) = g
	    exp args 
	        = return_val ( subgoal_fn gst sg lt args obj ) /./
		  exp'
	          where
		  exp' ( subgoals , ltL , rwL , valid_fn )
		       = make_goal2 sg (zip ltL (zip rwL subgoals)) [] /./
			 exp''
			 where
		         exp'' subtrees
				= reTurn ( TreeSt (vf' gst t1) spine gst )
			  	  where
	  	  	  	  vf' = lift_ordtactic_valid valid_fn
	  	          	  g1 =Goal (SOME name) args com uid obj rw sg lt
	  	          	  t1 = Tree g1 subtrees NONE vf' (SOME t)
      lift _ = return_err "cannot apply tactic" 



lift_tactic_valid vf gst t@(Tree g tl NONE vf' u) 
	= Tree g tl dn vf' u
--	  `handle`
--	   _ -> t
	  where
	  dnL = map get_done tl
	  dn  = vf dnL 

lift_tactic_valid _ _ t = t




lift_ordtactic_valid vf gst t @(Tree g tl NONE vf' u) 
	= Tree g tl' dn vf' u
--	    handle _ => t
	  where
	  dnL = map get_done tl
	  bL  = map get_rw tl
	  (bL',sgL,dn) = vf dnL bL
	  tl' = map set_info (zip tl (zip bL' sgL))

lift_ordtactic_valid _ _ t = t




make_goal1 sg lt ( obj : objL ) glL
	= make_goal1' sg lt obj /./
	  ( \ gl -> make_goal1  sg lt objL ( glL <: gl ))

make_goal1 _ _ [] glL 
	= reTurn glL 




make_goal1' sg lt obj
	= genuid /./
	  ( \ uid -> reTurn ( Tree (Goal NONE NONE NONE uid obj True sg lt)
							 [] NONE id' NONE ))



make_goal2 sg ((lt, (rw, obj)) : pL ) glL 
	= make_goal2' sg lt rw obj /./
	  ( \ gl -> make_goal2  sg pL ( glL <: gl ))

make_goal2 _ [] glL 
	= reTurn glL 




make_goal2' sg lt rw obj
	= genuid /./
	  ( \ uid -> reTurn ( Tree (Goal NONE NONE NONE uid 
					obj rw sg lt) [] NONE id' NONE ))


get_done (Tree _ _ dn _ _) = dn

get_rw (Tree (Goal _ _ _ _ _ rw _ _) _ _ _ _) = rw

set_info (Tree (Goal cmd arg com uid obj _ _ lt) tl dn vf u , (rw,sg)) 
	= Tree (Goal cmd arg com uid obj rw sg lt) tl dn vf u

id' x y = y

null_arg_fn gst lt spc = reTurn NONE 

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].