@@ -28,7 +28,7 @@ import qualified Control.Monad.Trans.Class as Trans (lift)
29import Data.Data (Data)
29import Data.Data (Data)
30import Data.Function (on)
30import Data.Function (on)
31−import Data.Generics.Uniplate.Data (universe)
31+import Data.Generics.Uniplate.Data (universe, children)
32import Data.List hiding (group)
32import Data.List hiding (group)
33import Data.Char
33import Data.Char
34import qualified Data.Map.Strict as M
34import qualified Data.Map.Strict as M
@@ -2177,160 +2177,183 @@ getPArity _ = 0
2177-- Return all names, free or globally bound, in the given term.
2177-- Return all names, free or globally bound, in the given term.
2179allNamesIn :: PTerm -> [Name]
2179allNamesIn :: PTerm -> [Name]
2180−allNamesIn tm = nub $ ni [] tm
2180+allNamesIn tm = nub $ ni 0 [] tm
2181 where -- TODO THINK added niTacImp, but is it right?
2181 where -- TODO THINK added niTacImp, but is it right?
2182− ni env (PRef _ _ n)
2182+ ni 0 env (PRef _ _ n)
2183 | not (n `elem` env) = [n]
2183 | not (n `elem` env) = [n]
2184− ni env (PPatvar _ n) = [n]
2184+ ni 0 env (PPatvar _ n) = [n]
2185− ni env (PApp _ f as) = ni env f ++ concatMap (ni env) (map getTm as)
2185+ ni 0 env (PApp _ f as) = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2186− ni env (PAppBind _ f as) = ni env f ++ concatMap (ni env) (map getTm as)
2186+ ni 0 env (PAppBind _ f as) = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2187− ni env (PCase _ c os) = ni env c ++ concatMap (ni env) (map snd os)
2187+ ni 0 env (PCase _ c os) = ni 0 env c ++ concatMap (ni 0 env) (map snd os)
2188− ni env (PIfThenElse _ c t f) = ni env c ++ ni env t ++ ni env f
2188+ ni 0 env (PIfThenElse _ c t f) = ni 0 env c ++ ni 0 env t ++ ni 0 env f
2189− ni env (PLam fc n _ ty sc) = ni env ty ++ ni (n:env) sc
2189+ ni 0 env (PLam fc n _ ty sc) = ni 0 env ty ++ ni 0 (n:env) sc
2190− ni env (PPi p n _ ty sc) = niTacImp env p ++ ni env ty ++ ni (n:env) sc
2190+ ni 0 env (PPi p n _ ty sc) = niTacImp 0 env p ++ ni 0 env ty ++ ni 0 (n:env) sc
2191− ni env (PLet _ n _ ty val sc) = ni env ty ++ ni env val ++ ni (n:env) sc
2191+ ni 0 env (PLet _ n _ ty val sc) = ni 0 env ty ++ ni 0 env val ++ ni 0 (n:env) sc
2192− ni env (PHidden tm) = ni env tm
2192+ ni 0 env (PHidden tm) = ni 0 env tm
2193− ni env (PRewrite _ l r _) = ni env l ++ ni env r
2193+ ni 0 env (PRewrite _ l r _) = ni 0 env l ++ ni 0 env r
2194− ni env (PTyped l r) = ni env l ++ ni env r
2194+ ni 0 env (PTyped l r) = ni 0 env l ++ ni 0 env r
2195− ni env (PPair _ _ _ l r) = ni env l ++ ni env r
2195+ ni 0 env (PPair _ _ _ l r) = ni 0 env l ++ ni 0 env r
2196− ni env (PDPair _ _ _ (PRef _ _ n) Placeholder r) = n : ni env r
2196+ ni 0 env (PDPair _ _ _ (PRef _ _ n) Placeholder r) = n : ni 0 env r
2197− ni env (PDPair _ _ _ (PRef _ _ n) t r) = ni env t ++ ni (n:env) r
2197+ ni 0 env (PDPair _ _ _ (PRef _ _ n) t r) = ni 0 env t ++ ni 0 (n:env) r
2198− ni env (PDPair _ _ _ l t r) = ni env l ++ ni env t ++ ni env r
2198+ ni 0 env (PDPair _ _ _ l t r) = ni 0 env l ++ ni 0 env t ++ ni 0 env r
2199− ni env (PAlternative ns a ls) = concatMap (ni env) ls
2199+ ni 0 env (PAlternative ns a ls) = concatMap (ni 0 env) ls
2200− ni env (PUnifyLog tm) = ni env tm
2200+ ni 0 env (PUnifyLog tm) = ni 0 env tm
2201− ni env (PDisamb _ tm) = ni env tm
2201+ ni 0 env (PDisamb _ tm) = ni 0 env tm
2202− ni env (PNoImplicits tm) = ni env tm
2202+ ni 0 env (PNoImplicits tm) = ni 0 env tm
2204−
2204+ ni i env (PQuasiquote tm ty) = ni (i+1) env tm ++ maybe [] (ni i env) ty
2205+ ni i env (PUnquote tm) = ni (i - 1) env tm
2207+ ni i env tm = concatMap (ni i env) (children tm)
2205− niTacImp env (TacImp _ _ scr) = ni env scr
2209+ niTacImp i env (TacImp _ _ scr) = ni i env scr
2206− niTacImp _ _ = []
2210+ niTacImp _ _ _ = []
2209-- Return all names defined in binders in the given term
2213-- Return all names defined in binders in the given term
2210boundNamesIn :: PTerm -> [Name]
2214boundNamesIn :: PTerm -> [Name]
2211−boundNamesIn tm = S.toList (ni S.empty tm)
2215+boundNamesIn tm = S.toList (ni 0 S.empty tm)
2212 where -- TODO THINK Added niTacImp, but is it right?
2216 where -- TODO THINK Added niTacImp, but is it right?
2217+ ni :: Int -> S.Set Name -> PTerm -> S.Set Name
2213− ni set (PApp _ f as) = niTms (ni set f) (map getTm as)
2218+ ni 0 set (PApp _ f as) = niTms 0 (ni 0 set f) (map getTm as)
2214− ni set (PAppBind _ f as) = niTms (ni set f) (map getTm as)
2219+ ni 0 set (PAppBind _ f as) = niTms 0 (ni 0 set f) (map getTm as)
2215− ni set (PCase _ c os) = niTms (ni set c) (map snd os)
2220+ ni 0 set (PCase _ c os) = niTms 0 (ni 0 set c) (map snd os)
2216− ni set (PIfThenElse _ c t f) = niTms set [c, t, f]
2221+ ni 0 set (PIfThenElse _ c t f) = niTms 0 set [c, t, f]
2217− ni set (PLam fc n _ ty sc) = S.insert n $ ni (ni set ty) sc
2222+ ni 0 set (PLam fc n _ ty sc) = S.insert n $ ni 0 (ni 0 set ty) sc
2218− ni set (PLet fc n nfc ty val sc) = S.insert n $ ni (ni (ni set ty) val) sc
2223+ ni 0 set (PLet fc n nfc ty val sc) = S.insert n $ ni 0 (ni 0 (ni 0 set ty) val) sc
2219− ni set (PPi p n _ ty sc) = niTacImp (S.insert n $ ni (ni set ty) sc) p
2224+ ni 0 set (PPi p n _ ty sc) = niTacImp 0 (S.insert n $ ni 0 (ni 0 set ty) sc) p
2220− ni set (PRewrite _ l r _) = ni (ni set l) r
2225+ ni 0 set (PRewrite _ l r _) = ni 0 (ni 0 set l) r
2221− ni set (PTyped l r) = ni (ni set l) r
2226+ ni 0 set (PTyped l r) = ni 0 (ni 0 set l) r
2222− ni set (PPair _ _ _ l r) = ni (ni set l) r
2227+ ni 0 set (PPair _ _ _ l r) = ni 0 (ni 0 set l) r
2223− ni set (PDPair _ _ _ (PRef _ _ n) t r) = ni (ni set t) r
2228+ ni 0 set (PDPair _ _ _ (PRef _ _ n) t r) = ni 0 (ni 0 set t) r
2224− ni set (PDPair _ _ _ l t r) = ni (ni (ni set l) t) r
2229+ ni 0 set (PDPair _ _ _ l t r) = ni 0 (ni 0 (ni 0 set l) t) r
2225− ni set (PAlternative ns a as) = niTms set as
2230+ ni 0 set (PAlternative ns a as) = niTms 0 set as
2226− ni set (PHidden tm) = ni set tm
2231+ ni 0 set (PHidden tm) = ni 0 set tm
2227− ni set (PUnifyLog tm) = ni set tm
2232+ ni 0 set (PUnifyLog tm) = ni 0 set tm
2228− ni set (PDisamb _ tm) = ni set tm
2233+ ni 0 set (PDisamb _ tm) = ni 0 set tm
2229− ni set (PNoImplicits tm) = ni set tm
2234+ ni 0 set (PNoImplicits tm) = ni 0 set tm
2230− ni set _ = set
2235+
2231−
2236+ ni i set (PQuasiquote tm ty) = ni (i + 1) set tm `S.union` maybe S.empty (ni i set) ty
2237+ ni i set (PUnquote tm) = ni (i - 1) set tm
2239+ ni i set tm = foldr S.union set (map (ni i set) (children tm))
2241+ niTms :: Int -> S.Set Name -> [PTerm] -> S.Set Name
2232− niTms set [] = set
2242+ niTms i set [] = set
2233− niTms set (x : xs) = niTms (ni set x) xs
2243+ niTms i set (x : xs) = niTms i (ni i set x) xs
2235− niTacImp set (TacImp _ _ scr) = ni set scr
2245+ niTacImp i set (TacImp _ _ scr) = ni i set scr
2236− niTacImp set _ = set
2246+ niTacImp i set _ = set
2238-- Return names which are valid implicits in the given term (type).
2248-- Return names which are valid implicits in the given term (type).
2239implicitNamesIn :: [Name] -> IState -> PTerm -> [Name]
2249implicitNamesIn :: [Name] -> IState -> PTerm -> [Name]
2240−implicitNamesIn uvars ist tm = nub $ ni [] tm
2250+implicitNamesIn uvars ist tm = nub $ ni 0 [] tm
2242− ni env (PRef _ _ n)
2252+ ni 0 env (PRef _ _ n)
2243 | not (n `elem` env)
2253 | not (n `elem` env)
2244 = case lookupTy n (tt_ctxt ist) of
2254 = case lookupTy n (tt_ctxt ist) of
2245 [] -> [n]
2255 [] -> [n]
2246 _ -> if n `elem` uvars then [n] else []
2256 _ -> if n `elem` uvars then [n] else []
2247− ni env (PApp _ f@(PRef _ _ n) as)
2257+ ni 0 env (PApp _ f@(PRef _ _ n) as)
2248− | n `elem` uvars = ni env f ++ concatMap (ni env) (map getTm as)
2258+ | n `elem` uvars = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2249− | otherwise = concatMap (ni env) (map getTm as)
2259+ | otherwise = concatMap (ni 0 env) (map getTm as)
2250− ni env (PApp _ f as) = ni env f ++ concatMap (ni env) (map getTm as)
2260+ ni 0 env (PApp _ f as) = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2251− ni env (PAppBind _ f as) = ni env f ++ concatMap (ni env) (map getTm as)
2261+ ni 0 env (PAppBind _ f as) = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2252− ni env (PCase _ c os) = ni env c ++
2262+ ni 0 env (PCase _ c os) = ni 0 env c ++
2253 -- names in 'os', not counting the names bound in the cases
2263 -- names in 'os', not counting the names bound in the cases
2254− (nub (concatMap (ni env) (map snd os))
2264+ (nub (concatMap (ni 0 env) (map snd os))
2255− \\ nub (concatMap (ni env) (map fst os)))
2265+ \\ nub (concatMap (ni 0 env) (map fst os)))
2256− ni env (PIfThenElse _ c t f) = concatMap (ni env) [c, t, f]
2266+ ni 0 env (PIfThenElse _ c t f) = concatMap (ni 0 env) [c, t, f]
2257− ni env (PLam fc n _ ty sc) = ni env ty ++ ni (n:env) sc
2267+ ni 0 env (PLam fc n _ ty sc) = ni 0 env ty ++ ni 0 (n:env) sc
2258− ni env (PPi p n _ ty sc) = ni env ty ++ ni (n:env) sc
2268+ ni 0 env (PPi p n _ ty sc) = ni 0 env ty ++ ni 0 (n:env) sc
2259− ni env (PRewrite _ l r _) = ni env l ++ ni env r
2269+ ni 0 env (PRewrite _ l r _) = ni 0 env l ++ ni 0 env r
2260− ni env (PTyped l r) = ni env l ++ ni env r
2270+ ni 0 env (PTyped l r) = ni 0 env l ++ ni 0 env r
2261− ni env (PPair _ _ _ l r) = ni env l ++ ni env r
2271+ ni 0 env (PPair _ _ _ l r) = ni 0 env l ++ ni 0 env r
2262− ni env (PDPair _ _ _ (PRef _ _ n) t r) = ni env t ++ ni (n:env) r
2272+ ni 0 env (PDPair _ _ _ (PRef _ _ n) t r) = ni 0 env t ++ ni 0 (n:env) r
2263− ni env (PDPair _ _ _ l t r) = ni env l ++ ni env t ++ ni env r
2273+ ni 0 env (PDPair _ _ _ l t r) = ni 0 env l ++ ni 0 env t ++ ni 0 env r
2264− ni env (PAlternative ns a as) = concatMap (ni env) as
2274+ ni 0 env (PAlternative ns a as) = concatMap (ni 0 env) as
2265− ni env (PHidden tm) = ni env tm
2275+ ni 0 env (PHidden tm) = ni 0 env tm
2266− ni env (PUnifyLog tm) = ni env tm
2276+ ni 0 env (PUnifyLog tm) = ni 0 env tm
2267− ni env (PDisamb _ tm) = ni env tm
2277+ ni 0 env (PDisamb _ tm) = ni 0 env tm
2268− ni env (PNoImplicits tm) = ni env tm
2278+ ni 0 env (PNoImplicits tm) = ni 0 env tm
2280+ ni i env (PQuasiquote tm ty) = ni (i + 1) env tm ++
2281+ maybe [] (ni i env) ty
2282+ ni i env (PUnquote tm) = ni (i - 1) env tm
2284+ ni i env tm = concatMap (ni i env) (children tm)
2271-- Return names which are free in the given term.
2286-- Return names which are free in the given term.
2272namesIn :: [(Name, PTerm)] -> IState -> PTerm -> [Name]
2287namesIn :: [(Name, PTerm)] -> IState -> PTerm -> [Name]
2273−namesIn uvars ist tm = nub $ ni [] tm
2288+namesIn uvars ist tm = nub $ ni 0 [] tm
2275− ni env (PRef _ _ n)
2290+ ni 0 env (PRef _ _ n)
2276 | not (n `elem` env)
2291 | not (n `elem` env)
2277 = case lookupTy n (tt_ctxt ist) of
2292 = case lookupTy n (tt_ctxt ist) of
2278 [] -> [n]
2293 [] -> [n]
2279 _ -> if n `elem` (map fst uvars) then [n] else []
2294 _ -> if n `elem` (map fst uvars) then [n] else []
2280− ni env (PApp _ f as) = ni env f ++ concatMap (ni env) (map getTm as)
2295+ ni 0 env (PApp _ f as) = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2281− ni env (PAppBind _ f as) = ni env f ++ concatMap (ni env) (map getTm as)
2296+ ni 0 env (PAppBind _ f as) = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2282− ni env (PCase _ c os) = ni env c ++
2297+ ni 0 env (PCase _ c os) = ni 0 env c ++
2283 -- names in 'os', not counting the names bound in the cases
2298 -- names in 'os', not counting the names bound in the cases
2284− (nub (concatMap (ni env) (map snd os))
2299+ (nub (concatMap (ni 0 env) (map snd os))
2285− \\ nub (concatMap (ni env) (map fst os)))
2300+ \\ nub (concatMap (ni 0 env) (map fst os)))
2286− ni env (PIfThenElse _ c t f) = concatMap (ni env) [c, t, f]
2301+ ni 0 env (PIfThenElse _ c t f) = concatMap (ni 0 env) [c, t, f]
2287− ni env (PLam fc n nfc ty sc) = ni env ty ++ ni (n:env) sc
2302+ ni 0 env (PLam fc n nfc ty sc) = ni 0 env ty ++ ni 0 (n:env) sc
2288− ni env (PPi p n _ ty sc) = niTacImp env p ++ ni env ty ++ ni (n:env) sc
2303+ ni 0 env (PPi p n _ ty sc) = niTacImp 0 env p ++ ni 0 env ty ++ ni 0 (n:env) sc
2289− ni env (PRewrite _ l r _) = ni env l ++ ni env r
2304+ ni 0 env (PRewrite _ l r _) = ni 0 env l ++ ni 0 env r
2290− ni env (PTyped l r) = ni env l ++ ni env r
2305+ ni 0 env (PTyped l r) = ni 0 env l ++ ni 0 env r
2291− ni env (PPair _ _ _ l r) = ni env l ++ ni env r
2306+ ni 0 env (PPair _ _ _ l r) = ni 0 env l ++ ni 0 env r
2292− ni env (PDPair _ _ _ (PRef _ _ n) t r) = ni env t ++ ni (n:env) r
2307+ ni 0 env (PDPair _ _ _ (PRef _ _ n) t r) = ni 0 env t ++ ni 0 (n:env) r
2293− ni env (PDPair _ _ _ l t r) = ni env l ++ ni env t ++ ni env r
2308+ ni 0 env (PDPair _ _ _ l t r) = ni 0 env l ++ ni 0 env t ++ ni 0 env r
2294− ni env (PAlternative ns a as) = concatMap (ni env) as
2309+ ni 0 env (PAlternative ns a as) = concatMap (ni 0 env) as
2295− ni env (PHidden tm) = ni env tm
2310+ ni 0 env (PHidden tm) = ni 0 env tm
2296− ni env (PUnifyLog tm) = ni env tm
2311+ ni 0 env (PUnifyLog tm) = ni 0 env tm
2297− ni env (PDisamb _ tm) = ni env tm
2312+ ni 0 env (PDisamb _ tm) = ni 0 env tm
2298− ni env (PNoImplicits tm) = ni env tm
2313+ ni 0 env (PNoImplicits tm) = ni 0 env tm
2300−
2315+ ni i env (PQuasiquote tm ty) = ni (i + 1) env tm ++ maybe [] (ni i env) ty
2316+ ni i env (PUnquote tm) = ni (i - 1) env tm
2318+ ni i env tm = concatMap (ni i env) (children tm)
2301− niTacImp env (TacImp _ _ scr) = ni env scr
2320+ niTacImp i env (TacImp _ _ scr) = ni i env scr
2302− niTacImp _ _ = []
2321+ niTacImp _ _ _ = []
2304-- Return which of the given names are used in the given term.
2323-- Return which of the given names are used in the given term.
2306usedNamesIn :: [Name] -> IState -> PTerm -> [Name]
2325usedNamesIn :: [Name] -> IState -> PTerm -> [Name]
2307−usedNamesIn vars ist tm = nub $ ni [] tm
2326+usedNamesIn vars ist tm = nub $ ni 0 [] tm
2308 where -- TODO THINK added niTacImp, but is it right?
2327 where -- TODO THINK added niTacImp, but is it right?
2309− ni env (PRef _ _ n)
2328+ ni 0 env (PRef _ _ n)
2310 | n `elem` vars && not (n `elem` env)
2329 | n `elem` vars && not (n `elem` env)
2311 = case lookupDefExact n (tt_ctxt ist) of
2330 = case lookupDefExact n (tt_ctxt ist) of
2312 Nothing -> [n]
2331 Nothing -> [n]
2314− ni env (PApp _ f as) = ni env f ++ concatMap (ni env) (map getTm as)
2333+ ni 0 env (PApp _ f as) = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2315− ni env (PAppBind _ f as) = ni env f ++ concatMap (ni env) (map getTm as)
2334+ ni 0 env (PAppBind _ f as) = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2316− ni env (PCase _ c os) = ni env c ++ concatMap (ni env) (map snd os)
2335+ ni 0 env (PCase _ c os) = ni 0 env c ++ concatMap (ni 0 env) (map snd os)
2317− ni env (PIfThenElse _ c t f) = concatMap (ni env) [c, t, f]
2336+ ni 0 env (PIfThenElse _ c t f) = concatMap (ni 0 env) [c, t, f]
2318− ni env (PLam fc n _ ty sc) = ni env ty ++ ni (n:env) sc
2337+ ni 0 env (PLam fc n _ ty sc) = ni 0 env ty ++ ni 0 (n:env) sc
2319− ni env (PPi p n _ ty sc) = niTacImp env p ++ ni env ty ++ ni (n:env) sc
2338+ ni 0 env (PPi p n _ ty sc) = niTacImp 0 env p ++ ni 0 env ty ++ ni 0 (n:env) sc
2320− ni env (PRewrite _ l r _) = ni env l ++ ni env r
2339+ ni 0 env (PRewrite _ l r _) = ni 0 env l ++ ni 0 env r
2321− ni env (PTyped l r) = ni env l ++ ni env r
2340+ ni 0 env (PTyped l r) = ni 0 env l ++ ni 0 env r
2322− ni env (PPair _ _ _ l r) = ni env l ++ ni env r
2341+ ni 0 env (PPair _ _ _ l r) = ni 0 env l ++ ni 0 env r
2323− ni env (PDPair _ _ _ (PRef _ _ n) t r) = ni env t ++ ni (n:env) r
2342+ ni 0 env (PDPair _ _ _ (PRef _ _ n) t r) = ni 0 env t ++ ni 0 (n:env) r
2324− ni env (PDPair _ _ _ l t r) = ni env l ++ ni env t ++ ni env r
2343+ ni 0 env (PDPair _ _ _ l t r) = ni 0 env l ++ ni 0 env t ++ ni 0 env r
2325− ni env (PAlternative ns a as) = concatMap (ni env) as
2344+ ni 0 env (PAlternative ns a as) = concatMap (ni 0 env) as
2326− ni env (PHidden tm) = ni env tm
2345+ ni 0 env (PHidden tm) = ni 0 env tm
2327− ni env (PUnifyLog tm) = ni env tm
2346+ ni 0 env (PUnifyLog tm) = ni 0 env tm
2328− ni env (PDisamb _ tm) = ni env tm
2347+ ni 0 env (PDisamb _ tm) = ni 0 env tm
2329− ni env (PNoImplicits tm) = ni env tm
2348+ ni 0 env (PNoImplicits tm) = ni 0 env tm
2331−
2350+ ni i env (PQuasiquote tm ty) = ni (i + 1) env tm ++ maybe [] (ni i env) ty
2351+ ni i env (PUnquote tm) = ni (i - 1) env tm
2353+ ni i env tm = concatMap (ni i env) (children tm)
2332− niTacImp env (TacImp _ _ scr) = ni env scr
2355+ niTacImp i env (TacImp _ _ scr) = ni i env scr
2333− niTacImp _ _ = []
2356+ niTacImp _ _ _ = []
2335-- Return the list of inaccessible (= dotted) positions for a name.
2358-- Return the list of inaccessible (= dotted) positions for a name.
2336getErasureInfo :: IState -> Name -> [Int]
2359getErasureInfo :: IState -> Name -> [Int]