module Tacticals where import Core_datatype import Kernel import Lookup import X_interface import Tactics import Goals import Globals -- partain import Tags -- partain import Tree import Edlib import Type_defs import Vtslib infixr 5 `orelse` infixr 4 `andthen` orelse f1 f2 trst = f1 trst `handle` ( \ _ -> f2 trst ) andthen f1 f2 trst = f1 trst /./ subtrst f2 repeat_tac f trst = f trst /./ ( \ trst' -> subtrst (repeat_tac f) trst' `handle` ( \ _ -> reTurn trst )) for' 0 f trst = reTurn trst for' i f trst = f trst /./ subtrst (for' (i-1) f) subtrst f trst@(TreeSt (Tree _ trL _ _ _) _ _) = subtrst' 0 (length trL) f trst subtrst' i j f trst | i >= j = reTurn trst | otherwise = tree_down i trst /./ f /./ tree_up /./ subtrst' (i+1) j f