diff options
| author | Hugo Herbelin | 2020-04-17 22:45:44 +0200 |
|---|---|---|
| committer | Hugo Herbelin | 2020-04-20 12:49:39 +0200 |
| commit | f71458c2d72d8cb2b534a1937ea1a259e9722edc (patch) | |
| tree | 5755780a99de98d7bbd4a1ed04a75a856bb7fa1a | |
| parent | e77b7aed145718b73ca58c75bc7ed01d2b55446f (diff) | |
Fixing #12045 (missing normalization in conclusion of custom induction scheme).
| -rw-r--r-- | tactics/tactics.ml | 2 | ||||
| -rw-r--r-- | test-suite/bugs/closed/bug_12045.v | 19 |
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. |
