@@ -78,6 +78,7 @@ data Tactic = Attack
78 | Instance Name
78 | Instance Name
79 | SetInjective Name
79 | SetInjective Name
80 | MoveLast Name
80 | MoveLast Name
81 | ProofState
82 | ProofState
@@ -711,6 +712,20 @@ updateProblems ctxt ns ps inj holes = up ns ps where
711 _ -> let (ns', ps') = up ns ps in
712 _ -> let (ns', ps') = up ns ps in
712 (ns', (x',y',env',err') : ps')
713 (ns', (x',y',env',err') : ps')
715+-- attempt to solve remaining problems with match_unify
716+matchProblems ctxt ps inj holes = up [] ps where
718+ up ns ((x, y, env, err) : ps) =
719+ let x' = updateSolved ns x
720+ y' = updateSolved ns y
721+ err' = updateError ns err
722+ env' = updateEnv ns env in
723+ case match_unify ctxt env' x' y' inj holes of
724+ OK v -> -- trace ("Added " ++ show v ++ " from " ++ show (x', y')) $
726+ _ -> let (ns', ps') = up ns ps in
727+ (ns', (x',y',env',err') : ps')
714processTactic :: Tactic -> ProofState -> TC (ProofState, String)
729processTactic :: Tactic -> ProofState -> TC (ProofState, String)
715processTactic QED ps = case holes ps of
730processTactic QED ps = case holes ps of
716 [] -> do let tm = {- normalise (context ps) [] -} (pterm ps)
731 [] -> do let tm = {- normalise (context ps) [] -} (pterm ps)
@@ -739,6 +754,15 @@ processTactic (Reorder n) ps
739 return (ps' { previous = Just ps, plog = "" }, plog ps')
754 return (ps' { previous = Just ps, plog = "" }, plog ps')
740processTactic (ComputeLet n) ps
755processTactic (ComputeLet n) ps
741 = return (ps { pterm = computeLet (context ps) n (pterm ps) }, "")
756 = return (ps { pterm = computeLet (context ps) n (pterm ps) }, "")
757+processTactic MatchProblems ps
758+ = let (ns', probs') = matchProblems (context ps)
762+ pterm' = updateSolved ns' (pterm ps) in
763+ return (ps { pterm = pterm', solved = Nothing, problems = probs',
764+ previous = Just ps, plog = "",
765+ holes = holes ps \\ (map fst ns') }, plog ps)
742processTactic t ps
766processTactic t ps
743 = case holes ps of
767 = case holes ps of
744 [] -> fail "Nothing to fill in."
768 [] -> fail "Nothing to fill in."
@@ -795,4 +819,3 @@ process t h = tactic (Just h) (mktac t)
795 mktac (Instance n) = instanceArg n
819 mktac (Instance n) = instanceArg n
796 mktac (SetInjective n) = setinj n
820 mktac (SetInjective n) = setinj n
797 mktac (MoveLast n) = movelast n
821 mktac (MoveLast n) = movelast n