diff options
| author | herbelin | 2011-10-10 22:00:22 +0000 |
|---|---|---|
| committer | herbelin | 2011-10-10 22:00:22 +0000 |
| commit | 698c79dc28a13baf864c863800a2b48690207e34 (patch) | |
| tree | be1e74ff347d09ef9fabee5ab2d6efa36caedcf2 /pretyping/evarutil.ml | |
| parent | 604b9cdff3b5bae0be66b4ab93cf06a21a59a496 (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.ml | 9 |
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) = |
