aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorherbelin2008-11-04 21:27:50 +0000
committerherbelin2008-11-04 21:27:50 +0000
commit1847057e19e518fd8ab87ead5d7fdd006dfa0367 (patch)
treeda4ae0f34d719c4581f0a47718af9c887793a22b
parent9e97abd3ff096b092a90962d8f74f2a0313f9a5a (diff)
Adaptation to ocaml 3.11 new semantics of String.index_from (see bug #1974)
Grant wish #1988 ("fun" forces reduction in "refine" if needed) git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@11536 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--lib/util.ml3
-rw-r--r--tactics/refine.ml2
-rw-r--r--test-suite/success/refine.v5
3 files changed, 9 insertions, 1 deletions
diff --git a/lib/util.ml b/lib/util.ml
index 9428aa134d..7df7063930 100644
--- a/lib/util.ml
+++ b/lib/util.ml
@@ -83,6 +83,9 @@ let rec is_sub gdzie gl gi co cl ci =
(is_sub gdzie gl (gi+1) co cl (ci+1)))
let rec raw_str_index i gdzie l c co cl =
+ (* First adapt to ocaml 3.11 new semantics of index_from *)
+ if (i+cl > l) then raise Not_found;
+ (* Then proceed as in ocaml < 3.11 *)
let i' = String.index_from gdzie i c in
if (i'+cl <= l) && (is_sub gdzie l i' co cl 0) then i' else
raw_str_index (i'+1) gdzie l c co cl
diff --git a/tactics/refine.ml b/tactics/refine.ml
index c0db5def58..9225fd9d7c 100644
--- a/tactics/refine.ml
+++ b/tactics/refine.ml
@@ -275,7 +275,7 @@ let rec tcc_aux subst (TH (c,mm,sgp) as _th) gl =
| Lambda (Name id,_,m), _ ->
assert (isMeta (strip_outer_cast m));
begin match sgp with
- | [None] -> introduction id gl
+ | [None] -> intro_mustbe_force id gl
| [Some th] ->
tclTHEN (introduction id)
(onLastHyp (fun id -> tcc_aux (mkVar id::subst) th)) gl
diff --git a/test-suite/success/refine.v b/test-suite/success/refine.v
index 4b636618ad..b654277c8c 100644
--- a/test-suite/success/refine.v
+++ b/test-suite/success/refine.v
@@ -117,3 +117,8 @@ refine
let fn := fact_rec (n-1) _ in
n * fn).
Abort.
+
+(* Wish 1988: that fun forces unfold in refine *)
+
+Goal (forall A : Prop, A -> ~~A).
+Proof. refine(fun A a f => _).