@@ -61,7 +61,7 @@ get_type :: Raw -> Elab Type
61get_type tm = do ctxt <- get_context
61get_type tm = do ctxt <- get_context
62 env <- get_env
62 env <- get_env
63 (val, ty) <- lift $ check ctxt env tm
63 (val, ty) <- lift $ check ctxt env tm
64− return (vToP ty)
64+ return (finalise ty)
66-- given a desired hole name, return a unique hole name
66-- given a desired hole name, return a unique hole name
67unique_hole :: Name -> Elab Name
67unique_hole :: Name -> Elab Name
@@ -119,6 +119,9 @@ intro n = processTactic' (Intro n)
119forall :: Name -> Raw -> Elab ()
119forall :: Name -> Raw -> Elab ()
120forall n t = processTactic' (Forall n t)
120forall n t = processTactic' (Forall n t)
122+patvar :: Name -> Raw -> Elab ()
123+patvar n t = processTactic' (PatVar n t)
122focus :: Name -> Elab ()
125focus :: Name -> Elab ()
123focus n = processTactic' (Focus n)
126focus n = processTactic' (Focus n)
@@ -134,17 +137,17 @@ qed = processTactic' QED
134prepare_apply :: Raw -> [Bool] -> Elab [Name]
137prepare_apply :: Raw -> [Bool] -> Elab [Name]
135prepare_apply fn imps =
138prepare_apply fn imps =
136 do ty <- get_type fn
139 do ty <- get_type fn
137− let claims = getArgs ty imps
140+ -- let claims = getArgs ty imps
138− mapM doClaim claims
141+ doClaims ty imps []
140− getArgs (Bind n (Pi t) sc) (i : is) = (n, t, i):getArgs sc is
143+ doClaims (Bind n' (Pi t) sc) (i : is) claims =
143− doClaim (n', t, i) =
144 do n <- unique_hole n'
144 do n <- unique_hole n'
145+ let sc' = instantiate (P Bound n t) sc
145 claim n (forget t)
146 claim n (forget t)
146 when i (movelast n)
147 when i (movelast n)
147− return n
148+ doClaims sc' is (n : claims)
149+ doClaims t [] claims = return (reverse claims)
150+ doClaims _ _ _ = fail "Wrong number of arguments"
149apply :: Raw -> [Bool] -> Elab ()
152apply :: Raw -> [Bool] -> Elab ()
150apply fn imps =
153apply fn imps =