From 0aa614ed49010eb084f81363e4e60a885b8fccdc Mon Sep 17 00:00:00 2001 From: Stephanie Weirich Date: Fri, 30 Jun 2023 13:32:47 -0400 Subject: [PATCH] remove ensurePi --- doc/oplss.mng | 16 ++------- doc/oplss.pdf | Bin 790737 -> 790631 bytes full/src/Equal.hs | 48 ++++++--------------------- full/src/Syntax.hs | 46 ++++++++++++++------------ full/src/TypeCheck.hs | 50 ++++++++++++++++------------- main/src/Equal.hs | 49 ++++++---------------------- main/src/Syntax.hs | 46 ++++++++++++++------------ main/src/TypeCheck.hs | 66 +++++++++++++++++--------------------- version1/src/Equal.hs | 31 +++++------------- version1/src/Syntax.hs | 46 ++++++++++++++------------ version1/src/TypeCheck.hs | 25 +++++++-------- version2/pi/Lec1.pi | 10 ++---- version2/src/Equal.hs | 48 ++++++--------------------- version2/src/Syntax.hs | 46 ++++++++++++++------------ version2/src/TypeCheck.hs | 38 +++++++++++++--------- version3/src/Equal.hs | 48 ++++++--------------------- version3/src/Syntax.hs | 46 ++++++++++++++------------ version3/src/TypeCheck.hs | 48 ++++++++++++++------------- 18 files changed, 298 insertions(+), 409 deletions(-) diff --git a/doc/oplss.mng b/doc/oplss.mng index 5c333e6..1aff30e 100644 --- a/doc/oplss.mng +++ b/doc/oplss.mng @@ -1398,19 +1398,6 @@ equate :: Term -> Term -> TcMonad () This function ensures that the two provided types are equal, or throws a type error if they are not. -Additionally, the \pif includes the function -% some ``head'' form, without knowing exactly what that form is. For example, -% when \emph{checking} lambda expressions, we need to know that the provided -% type is of the form of a $\Pi$-type ($[[(x:A)-> B]]$). Likewise, when inferring -% the type of an application, we need to know that the type inferred for the -% function is actually a $\Pi$-type. -\begin{verbatim} -ensurePi :: Type -> TcMonad (TName, Type, Type) -\end{verbatim} -that checks the given type to see if the given is equal to some $\Pi$-type of the form -$[[(x:A1)-> A2]]$, and if so returns \texttt{x}, -\texttt{A1} and \texttt{A2}. - This function is defined in terms of a helper function that implements the rules shown in Figure~\ref{fig:whnf}. \begin{verbatim} @@ -1423,7 +1410,8 @@ these functions are called in a few places: \begin{itemize} \item \texttt{equate} is called at the end of \texttt{checkType} to make sure that the annotated type matches the inferred type. -\item \texttt{ensurePi} is called in the \texttt{App} case +\item \texttt{whnf} is called in the \texttt{App} case to ensure that + the function has some sort of function type. of \texttt{inferType} \item \texttt{whnf} is called at the beginning of \texttt{checkType} to make sure that we are using the head form of the type in checking diff --git a/doc/oplss.pdf b/doc/oplss.pdf index 214e9c80e58104a8c0e0f0cee6284853896ea94b..c7cf03893733a0a242cd61d10ce73935f7277408 100644 GIT binary patch delta 97663 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

^#`j{ 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 delta 97778 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 z zi9$%7)pkE1q=DCcrgf!>(|TU%t8&||>hsqxh1KwXfKHXDt-N-miPK&hOjql)lJDy- zStPeL=zSwdukGmdxCNr9ve%!df3V6FT!eJ`%ZTsf;oymia z>4RSvdA;)Xg20~B`g046L7X@2i*kz_<+z!sZTYu0HaTdU$G!{(x%!LiQ_z|NI6Ped T362nkm5UjMoLpQ{0_Oh!TIVL{ diff --git a/full/src/Equal.hs b/full/src/Equal.hs index c5c9627..45db26c 100644 --- a/full/src/Equal.hs +++ b/full/src/Equal.hs @@ -1,8 +1,7 @@ {- pi-forall language -} -- | Compare two terms for equality -module Equal (whnf, equate, ensurePi, unify - {- SOLN EQUAL -},ensureTyEq {- STUBWITH -} +module Equal (whnf, equate, unify {- SOLN DATA -},ensureTCon{- STUBWITH -} ) where import Syntax @@ -25,14 +24,14 @@ equate t1 t2 = do (TyType, TyType) -> return () (Var x, Var y) | x == y -> return () (Lam ep1 bnd1, Lam ep2 bnd2) -> do - (_, b1, _, b2) <- Unbound.unbind2Plus bnd1 bnd2 + (_, b1, b2) <- unbind2 bnd1 bnd2 unless (ep1 == ep2) $ tyErr n1 n2 equate b1 b2 (App a1 a2, App b1 b2) -> equate a1 b1 >> equateArg a2 b2 (TyPi ep1 tyA1 bnd1, TyPi ep2 tyA2 bnd2) -> do - (_, tyB1, _, tyB2) <- Unbound.unbind2Plus bnd1 bnd2 + (_, tyB1, tyB2) <- unbind2 bnd1 bnd2 unless (ep1 == ep2) $ tyErr n1 n2 equate tyA1 tyA2 @@ -54,12 +53,12 @@ equate t1 t2 = do equate c1 c2 (Let rhs1 bnd1, Let rhs2 bnd2) -> do - Just (x, body1, _, body2) <- Unbound.unbind2 bnd1 bnd2 + (x, body1, body2) <- unbind2 bnd1 bnd2 equate rhs1 rhs2 equate body1 body2 (TySigma tyA1 bnd1, TySigma tyA2 bnd2) -> do - Just (x, tyB1, _, tyB2) <- Unbound.unbind2 bnd1 bnd2 + (x, tyB1, tyB2) <- unbind2 bnd1 bnd2 equate tyA1 tyA2 equate tyB1 tyB2 @@ -69,7 +68,7 @@ equate t1 t2 = do (LetPair s1 bnd1, LetPair s2 bnd2) -> do equate s1 s2 - Just ((x,y), body1, _, body2) <- Unbound.unbind2 bnd1 bnd2 + ((x,y), body1, _, body2) <- Unbound.unbind2Plus bnd1 bnd2 equate body1 body2 (TyEq a b, TyEq c d) -> do equate a c @@ -133,32 +132,6 @@ equateArg a1 a2 = ------------------------------------------------------- - --- | Ensure that the given type 'ty' is a 'TyPi' type --- (or could be normalized to be such) and return the components of --- the type. --- Throws an error if this is not the case. -ensurePi :: Type -> - TcMonad (Epsilon, Type, (Unbound.Bind TName Type)) -ensurePi ty = do - nf <- whnf ty - case nf of - (TyPi ep tyA bnd) -> do - return (ep, tyA, bnd) - _ -> Env.err [DS "Expected a function type, instead found", DD nf] - - --- | Ensure that the given 'ty' is an equality type --- (or could be normalized to be such) and return --- the LHS and RHS of that equality --- Throws an error if this is not the case. -ensureTyEq :: Term -> TcMonad (Term,Term) -ensureTyEq ty = do - nf <- whnf ty - case nf of - TyEq m n -> return (m, n) - _ -> Env.err [DS "Expected an equality type, instead found", DD nf] - -- | Ensure that the given type 'ty' is some tycon applied to -- params (or could be normalized to be such) @@ -185,7 +158,7 @@ whnf (App t1 t2) = do nf <- whnf t1 case nf of (Lam ep bnd) -> do - whnf (Unbound.instantiate bnd [unArg t2] ) + whnf (instantiate bnd (unArg t2) ) _ -> do return (App nf t2) @@ -207,8 +180,7 @@ whnf (Ann tm _) = whnf tm whnf (Pos _ tm) = whnf tm whnf (Let rhs bnd) = do - -- (x,body) <- Unbound.unbind bnd - whnf (Unbound.instantiate bnd [rhs]) + whnf (instantiate bnd rhs) whnf (Subst tm pf) = do pf' <- whnf pf case pf' of @@ -254,12 +226,12 @@ unify ns tx ty = do (DataCon s1 a1s, DataCon s2 a2s) | s1 == s2 -> unifyArgs a1s a2s (Lam ep1 bnd1, Lam ep2 bnd2) -> do - (x, b1, _, b2) <- Unbound.unbind2Plus bnd1 bnd2 + (x, b1, b2) <- unbind2 bnd1 bnd2 unless (ep1 == ep2) $ do Env.err [DS "Cannot equate", DD txnf, DS "and", DD tynf] unify (x:ns) b1 b2 (TyPi ep1 tyA1 bnd1, TyPi ep2 tyA2 bnd2) -> do - (x, tyB1, _, tyB2) <- Unbound.unbind2Plus bnd1 bnd2 + (x, tyB1, tyB2) <- unbind2 bnd1 bnd2 unless (ep1 == ep2) $ do Env.err [DS "Cannot equate", DD txnf, DS "and", DD tynf] ds1 <- unify ns tyA1 tyA2 diff --git a/full/src/Syntax.hs b/full/src/Syntax.hs index ad0b130..8a5bb0a 100644 --- a/full/src/Syntax.hs +++ b/full/src/Syntax.hs @@ -8,6 +8,7 @@ import Data.Set (Set) import Data.Set qualified as Set import Data.Typeable (Typeable) import GHC.Generics (Generic,from) +import GHC.Base (MonadPlus) import Text.ParserCombinators.Parsec.Pos (SourcePos, initialPos, newPos) import Unbound.Generics.LocallyNameless qualified as Unbound import Unbound.Generics.LocallyNameless.Internal.Fold qualified as Unbound @@ -311,6 +312,9 @@ unPosFlaky t = fromMaybe (newPos "unknown location" 0 0) (unPos t) -- functions for alpha-equivalence, free variables and substitution -- using generic programming. +-- The definitions below specialize the generic operations from the libary +-- to some of the common uses that we need in pi-forall + -- | Determine when two terms are alpha-equivalent (see below) aeq :: Term -> Term -> Bool aeq = Unbound.aeq @@ -319,32 +323,35 @@ aeq = Unbound.aeq fv :: Term -> [Unbound.Name Term] fv = Unbound.toListOf Unbound.fv --- | subst x b a means to replace x with b in a +-- | `subst x b a` means to replace `x` with `b` in `a` -- i.e. a [ b / x ] subst :: TName -> Term -> Term -> Term subst = Unbound.subst --- | in a binder "x.a" replace x with b +-- | in a binder `x.a` replace `x` with `b` instantiate :: Unbound.Bind TName Term -> Term -> Term instantiate bnd a = Unbound.instantiate bnd [a] --- | in a binder "x.a" replace x with a fresh name +-- | in a binder `x.a` replace `x` with a fresh name unbind :: (Unbound.Fresh m) => Unbound.Bind TName Term -> m (TName, Term) unbind = Unbound.unbind + +-- | in binders `x.a1` and `x.a2` replace `x` with a fresh name in both terms +unbind2 :: (Unbound.Fresh m) => Unbound.Bind TName Term -> Unbound.Bind TName Term -> m (TName, Term, Term) +unbind2 b1 b2 = do + o <- Unbound.unbind2 b1 b2 + case o of + Just (x,t,_,u) -> return (x,t,u) + Nothing -> error "impossible" ------------------ --- * Alpha equivalence and free variables +-- * `Alpha` class instances --- The Unbound library's Alpha class enables the following --- functions: --- -- Compare terms for alpha equivalence --- aeq :: Alpha a => a -> a -> Bool --- -- Calculate the free variables of a term --- fv :: Alpha a => a -> [Unbound.Name a] --- -- Destruct a binding, generating fresh names for the bound variables --- unbind :: (Alpha p, Alpha t, Fresh m) => Bind p t -> m (p, t) +-- The Unbound library's `Alpha` class enables the `aeq`, `fv`, +-- `instantiate` and `unbind` functions, and also allows some +-- specialization of their generic behavior. --- For Terms, we'd like Alpha equivalence to ignore +-- For `Term`, we'd like Alpha equivalence to ignore -- source positions and type annotations. So we make sure to -- remove them before calling the generic operation. @@ -390,13 +397,12 @@ idy = Lam Rel (Unbound.bind yName (Var yName)) -- * Substitution --- The Subst class derives capture-avoiding substitution --- It has two parameters because the sort of thing we are substituting +-- The Subst class derives capture-avoiding substitution. +-- It has two parameters because the type of thing we are substituting -- for may not be the same as what we are substituting into. --- class Subst b a where --- subst :: Name b -> b -> a -> a -- single substitution - +-- The `isvar` function identifies the variables in the term that +-- should be substituted for. instance Unbound.Subst Term Term where isvar (Var x) = Just (Unbound.SubstName x) isvar _ = Nothing @@ -417,8 +423,8 @@ pi2 = TyPi Rel TyBool (Unbound.bind yName (Var yName)) -- * Source Positions -- SourcePositions do not have an instance of the Generic class available --- so we cannot automatically define their Alpha and Subst instances. Instead --- we do so by hand here. +-- so we cannot automatically define their `Alpha` and `Subst` instances. +-- Instead we provide a trivial implementation here. instance Unbound.Alpha SourcePos where aeq' _ _ _ = True fvAny' _ _ = pure diff --git a/full/src/TypeCheck.hs b/full/src/TypeCheck.hs index 66c1d73..fd7d002 100644 --- a/full/src/TypeCheck.hs +++ b/full/src/TypeCheck.hs @@ -19,7 +19,6 @@ import Debug.Trace import Text.PrettyPrint.HughesPJ (($$), render) import Unbound.Generics.LocallyNameless qualified as Unbound -import Unbound.Generics.LocallyNameless.Internal.Fold qualified as Unbound import Unbound.Generics.LocallyNameless.Unsafe (unsafeUnbind) @@ -41,7 +40,7 @@ inferType a = case a of -- i-pi (TyPi ep tyA bnd) -> do - (x, tyB) <- Unbound.unbind bnd + (x, tyB) <- unbind bnd tcType tyA Env.extendCtx (Decl (TypeDecl x ep tyA)) (tcType tyB) return TyType @@ -49,17 +48,16 @@ inferType a = case a of -- i-app (App a b) -> do ty1 <- inferType a - let ensurePi = Equal.ensurePi - - (ep1, tyA, bnd) <- ensurePi ty1 - unless (ep1 == argEp b) $ Env.err - [DS "In application, expected", DD ep1, DS "argument but found", - DD b, DS "instead." ] - -- if the argument is Irrelevant, resurrect the context - (if ep1 == Irr then Env.extendCtx (Demote Rel) else id) $ - checkType (unArg b) tyA - return (Unbound.instantiate bnd [unArg b]) - + ty1' <- Equal.whnf ty1 + case ty1' of + (TyPi {- SOLN EP -}ep1 {- STUBWITH -} tyA bnd) -> do + unless (ep1 == argEp b) $ Env.err + [DS "In application, expected", DD ep1, DS "argument but found", + DD b, DS "instead." ] + -- if the argument is Irrelevant, resurrect the context + (if ep1 == Irr then Env.extendCtx (Demote Rel) else id) $ checkType (unArg b) tyA + return (instantiate bnd (unArg b) ) + _ -> Env.err [DS "Expected a function type but found ", DD ty1] -- i-ann (Ann a tyA) -> do @@ -92,7 +90,7 @@ inferType a = case a of -- i-sigma (TySigma tyA bnd) -> do - (x, tyB) <- Unbound.unbind bnd + (x, tyB) <- unbind bnd tcType tyA Env.extendCtx (mkDecl x tyA) $ tcType tyB return TyType @@ -166,7 +164,7 @@ checkType tm ty = do (Lam ep1 bnd) -> case ty' of (TyPi ep2 tyA bnd2) -> do -- unbind the variables in the lambda expression and pi type - (x, body, _, tyB) <- Unbound.unbind2Plus bnd bnd2 + (x, body, tyB) <- unbind2 bnd bnd2 -- epsilons should match up unless (ep1 == ep2) $ Env.err [DS "In function definition, expected", DD ep2, DS "parameter", DD x, DS "but found", DD ep1, DS "instead."] @@ -197,7 +195,7 @@ checkType tm ty = do (Prod a b) -> do case ty' of (TySigma tyA bnd) -> do - (x, tyB) <- Unbound.unbind bnd + (x, tyB) <- unbind bnd checkType a tyA Env.extendCtxs [mkDecl x tyA, Def x a] $ checkType b tyB _ -> @@ -214,7 +212,7 @@ checkType tm ty = do pty' <- Equal.whnf pty case pty' of TySigma tyA bnd' -> do - let tyB = Unbound.instantiate bnd' [Var x] + let tyB = instantiate bnd' (Var x) decl <- Equal.unify [] p (Prod (Var x) (Var y)) Env.extendCtxs ([mkDecl x tyA, mkDecl y tyB] ++ decl) $ checkType body tyA @@ -222,7 +220,7 @@ checkType tm ty = do -- c-let (Let a bnd) -> do - (x, b) <- Unbound.unbind bnd + (x, b) <- unbind bnd tyA <- inferType a Env.extendCtxs [mkDecl x tyA, Def x a] $ checkType b ty' @@ -235,7 +233,10 @@ checkType tm ty = do -- infer the type of the proof 'b' tp <- inferType b -- make sure that it is an equality between m and n - (m, n) <- Equal.ensureTyEq tp + nf <- Equal.whnf tp + (m, n) <- case nf of + TyEq m n -> return (m,n) + _ -> Env.err [DS "Subst requires an equality type, not", DD tp] -- if either side is a variable, add a definition to the context edecl <- Equal.unify [] m n -- if proof is a variable, add a definition to the context @@ -244,7 +245,10 @@ checkType tm ty = do -- c-contra (Contra p) -> do ty' <- inferType p - (a, b) <- Equal.ensureTyEq ty' + nf <- Equal.whnf ty' + (a, b) <- case nf of + TyEq m n -> return (m,n) + _ -> Env.err [DS "Contra requires an equality type, not", DD ty'] a' <- Equal.whnf a b' <- Equal.whnf b case (a', b') of @@ -293,8 +297,8 @@ checkType tm ty = do (Case scrut alts) -> do sty <- inferType scrut - scrut' <- Equal.whnf scrut (c, args) <- Equal.ensureTCon sty + scrut' <- Equal.whnf scrut let checkAlt (Match bnd) = do (pat, body) <- Unbound.unbind bnd -- add variables from pattern to context @@ -313,8 +317,8 @@ checkType tm ty = do -- c-infer - a -> do - tyA <- inferType a + _ -> do + tyA <- inferType tm Equal.equate tyA ty' diff --git a/main/src/Equal.hs b/main/src/Equal.hs index eb20ad1..7457786 100644 --- a/main/src/Equal.hs +++ b/main/src/Equal.hs @@ -1,8 +1,7 @@ {- pi-forall language -} -- | Compare two terms for equality -module Equal (whnf, equate, ensurePi, unify - {- SOLN EQUAL -},ensureTyEq {- STUBWITH -} +module Equal (whnf, equate, unify {- SOLN DATA -},ensureTCon{- STUBWITH -} ) where import Syntax @@ -25,7 +24,7 @@ equate t1 t2 = do (TyType, TyType) -> return () (Var x, Var y) | x == y -> return () (Lam {- SOLN EP -} ep1 {- STUBWITH -}bnd1, Lam {- SOLN EP -} ep2 {- STUBWITH -}bnd2) -> do - (_, b1, _, b2) <- Unbound.unbind2Plus bnd1 bnd2 + (_, b1, b2) <- unbind2 bnd1 bnd2 {- SOLN EP -} unless (ep1 == ep2) $ tyErr n1 n2 {- STUBWITH -} @@ -33,7 +32,7 @@ equate t1 t2 = do (App a1 a2, App b1 b2) -> equate a1 b1 >> {- SOLN EP -} equateArg{- STUBWITH equate -} a2 b2 (TyPi {- SOLN EP -} ep1 {- STUBWITH -}tyA1 bnd1, TyPi {- SOLN EP -} ep2 {- STUBWITH -}tyA2 bnd2) -> do - (_, tyB1, _, tyB2) <- Unbound.unbind2Plus bnd1 bnd2 + (_, tyB1, tyB2) <- unbind2 bnd1 bnd2 {- SOLN EP -} unless (ep1 == ep2) $ tyErr n1 n2 {- STUBWITH -} @@ -56,12 +55,12 @@ equate t1 t2 = do equate c1 c2 (Let rhs1 bnd1, Let rhs2 bnd2) -> do - Just (x, body1, _, body2) <- Unbound.unbind2 bnd1 bnd2 + (x, body1, body2) <- unbind2 bnd1 bnd2 equate rhs1 rhs2 equate body1 body2 (TySigma tyA1 bnd1, TySigma tyA2 bnd2) -> do - Just (x, tyB1, _, tyB2) <- Unbound.unbind2 bnd1 bnd2 + (x, tyB1, tyB2) <- unbind2 bnd1 bnd2 equate tyA1 tyA2 equate tyB1 tyB2 @@ -71,7 +70,7 @@ equate t1 t2 = do (LetPair s1 bnd1, LetPair s2 bnd2) -> do equate s1 s2 - Just ((x,y), body1, _, body2) <- Unbound.unbind2 bnd1 bnd2 + ((x,y), body1, _, body2) <- Unbound.unbind2Plus bnd1 bnd2 equate body1 body2 {- SOLN EQUAL -} (TyEq a b, TyEq c d) -> do @@ -138,33 +137,6 @@ equateArg a1 a2 = {- STUBWITH -} ------------------------------------------------------- - --- | Ensure that the given type 'ty' is a 'TyPi' type --- (or could be normalized to be such) and return the components of --- the type. --- Throws an error if this is not the case. -ensurePi :: Type -> - TcMonad ({- SOLN EP -} Epsilon, {- STUBWITH -} Type, (Unbound.Bind TName Type)) -ensurePi ty = do - nf <- whnf ty - case nf of - (TyPi {- SOLN EP -} ep {- STUBWITH -} tyA bnd) -> do - return ({- SOLN EP -} ep,{- STUBWITH -} tyA, bnd) - _ -> Env.err [DS "Expected a function type, instead found", DD nf] - - -{- SOLN EQUAL -} --- | Ensure that the given 'ty' is an equality type --- (or could be normalized to be such) and return --- the LHS and RHS of that equality --- Throws an error if this is not the case. -ensureTyEq :: Term -> TcMonad (Term,Term) -ensureTyEq ty = do - nf <- whnf ty - case nf of - TyEq m n -> return (m, n) - _ -> Env.err [DS "Expected an equality type, instead found", DD nf] -{- STUBWITH -} {- SOLN DATA -} @@ -193,7 +165,7 @@ whnf (App t1 t2) = do nf <- whnf t1 case nf of (Lam {- SOLN EP -} ep {- STUBWITH -} bnd) -> do - whnf (Unbound.instantiate bnd {- SOLN EP -} [unArg t2] {- STUBWITH [t2] -}) + whnf (instantiate bnd {- SOLN EP -} (unArg t2) {- STUBWITH t2 -}) _ -> do return (App nf t2) @@ -216,8 +188,7 @@ whnf (Pos _ tm) = whnf tm {- SOLN HW -} whnf (Let rhs bnd) = do - -- (x,body) <- Unbound.unbind bnd - whnf (Unbound.instantiate bnd [rhs]){- STUBWITH -} + whnf (instantiate bnd rhs){- STUBWITH -} {- SOLN EQUAL -} whnf (Subst tm pf) = do pf' <- whnf pf @@ -267,13 +238,13 @@ unify ns tx ty = do (DataCon s1 a1s, DataCon s2 a2s) | s1 == s2 -> unifyArgs a1s a2s {- STUBWITH -} (Lam {- SOLN EP -} ep1 {- STUBWITH -} bnd1, Lam {- SOLN EP -} ep2 {- STUBWITH -} bnd2) -> do - (x, b1, _, b2) <- Unbound.unbind2Plus bnd1 bnd2 + (x, b1, b2) <- unbind2 bnd1 bnd2 {- SOLN EP -} unless (ep1 == ep2) $ do Env.err [DS "Cannot equate", DD txnf, DS "and", DD tynf] {- STUBWITH -} unify (x:ns) b1 b2 (TyPi {- SOLN EP -} ep1 {- STUBWITH -} tyA1 bnd1, TyPi {- SOLN EP -} ep2 {- STUBWITH -} tyA2 bnd2) -> do - (x, tyB1, _, tyB2) <- Unbound.unbind2Plus bnd1 bnd2 + (x, tyB1, tyB2) <- unbind2 bnd1 bnd2 {- SOLN EP -} unless (ep1 == ep2) $ do Env.err [DS "Cannot equate", DD txnf, DS "and", DD tynf] {- STUBWITH -} diff --git a/main/src/Syntax.hs b/main/src/Syntax.hs index 4990461..fefb33d 100644 --- a/main/src/Syntax.hs +++ b/main/src/Syntax.hs @@ -8,6 +8,7 @@ import Data.Set (Set) import Data.Set qualified as Set import Data.Typeable (Typeable) import GHC.Generics (Generic,from) +import GHC.Base (MonadPlus) import Text.ParserCombinators.Parsec.Pos (SourcePos, initialPos, newPos) import Unbound.Generics.LocallyNameless qualified as Unbound import Unbound.Generics.LocallyNameless.Internal.Fold qualified as Unbound @@ -319,6 +320,9 @@ unPosFlaky t = fromMaybe (newPos "unknown location" 0 0) (unPos t) -- functions for alpha-equivalence, free variables and substitution -- using generic programming. +-- The definitions below specialize the generic operations from the libary +-- to some of the common uses that we need in pi-forall + -- | Determine when two terms are alpha-equivalent (see below) aeq :: Term -> Term -> Bool aeq = Unbound.aeq @@ -327,32 +331,35 @@ aeq = Unbound.aeq fv :: Term -> [Unbound.Name Term] fv = Unbound.toListOf Unbound.fv --- | subst x b a means to replace x with b in a +-- | `subst x b a` means to replace `x` with `b` in `a` -- i.e. a [ b / x ] subst :: TName -> Term -> Term -> Term subst = Unbound.subst --- | in a binder "x.a" replace x with b +-- | in a binder `x.a` replace `x` with `b` instantiate :: Unbound.Bind TName Term -> Term -> Term instantiate bnd a = Unbound.instantiate bnd [a] --- | in a binder "x.a" replace x with a fresh name +-- | in a binder `x.a` replace `x` with a fresh name unbind :: (Unbound.Fresh m) => Unbound.Bind TName Term -> m (TName, Term) unbind = Unbound.unbind + +-- | in binders `x.a1` and `x.a2` replace `x` with a fresh name in both terms +unbind2 :: (Unbound.Fresh m) => Unbound.Bind TName Term -> Unbound.Bind TName Term -> m (TName, Term, Term) +unbind2 b1 b2 = do + o <- Unbound.unbind2 b1 b2 + case o of + Just (x,t,_,u) -> return (x,t,u) + Nothing -> error "impossible" ------------------ --- * Alpha equivalence and free variables +-- * `Alpha` class instances --- The Unbound library's Alpha class enables the following --- functions: --- -- Compare terms for alpha equivalence --- aeq :: Alpha a => a -> a -> Bool --- -- Calculate the free variables of a term --- fv :: Alpha a => a -> [Unbound.Name a] --- -- Destruct a binding, generating fresh names for the bound variables --- unbind :: (Alpha p, Alpha t, Fresh m) => Bind p t -> m (p, t) +-- The Unbound library's `Alpha` class enables the `aeq`, `fv`, +-- `instantiate` and `unbind` functions, and also allows some +-- specialization of their generic behavior. --- For Terms, we'd like Alpha equivalence to ignore +-- For `Term`, we'd like Alpha equivalence to ignore -- source positions and type annotations. So we make sure to -- remove them before calling the generic operation. @@ -398,13 +405,12 @@ idy = Lam {- SOLN EP -} Rel {- STUBWITH -}(Unbound.bind yName (Var yName)) -- * Substitution --- The Subst class derives capture-avoiding substitution --- It has two parameters because the sort of thing we are substituting +-- The Subst class derives capture-avoiding substitution. +-- It has two parameters because the type of thing we are substituting -- for may not be the same as what we are substituting into. --- class Subst b a where --- subst :: Name b -> b -> a -> a -- single substitution - +-- The `isvar` function identifies the variables in the term that +-- should be substituted for. instance Unbound.Subst Term Term where isvar (Var x) = Just (Unbound.SubstName x) isvar _ = Nothing @@ -425,8 +431,8 @@ pi2 = TyPi {- SOLN EP -} Rel {- STUBWITH -}TyBool (Unbound.bind yName (Var yName -- * Source Positions -- SourcePositions do not have an instance of the Generic class available --- so we cannot automatically define their Alpha and Subst instances. Instead --- we do so by hand here. +-- so we cannot automatically define their `Alpha` and `Subst` instances. +-- Instead we provide a trivial implementation here. instance Unbound.Alpha SourcePos where aeq' _ _ _ = True fvAny' _ _ = pure diff --git a/main/src/TypeCheck.hs b/main/src/TypeCheck.hs index 82d2995..94c1fe5 100644 --- a/main/src/TypeCheck.hs +++ b/main/src/TypeCheck.hs @@ -20,7 +20,6 @@ import Debug.Trace import Text.PrettyPrint.HughesPJ (($$), render) import Unbound.Generics.LocallyNameless qualified as Unbound -import Unbound.Generics.LocallyNameless.Internal.Fold qualified as Unbound {- SOLN DATA -} import Unbound.Generics.LocallyNameless.Unsafe (unsafeUnbind) {- STUBWITH -} @@ -44,7 +43,7 @@ inferType a = case a of -- i-pi (TyPi {- SOLN EP -} ep {- STUBWITH -}tyA bnd) -> do - (x, tyB) <- Unbound.unbind bnd + (x, tyB) <- unbind bnd tcType tyA Env.extendCtx {- SOLN EP -} (Decl (TypeDecl x ep tyA)){- STUBWITH (mkDecl x tyA) -} (tcType tyB) return TyType @@ -52,29 +51,18 @@ inferType a = case a of -- i-app (App a b) -> do ty1 <- inferType a -{- SOLN EQUAL -} - let ensurePi = Equal.ensurePi - {- STUBWITH - - let ensurePi :: Type -> TcMonad (Type, Unbound.Bind TName Type) - ensurePi (Pos _ ty) = ensurePi ty - ensurePi (Ann tm _) = ensurePi tm - ensurePi (TyPi tyA bnd) = return (tyA,bnd) - ensurePi ty = Env.err [DS "Expected a function type but found ", DD ty] -} -{- SOLN EP -} - (ep1, tyA, bnd) <- ensurePi ty1 - unless (ep1 == argEp b) $ Env.err - [DS "In application, expected", DD ep1, DS "argument but found", - DD b, DS "instead." ] - -- if the argument is Irrelevant, resurrect the context - (if ep1 == Irr then Env.extendCtx (Demote Rel) else id) $ - checkType (unArg b) tyA - return (Unbound.instantiate bnd [unArg b]) - {- STUBWITH - - (tyA,bnd) <- ensurePi ty1 - checkType b tyA - return (Unbound.instantiate bnd [b]) -} +{- SOLN EQUAL -} + ty1' <- Equal.whnf ty1 {- STUBWITH let ty1' = strip ty1 -} + case ty1' of + (TyPi {- SOLN EP -}ep1 {- STUBWITH -} tyA bnd) -> do +{- SOLN EP -} + unless (ep1 == argEp b) $ Env.err + [DS "In application, expected", DD ep1, DS "argument but found", + DD b, DS "instead." ] + -- if the argument is Irrelevant, resurrect the context + (if ep1 == Irr then Env.extendCtx (Demote Rel) else id) $ checkType (unArg b) tyA {- STUBWITH checkType b tyA -} + return (instantiate bnd {- SOLN EP -} (unArg b){- STUBWITH b -} ) + _ -> Env.err [DS "Expected a function type but found ", DD ty1] -- i-ann (Ann a tyA) -> do @@ -107,7 +95,7 @@ inferType a = case a of -- i-sigma (TySigma tyA bnd) -> {- SOLN EQUAL -} do - (x, tyB) <- Unbound.unbind bnd + (x, tyB) <- unbind bnd tcType tyA Env.extendCtx (mkDecl x tyA) $ tcType tyB return TyType {- STUBWITH Env.err [DS "unimplemented"] -} @@ -184,7 +172,7 @@ checkType tm ty = do (Lam {- SOLN EP -} ep1 {- STUBWITH -} bnd) -> case ty' of (TyPi {- SOLN EP -} ep2 {- STUBWITH -}tyA bnd2) -> do -- unbind the variables in the lambda expression and pi type - (x, body, _, tyB) <- Unbound.unbind2Plus bnd bnd2 + (x, body, tyB) <- unbind2 bnd bnd2 {- SOLN EP -} -- epsilons should match up unless (ep1 == ep2) $ Env.err [DS "In function definition, expected", DD ep2, DS "parameter", DD x, DS "but found", DD ep1, DS "instead."] {- STUBWITH -} @@ -215,7 +203,7 @@ checkType tm ty = do (Prod a b) -> {- SOLN EQUAL -} do case ty' of (TySigma tyA bnd) -> do - (x, tyB) <- Unbound.unbind bnd + (x, tyB) <- unbind bnd checkType a tyA Env.extendCtxs [mkDecl x tyA, Def x a] $ checkType b tyB _ -> @@ -232,7 +220,7 @@ checkType tm ty = do pty' <- Equal.whnf pty case pty' of TySigma tyA bnd' -> do - let tyB = Unbound.instantiate bnd' [Var x] + let tyB = instantiate bnd' (Var x) decl <- Equal.unify [] p (Prod (Var x) (Var y)) Env.extendCtxs ([mkDecl x tyA, mkDecl y tyB] ++ decl) $ checkType body tyA @@ -240,7 +228,7 @@ checkType tm ty = do {- STUBWITH Env.err [DS "unimplemented"] -} -- c-let (Let a bnd) -> {- SOLN HW -} do - (x, b) <- Unbound.unbind bnd + (x, b) <- unbind bnd tyA <- inferType a Env.extendCtxs [mkDecl x tyA, Def x a] $ checkType b ty' {- STUBWITH Env.err [DS "unimplemented"] -} @@ -254,7 +242,10 @@ checkType tm ty = do -- infer the type of the proof 'b' tp <- inferType b -- make sure that it is an equality between m and n - (m, n) <- Equal.ensureTyEq tp + nf <- Equal.whnf tp + (m, n) <- case nf of + TyEq m n -> return (m,n) + _ -> Env.err [DS "Subst requires an equality type, not", DD tp] -- if either side is a variable, add a definition to the context edecl <- Equal.unify [] m n -- if proof is a variable, add a definition to the context @@ -263,7 +254,10 @@ checkType tm ty = do -- c-contra (Contra p) -> do ty' <- inferType p - (a, b) <- Equal.ensureTyEq ty' + nf <- Equal.whnf ty' + (a, b) <- case nf of + TyEq m n -> return (m,n) + _ -> Env.err [DS "Contra requires an equality type, not", DD ty'] a' <- Equal.whnf a b' <- Equal.whnf b case (a', b') of @@ -315,8 +309,8 @@ checkType tm ty = do (Case scrut alts) -> do sty <- inferType scrut - scrut' <- Equal.whnf scrut (c, args) <- Equal.ensureTCon sty + scrut' <- Equal.whnf scrut let checkAlt (Match bnd) = do (pat, body) <- Unbound.unbind bnd -- add variables from pattern to context @@ -335,11 +329,11 @@ checkType tm ty = do -- c-infer - a -> do - tyA <- inferType a + _ -> do + tyA <- inferType tm {- SOLN EQUAL -} Equal.equate tyA ty' - {- STUBWITH unless (Unbound.aeq tyA ty') $ Env.err [DS "Types don't match", DD tyA, DS "and", DD ty'] -} + {- STUBWITH unless (aeq tyA ty') $ Env.err [DS "Types don't match", DD tyA, DS "and", DD ty'] -} {- SOLN DATA -} --------------------------------------------------------------------- diff --git a/version1/src/Equal.hs b/version1/src/Equal.hs index 8708685..364bd1a 100644 --- a/version1/src/Equal.hs +++ b/version1/src/Equal.hs @@ -4,7 +4,6 @@ module Equal ( whnf, equate, - ensurePi, unify, ) where @@ -28,13 +27,13 @@ equate t1 t2 = do (TyType, TyType) -> return () (Var x, Var y) | x == y -> return () (Lam bnd1, Lam bnd2) -> do - (_, b1, _, b2) <- Unbound.unbind2Plus bnd1 bnd2 + (_, b1, b2) <- unbind2 bnd1 bnd2 equate b1 b2 (App a1 a2, App b1 b2) -> equate a1 b1 >> equate a2 b2 (TyPi tyA1 bnd1, TyPi tyA2 bnd2) -> do - (_, tyB1, _, tyB2) <- Unbound.unbind2Plus bnd1 bnd2 + (_, tyB1, tyB2) <- unbind2 bnd1 bnd2 equate tyA1 tyA2 equate tyB1 tyB2 @@ -49,11 +48,11 @@ equate t1 t2 = do equate b1 b2 equate c1 c2 (Let rhs1 bnd1, Let rhs2 bnd2) -> do - Just (x, body1, _, body2) <- Unbound.unbind2 bnd1 bnd2 + (x, body1, body2) <- unbind2 bnd1 bnd2 equate rhs1 rhs2 equate body1 body2 (TySigma tyA1 bnd1, TySigma tyA2 bnd2) -> do - Just (x, tyB1, _, tyB2) <- Unbound.unbind2 bnd1 bnd2 + (x, tyB1, tyB2) <- unbind2 bnd1 bnd2 equate tyA1 tyA2 equate tyB1 tyB2 (Prod a1 b1, Prod a2 b2) -> do @@ -61,7 +60,7 @@ equate t1 t2 = do equate b1 b2 (LetPair s1 bnd1, LetPair s2 bnd2) -> do equate s1 s2 - Just ((x, y), body1, _, body2) <- Unbound.unbind2 bnd1 bnd2 + ((x, y), body1, _, body2) <- Unbound.unbind2Plus bnd1 bnd2 equate body1 body2 (_, _) -> tyErr n1 n2 where @@ -78,20 +77,6 @@ equate t1 t2 = do ------------------------------------------------------- --- | Ensure that the given type 'ty' is a 'TyPi' type --- (or could be normalized to be such) and return the components of --- the type. --- Throws an error if this is not the case. -ensurePi :: - Type -> - TcMonad (Type, (Unbound.Bind TName Type)) -ensurePi ty = do - nf <- whnf ty - case nf of - (TyPi tyA bnd) -> do - return (tyA, bnd) - _ -> Env.err [DS "Expected a function type, instead found", DD nf] - ------------------------------------------------------- -- | Convert a term to its weak-head normal form. @@ -105,7 +90,7 @@ whnf (App t1 t2) = do nf <- whnf t1 case nf of (Lam bnd) -> do - whnf (Unbound.instantiate bnd [t2]) + whnf (instantiate bnd t2) _ -> do return (App nf t2) whnf (If t1 t2 t3) = do @@ -145,11 +130,11 @@ unify ns tx ty = do (yty, Var y) | y `notElem` ns -> return [Def y yty] (Prod a1 a2, Prod b1 b2) -> (++) <$> unify ns a1 b1 <*> unify ns a2 b2 (Lam bnd1, Lam bnd2) -> do - (x, b1, _, b2) <- Unbound.unbind2Plus bnd1 bnd2 + (x, b1, b2) <- unbind2 bnd1 bnd2 unify (x : ns) b1 b2 (TyPi tyA1 bnd1, TyPi tyA2 bnd2) -> do - (x, tyB1, _, tyB2) <- Unbound.unbind2Plus bnd1 bnd2 + (x, tyB1, tyB2) <- unbind2 bnd1 bnd2 ds1 <- unify ns tyA1 tyA2 ds2 <- unify (x : ns) tyB1 tyB2 diff --git a/version1/src/Syntax.hs b/version1/src/Syntax.hs index 999f4a9..3511207 100644 --- a/version1/src/Syntax.hs +++ b/version1/src/Syntax.hs @@ -7,6 +7,7 @@ import Data.Maybe (fromMaybe) import Data.Set (Set) import Data.Set qualified as Set import Data.Typeable (Typeable) +import GHC.Base (MonadPlus) import GHC.Generics (Generic, from) import Text.ParserCombinators.Parsec.Pos (SourcePos, initialPos, newPos) import Unbound.Generics.LocallyNameless qualified as Unbound @@ -150,6 +151,9 @@ unPosFlaky t = fromMaybe (newPos "unknown location" 0 0) (unPos t) -- functions for alpha-equivalence, free variables and substitution -- using generic programming. +-- The definitions below specialize the generic operations from the libary +-- to some of the common uses that we need in pi-forall + -- | Determine when two terms are alpha-equivalent (see below) aeq :: Term -> Term -> Bool aeq = Unbound.aeq @@ -158,33 +162,36 @@ aeq = Unbound.aeq fv :: Term -> [Unbound.Name Term] fv = Unbound.toListOf Unbound.fv --- | subst x b a means to replace x with b in a +-- | `subst x b a` means to replace `x` with `b` in `a` -- i.e. a [ b / x ] subst :: TName -> Term -> Term -> Term subst = Unbound.subst --- | in a binder "x.a" replace x with b +-- | in a binder `x.a` replace `x` with `b` instantiate :: Unbound.Bind TName Term -> Term -> Term instantiate bnd a = Unbound.instantiate bnd [a] --- | in a binder "x.a" replace x with a fresh name +-- | in a binder `x.a` replace `x` with a fresh name unbind :: (Unbound.Fresh m) => Unbound.Bind TName Term -> m (TName, Term) unbind = Unbound.unbind +-- | in binders `x.a1` and `x.a2` replace `x` with a fresh name in both terms +unbind2 :: (Unbound.Fresh m) => Unbound.Bind TName Term -> Unbound.Bind TName Term -> m (TName, Term, Term) +unbind2 b1 b2 = do + o <- Unbound.unbind2 b1 b2 + case o of + Just (x, t, _, u) -> return (x, t, u) + Nothing -> error "impossible" + ------------------ --- * Alpha equivalence and free variables +-- * `Alpha` class instances --- The Unbound library's Alpha class enables the following --- functions: --- -- Compare terms for alpha equivalence --- aeq :: Alpha a => a -> a -> Bool --- -- Calculate the free variables of a term --- fv :: Alpha a => a -> [Unbound.Name a] --- -- Destruct a binding, generating fresh names for the bound variables --- unbind :: (Alpha p, Alpha t, Fresh m) => Bind p t -> m (p, t) +-- The Unbound library's `Alpha` class enables the `aeq`, `fv`, +-- `instantiate` and `unbind` functions, and also allows some +-- specialization of their generic behavior. --- For Terms, we'd like Alpha equivalence to ignore +-- For `Term`, we'd like Alpha equivalence to ignore -- source positions and type annotations. So we make sure to -- remove them before calling the generic operation. @@ -227,13 +234,12 @@ idy = Lam (Unbound.bind yName (Var yName)) -- * Substitution --- The Subst class derives capture-avoiding substitution --- It has two parameters because the sort of thing we are substituting +-- The Subst class derives capture-avoiding substitution. +-- It has two parameters because the type of thing we are substituting -- for may not be the same as what we are substituting into. --- class Subst b a where --- subst :: Name b -> b -> a -> a -- single substitution - +-- The `isvar` function identifies the variables in the term that +-- should be substituted for. instance Unbound.Subst Term Term where isvar (Var x) = Just (Unbound.SubstName x) isvar _ = Nothing @@ -253,8 +259,8 @@ pi2 = TyPi TyBool (Unbound.bind yName (Var yName)) -- * Source Positions -- SourcePositions do not have an instance of the Generic class available --- so we cannot automatically define their Alpha and Subst instances. Instead --- we do so by hand here. +-- so we cannot automatically define their `Alpha` and `Subst` instances. +-- Instead we provide a trivial implementation here. instance Unbound.Alpha SourcePos where aeq' _ _ _ = True fvAny' _ _ = pure diff --git a/version1/src/TypeCheck.hs b/version1/src/TypeCheck.hs index abf5ada..3994d2b 100644 --- a/version1/src/TypeCheck.hs +++ b/version1/src/TypeCheck.hs @@ -15,7 +15,6 @@ import PrettyPrint (Disp (disp), debug, pp) import Syntax import Text.PrettyPrint.HughesPJ (render, ($$)) import Unbound.Generics.LocallyNameless qualified as Unbound -import Unbound.Generics.LocallyNameless.Internal.Fold qualified as Unbound --------------------------------------------------------------------- @@ -31,7 +30,7 @@ inferType a = case a of TyType -> return TyType -- i-pi (TyPi tyA bnd) -> do - (x, tyB) <- Unbound.unbind bnd + (x, tyB) <- unbind bnd tcType tyA Env.extendCtx (mkDecl x tyA) (tcType tyB) return TyType @@ -39,14 +38,12 @@ inferType a = case a of -- i-app (App a b) -> do ty1 <- inferType a - let ensurePi :: Type -> TcMonad (Type, Unbound.Bind TName Type) - ensurePi (Pos _ ty) = ensurePi ty - ensurePi (Ann tm _) = ensurePi tm - ensurePi (TyPi tyA bnd) = return (tyA, bnd) - ensurePi ty = Env.err [DS "Expected a function type but found ", DD ty] - (tyA, bnd) <- ensurePi ty1 - checkType b tyA - return (Unbound.instantiate bnd [b]) + let ty1' = strip ty1 + case ty1' of + (TyPi tyA bnd) -> do + checkType b tyA + return (instantiate bnd b) + _ -> Env.err [DS "Expected a function type but found ", DD ty1] -- i-ann (Ann a tyA) -> do @@ -91,7 +88,7 @@ checkType tm ty = do (Lam bnd) -> case ty' of (TyPi tyA bnd2) -> do -- unbind the variables in the lambda expression and pi type - (x, body, _, tyB) <- Unbound.unbind2Plus bnd bnd2 + (x, body, tyB) <- unbind2 bnd bnd2 -- check the type of the body of the lambda expression Env.extendCtx (mkDecl x tyA) (checkType body tyB) @@ -119,9 +116,9 @@ checkType tm ty = do -- c-let (Let a bnd) -> Env.err [DS "unimplemented"] -- c-infer - a -> do - tyA <- inferType a - unless (Unbound.aeq tyA ty') $ Env.err [DS "Types don't match", DD tyA, DS "and", DD ty'] + _ -> do + tyA <- inferType tm + unless (aeq tyA ty') $ Env.err [DS "Types don't match", DD tyA, DS "and", DD ty'] -------------------------------------------------------- -- Using the typechecker for decls and modules and stuff diff --git a/version2/pi/Lec1.pi b/version2/pi/Lec1.pi index 2b5034e..eb6a040 100644 --- a/version2/pi/Lec1.pi +++ b/version2/pi/Lec1.pi @@ -48,7 +48,7 @@ unit = (x:Type) -> x -> x -- includes beta-equivalence/definitions (i.e. >= version2) -- Church encoding of simply-typed pairs - +{- pair : Type -> Type -> Type pair = \p. \q. (c: Type) -> (p -> q -> c) -> c @@ -56,12 +56,6 @@ pair = \p. \q. (c: Type) -> (p -> q -> c) -> c prod : (p:Type) -> (q:Type) -> p -> q -> pair p q prod = \p.\q. \x.\y. \c. \f. f x y --- (p:Type) -> (q:Type) -> p -> q -> pair p q --- (p:Type) -> (q:Type) -> p -> q -> ((c: Type) -> (p -> q -> c) -> c) - -prod' : (p:Type) -> (q:Type) -> p -> q -> ((c: Type) -> (p -> q -> c) -> c) -prod' = prod - proj1 : (p:Type) -> (q:Type) -> pair p q -> p proj1 = \p. \q. \a. a p (\x.\y.x) @@ -70,4 +64,4 @@ proj2 = \p. \q. \a. a q (\x.\y.y) swap : (p:Type) -> (q:Type) -> pair p q -> pair q p swap = \p. \q. \a. prod q p (proj2 p q a) (proj1 p q a) - +-} diff --git a/version2/src/Equal.hs b/version2/src/Equal.hs index 3866dbb..3b2ac76 100644 --- a/version2/src/Equal.hs +++ b/version2/src/Equal.hs @@ -1,8 +1,7 @@ {- pi-forall language -} -- | Compare two terms for equality -module Equal (whnf, equate, ensurePi, unify - {- SOLN EQUAL -},ensureTyEq {- STUBWITH -} +module Equal (whnf, equate, unify ) where import Syntax @@ -25,13 +24,13 @@ equate t1 t2 = do (TyType, TyType) -> return () (Var x, Var y) | x == y -> return () (Lam bnd1, Lam bnd2) -> do - (_, b1, _, b2) <- Unbound.unbind2Plus bnd1 bnd2 + (_, b1, b2) <- unbind2 bnd1 bnd2 equate b1 b2 (App a1 a2, App b1 b2) -> equate a1 b1 >> equate a2 b2 (TyPi tyA1 bnd1, TyPi tyA2 bnd2) -> do - (_, tyB1, _, tyB2) <- Unbound.unbind2Plus bnd1 bnd2 + (_, tyB1, tyB2) <- unbind2 bnd1 bnd2 equate tyA1 tyA2 equate tyB1 tyB2 @@ -52,12 +51,12 @@ equate t1 t2 = do equate c1 c2 (Let rhs1 bnd1, Let rhs2 bnd2) -> do - Just (x, body1, _, body2) <- Unbound.unbind2 bnd1 bnd2 + (x, body1, body2) <- unbind2 bnd1 bnd2 equate rhs1 rhs2 equate body1 body2 (TySigma tyA1 bnd1, TySigma tyA2 bnd2) -> do - Just (x, tyB1, _, tyB2) <- Unbound.unbind2 bnd1 bnd2 + (x, tyB1, tyB2) <- unbind2 bnd1 bnd2 equate tyA1 tyA2 equate tyB1 tyB2 @@ -67,7 +66,7 @@ equate t1 t2 = do (LetPair s1 bnd1, LetPair s2 bnd2) -> do equate s1 s2 - Just ((x,y), body1, _, body2) <- Unbound.unbind2 bnd1 bnd2 + ((x,y), body1, _, body2) <- Unbound.unbind2Plus bnd1 bnd2 equate body1 body2 (TyEq a b, TyEq c d) -> do equate a c @@ -94,32 +93,6 @@ equate t1 t2 = do ------------------------------------------------------- - --- | Ensure that the given type 'ty' is a 'TyPi' type --- (or could be normalized to be such) and return the components of --- the type. --- Throws an error if this is not the case. -ensurePi :: Type -> - TcMonad ( Type, (Unbound.Bind TName Type)) -ensurePi ty = do - nf <- whnf ty - case nf of - (TyPi tyA bnd) -> do - return ( tyA, bnd) - _ -> Env.err [DS "Expected a function type, instead found", DD nf] - - --- | Ensure that the given 'ty' is an equality type --- (or could be normalized to be such) and return --- the LHS and RHS of that equality --- Throws an error if this is not the case. -ensureTyEq :: Term -> TcMonad (Term,Term) -ensureTyEq ty = do - nf <- whnf ty - case nf of - TyEq m n -> return (m, n) - _ -> Env.err [DS "Expected an equality type, instead found", DD nf] - @@ -137,7 +110,7 @@ whnf (App t1 t2) = do nf <- whnf t1 case nf of (Lam bnd) -> do - whnf (Unbound.instantiate bnd [t2]) + whnf (instantiate bnd t2) _ -> do return (App nf t2) @@ -159,8 +132,7 @@ whnf (Ann tm _) = whnf tm whnf (Pos _ tm) = whnf tm whnf (Let rhs bnd) = do - -- (x,body) <- Unbound.unbind bnd - whnf (Unbound.instantiate bnd [rhs]) + whnf (instantiate bnd rhs) whnf (Subst tm pf) = do pf' <- whnf pf case pf' of @@ -192,11 +164,11 @@ unify ns tx ty = do (TyEq a1 a2, TyEq b1 b2) -> (++) <$> unify ns a1 b1 <*> unify ns a2 b2 (Lam bnd1, Lam bnd2) -> do - (x, b1, _, b2) <- Unbound.unbind2Plus bnd1 bnd2 + (x, b1, b2) <- unbind2 bnd1 bnd2 unify (x:ns) b1 b2 (TyPi tyA1 bnd1, TyPi tyA2 bnd2) -> do - (x, tyB1, _, tyB2) <- Unbound.unbind2Plus bnd1 bnd2 + (x, tyB1, tyB2) <- unbind2 bnd1 bnd2 ds1 <- unify ns tyA1 tyA2 ds2 <- unify (x:ns) tyB1 tyB2 diff --git a/version2/src/Syntax.hs b/version2/src/Syntax.hs index 0b5d428..43be86f 100644 --- a/version2/src/Syntax.hs +++ b/version2/src/Syntax.hs @@ -8,6 +8,7 @@ import Data.Set (Set) import Data.Set qualified as Set import Data.Typeable (Typeable) import GHC.Generics (Generic,from) +import GHC.Base (MonadPlus) import Text.ParserCombinators.Parsec.Pos (SourcePos, initialPos, newPos) import Unbound.Generics.LocallyNameless qualified as Unbound import Unbound.Generics.LocallyNameless.Internal.Fold qualified as Unbound @@ -170,6 +171,9 @@ unPosFlaky t = fromMaybe (newPos "unknown location" 0 0) (unPos t) -- functions for alpha-equivalence, free variables and substitution -- using generic programming. +-- The definitions below specialize the generic operations from the libary +-- to some of the common uses that we need in pi-forall + -- | Determine when two terms are alpha-equivalent (see below) aeq :: Term -> Term -> Bool aeq = Unbound.aeq @@ -178,32 +182,35 @@ aeq = Unbound.aeq fv :: Term -> [Unbound.Name Term] fv = Unbound.toListOf Unbound.fv --- | subst x b a means to replace x with b in a +-- | `subst x b a` means to replace `x` with `b` in `a` -- i.e. a [ b / x ] subst :: TName -> Term -> Term -> Term subst = Unbound.subst --- | in a binder "x.a" replace x with b +-- | in a binder `x.a` replace `x` with `b` instantiate :: Unbound.Bind TName Term -> Term -> Term instantiate bnd a = Unbound.instantiate bnd [a] --- | in a binder "x.a" replace x with a fresh name +-- | in a binder `x.a` replace `x` with a fresh name unbind :: (Unbound.Fresh m) => Unbound.Bind TName Term -> m (TName, Term) unbind = Unbound.unbind + +-- | in binders `x.a1` and `x.a2` replace `x` with a fresh name in both terms +unbind2 :: (Unbound.Fresh m) => Unbound.Bind TName Term -> Unbound.Bind TName Term -> m (TName, Term, Term) +unbind2 b1 b2 = do + o <- Unbound.unbind2 b1 b2 + case o of + Just (x,t,_,u) -> return (x,t,u) + Nothing -> error "impossible" ------------------ --- * Alpha equivalence and free variables +-- * `Alpha` class instances --- The Unbound library's Alpha class enables the following --- functions: --- -- Compare terms for alpha equivalence --- aeq :: Alpha a => a -> a -> Bool --- -- Calculate the free variables of a term --- fv :: Alpha a => a -> [Unbound.Name a] --- -- Destruct a binding, generating fresh names for the bound variables --- unbind :: (Alpha p, Alpha t, Fresh m) => Bind p t -> m (p, t) +-- The Unbound library's `Alpha` class enables the `aeq`, `fv`, +-- `instantiate` and `unbind` functions, and also allows some +-- specialization of their generic behavior. --- For Terms, we'd like Alpha equivalence to ignore +-- For `Term`, we'd like Alpha equivalence to ignore -- source positions and type annotations. So we make sure to -- remove them before calling the generic operation. @@ -249,13 +256,12 @@ idy = Lam (Unbound.bind yName (Var yName)) -- * Substitution --- The Subst class derives capture-avoiding substitution --- It has two parameters because the sort of thing we are substituting +-- The Subst class derives capture-avoiding substitution. +-- It has two parameters because the type of thing we are substituting -- for may not be the same as what we are substituting into. --- class Subst b a where --- subst :: Name b -> b -> a -> a -- single substitution - +-- The `isvar` function identifies the variables in the term that +-- should be substituted for. instance Unbound.Subst Term Term where isvar (Var x) = Just (Unbound.SubstName x) isvar _ = Nothing @@ -276,8 +282,8 @@ pi2 = TyPi TyBool (Unbound.bind yName (Var yName)) -- * Source Positions -- SourcePositions do not have an instance of the Generic class available --- so we cannot automatically define their Alpha and Subst instances. Instead --- we do so by hand here. +-- so we cannot automatically define their `Alpha` and `Subst` instances. +-- Instead we provide a trivial implementation here. instance Unbound.Alpha SourcePos where aeq' _ _ _ = True fvAny' _ _ = pure diff --git a/version2/src/TypeCheck.hs b/version2/src/TypeCheck.hs index fc0406a..a7edca6 100644 --- a/version2/src/TypeCheck.hs +++ b/version2/src/TypeCheck.hs @@ -18,7 +18,6 @@ import Debug.Trace import Text.PrettyPrint.HughesPJ (($$), render) import Unbound.Generics.LocallyNameless qualified as Unbound -import Unbound.Generics.LocallyNameless.Internal.Fold qualified as Unbound @@ -38,7 +37,7 @@ inferType a = case a of -- i-pi (TyPi tyA bnd) -> do - (x, tyB) <- Unbound.unbind bnd + (x, tyB) <- unbind bnd tcType tyA Env.extendCtx (mkDecl x tyA) (tcType tyB) return TyType @@ -46,11 +45,12 @@ inferType a = case a of -- i-app (App a b) -> do ty1 <- inferType a - let ensurePi = Equal.ensurePi - - (tyA,bnd) <- ensurePi ty1 - checkType b tyA - return (Unbound.instantiate bnd [b]) + ty1' <- Equal.whnf ty1 + case ty1' of + (TyPi tyA bnd) -> do + checkType b tyA + return (instantiate bnd b ) + _ -> Env.err [DS "Expected a function type but found ", DD ty1] -- i-ann (Ann a tyA) -> do @@ -83,7 +83,7 @@ inferType a = case a of -- i-sigma (TySigma tyA bnd) -> do - (x, tyB) <- Unbound.unbind bnd + (x, tyB) <- unbind bnd tcType tyA Env.extendCtx (mkDecl x tyA) $ tcType tyB return TyType @@ -116,7 +116,7 @@ checkType tm ty = do (Lam bnd) -> case ty' of (TyPi tyA bnd2) -> do -- unbind the variables in the lambda expression and pi type - (x, body, _, tyB) <- Unbound.unbind2Plus bnd bnd2 + (x, body, tyB) <- unbind2 bnd bnd2 -- check the type of the body of the lambda expression Env.extendCtx (mkDecl x tyA) (checkType body tyB) @@ -145,7 +145,7 @@ checkType tm ty = do (Prod a b) -> do case ty' of (TySigma tyA bnd) -> do - (x, tyB) <- Unbound.unbind bnd + (x, tyB) <- unbind bnd checkType a tyA Env.extendCtxs [mkDecl x tyA, Def x a] $ checkType b tyB _ -> @@ -162,7 +162,7 @@ checkType tm ty = do pty' <- Equal.whnf pty case pty' of TySigma tyA bnd' -> do - let tyB = Unbound.instantiate bnd' [Var x] + let tyB = instantiate bnd' (Var x) decl <- Equal.unify [] p (Prod (Var x) (Var y)) Env.extendCtxs ([mkDecl x tyA, mkDecl y tyB] ++ decl) $ checkType body tyA @@ -170,7 +170,7 @@ checkType tm ty = do -- c-let (Let a bnd) -> do - (x, b) <- Unbound.unbind bnd + (x, b) <- unbind bnd tyA <- inferType a Env.extendCtxs [mkDecl x tyA, Def x a] $ checkType b ty' @@ -183,7 +183,10 @@ checkType tm ty = do -- infer the type of the proof 'b' tp <- inferType b -- make sure that it is an equality between m and n - (m, n) <- Equal.ensureTyEq tp + nf <- Equal.whnf tp + (m, n) <- case nf of + TyEq m n -> return (m,n) + _ -> Env.err [DS "Subst requires an equality type, not", DD tp] -- if either side is a variable, add a definition to the context edecl <- Equal.unify [] m n -- if proof is a variable, add a definition to the context @@ -192,7 +195,10 @@ checkType tm ty = do -- c-contra (Contra p) -> do ty' <- inferType p - (a, b) <- Equal.ensureTyEq ty' + nf <- Equal.whnf ty' + (a, b) <- case nf of + TyEq m n -> return (m,n) + _ -> Env.err [DS "Contra requires an equality type, not", DD ty'] a' <- Equal.whnf a b' <- Equal.whnf b case (a', b') of @@ -214,8 +220,8 @@ checkType tm ty = do -- c-infer - a -> do - tyA <- inferType a + _ -> do + tyA <- inferType tm Equal.equate tyA ty' diff --git a/version3/src/Equal.hs b/version3/src/Equal.hs index 6c274e8..2328cad 100644 --- a/version3/src/Equal.hs +++ b/version3/src/Equal.hs @@ -1,8 +1,7 @@ {- pi-forall language -} -- | Compare two terms for equality -module Equal (whnf, equate, ensurePi, unify - {- SOLN EQUAL -},ensureTyEq {- STUBWITH -} +module Equal (whnf, equate, unify ) where import Syntax @@ -25,14 +24,14 @@ equate t1 t2 = do (TyType, TyType) -> return () (Var x, Var y) | x == y -> return () (Lam ep1 bnd1, Lam ep2 bnd2) -> do - (_, b1, _, b2) <- Unbound.unbind2Plus bnd1 bnd2 + (_, b1, b2) <- unbind2 bnd1 bnd2 unless (ep1 == ep2) $ tyErr n1 n2 equate b1 b2 (App a1 a2, App b1 b2) -> equate a1 b1 >> equateArg a2 b2 (TyPi ep1 tyA1 bnd1, TyPi ep2 tyA2 bnd2) -> do - (_, tyB1, _, tyB2) <- Unbound.unbind2Plus bnd1 bnd2 + (_, tyB1, tyB2) <- unbind2 bnd1 bnd2 unless (ep1 == ep2) $ tyErr n1 n2 equate tyA1 tyA2 @@ -54,12 +53,12 @@ equate t1 t2 = do equate c1 c2 (Let rhs1 bnd1, Let rhs2 bnd2) -> do - Just (x, body1, _, body2) <- Unbound.unbind2 bnd1 bnd2 + (x, body1, body2) <- unbind2 bnd1 bnd2 equate rhs1 rhs2 equate body1 body2 (TySigma tyA1 bnd1, TySigma tyA2 bnd2) -> do - Just (x, tyB1, _, tyB2) <- Unbound.unbind2 bnd1 bnd2 + (x, tyB1, tyB2) <- unbind2 bnd1 bnd2 equate tyA1 tyA2 equate tyB1 tyB2 @@ -69,7 +68,7 @@ equate t1 t2 = do (LetPair s1 bnd1, LetPair s2 bnd2) -> do equate s1 s2 - Just ((x,y), body1, _, body2) <- Unbound.unbind2 bnd1 bnd2 + ((x,y), body1, _, body2) <- Unbound.unbind2Plus bnd1 bnd2 equate body1 body2 (TyEq a b, TyEq c d) -> do equate a c @@ -116,32 +115,6 @@ equateArg a1 a2 = ------------------------------------------------------- - --- | Ensure that the given type 'ty' is a 'TyPi' type --- (or could be normalized to be such) and return the components of --- the type. --- Throws an error if this is not the case. -ensurePi :: Type -> - TcMonad (Epsilon, Type, (Unbound.Bind TName Type)) -ensurePi ty = do - nf <- whnf ty - case nf of - (TyPi ep tyA bnd) -> do - return (ep, tyA, bnd) - _ -> Env.err [DS "Expected a function type, instead found", DD nf] - - --- | Ensure that the given 'ty' is an equality type --- (or could be normalized to be such) and return --- the LHS and RHS of that equality --- Throws an error if this is not the case. -ensureTyEq :: Term -> TcMonad (Term,Term) -ensureTyEq ty = do - nf <- whnf ty - case nf of - TyEq m n -> return (m, n) - _ -> Env.err [DS "Expected an equality type, instead found", DD nf] - @@ -159,7 +132,7 @@ whnf (App t1 t2) = do nf <- whnf t1 case nf of (Lam ep bnd) -> do - whnf (Unbound.instantiate bnd [unArg t2] ) + whnf (instantiate bnd (unArg t2) ) _ -> do return (App nf t2) @@ -181,8 +154,7 @@ whnf (Ann tm _) = whnf tm whnf (Pos _ tm) = whnf tm whnf (Let rhs bnd) = do - -- (x,body) <- Unbound.unbind bnd - whnf (Unbound.instantiate bnd [rhs]) + whnf (instantiate bnd rhs) whnf (Subst tm pf) = do pf' <- whnf pf case pf' of @@ -214,12 +186,12 @@ unify ns tx ty = do (TyEq a1 a2, TyEq b1 b2) -> (++) <$> unify ns a1 b1 <*> unify ns a2 b2 (Lam ep1 bnd1, Lam ep2 bnd2) -> do - (x, b1, _, b2) <- Unbound.unbind2Plus bnd1 bnd2 + (x, b1, b2) <- unbind2 bnd1 bnd2 unless (ep1 == ep2) $ do Env.err [DS "Cannot equate", DD txnf, DS "and", DD tynf] unify (x:ns) b1 b2 (TyPi ep1 tyA1 bnd1, TyPi ep2 tyA2 bnd2) -> do - (x, tyB1, _, tyB2) <- Unbound.unbind2Plus bnd1 bnd2 + (x, tyB1, tyB2) <- unbind2 bnd1 bnd2 unless (ep1 == ep2) $ do Env.err [DS "Cannot equate", DD txnf, DS "and", DD tynf] ds1 <- unify ns tyA1 tyA2 diff --git a/version3/src/Syntax.hs b/version3/src/Syntax.hs index b4fe46c..d59cca4 100644 --- a/version3/src/Syntax.hs +++ b/version3/src/Syntax.hs @@ -8,6 +8,7 @@ import Data.Set (Set) import Data.Set qualified as Set import Data.Typeable (Typeable) import GHC.Generics (Generic,from) +import GHC.Base (MonadPlus) import Text.ParserCombinators.Parsec.Pos (SourcePos, initialPos, newPos) import Unbound.Generics.LocallyNameless qualified as Unbound import Unbound.Generics.LocallyNameless.Internal.Fold qualified as Unbound @@ -190,6 +191,9 @@ unPosFlaky t = fromMaybe (newPos "unknown location" 0 0) (unPos t) -- functions for alpha-equivalence, free variables and substitution -- using generic programming. +-- The definitions below specialize the generic operations from the libary +-- to some of the common uses that we need in pi-forall + -- | Determine when two terms are alpha-equivalent (see below) aeq :: Term -> Term -> Bool aeq = Unbound.aeq @@ -198,32 +202,35 @@ aeq = Unbound.aeq fv :: Term -> [Unbound.Name Term] fv = Unbound.toListOf Unbound.fv --- | subst x b a means to replace x with b in a +-- | `subst x b a` means to replace `x` with `b` in `a` -- i.e. a [ b / x ] subst :: TName -> Term -> Term -> Term subst = Unbound.subst --- | in a binder "x.a" replace x with b +-- | in a binder `x.a` replace `x` with `b` instantiate :: Unbound.Bind TName Term -> Term -> Term instantiate bnd a = Unbound.instantiate bnd [a] --- | in a binder "x.a" replace x with a fresh name +-- | in a binder `x.a` replace `x` with a fresh name unbind :: (Unbound.Fresh m) => Unbound.Bind TName Term -> m (TName, Term) unbind = Unbound.unbind + +-- | in binders `x.a1` and `x.a2` replace `x` with a fresh name in both terms +unbind2 :: (Unbound.Fresh m) => Unbound.Bind TName Term -> Unbound.Bind TName Term -> m (TName, Term, Term) +unbind2 b1 b2 = do + o <- Unbound.unbind2 b1 b2 + case o of + Just (x,t,_,u) -> return (x,t,u) + Nothing -> error "impossible" ------------------ --- * Alpha equivalence and free variables +-- * `Alpha` class instances --- The Unbound library's Alpha class enables the following --- functions: --- -- Compare terms for alpha equivalence --- aeq :: Alpha a => a -> a -> Bool --- -- Calculate the free variables of a term --- fv :: Alpha a => a -> [Unbound.Name a] --- -- Destruct a binding, generating fresh names for the bound variables --- unbind :: (Alpha p, Alpha t, Fresh m) => Bind p t -> m (p, t) +-- The Unbound library's `Alpha` class enables the `aeq`, `fv`, +-- `instantiate` and `unbind` functions, and also allows some +-- specialization of their generic behavior. --- For Terms, we'd like Alpha equivalence to ignore +-- For `Term`, we'd like Alpha equivalence to ignore -- source positions and type annotations. So we make sure to -- remove them before calling the generic operation. @@ -269,13 +276,12 @@ idy = Lam Rel (Unbound.bind yName (Var yName)) -- * Substitution --- The Subst class derives capture-avoiding substitution --- It has two parameters because the sort of thing we are substituting +-- The Subst class derives capture-avoiding substitution. +-- It has two parameters because the type of thing we are substituting -- for may not be the same as what we are substituting into. --- class Subst b a where --- subst :: Name b -> b -> a -> a -- single substitution - +-- The `isvar` function identifies the variables in the term that +-- should be substituted for. instance Unbound.Subst Term Term where isvar (Var x) = Just (Unbound.SubstName x) isvar _ = Nothing @@ -296,8 +302,8 @@ pi2 = TyPi Rel TyBool (Unbound.bind yName (Var yName)) -- * Source Positions -- SourcePositions do not have an instance of the Generic class available --- so we cannot automatically define their Alpha and Subst instances. Instead --- we do so by hand here. +-- so we cannot automatically define their `Alpha` and `Subst` instances. +-- Instead we provide a trivial implementation here. instance Unbound.Alpha SourcePos where aeq' _ _ _ = True fvAny' _ _ = pure diff --git a/version3/src/TypeCheck.hs b/version3/src/TypeCheck.hs index a416c79..ac156a7 100644 --- a/version3/src/TypeCheck.hs +++ b/version3/src/TypeCheck.hs @@ -18,7 +18,6 @@ import Debug.Trace import Text.PrettyPrint.HughesPJ (($$), render) import Unbound.Generics.LocallyNameless qualified as Unbound -import Unbound.Generics.LocallyNameless.Internal.Fold qualified as Unbound @@ -39,7 +38,7 @@ inferType a = case a of -- i-pi (TyPi ep tyA bnd) -> do - (x, tyB) <- Unbound.unbind bnd + (x, tyB) <- unbind bnd tcType tyA Env.extendCtx (Decl (TypeDecl x ep tyA)) (tcType tyB) return TyType @@ -47,17 +46,16 @@ inferType a = case a of -- i-app (App a b) -> do ty1 <- inferType a - let ensurePi = Equal.ensurePi - - (ep1, tyA, bnd) <- ensurePi ty1 - unless (ep1 == argEp b) $ Env.err - [DS "In application, expected", DD ep1, DS "argument but found", - DD b, DS "instead." ] - -- if the argument is Irrelevant, resurrect the context - (if ep1 == Irr then Env.extendCtx (Demote Rel) else id) $ - checkType (unArg b) tyA - return (Unbound.instantiate bnd [unArg b]) - + ty1' <- Equal.whnf ty1 + case ty1' of + (TyPi {- SOLN EP -}ep1 {- STUBWITH -} tyA bnd) -> do + unless (ep1 == argEp b) $ Env.err + [DS "In application, expected", DD ep1, DS "argument but found", + DD b, DS "instead." ] + -- if the argument is Irrelevant, resurrect the context + (if ep1 == Irr then Env.extendCtx (Demote Rel) else id) $ checkType (unArg b) tyA + return (instantiate bnd (unArg b) ) + _ -> Env.err [DS "Expected a function type but found ", DD ty1] -- i-ann (Ann a tyA) -> do @@ -90,7 +88,7 @@ inferType a = case a of -- i-sigma (TySigma tyA bnd) -> do - (x, tyB) <- Unbound.unbind bnd + (x, tyB) <- unbind bnd tcType tyA Env.extendCtx (mkDecl x tyA) $ tcType tyB return TyType @@ -123,7 +121,7 @@ checkType tm ty = do (Lam ep1 bnd) -> case ty' of (TyPi ep2 tyA bnd2) -> do -- unbind the variables in the lambda expression and pi type - (x, body, _, tyB) <- Unbound.unbind2Plus bnd bnd2 + (x, body, tyB) <- unbind2 bnd bnd2 -- epsilons should match up unless (ep1 == ep2) $ Env.err [DS "In function definition, expected", DD ep2, DS "parameter", DD x, DS "but found", DD ep1, DS "instead."] @@ -154,7 +152,7 @@ checkType tm ty = do (Prod a b) -> do case ty' of (TySigma tyA bnd) -> do - (x, tyB) <- Unbound.unbind bnd + (x, tyB) <- unbind bnd checkType a tyA Env.extendCtxs [mkDecl x tyA, Def x a] $ checkType b tyB _ -> @@ -171,7 +169,7 @@ checkType tm ty = do pty' <- Equal.whnf pty case pty' of TySigma tyA bnd' -> do - let tyB = Unbound.instantiate bnd' [Var x] + let tyB = instantiate bnd' (Var x) decl <- Equal.unify [] p (Prod (Var x) (Var y)) Env.extendCtxs ([mkDecl x tyA, mkDecl y tyB] ++ decl) $ checkType body tyA @@ -179,7 +177,7 @@ checkType tm ty = do -- c-let (Let a bnd) -> do - (x, b) <- Unbound.unbind bnd + (x, b) <- unbind bnd tyA <- inferType a Env.extendCtxs [mkDecl x tyA, Def x a] $ checkType b ty' @@ -192,7 +190,10 @@ checkType tm ty = do -- infer the type of the proof 'b' tp <- inferType b -- make sure that it is an equality between m and n - (m, n) <- Equal.ensureTyEq tp + nf <- Equal.whnf tp + (m, n) <- case nf of + TyEq m n -> return (m,n) + _ -> Env.err [DS "Subst requires an equality type, not", DD tp] -- if either side is a variable, add a definition to the context edecl <- Equal.unify [] m n -- if proof is a variable, add a definition to the context @@ -201,7 +202,10 @@ checkType tm ty = do -- c-contra (Contra p) -> do ty' <- inferType p - (a, b) <- Equal.ensureTyEq ty' + nf <- Equal.whnf ty' + (a, b) <- case nf of + TyEq m n -> return (m,n) + _ -> Env.err [DS "Contra requires an equality type, not", DD ty'] a' <- Equal.whnf a b' <- Equal.whnf b case (a', b') of @@ -223,8 +227,8 @@ checkType tm ty = do -- c-infer - a -> do - tyA <- inferType a + _ -> do + tyA <- inferType tm Equal.equate tyA ty'