X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Ftactics%2FequalityTactics.ml;h=da7f599a9ec2b642291173c3d0c6c1d4a6fc5bf6;hb=ac595177011c8fd73c39fb9b5aaf8b130fb03ef3;hp=a8e32886371030ea1bc9fe13a567108fcd139019;hpb=afa05d30f20de12e031c3e5c3e5c33c19c42a7d8;p=helm.git diff --git a/helm/ocaml/tactics/equalityTactics.ml b/helm/ocaml/tactics/equalityTactics.ml index a8e328863..da7f599a9 100644 --- a/helm/ocaml/tactics/equalityTactics.ml +++ b/helm/ocaml/tactics/equalityTactics.ml @@ -22,8 +22,10 @@ * For details, see the HELM World-Wide-Web page, * http://cs.unibo.it/helm/. *) + +(* $Id$ *) -let rec rewrite_tac ~direction ~pattern equality = +let rec rewrite_tac ~direction ~(pattern: ProofEngineTypes.lazy_pattern) equality = let _rewrite_tac ~direction ~pattern:(wanted,hyps_pat,concl_pat) equality status = let module C = Cic in @@ -41,14 +43,14 @@ let rec rewrite_tac ~direction ~pattern equality = PET.apply_tactic (Tacticals.then_ (rewrite_tac ~direction - ~pattern:(None,[he],Cic.Implicit None) equality) + ~pattern:(None,[he],None) equality) (rewrite_tac ~direction ~pattern:(None,tl,concl_pat) equality) ) status - | [_] as hyps_pat when concl_pat <> Cic.Implicit None -> + | [_] as hyps_pat when concl_pat <> None -> PET.apply_tactic (Tacticals.then_ (rewrite_tac ~direction - ~pattern:(None,hyps_pat,Cic.Implicit None) equality) + ~pattern:(None,hyps_pat,None) equality) (rewrite_tac ~direction ~pattern:(None,[],concl_pat) equality) ) status | _ -> @@ -65,14 +67,7 @@ let rec rewrite_tac ~direction ~pattern equality = | _::tl -> find_hyp (n+1) tl in let arg,gty = find_hyp 1 context in - let last_hyp_name_of_status (proof,goal) = - let curi, metasenv, pbo, pty = proof in - let metano,context,gty = CicUtil.lookup_meta goal metasenv in - match context with - (Some (Cic.Name s,_))::_ -> s - | _ -> assert false - in - let dummy = "dummy" in + let dummy = "dummy" in Some arg,false, (fun ~term typ -> Tacticals.seq @@ -83,11 +78,11 @@ let rec rewrite_tac ~direction ~pattern equality = ProofEngineStructuralRules.clearbody name; ReductionTactics.change_tac ~pattern: - (None,[name,Cic.Implicit (Some `Hole)],Cic.Implicit None) + (None,[name,Cic.Implicit (Some `Hole)], None) (ProofEngineTypes.const_lazy_term typ); ProofEngineStructuralRules.clear dummy ]), - pat,gty + Some pat,gty | _::_ -> assert false in let if_right_to_left do_not_change a b = @@ -130,7 +125,11 @@ let rec rewrite_tac ~direction ~pattern equality = let lifted_conjecture = metano,(Some (fresh_name,Cic.Decl ty))::context,lifted_gty in let lifted_pattern = - Some (fun _ m u -> lifted_t1, m, u),[],CicSubstitution.lift 1 concl_pat + let lifted_concl_pat = + match concl_pat with + | None -> None + | Some term -> Some (CicSubstitution.lift 1 term) in + Some (fun _ m u -> lifted_t1, m, u),[],lifted_concl_pat in let subst,metasenv',ugraph,_,selected_terms_with_context = ProofEngineHelpers.select @@ -164,7 +163,7 @@ let rec rewrite_tac ~direction ~pattern equality = metasenv', C.Meta (fresh_meta,irl), Cic.Rel (-1) (* dummy term, never used *) | Some arg -> let gty' = CicSubstitution.subst t1 abstr_gty in - metasenv,arg,gty' + metasenv',arg,gty' in let exact_proof = C.Appl [eq_ind ; ty ; t2 ; pred ; arg ; t1 ;equality] @@ -195,8 +194,9 @@ let rewrite_simpl_tac ~direction ~pattern equality = ProofEngineTypes.mk_tactic (rewrite_simpl_tac ~direction ~pattern equality) ;; -let replace_tac ~pattern ~with_what = - let replace_tac ~pattern:(wanted,hyps_pat,concl_pat) ~with_what status = +let replace_tac ~(pattern: ProofEngineTypes.lazy_pattern) ~with_what = + let replace_tac ~(pattern: ProofEngineTypes.lazy_pattern) ~with_what status = + let _wanted, hyps_pat, concl_pat = pattern in let (proof, goal) = status in let module C = Cic in let module U = UriManager in @@ -249,7 +249,7 @@ let replace_tac ~pattern ~with_what = ty_of_with_what ty_of_t_in_context u in if b then let concl_pat_for_t = ProofEngineHelpers.pattern_of ~term:ty [t] in - let pattern_for_t = None,[],concl_pat_for_t in + let pattern_for_t = None,[],Some concl_pat_for_t in t_in_context,pattern_for_t else raise @@ -259,7 +259,7 @@ let replace_tac ~pattern ~with_what = let rec aux n whats status = match whats with [] -> ProofEngineTypes.apply_tactic T.id_tac status - | (what,pattern)::tl -> + | (what,lazy_pattern)::tl -> let what = CicSubstitution.lift n what in let with_what = CicSubstitution.lift n with_what in let ty_of_with_what = CicSubstitution.lift n ty_of_with_what in @@ -275,7 +275,7 @@ let replace_tac ~pattern ~with_what = ~continuations:[ T.then_ ~start:( - rewrite_tac ~direction:`LeftToRight ~pattern (C.Rel 1)) + rewrite_tac ~direction:`LeftToRight ~pattern:lazy_pattern (C.Rel 1)) ~continuation:( T.then_ ~start:(