aboutsummaryrefslogtreecommitdiff
path: root/pretyping/evarutil.ml
diff options
context:
space:
mode:
authorherbelin2011-10-10 22:00:22 +0000
committerherbelin2011-10-10 22:00:22 +0000
commit698c79dc28a13baf864c863800a2b48690207e34 (patch)
treebe1e74ff347d09ef9fabee5ab2d6efa36caedcf2 /pretyping/evarutil.ml
parent604b9cdff3b5bae0be66b4ab93cf06a21a59a496 (diff)
Applied the trick of Chung-Kil Hur to solve second-order matching
problems with dependencies. Generalized it to matching over dependent tuples as explored by Dan Grayson. Currently used only in Evarconv. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@14538 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'pretyping/evarutil.ml')
-rw-r--r--pretyping/evarutil.ml9
1 files changed, 9 insertions, 0 deletions
diff --git a/pretyping/evarutil.ml b/pretyping/evarutil.ml
index 0fa1111ff4..860a2c8301 100644
--- a/pretyping/evarutil.ml
+++ b/pretyping/evarutil.ml
@@ -1582,6 +1582,15 @@ let define_evar_as_lambda env evd (evk,args) =
let evbody = mkEvar (fst (destEvar body), evbodyargs) in
evd,mkLambda (na, dom, evbody)
+let rec evar_absorb_arguments env evd (evk,args as ev) = function
+ | [] -> evd,ev
+ | a::l ->
+ (* TODO: optimize and avoid introducing intermediate evars *)
+ let evd,lam = define_pure_evar_as_lambda env evd evk in
+ let _,_,body = destLambda lam in
+ let evk = fst (destEvar body) in
+ evar_absorb_arguments env evd (evk, array_cons a args) l
+
(* Refining an evar to a sort *)
let define_evar_as_sort evd (ev,args) =