| NCic.Appl (hd::tl) ->
        aux (List.length tl) depth hd @ 
        List.flatten (List.map (aux 0 (depth+1)) tl)
-    | NCic.Lambda _ | NCic.Prod _ -> [Variable]
+    | NCic.Lambda _ -> [Variable]
         (* I think we should CicSubstitution.subst Implicit t *)
     | NCic.LetIn _ -> [Variable] (* z-reduce? *)
     | NCic.Meta _ | NCic.Implicit _ -> assert (arity = 0); [Variable]
     | NCic.Sort (NCic.Prop) -> assert (arity=0); [Proposition]
     | NCic.Sort _ -> assert (arity=0); [Datatype]
     | NCic.Const (u) -> [Constant (u, arity)]
-    | NCic.Match _ -> [Dead]
+    (* Prod is used for coercions to funclass, ?->?       *)
+    (*  so it should not be unifiable with any other term *)
+    | NCic.Match _ | NCic.Prod _ -> [Dead] 
   in 
   aux 0 0 t
 ;;