let body = generalize psno predicate in
clear_absts 0 psno body
-let get_clears c p xet =
+let get_clears c p xtypes =
let meta = C.Implicit None in
- let rec aux c names p et = function
+ let rec aux c names p it et = function
| [] ->
List.rev c, List.rev names
| Some (C.Name name as n, C.Decl v) as hd :: tl ->
let hd, names, v =
- if DTI.does_not_occur 1 p && DTI.does_not_occur 1 et then
+ if DTI.does_not_occur 1 p && DTI.does_not_occur 1 it && DTI.does_not_occur 1 et then
Some (C.Anonymous, C.Decl v), name :: names, meta
else
hd, names, v
in
let p = C.Lambda (n, v, p) in
+ let it = C.Prod (n, v, it) in
let et = C.Prod (n, v, et) in
- aux (hd :: c) names p et tl
+ aux (hd :: c) names p it et tl
| Some (C.Name name as n, C.Def (v, x)) as hd :: tl ->
let hd, names, v =
- if DTI.does_not_occur 1 p && DTI.does_not_occur 1 et then
+ if DTI.does_not_occur 1 p && DTI.does_not_occur 1 it && DTI.does_not_occur 1 et then
Some (C.Anonymous, C.Def (v, x)), name :: names, meta
else
hd, names, v
in
let p = C.LetIn (n, v, p) in
+ let it = C.LetIn (n, v, it) in
let et = C.LetIn (n, v, et) in
- aux (hd :: c) names p et tl
+ aux (hd :: c) names p it et tl
| Some (C.Anonymous as n, C.Decl v) as hd :: tl ->
let p = C.Lambda (n, meta, p) in
+ let it = C.Lambda (n, meta, it) in
let et = C.Lambda (n, meta, et) in
- aux (hd :: c) names p et tl
+ aux (hd :: c) names p it et tl
| Some (C.Anonymous as n, C.Def (v, _)) as hd :: tl ->
let p = C.LetIn (n, meta, p) in
+ let it = C.LetIn (n, meta, it) in
let et = C.LetIn (n, meta, et) in
- aux (hd :: c) names p et tl
+ aux (hd :: c) names p it et tl
| None :: tl -> assert false
in
- match xet with
- | Some et -> aux [] [] p et c
- | None -> c, []
+ match xtypes with
+ | Some (it, et) -> aux [] [] p it et c
+ | None -> c, []
let clear c hyp =
let rec aux c = function