@@ -442,6 +442,7 @@ data PTerm = PQuote Raw
442442 | PRefl FC PTerm
443443 | PResolveTC FC
444444 | PEq FC PTerm PTerm
445+ | PRewrite FC PTerm PTerm
445446 | PPair FC PTerm PTerm
446447 | PDPair FC PTerm PTerm PTerm
447448 | PAlternative Bool [PTerm] -- True if only one may work
@@ -468,6 +469,7 @@ mapPT f t = f (mpt t) where
468469 mpt (PLam n t s) = PLam n (mapPT f t) (mapPT f s)
469470 mpt (PPi p n t s) = PPi p n (mapPT f t) (mapPT f s)
470471 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)
471473 mpt (PApp fc t as) = PApp fc (mapPT f t) (map (fmap (mapPT f)) as)
472474 mpt (PCase fc c os) = PCase fc (mapPT f c) (map (pmap (mapPT f)) os)
473475 mpt (PEq fc l r) = PEq fc (mapPT f l) (mapPT f r)
@@ -878,6 +880,12 @@ prettyImp impl = prettySe 10
878880 prettySe 10 l <+> text "=" $$ nest nestingSize (prettySe 10 r)
879881 else
880882 prettySe 10 l <+> text "=" <+> prettySe 10 r
883+ prettySe p (PRewrite _ l r) =
884+ bracket p 2 $
885+ if size r > breakingSize then
886+ text "rewrite" <+> prettySe 10 l <+> text "in" $$ nest nestingSize (prettySe 10 r)
887+ else
888+ text "rewrite" <+> prettySe 10 l <+> text "in" <+> prettySe 10 r
881889 prettySe p (PTyped l r) =
882890 lparen <> prettySe 10 l <+> colon <+> prettySe 10 r <> rparen
883891 prettySe p (PPair _ l r) =
@@ -985,6 +993,7 @@ showImp impl tm = se 10 tm where
985993 se p (PTrue _) = "()"
986994 se p (PFalse _) = "_|_"
987995 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
988997 se p (PTyped l r) = "(" ++ se 10 l ++ " : " ++ se 10 r ++ ")"
989998 se p (PPair _ l r) = "(" ++ se 10 l ++ ", " ++ se 10 r ++ ")"
990999 se p (PDPair _ l t r) = "(" ++ se 10 l ++ " ** " ++ se 10 r ++ ")"
@@ -1030,6 +1039,7 @@ instance Sized PTerm where
10301039 size (PRefl fc _) = 1
10311040 size (PResolveTC fc) = 1
10321041 size (PEq fc left right) = 1 + size left + size right
1042+ size (PRewrite fc left right) = 1 + size left + size right
10331043 size (PPair fc left right) = 1 + size left + size right
10341044 size (PDPair fs left ty right) = 1 + size left + size ty + size right
10351045 size (PAlternative a alts) = 1 + size alts
@@ -1062,6 +1072,7 @@ allNamesIn tm = nub $ ni [] tm
10621072 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
10631073 ni env (PHidden tm) = ni env tm
10641074 ni env (PEq _ l r) = ni env l ++ ni env r
1075+ ni env (PRewrite _ l r) = ni env l ++ ni env r
10651076 ni env (PTyped l r) = ni env l ++ ni env r
10661077 ni env (PPair _ l r) = ni env l ++ ni env r
10671078 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
10841095 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
10851096 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
10861097 ni env (PEq _ l r) = ni env l ++ ni env r
1098+ ni env (PRewrite _ l r) = ni env l ++ ni env r
10871099 ni env (PTyped l r) = ni env l ++ ni env r
10881100 ni env (PPair _ l r) = ni env l ++ ni env r
10891101 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
11071119 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
11081120 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
11091121 ni env (PEq _ l r) = ni env l ++ ni env r
1122+ ni env (PRewrite _ l r) = ni env l ++ ni env r
11101123 ni env (PTyped l r) = ni env l ++ ni env r
11111124 ni env (PPair _ l r) = ni env l ++ ni env r
11121125 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r