@@ -80,6 +80,19 @@ data TT n = P NameType n (TT n) -- embed type
8080
8181type EnvTT n = [(n, Binder (TT n))]
8282
83+-- Returns true if V 0 does not occur in the term
84+
85+noOccurrence :: TT n -> Bool
86+noOccurrence t = no' 0 t
87+ where
88+ no' i (V x) = not (i == x)
89+ no' i (Bind n b sc) = noB' i b && no' (i+1) sc
90+ where noB' i (Let t v) = no' i t && no' i v
91+ noB' i (Guess t v) = no' i t && no' i v
92+ noB' i b = no' i (binderTy b)
93+ no' i (App f a) = no' i f && no' i a
94+ no' i _ = True
95+
8396bindEnv :: EnvTT n -> TT n -> TT n
8497bindEnv [] tm = tm
8598bindEnv ((n, b):bs) tm = Bind n b (bindEnv bs tm)
@@ -107,6 +120,8 @@ showEnv' env t dbg = se 10 env t where
107120 se p env (V i) | i < length env = (show $ fst $ env!!i) ++
108121 if dbg then "{" ++ show i ++ "}" else ""
109122 | otherwise = "!!V " ++ show i ++ "!!"
123+ se p env (Bind n b@(Pi t) sc)
124+ | noOccurrence sc = bracket p 2 $ se 10 env t ++ " -> " ++ se 10 ((n,b):env) sc
110125 se p env (Bind n b sc) = bracket p 2 $ sb env n b ++ se 10 ((n,b):env) sc
111126 se p env (App f a) = bracket p 1 $ se 1 env f ++ " " ++ se 0 env a
112127 se p env (Set i) = "Set" ++ show i