aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthieu Sozeau2017-04-13 20:41:40 +0200
committerMatthieu Sozeau2017-04-13 20:47:06 +0200
commit58e804f07172acc6bb01c8bdafde1217eb4ec4b8 (patch)
treecf6057cb340cf71867f04b19b0f7733596949b1c
parent582fab072375924ce380148c8a92dbc2b4ec30cc (diff)
Reinstate fixpoint refolding in [cbn], deactivated by mistake.
Add a test-suite file to be sure we won't regress silently.
-rw-r--r--pretyping/reductionops.ml2
-rw-r--r--test-suite/success/cbn.v18
2 files changed, 19 insertions, 1 deletions
diff --git a/pretyping/reductionops.ml b/pretyping/reductionops.ml
index 297f0a1a8e..ba92f64b95 100644
--- a/pretyping/reductionops.ml
+++ b/pretyping/reductionops.ml
@@ -755,7 +755,7 @@ let contract_fix ?env ?reference ((recindices,bodynum),(names,types,bodies as ty
context" in contract_fix *)
let reduce_and_refold_fix recfun env refold cst_l fix sk =
let raw_answer =
- let env = if refold then None else Some env in
+ let env = if refold then Some env else None in
contract_fix ?env ?reference:(Cst_stack.reference cst_l) fix in
apply_subst
(fun x (t,sk') ->
diff --git a/test-suite/success/cbn.v b/test-suite/success/cbn.v
new file mode 100644
index 0000000000..6aeb05f54e
--- /dev/null
+++ b/test-suite/success/cbn.v
@@ -0,0 +1,18 @@
+(* cbn is able to refold mutual recursive calls *)
+
+Fixpoint foo (n : nat) :=
+ match n with
+ | 0 => true
+ | S n => g n
+ end
+with g (n : nat) : bool :=
+ match n with
+ | 0 => true
+ | S n => foo n
+ end.
+Goal forall n, foo (S n) = g n.
+ intros. cbn.
+ match goal with
+ |- g _ = g _ => reflexivity
+ end.
+Qed. \ No newline at end of file