X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Ftactics%2FproofEngineHelpers.ml;h=2d576c3d8badf7c3f760041e3aa40d2a808e563b;hb=63b9459d46ea28b3f47116690e7d06cbba7561fe;hp=ccac132ef6b631b46504d9e63b96c1af5ed8804c;hpb=17f33fa8cb65de1f3edcba6ac750bbdb4d061117;p=helm.git diff --git a/helm/ocaml/tactics/proofEngineHelpers.ml b/helm/ocaml/tactics/proofEngineHelpers.ml index ccac132ef..2d576c3d8 100644 --- a/helm/ocaml/tactics/proofEngineHelpers.ml +++ b/helm/ocaml/tactics/proofEngineHelpers.ml @@ -23,44 +23,6 @@ * http://cs.unibo.it/helm/. *) -(* mk_fresh_name context name typ *) -(* returns an identifier which is fresh in the context *) -(* and that resembles [name] as much as possible. *) -(* [typ] will be the type of the variable *) -let mk_fresh_name context name ~typ = - let module C = Cic in - let basename = - match name with - C.Anonymous -> - (*CSC: great space for improvements here *) - (try - (match CicTypeChecker.type_of_aux' [] context typ with - C.Sort C.Prop -> "H" - | C.Sort C.CProp -> "H" - | C.Sort C.Set -> "x" - | _ -> "H" - ) - with CicTypeChecker.TypeCheckerFailure _ -> "H" - ) - | C.Name name -> - Str.global_replace (Str.regexp "[0-9]*$") "" name - in - let already_used name = - List.exists (function Some (C.Name n,_) -> n=name | _ -> false) context - in - if not (already_used basename) then - C.Name basename - else - let rec try_next n = - let name' = basename ^ string_of_int n in - if already_used name' then - try_next (n+1) - else - C.Name name' - in - try_next 1 -;; - let new_meta_of_proof ~proof:(_, metasenv, _, _) = CicMkImplicit.new_meta metasenv @@ -86,7 +48,11 @@ let subst_meta_in_proof proof meta term newmetasenv = ) metasenv' in let bo' = subst_in bo in - let newproof = uri,metasenv'',bo',ty in + (* Metavariables can appear also in the *statement* of the theorem + * since the parser does not reject as statements terms with + * metavariable therein *) + let ty' = subst_in ty in + let newproof = uri,metasenv'',bo',ty' in (newproof, metasenv'') (*CSC: commento vecchio *) @@ -104,6 +70,10 @@ let subst_meta_in_proof proof meta term newmetasenv = let subst_meta_and_metasenv_in_proof proof meta subst_in newmetasenv = let (uri,_,bo,ty) = proof in let bo' = subst_in bo in + (* Metavariables can appear also in the *statement* of the theorem + * since the parser does not reject as statements terms with + * metavariable therein *) + let ty' = subst_in ty in let metasenv' = List.fold_right (fun metasenv_entry i -> @@ -123,6 +93,6 @@ let subst_meta_and_metasenv_in_proof proof meta subst_in newmetasenv = | _ -> i ) newmetasenv [] in - let newproof = uri,metasenv',bo',ty in + let newproof = uri,metasenv',bo',ty' in (newproof, metasenv')