From: Enrico Tassi Date: Tue, 24 May 2005 13:33:02 +0000 (+0000) Subject: new simpl semantic (now = and not == since you can't write a pointer to a script) X-Git-Tag: single_binding~16 X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=commitdiff_plain;h=e5efa2e0b70723b431cdc4cffe10b41167145ca4;p=helm.git new simpl semantic (now = and not == since you can't write a pointer to a script) --- diff --git a/helm/ocaml/tactics/proofEngineReduction.ml b/helm/ocaml/tactics/proofEngineReduction.ml index e43f9221c..af41d8ee8 100644 --- a/helm/ocaml/tactics/proofEngineReduction.ml +++ b/helm/ocaml/tactics/proofEngineReduction.ml @@ -584,7 +584,7 @@ exception AlreadySimplified;; (* Takes a well-typed term and *) (* 1) Performs beta-iota-zeta reduction until delta reduction is needed *) (* 2) Attempts delta-reduction. If the residual is a Fix lambda-abstracted *) -(* w.r.t. zero or more variables and if the Fix can be reduced, than it *) +(* w.r.t. zero or more variables and if the Fix can be reductaed, than it *) (* is reduced, the delta-reduction is succesfull and the whole algorithm *) (* is applied again to the new redex; Step 3) is applied to the result *) (* of the recursive simplification. Otherwise, if the Fix can not be *) diff --git a/helm/ocaml/tactics/reductionTactics.ml b/helm/ocaml/tactics/reductionTactics.ml index d356499a1..decb161f6 100644 --- a/helm/ocaml/tactics/reductionTactics.ml +++ b/helm/ocaml/tactics/reductionTactics.ml @@ -43,10 +43,10 @@ let reduction_tac ~reduction (proof,goal) = (* The default of term is the thesis of the goal to be prooved *) let reduction_tac ~also_in_hypotheses ~reduction ~terms (proof,goal) = - let curi,metasenv,pbo,pty = proof in - let metano,context,ty = CicUtil.lookup_meta goal metasenv in + let curi,metasenv,pbo,pty = proof in + let metano,context,ty = CicUtil.lookup_meta goal metasenv in let terms = - match terms with None -> [ty] | Some l -> l + match terms with None -> [ty] | Some l -> l in (* We don't know if [term] is a subterm of [ty] or a subterm of *) (* the type of one metavariable. So we replace it everywhere. *) @@ -54,32 +54,39 @@ let reduction_tac ~also_in_hypotheses ~reduction ~terms (proof,goal) = (*CSC: sappiamo neppure quale sia il suo contesto!!!! Insomma, *) (*CSC: e' meglio prima cercare il termine e scoprirne il *) (*CSC: contesto, poi ridurre e infine rimpiazzare. *) - let replace context where= -(*CSC: Per il momento se la riduzione fallisce significa solamente che *) -(*CSC: siamo nel contesto errato. Metto il try, ma che schifo!!!! *) -(*CSC: Anche perche' cosi' catturo anche quelle del replace che non dovrei *) - try - let terms' = List.map (reduction context) terms in - ProofEngineReduction.replace ~equality:(==) ~what:terms ~with_what:terms' - ~where:where - with - _ -> where + let replace lift context where= + (*CSC: Per il momento se la riduzione fallisce significa solamente che *) + (*CSC: siamo nel contesto errato. Metto il try, ma che schifo!!!! *) + (*CSC: Anche perche' cosi' catturo anche quelle del replace che non dovrei*) + try + let terms = List.fold_left + (fun acc t -> + try + (CicSubstitution.delift lift t) :: acc + with Failure _ -> acc + ) [] terms + in + let terms' = List.map (reduction context) terms in + ProofEngineReduction.replace + ~equality:(=) ~what:terms ~with_what:terms' ~where:where + with + _ -> where in - let ty' = replace context ty in - let context' = + let ty' = replace 0 context ty in + let context', _ = if also_in_hypotheses then List.fold_right - (fun entry context -> + (fun entry (context,i) -> match entry with - Some (name,Cic.Def (t,None)) -> - (Some (name,Cic.Def ((replace context t),None)))::context + | Some (name,Cic.Def (t,None)) -> + (Some (name,Cic.Def ((replace i context t),None)))::context, i-1 | Some (name,Cic.Decl t) -> - (Some (name,Cic.Decl (replace context t)))::context - | None -> None::context + (Some (name,Cic.Decl (replace i context t)))::context, i-1 + | None -> None::context, i-1 | Some (_,Cic.Def (_,Some _)) -> assert false - ) context [] + ) context ([],(List.length context)) else - context + context, 0 in let metasenv' = List.map diff --git a/helm/ocaml/tactics/tactics.mli b/helm/ocaml/tactics/tactics.mli index d8e02127d..6bf03b675 100644 --- a/helm/ocaml/tactics/tactics.mli +++ b/helm/ocaml/tactics/tactics.mli @@ -22,6 +22,7 @@ val decompose : Cic.term -> ProofEngineTypes.tactic val discriminate : term:Cic.term -> ProofEngineTypes.tactic val elim_intros_simpl : term:Cic.term -> ProofEngineTypes.tactic +val elim_intros : term:Cic.term -> ProofEngineTypes.tactic val elim_type : term:Cic.term -> ProofEngineTypes.tactic val exact : term:Cic.term -> ProofEngineTypes.tactic val exists : ProofEngineTypes.tactic