@@ -375,7 +375,10 @@ data PDecl' t
375375 | PMutual FC [PDecl' t] -- ^ Mutual block
376376 | PDirective (Idris ()) -- ^ Compiler directive. The parser inserts the corresponding action in the Idris monad.
377377 | PProvider SyntaxInfo FC Name t t -- ^ Type provider. The first t is the type, the second is the term
378− deriving Functor
378+ | PReflection FC Name -- type to reflect to
379+ t -- type of variables
380+ [PClause' t] -- ^ Pattern clauses
381+ deriving Functor
379382{-!
380383deriving instance Binary PDecl'
381384!-}
@@ -511,7 +514,7 @@ data PTerm = PQuote Raw
511514 | PRefl FC PTerm
512515 | PResolveTC FC
513516 | PEq FC PTerm PTerm
514− | PRewrite FC PTerm PTerm
517+ | PRewrite FC PTerm PTerm (Maybe PTerm)
515518 | PPair FC PTerm PTerm
516519 | PDPair FC PTerm PTerm PTerm
517520 | PAlternative Bool [PTerm] -- True if only one may work
@@ -539,7 +542,8 @@ mapPT f t = f (mpt t) where
539542 mpt (PLam n t s) = PLam n (mapPT f t) (mapPT f s)
540543 mpt (PPi p n t s) = PPi p n (mapPT f t) (mapPT f s)
541544 mpt (PLet n ty v s) = PLet n (mapPT f ty) (mapPT f v) (mapPT f s)
542− mpt (PRewrite fc t s) = PRewrite fc (mapPT f t) (mapPT f s)
545+ mpt (PRewrite fc t s g) = PRewrite fc (mapPT f t) (mapPT f s)
546+ (fmap (mapPT f) g)
543547 mpt (PApp fc t as) = PApp fc (mapPT f t) (map (fmap (mapPT f)) as)
544548 mpt (PCase fc c os) = PCase fc (mapPT f c) (map (pmap (mapPT f)) os)
545549 mpt (PEq fc l r) = PEq fc (mapPT f l) (mapPT f r)
@@ -557,6 +561,7 @@ mapPT f t = f (mpt t) where
557561
558562data PTactic' t = Intro [Name] | Intros | Focus Name
559563 | Refine Name [Bool] | Rewrite t
564+ | Equiv t
560565 | MatchRefine Name
561566 | LetTac Name t | LetTacTy Name t t
562567 | Exact t | Compute | Trivial
@@ -964,7 +969,7 @@ prettyImp impl = prettySe 10
964969 prettySe 10 l <+> text "=" $$ nest nestingSize (prettySe 10 r)
965970 else
966971 prettySe 10 l <+> text "=" <+> prettySe 10 r
967− prettySe p (PRewrite _ l r) =
972+ prettySe p (PRewrite _ l r _) =
968973 bracket p 2 $
969974 if size r > breakingSize then
970975 text "rewrite" <+> prettySe 10 l <+> text "in" $$ nest nestingSize (prettySe 10 r)
@@ -1081,7 +1086,7 @@ showImp impl tm = se 10 tm where
10811086 se p (PTrue _) = "()"
10821087 se p (PFalse _) = "_|_"
10831088 se p (PEq _ l r) = bracket p 2 $ se 10 l ++ " = " ++ se 10 r
1084− se p (PRewrite _ l r) = bracket p 2 $ "rewrite " ++ se 10 l ++ " in " ++ se 10 r
1089+ se p (PRewrite _ l r _) = bracket p 2 $ "rewrite " ++ se 10 l ++ " in " ++ se 10 r
10851090 se p (PTyped l r) = "(" ++ se 10 l ++ " : " ++ se 10 r ++ ")"
10861091 se p (PPair _ l r) = "(" ++ se 10 l ++ ", " ++ se 10 r ++ ")"
10871092 se p (PDPair _ l t r) = "(" ++ se 10 l ++ " ** " ++ se 10 r ++ ")"
@@ -1159,7 +1164,7 @@ instance Sized PTerm where
11591164 size (PRefl fc _) = 1
11601165 size (PResolveTC fc) = 1
11611166 size (PEq fc left right) = 1 + size left + size right
1162− size (PRewrite fc left right) = 1 + size left + size right
1167+ size (PRewrite fc left right _) = 1 + size left + size right
11631168 size (PPair fc left right) = 1 + size left + size right
11641169 size (PDPair fs left ty right) = 1 + size left + size ty + size right
11651170 size (PAlternative a alts) = 1 + size alts
@@ -1193,7 +1198,7 @@ allNamesIn tm = nub $ ni [] tm
11931198 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
11941199 ni env (PHidden tm) = ni env tm
11951200 ni env (PEq _ l r) = ni env l ++ ni env r
1196− ni env (PRewrite _ l r) = ni env l ++ ni env r
1201+ ni env (PRewrite _ l r _) = ni env l ++ ni env r
11971202 ni env (PTyped l r) = ni env l ++ ni env r
11981203 ni env (PPair _ l r) = ni env l ++ ni env r
11991204 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
@@ -1217,7 +1222,7 @@ namesIn uvars ist tm = nub $ ni [] tm
12171222 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
12181223 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
12191224 ni env (PEq _ l r) = ni env l ++ ni env r
1220− ni env (PRewrite _ l r) = ni env l ++ ni env r
1225+ ni env (PRewrite _ l r _) = ni env l ++ ni env r
12211226 ni env (PTyped l r) = ni env l ++ ni env r
12221227 ni env (PPair _ l r) = ni env l ++ ni env r
12231228 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r
@@ -1242,7 +1247,7 @@ usedNamesIn vars ist tm = nub $ ni [] tm
12421247 ni env (PLam n ty sc) = ni env ty ++ ni (n:env) sc
12431248 ni env (PPi _ n ty sc) = ni env ty ++ ni (n:env) sc
12441249 ni env (PEq _ l r) = ni env l ++ ni env r
1245− ni env (PRewrite _ l r) = ni env l ++ ni env r
1250+ ni env (PRewrite _ l r _) = ni env l ++ ni env r
12461251 ni env (PTyped l r) = ni env l ++ ni env r
12471252 ni env (PPair _ l r) = ni env l ++ ni env r
12481253 ni env (PDPair _ (PRef _ n) t r) = ni env t ++ ni (n:env) r