@@ -681,7 +681,7 @@ data PTerm = PQuote Raw
681 | PFalse FC -- ^ _|_
681 | PFalse FC -- ^ _|_
682 | PRefl FC PTerm
682 | PRefl FC PTerm
683 | PResolveTC FC
683 | PResolveTC FC
684− | PEq FC PTerm PTerm -- ^ Equality type: A = B
684+ | PEq FC PTerm PTerm PTerm PTerm -- ^ Heterogeneous equality type: A = B
685 | PRewrite FC PTerm PTerm (Maybe PTerm)
685 | PRewrite FC PTerm PTerm (Maybe PTerm)
686 | PPair FC PunInfo PTerm PTerm
686 | PPair FC PunInfo PTerm PTerm
687 | PDPair FC PunInfo PTerm PTerm PTerm
687 | PDPair FC PunInfo PTerm PTerm PTerm
@@ -723,7 +723,7 @@ mapPT f t = f (mpt t) where
723 mpt (PApp fc t as) = PApp fc (mapPT f t) (map (fmap (mapPT f)) as)
723 mpt (PApp fc t as) = PApp fc (mapPT f t) (map (fmap (mapPT f)) as)
724 mpt (PAppBind fc t as) = PAppBind fc (mapPT f t) (map (fmap (mapPT f)) as)
724 mpt (PAppBind fc t as) = PAppBind fc (mapPT f t) (map (fmap (mapPT f)) as)
725 mpt (PCase fc c os) = PCase fc (mapPT f c) (map (pmap (mapPT f)) os)
725 mpt (PCase fc c os) = PCase fc (mapPT f c) (map (pmap (mapPT f)) os)
726− mpt (PEq fc l r) = PEq fc (mapPT f l) (mapPT f r)
726+ mpt (PEq fc lt rt l r) = PEq fc (mapPT f lt) (mapPT f rt) (mapPT f l) (mapPT f r)
727 mpt (PTyped l r) = PTyped (mapPT f l) (mapPT f r)
727 mpt (PTyped l r) = PTyped (mapPT f l) (mapPT f r)
728 mpt (PPair fc p l r) = PPair fc p (mapPT f l) (mapPT f r)
728 mpt (PPair fc p l r) = PPair fc p (mapPT f l) (mapPT f r)
729 mpt (PDPair fc p l t r) = PDPair fc p (mapPT f l) (mapPT f t) (mapPT f r)
729 mpt (PDPair fc p l t r) = PDPair fc p (mapPT f l) (mapPT f t) (mapPT f r)
@@ -1086,7 +1086,7 @@ eqDecl = PDatadecl eqTy (piBindp impl [(n "A", PType), (n "B", PType)]
1086 pimp (n "B") Placeholder False,
1086 pimp (n "B") Placeholder False,
1087 pexp (PRef bi (n "x")),
1087 pexp (PRef bi (n "x")),
1088 pexp (PRef bi (n "x"))])), bi, [])]
1088 pexp (PRef bi (n "x"))])), bi, [])]
1089− where n a = sMN 0 a
1089+ where n a = sUN a
1090 reflDoc = parseDocstring . T.pack $
1090 reflDoc = parseDocstring . T.pack $
1091 "A proof that `x` in fact equals `x`. To construct this, you must have already " ++
1091 "A proof that `x` in fact equals `x`. To construct this, you must have already " ++
1092 "shown that both sides are in fact equal."
1092 "shown that both sides are in fact equal."
@@ -1096,7 +1096,7 @@ eqDecl = PDatadecl eqTy (piBindp impl [(n "A", PType), (n "B", PType)]
1096eqParamDoc = [(n "A", parseDocstring . T.pack $ "the type of the left side of the equality"),
1096eqParamDoc = [(n "A", parseDocstring . T.pack $ "the type of the left side of the equality"),
1097 (n "B", parseDocstring . T.pack $ "the type of the right side of the equality")
1097 (n "B", parseDocstring . T.pack $ "the type of the right side of the equality")
1099− where n a = sMN 0 a
1099+ where n a = sUN a
1101eqOpts = []
1101eqOpts = []
@@ -1242,7 +1242,7 @@ pprintPTerm ppo bnd docArgs infixes = prettySe 10 bnd
1242 rbrace <+> text "->" </> prettySe 10 ((n, True):bnd) sc
1242 rbrace <+> text "->" </> prettySe 10 ((n, True):bnd) sc
1243 prettySe p bnd (PApp _ (PRef _ f) args) -- normal names, no explicit args
1243 prettySe p bnd (PApp _ (PRef _ f) args) -- normal names, no explicit args
1244 | UN nm <- basename f
1244 | UN nm <- basename f
1245− , not (ppopt_impl ppo) && null (getExps args) =
1245+ , not (ppopt_impl ppo) && null (getShowArgs args) =
1246 prettyName True (ppopt_impl ppo) bnd f
1246 prettyName True (ppopt_impl ppo) bnd f
1247 prettySe p bnd (PAppBind _ (PRef _ f) [])
1247 prettySe p bnd (PAppBind _ (PRef _ f) [])
1248 | not (ppopt_impl ppo) = text "!" <> prettyName True (ppopt_impl ppo) bnd f
1248 | not (ppopt_impl ppo) = text "!" <> prettyName True (ppopt_impl ppo) bnd f
@@ -1250,14 +1250,16 @@ pprintPTerm ppo bnd docArgs infixes = prettySe 10 bnd
1250 | UN nm <- basename op
1250 | UN nm <- basename op
1251 , not (tnull nm) &&
1251 , not (tnull nm) &&
1252 (not (ppopt_impl ppo)) && (not $ isAlpha (thead nm)) =
1252 (not (ppopt_impl ppo)) && (not $ isAlpha (thead nm)) =
1253− case getExps args of
1253+ case getShowArgs args of
1254 [] -> opName True
1254 [] -> opName True
1255− [x] -> group (opName True <$> group (prettySe 0 bnd x))
1255+ [x] -> group (opName True <$> group (prettySe 0 bnd (getTm x)))
1256 [l,r] -> let precedence = fromMaybe 20 (fmap prec f)
1256 [l,r] -> let precedence = fromMaybe 20 (fmap prec f)
1257− in bracket p precedence $ inFix l r
1257+ in bracket p precedence $ inFix (getTm l) (getTm r)
1258+ (l@(PExp _ _ _ _) : r@(PExp _ _ _ _) : rest) ->
1258− (l:r:rest) -> bracket p 1 $
1259+ bracket p 1 $
1259− enclose lparen rparen (inFix l r) <+>
1260+ enclose lparen rparen (inFix (getTm l) (getTm r)) <+>
1260− align (group (vsep (map (prettyArgSe bnd) rest)))
1261+ align (group (vsep (map (prettyArgS bnd) rest)))
1262+ as -> opName True <+> align (vsep (map (prettyArgS bnd) as))
1261 where opName isPrefix = prettyName isPrefix (ppopt_impl ppo) bnd op
1263 where opName isPrefix = prettyName isPrefix (ppopt_impl ppo) bnd op
1262 f = getFixity (opStr op)
1264 f = getFixity (opStr op)
1263 left l = case f of
1265 left l = case f of
@@ -1299,7 +1301,7 @@ pprintPTerm ppo bnd docArgs infixes = prettySe 10 bnd
1299 prettySe p bnd (PTrue _ IsTerm) = annName unitCon $ text "()"
1301 prettySe p bnd (PTrue _ IsTerm) = annName unitCon $ text "()"
1300 prettySe p bnd (PTrue _ TypeOrTerm) = text "()"
1302 prettySe p bnd (PTrue _ TypeOrTerm) = text "()"
1301 prettySe p bnd (PFalse _) = annName falseTy $ text "_|_"
1303 prettySe p bnd (PFalse _) = annName falseTy $ text "_|_"
1302− prettySe p bnd (PEq _ l r) =
1304+ prettySe p bnd (PEq _ _ _ l r) =
1303 bracket p 2 . align . group $
1305 bracket p 2 . align . group $
1304 prettySe 10 bnd l <+> eq <$> group (prettySe 10 bnd r)
1306 prettySe 10 bnd l <+> eq <$> group (prettySe 10 bnd r)
1305 where eq = annName eqTy (text "=")
1307 where eq = annName eqTy (text "=")
@@ -1596,7 +1598,7 @@ instance Sized PTerm where
1596 size (PFalse fc) = 1
1598 size (PFalse fc) = 1
1597 size (PRefl fc _) = 1
1599 size (PRefl fc _) = 1
1598 size (PResolveTC fc) = 1
1600 size (PResolveTC fc) = 1
1599− size (PEq fc left right) = 1 + size left + size right
1601+ size (PEq fc _ _ left right) = 1 + size left + size right
1600 size (PRewrite fc left right _) = 1 + size left + size right
1602 size (PRewrite fc left right _) = 1 + size left + size right
1601 size (PPair fc _ left right) = 1 + size left + size right
1603 size (PPair fc _ left right) = 1 + size left + size right
1602 size (PDPair fs _ left ty right) = 1 + size left + size ty + size right
1604 size (PDPair fs _ left ty right) = 1 + size left + size ty + size right
@@ -1634,7 +1636,7 @@ allNamesIn tm = nub $ ni [] tm
1634 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
1636 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
1635 ni env (PPi p n ty sc) = niTacImp env p ++ ni env ty ++ ni (n:env) sc
1637 ni env (PPi p n ty sc) = niTacImp env p ++ ni env ty ++ ni (n:env) sc
1636 ni env (PHidden tm) = ni env tm
1638 ni env (PHidden tm) = ni env tm
1637− ni env (PEq _ l r) = ni env l ++ ni env r
1639+ ni env (PEq _ _ _ l r) = ni env l ++ ni env r
1638 ni env (PRewrite _ l r _) = ni env l ++ ni env r
1640 ni env (PRewrite _ l r _) = ni env l ++ ni env r
1639 ni env (PTyped l r) = ni env l ++ ni env r
1641 ni env (PTyped l r) = ni env l ++ ni env r
1640 ni env (PPair _ _ l r) = ni env l ++ ni env r
1642 ni env (PPair _ _ l r) = ni env l ++ ni env r
@@ -1659,7 +1661,7 @@ boundNamesIn tm = nub $ ni tm
1659 ni (PLam n ty sc) = n : (ni ty ++ ni sc)
1661 ni (PLam n ty sc) = n : (ni ty ++ ni sc)
1660 ni (PLet n ty val sc) = n : (ni ty ++ ni val ++ ni sc)
1662 ni (PLet n ty val sc) = n : (ni ty ++ ni val ++ ni sc)
1661 ni (PPi p n ty sc) = niTacImp p ++ (n : (ni ty ++ ni sc))
1663 ni (PPi p n ty sc) = niTacImp p ++ (n : (ni ty ++ ni sc))
1662− ni (PEq _ l r) = ni l ++ ni r
1664+ ni (PEq _ _ _ l r) = ni l ++ ni r
1663 ni (PRewrite _ l r _) = ni l ++ ni r
1665 ni (PRewrite _ l r _) = ni l ++ ni r
1664 ni (PTyped l r) = ni l ++ ni r
1666 ni (PTyped l r) = ni l ++ ni r
1665 ni (PPair _ _ l r) = ni l ++ ni r
1667 ni (PPair _ _ l r) = ni l ++ ni r
@@ -1695,7 +1697,7 @@ implicitNamesIn uvars ist tm = nub $ ni [] tm
1695 \\ nub (concatMap (ni env) (map fst os)))
1697 \\ nub (concatMap (ni env) (map fst os)))
1696 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
1698 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
1697 ni env (PPi p n ty sc) = niTacImp env p ++ ni env ty ++ ni (n:env) sc
1699 ni env (PPi p n ty sc) = niTacImp env p ++ ni env ty ++ ni (n:env) sc
1698− ni env (PEq _ l r) = ni env l ++ ni env r
1700+ ni env (PEq _ _ _ l r) = ni env l ++ ni env r
1699 ni env (PRewrite _ l r _) = ni env l ++ ni env r
1701 ni env (PRewrite _ l r _) = ni env l ++ ni env r
1700 ni env (PTyped l r) = ni env l ++ ni env r
1702 ni env (PTyped l r) = ni env l ++ ni env r
1701 ni env (PPair _ _ l r) = ni env l ++ ni env r
1703 ni env (PPair _ _ l r) = ni env l ++ ni env r
@@ -1728,7 +1730,7 @@ namesIn uvars ist tm = nub $ ni [] tm
1728 \\ nub (concatMap (ni env) (map fst os)))
1730 \\ nub (concatMap (ni env) (map fst os)))
1729 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
1731 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
1730 ni env (PPi p n ty sc) = niTacImp env p ++ ni env ty ++ ni (n:env) sc
1732 ni env (PPi p n ty sc) = niTacImp env p ++ ni env ty ++ ni (n:env) sc
1731− ni env (PEq _ l r) = ni env l ++ ni env r
1733+ ni env (PEq _ _ _ l r) = ni env l ++ ni env r
1732 ni env (PRewrite _ l r _) = ni env l ++ ni env r
1734 ni env (PRewrite _ l r _) = ni env l ++ ni env r
1733 ni env (PTyped l r) = ni env l ++ ni env r
1735 ni env (PTyped l r) = ni env l ++ ni env r
1734 ni env (PPair _ _ l r) = ni env l ++ ni env r
1736 ni env (PPair _ _ l r) = ni env l ++ ni env r
@@ -1759,7 +1761,7 @@ usedNamesIn vars ist tm = nub $ ni [] tm
1759 ni env (PCase _ c os) = ni env c ++ concatMap (ni env) (map snd os)
1761 ni env (PCase _ c os) = ni env c ++ concatMap (ni env) (map snd os)
1760 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
1762 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
1761 ni env (PPi p n ty sc) = niTacImp env p ++ ni env ty ++ ni (n:env) sc
1763 ni env (PPi p n ty sc) = niTacImp env p ++ ni env ty ++ ni (n:env) sc
1762− ni env (PEq _ l r) = ni env l ++ ni env r
1764+ ni env (PEq _ _ _ l r) = ni env l ++ ni env r
1763 ni env (PRewrite _ l r _) = ni env l ++ ni env r
1765 ni env (PRewrite _ l r _) = ni env l ++ ni env r
1764 ni env (PTyped l r) = ni env l ++ ni env r
1766 ni env (PTyped l r) = ni env l ++ ni env r
1765 ni env (PPair _ _ l r) = ni env l ++ ni env r
1767 ni env (PPair _ _ l r) = ni env l ++ ni env r