aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Herbelin2020-04-17 22:45:44 +0200
committerHugo Herbelin2020-04-20 12:49:39 +0200
commitf71458c2d72d8cb2b534a1937ea1a259e9722edc (patch)
tree5755780a99de98d7bbd4a1ed04a75a856bb7fa1a
parente77b7aed145718b73ca58c75bc7ed01d2b55446f (diff)
Fixing #12045 (missing normalization in conclusion of custom induction scheme).
-rw-r--r--tactics/tactics.ml2
-rw-r--r--test-suite/bugs/closed/bug_12045.v19
2 files changed, 20 insertions, 1 deletions
diff --git a/tactics/tactics.ml b/tactics/tactics.ml
index c79aca3d3c..8c4400a80f 100644
--- a/tactics/tactics.ml
+++ b/tactics/tactics.ml
@@ -4499,7 +4499,7 @@ let check_expected_type env sigma (elimc,bl) elimt =
if n == 0 then error "Scheme cannot be applied.";
let sigma,cl = make_evar_clause env sigma ~len:(n - 1) elimt in
let sigma = solve_evar_clause env sigma true cl bl in
- let (_,u,_) = destProd sigma cl.cl_concl in
+ let (_,u,_) = destProd sigma (whd_all env sigma cl.cl_concl) in
fun t -> match Evarconv.unify_leq_delay env sigma t u with
| _sigma -> true
| exception Evarconv.UnableToUnify _ -> false
diff --git a/test-suite/bugs/closed/bug_12045.v b/test-suite/bugs/closed/bug_12045.v
new file mode 100644
index 0000000000..4e416778a9
--- /dev/null
+++ b/test-suite/bugs/closed/bug_12045.v
@@ -0,0 +1,19 @@
+(* Check enough reduction happens in the conclusion of an induction scheme *)
+
+Lemma foo :
+ forall (P : nat -> Prop),
+ (forall n, P (S n)) ->
+ forall n,
+ (fun e =>
+ IsSucc e ->
+ P e) n.
+Proof.
+Admitted.
+
+Theorem bar : forall n,
+ IsSucc n ->
+ True.
+Proof.
+ intros.
+ Fail induction n using foo. (* was an anomaly *)
+Admitted.