@@ -1695,6 +1695,12 @@ mkUniqueNames env tm = evalState (mkUniq tm) env where
1695 mkUniqA arg = do t' <- mkUniq (getTm arg)
1695 mkUniqA arg = do t' <- mkUniq (getTm arg)
1696 return (arg { getTm = t' })
1696 return (arg { getTm = t' })
1698+ -- Initialise the unique name with the environment length (so we're not
1699+ -- looking for too long...)
1700+ initN (UN n) l = UN $ txt (str n ++ show l)
1701+ initN (MN i s) l = MN (i+l) s
1698 -- FIXME: Probably ought to do this for completeness! It's fine as
1704 -- FIXME: Probably ought to do this for completeness! It's fine as
1699 -- long as there are no bindings inside tactics though.
1705 -- long as there are no bindings inside tactics though.
1700 mkUniqT tac = return tac
1706 mkUniqT tac = return tac
@@ -1704,7 +1710,8 @@ mkUniqueNames env tm = evalState (mkUniq tm) env where
1704 = do env <- get
1710 = do env <- get
1705 (n', sc') <-
1711 (n', sc') <-
1706 if n `elem` env
1712 if n `elem` env
1707− then do let n' = uniqueName n (env ++ inScope)
1713+ then do let n' = uniqueName (initN n (length env))
1708 return (n', shadow n n' sc)
1715 return (n', shadow n n' sc)
1709 else return (n, sc)
1716 else return (n, sc)
1710 put (n' : env)
1717 put (n' : env)
@@ -1715,7 +1722,8 @@ mkUniqueNames env tm = evalState (mkUniq tm) env where
1715 = do env <- get
1722 = do env <- get
1716 (n', sc') <-
1723 (n', sc') <-
1717 if n `elem` env
1724 if n `elem` env
1718− then do let n' = uniqueName n (env ++ inScope)
1725+ then do let n' = uniqueName (initN n (length env))
1719 return (n', shadow n n' sc)
1727 return (n', shadow n n' sc)
1720 else return (n, sc)
1728 else return (n, sc)
1721 put (n' : env)
1729 put (n' : env)
@@ -1726,7 +1734,8 @@ mkUniqueNames env tm = evalState (mkUniq tm) env where
1726 = do env <- get
1734 = do env <- get
1727 (n', sc') <-
1735 (n', sc') <-
1728 if n `elem` env
1736 if n `elem` env
1729− then do let n' = uniqueName n (env ++ inScope)
1737+ then do let n' = uniqueName (initN n (length env))
1730 return (n', shadow n n' sc)
1739 return (n', shadow n n' sc)
1731 else return (n, sc)
1740 else return (n, sc)
1732 put (n' : env)
1741 put (n' : env)