@@ -442,6 +442,7 @@ data PTerm = PQuote Raw
442 | PRefl FC PTerm
442 | PRefl FC PTerm
443 | PResolveTC FC
443 | PResolveTC FC
444 | PEq FC PTerm PTerm
444 | PEq FC PTerm PTerm
445+ | PRewrite FC PTerm PTerm
445 | PPair FC PTerm PTerm
446 | PPair FC PTerm PTerm
446 | PDPair FC PTerm PTerm PTerm
447 | PDPair FC PTerm PTerm PTerm
447 | PAlternative Bool [PTerm] -- True if only one may work
448 | PAlternative Bool [PTerm] -- True if only one may work
@@ -468,6 +469,7 @@ mapPT f t = f (mpt t) where
468 mpt (PLam n t s) = PLam n (mapPT f t) (mapPT f s)
469 mpt (PLam n t s) = PLam n (mapPT f t) (mapPT f s)
469 mpt (PPi p n t s) = PPi p n (mapPT f t) (mapPT f s)
470 mpt (PPi p n t s) = PPi p n (mapPT f t) (mapPT f s)
470 mpt (PLet n ty v s) = PLet n (mapPT f ty) (mapPT f v) (mapPT f s)
471 mpt (PLet n ty v s) = PLet n (mapPT f ty) (mapPT f v) (mapPT f s)
472+ mpt (PRewrite fc t s) = PRewrite fc (mapPT f t) (mapPT f s)
471 mpt (PApp fc t as) = PApp fc (mapPT f t) (map (fmap (mapPT f)) as)
473 mpt (PApp fc t as) = PApp fc (mapPT f t) (map (fmap (mapPT f)) as)
472 mpt (PCase fc c os) = PCase fc (mapPT f c) (map (pmap (mapPT f)) os)
474 mpt (PCase fc c os) = PCase fc (mapPT f c) (map (pmap (mapPT f)) os)
473 mpt (PEq fc l r) = PEq fc (mapPT f l) (mapPT f r)
475 mpt (PEq fc l r) = PEq fc (mapPT f l) (mapPT f r)
@@ -878,6 +880,12 @@ prettyImp impl = prettySe 10
878 prettySe 10 l <+> text "=" $$ nest nestingSize (prettySe 10 r)
880 prettySe 10 l <+> text "=" $$ nest nestingSize (prettySe 10 r)
880 prettySe 10 l <+> text "=" <+> prettySe 10 r
882 prettySe 10 l <+> text "=" <+> prettySe 10 r
883+ prettySe p (PRewrite _ l r) =
885+ if size r > breakingSize then
886+ text "rewrite" <+> prettySe 10 l <+> text "in" $$ nest nestingSize (prettySe 10 r)
888+ text "rewrite" <+> prettySe 10 l <+> text "in" <+> prettySe 10 r
881 prettySe p (PTyped l r) =
889 prettySe p (PTyped l r) =
882 lparen <> prettySe 10 l <+> colon <+> prettySe 10 r <> rparen
890 lparen <> prettySe 10 l <+> colon <+> prettySe 10 r <> rparen
883 prettySe p (PPair _ l r) =
891 prettySe p (PPair _ l r) =
@@ -985,6 +993,7 @@ showImp impl tm = se 10 tm where
985 se p (PTrue _) = "()"
993 se p (PTrue _) = "()"
986 se p (PFalse _) = "_|_"
994 se p (PFalse _) = "_|_"
987 se p (PEq _ l r) = bracket p 2 $ se 10 l ++ " = " ++ se 10 r
995 se p (PEq _ l r) = bracket p 2 $ se 10 l ++ " = " ++ se 10 r
996+ se p (PRewrite _ l r) = bracket p 2 $ "rewrite " ++ se 10 l ++ " in " ++ se 10 r
988 se p (PTyped l r) = "(" ++ se 10 l ++ " : " ++ se 10 r ++ ")"
997 se p (PTyped l r) = "(" ++ se 10 l ++ " : " ++ se 10 r ++ ")"
989 se p (PPair _ l r) = "(" ++ se 10 l ++ ", " ++ se 10 r ++ ")"
998 se p (PPair _ l r) = "(" ++ se 10 l ++ ", " ++ se 10 r ++ ")"
990 se p (PDPair _ l t r) = "(" ++ se 10 l ++ " ** " ++ se 10 r ++ ")"
999 se p (PDPair _ l t r) = "(" ++ se 10 l ++ " ** " ++ se 10 r ++ ")"
@@ -1030,6 +1039,7 @@ instance Sized PTerm where
1030 size (PRefl fc _) = 1
1039 size (PRefl fc _) = 1
1031 size (PResolveTC fc) = 1
1040 size (PResolveTC fc) = 1
1032 size (PEq fc left right) = 1 + size left + size right
1041 size (PEq fc left right) = 1 + size left + size right
1042+ size (PRewrite fc left right) = 1 + size left + size right
1033 size (PPair fc left right) = 1 + size left + size right
1043 size (PPair fc left right) = 1 + size left + size right
1034 size (PDPair fs left ty right) = 1 + size left + size ty + size right
1044 size (PDPair fs left ty right) = 1 + size left + size ty + size right
1035 size (PAlternative a alts) = 1 + size alts
1045 size (PAlternative a alts) = 1 + size alts
@@ -1062,6 +1072,7 @@ allNamesIn tm = nub $ ni [] tm
1062 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
1072 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
1063 ni env (PHidden tm) = ni env tm
1073 ni env (PHidden tm) = ni env tm
1064 ni env (PEq _ l r) = ni env l ++ ni env r
1074 ni env (PEq _ l r) = ni env l ++ ni env r
1075+ ni env (PRewrite _ l r) = ni env l ++ ni env r
1065 ni env (PTyped l r) = ni env l ++ ni env r
1076 ni env (PTyped l r) = ni env l ++ ni env r
1066 ni env (PPair _ l r) = ni env l ++ ni env r
1077 ni env (PPair _ l r) = ni env l ++ ni env r
1067 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
1078 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
@@ -1084,6 +1095,7 @@ namesIn uvars ist tm = nub $ ni [] tm
1084 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
1095 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
1085 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
1096 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
1086 ni env (PEq _ l r) = ni env l ++ ni env r
1097 ni env (PEq _ l r) = ni env l ++ ni env r
1098+ ni env (PRewrite _ l r) = ni env l ++ ni env r
1087 ni env (PTyped l r) = ni env l ++ ni env r
1099 ni env (PTyped l r) = ni env l ++ ni env r
1088 ni env (PPair _ l r) = ni env l ++ ni env r
1100 ni env (PPair _ l r) = ni env l ++ ni env r
1089 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
1101 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
@@ -1107,6 +1119,7 @@ usedNamesIn vars ist tm = nub $ ni [] tm
1107 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
1119 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
1108 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
1120 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
1109 ni env (PEq _ l r) = ni env l ++ ni env r
1121 ni env (PEq _ l r) = ni env l ++ ni env r
1122+ ni env (PRewrite _ l r) = ni env l ++ ni env r
1110 ni env (PTyped l r) = ni env l ++ ni env r
1123 ni env (PTyped l r) = ni env l ++ ni env r
1111 ni env (PPair _ l r) = ni env l ++ ni env r
1124 ni env (PPair _ l r) = ni env l ++ ni env r
1112 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
1125 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r