aboutsummaryrefslogtreecommitdiffhomepage
path: root/pretyping
diff options
context:
space:
mode:
authorGravatar herbelin <herbelin@85f007b7-540e-0410-9357-904b9bb8a0f7>2003-01-31 22:20:28 +0000
committerGravatar herbelin <herbelin@85f007b7-540e-0410-9357-904b9bb8a0f7>2003-01-31 22:20:28 +0000
commitfffd3e2ad413f00b41f17c3f79edac63ec145760 (patch)
tree05a914a9bd9922477a285a2c70b9d8e540d45a5d /pretyping
parentb951c429455863072c0938f3cbc7d13da654b8b7 (diff)
Ajout d'un filtrage d'application partielle
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@3642 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'pretyping')
-rw-r--r--pretyping/pattern.ml15
1 files changed, 15 insertions, 0 deletions
diff --git a/pretyping/pattern.ml b/pretyping/pattern.ml
index 0afcbdde7..c921205d1 100644
--- a/pretyping/pattern.ml
+++ b/pretyping/pattern.ml
@@ -238,6 +238,21 @@ let matches_core convert pat c =
| PSort (RType _), Sort (Type _) -> sigma
+ | PApp (PMeta (Some n),args1), App (c2,args2) ->
+ let p = Array.length args2 - Array.length args1 in
+ if p>=0 then
+ let args21, args22 = array_chop p args2 in
+ let sigma =
+ let depth = List.length stk in
+ let c = mkApp(c2,args21) in
+ let frels = Intset.elements (free_rels c) in
+ if List.for_all (fun i -> i > depth) frels then
+ constrain (n,lift (-depth) c) sigma
+ else
+ raise PatternMatchingFailure in
+ array_fold_left2 (sorec stk) sigma args1 args22
+ else raise PatternMatchingFailure
+
| PApp (c1,arg1), App (c2,arg2) ->
(try array_fold_left2 (sorec stk) (sorec stk sigma c1 c2) arg1 arg2
with Invalid_argument _ -> raise PatternMatchingFailure)