@@ -469,6 +469,23 @@ apply_elab n args =
469469 mkMN n@(UN x) = MN 1000 x
470470 mkMN (NS n ns) = NS (mkMN n) ns
471471
472+-- If the goal is not a Pi-type, invent some names and make it a pi type
473+checkPiGoal :: Elab' aux ()
474+checkPiGoal = do g <- goal
475+ case g of
476+ Bind _ (Pi _) _ -> return ()
477+ _ -> do a <- unique_hole (MN 0 "argTy")
478+ b <- unique_hole (MN 0 "retTy")
479+ f <- unique_hole (MN 0 "f")
480+ claim a RType
481+ claim b RType
482+ claim f (RBind (MN 0 "aX") (Pi (Var a)) (Var b))
483+ movelast a
484+ movelast b
485+ fill (Var f)
486+ solve
487+ focus f
488+
472489simple_app :: Elab' aux () -> Elab' aux () -> Elab' aux ()
473490simple_app fun arg =
474491 do a <- unique_hole (MN 0 "argTy")