@@ -24,11 +24,17 @@ prover x = do ctxt <- getContext
24 else fail $ show x ++ " is not a metavariable"
24 else fail $ show x ++ " is not a metavariable"
25 _ -> fail "No such metavariable"
25 _ -> fail "No such metavariable"
27+dumpProof :: Name -> [String] -> IO ()
28+dumpProof n ps = do putStrLn $ show n ++ " = proof {"
29+ mapM_ (\x -> putStrLn $ " " ++ x ++ ";") ps
27prove :: Context -> Name -> Type -> Idris ()
32prove :: Context -> Name -> Type -> Idris ()
28prove ctxt n ty
33prove ctxt n ty
29 = do let ps = initElaborator n ctxt ty
34 = do let ps = initElaborator n ctxt ty
30− tm <- ploop True ("-" ++ show n) (ps, "")
35+ (tm, prf) <- ploop True ("-" ++ show n) [] (ps, "")
31 iLOG $ "Adding " ++ show tm
36 iLOG $ "Adding " ++ show tm
37+ lift $ dumpProof n prf
32 let tree = simpleCase False [(P Ref n ty, tm)]
38 let tree = simpleCase False [(P Ref n ty, tm)]
33 logLvl 3 (show tree)
39 logLvl 3 (show tree)
34 (ptm, pty) <- tclift $ recheck ctxt [] tm
40 (ptm, pty) <- tclift $ recheck ctxt [] tm
@@ -65,27 +71,37 @@ dumpState ist ps@(PS nm (h:hs) _ tm _ _ i _ cyxy _ _)
65 showG (Guess t v) = tshow t ++ " =?= " ++ tshow v
71 showG (Guess t v) = tshow t ++ " =?= " ++ tshow v
66 showG b = tshow (binderTy b)
72 showG b = tshow (binderTy b)
74+lifte :: ElabState -> Elab a -> Idris a
75+lifte st e = do (v, _) <- elabStep st e
68−ploop :: Bool -> String -> ElabState -> Idris Term
78+ploop :: Bool -> String -> [String] -> ElabState -> Idris (Term, [String])
69−ploop d prompt e
79+ploop d prompt prf e
70 = do i <- get
80 = do i <- get
71 when d $ lift $ dumpState i (proof e)
81 when d $ lift $ dumpState i (proof e)
72 x <- lift $ readline (prompt ++ "> ")
82 x <- lift $ readline (prompt ++ "> ")
73− cmd <- case x of
83+ (cmd, step) <- case x of
74 Nothing -> fail "Abandoned"
84 Nothing -> fail "Abandoned"
75 Just input -> do lift $ addHistory input
85 Just input -> do lift $ addHistory input
76− return (parseTac i input)
86+ return (parseTac i input, input)
77− (d, st, done) <- idrisCatch
87+ (d, st, done, prf') <- idrisCatch
78 (case cmd of
88 (case cmd of
79 Left err -> do iputStrLn (show err)
89 Left err -> do iputStrLn (show err)
80− return (False, e, False)
90+ return (False, e, False, prf)
92+ return (True, e, False, prf)
94+ do tm <- lifte e get_term
95+ iputStrLn $ "TT: " ++ show tm ++ "\n"
96+ return (False, e, False, prf)
81− Right Qed -> do (hs, _) <- elabStep e get_holes
97+ Right Qed -> do hs <- lifte e get_holes
82 when (not (null hs)) $ fail "Incomplete proof"
98 when (not (null hs)) $ fail "Incomplete proof"
83− return (False, e, True)
99+ return (False, e, True, prf)
84 Right tac -> do (_, st) <- elabStep e (runTac tac)
100 Right tac -> do (_, st) <- elabStep e (runTac tac)
85− return (True, st, False))
101+ return (True, st, False, prf ++ [step]))
86 (\err -> do iputStrLn (report err)
102 (\err -> do iputStrLn (report err)
87− return (False, e, False))
103+ return (False, e, False, prf))
88 if done then do (tm, _) <- elabStep st get_term
104 if done then do (tm, _) <- elabStep st get_term
89− return tm
105+ return (tm, prf')
90− else ploop d prompt st
106+ else ploop d prompt prf' st