X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=components%2Ftactics%2FprimitiveTactics.ml;h=47acc7c583a30cc789d96439852dfc5361b70aa2;hb=ae1e6d714da0f555dfa9d7f1b0e9321278db12e5;hp=e17d6cb7b68f16c5f4bac08b75fe91d3bdda4506;hpb=51bcceed90882024de4c614d5f26d17eaaf7f18f;p=helm.git diff --git a/components/tactics/primitiveTactics.ml b/components/tactics/primitiveTactics.ml index e17d6cb7b..47acc7c58 100644 --- a/components/tactics/primitiveTactics.ml +++ b/components/tactics/primitiveTactics.ml @@ -409,11 +409,16 @@ let cut_tac ?(mk_fresh_name_callback = FreshNamesGenerator.mk_fresh_name ~subst: CicMkImplicit.identity_relocation_list_for_metavariable context in let newmeta1ty = CicSubstitution.lift 1 ty in +(* This is the pre-letin implementation let bo' = C.Appl [C.Lambda (fresh_name,term,C.Meta (newmeta1,irl1)) ; C.Meta (newmeta2,irl2)] in +*) + let bo' = + Cic.LetIn (fresh_name, C.Meta (newmeta2,irl2), C.Meta (newmeta1,irl1)) + in let (newproof, _) = ProofEngineHelpers.subst_meta_in_proof proof metano bo' [newmeta2,context,term; newmeta1,context_for_newmeta1,newmeta1ty]; @@ -512,12 +517,12 @@ let mk_predicate_for_elim | _ -> assert false in (* let _, upto = PEH.split_with_whd (List.nth splits pred_pos) in *) - let rec mk_pred metasenv context' pred arg' = function + let rec mk_pred metasenv context' pred arg' cpattern' = function | [] -> metasenv, pred, arg' | arg :: tail -> (* FG: we find the predicate for the eliminator as in the rewrite tactic ****) - let argty, _ugraph = TC.type_of_aux' metasenv context' arg ugraph in - let argty = CicReduction.whd context' argty in + let argty, _ugraph = TC.type_of_aux' metasenv context arg ugraph in + let argty = CicReduction.whd context argty in let fresh_name = FreshNamesGenerator.mk_fresh_name ~subst:[] metasenv context' C.Anonymous ~typ:argty @@ -527,7 +532,7 @@ let mk_predicate_for_elim let distance = List.length c - List.length context in S.lift distance arg, m, u in - let pattern = Some lazy_term, [], Some cpattern in + let pattern = Some lazy_term, [], Some cpattern' in let subst, metasenv, _ugraph, _conjecture, selected_terms = ProofEngineHelpers.select ~metasenv ~ugraph ~conjecture:(0, context, pred) ~pattern @@ -540,10 +545,13 @@ let mk_predicate_for_elim let pred = PER.replace_with_rel_1_from ~equality:(==) ~what 1 pred in let pred = MS.apply_subst subst pred in let pred = C.Lambda (fresh_name, argty, pred) in - mk_pred metasenv (hyp :: context') pred arg' tail + let cpattern' = C.Lambda (C.Anonymous, C.Implicit None, cpattern') in + mk_pred metasenv (hyp :: context') pred arg' cpattern' tail + in + let metasenv, pred, arg = + mk_pred metasenv context goal arg cpattern (List.rev actual_args) in - let metasenv, pred, arg = mk_pred metasenv context goal arg actual_args in - HLog.debug ("PRED: " ^ CicPp.ppterm ~metasenv pred ^ " ARGS: " ^ String.concat " " (List.map (CicPp.ppterm ~metasenv) actual_args)); + HLog.debug ("PREDICATE: " ^ CicPp.ppterm ~metasenv pred ^ " ARGS: " ^ String.concat " " (List.map (CicPp.ppterm ~metasenv) actual_args)); metasenv, pred, arg, actual_args let beta_after_elim_tac upto predicate =