aboutsummaryrefslogtreecommitdiff
path: root/engine/termops.ml
diff options
context:
space:
mode:
authorMaxime Dénès2018-01-18 18:00:17 +0100
committerMaxime Dénès2018-01-18 18:00:17 +0100
commit9aa2464375c1515aa64df7dc910e2f324e34c82f (patch)
treeadae0cab32f7d2fb01c29d74c9dfc7dc93c3bf6f /engine/termops.ml
parentf26bf29cfe6fb154400f3a1305b86b34ad88e0e2 (diff)
parent7f60ab72facdee620467c0c48c914273f70aa96f (diff)
Merge PR #6555: Use let-in aware prod_applist_assum in dtauto and firstorder.
Diffstat (limited to 'engine/termops.ml')
-rw-r--r--engine/termops.ml12
1 files changed, 12 insertions, 0 deletions
diff --git a/engine/termops.ml b/engine/termops.ml
index a71bdff31e..40b3d0d8b6 100644
--- a/engine/termops.ml
+++ b/engine/termops.ml
@@ -1463,6 +1463,18 @@ let prod_applist sigma c l =
| _ -> anomaly (Pp.str "Not enough prod's.") in
app [] c l
+let prod_applist_assum sigma n c l =
+ let open EConstr in
+ let rec app n subst c l =
+ if Int.equal n 0 then
+ if l == [] then Vars.substl subst c
+ else anomaly (Pp.str "Not enough arguments.")
+ else match EConstr.kind sigma c, l with
+ | Prod(_,_,c), arg::l -> app (n-1) (arg::subst) c l
+ | LetIn(_,b,_,c), _ -> app (n-1) (Vars.substl subst b::subst) c l
+ | _ -> anomaly (Pp.str "Not enough prod/let's.") in
+ app n [] c l
+
(* Combinators on judgments *)
let on_judgment f j = { uj_val = f j.uj_val; uj_type = f j.uj_type }