X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Ftactics%2FproofEngineReduction.ml;h=f8782b7aec13db70083d025a44258d1416d0cf21;hb=1bcae23ef41ad2110426eebd97671d27d09213a3;hp=087d327757babbe020e167c8babd40821bdaf3b5;hpb=13f7f0dcaa42805d33003850a0eb94d1c277fddd;p=helm.git diff --git a/helm/ocaml/tactics/proofEngineReduction.ml b/helm/ocaml/tactics/proofEngineReduction.ml index 087d32775..f8782b7ae 100644 --- a/helm/ocaml/tactics/proofEngineReduction.ml +++ b/helm/ocaml/tactics/proofEngineReduction.ml @@ -601,6 +601,14 @@ exception AlreadySimplified;; (*CSC: It does not perform simplification in a Case *) let simpl context = + let mk_appl t l = + if l = [] then + t + else + match t with + | Cic.Appl l' -> Cic.Appl (l'@l) + | _ -> Cic.Appl (t::l) + in (* reduceaux is equal to the reduceaux locally defined inside *) (* reduce, but for the const case. *) (**** Step 1 ****) @@ -614,8 +622,7 @@ let simpl context = Some (_,C.Decl _) -> if l = [] then t else C.Appl (t::l) | Some (_,C.Def (bo,_)) -> let lifted_bo = S.lift n bo in - let applied_lifted_bo = - if l = [] then lifted_bo else C.Appl (lifted_bo::l) in + let applied_lifted_bo = mk_appl lifted_bo l in let simplified = try_delta_expansion context l t lifted_bo in if simplified = applied_lifted_bo then if l = [] then t else C.Appl (t::l) @@ -886,7 +893,8 @@ let simpl context = ;; let unfold ?what context where = - let first_is_the_expandable_head_of_second t1 t2 = + let contextlen = List.length context in + let first_is_the_expandable_head_of_second context' t1 t2 = match t1,t2 with Cic.Const (uri,_), Cic.Const (uri',_) | Cic.Var (uri,_), Cic.Var (uri',_) @@ -894,10 +902,14 @@ let unfold ?what context where = | Cic.Var (uri,_), Cic.Appl (Cic.Var (uri',_)::_) -> UriManager.eq uri uri' | Cic.Const _, _ | Cic.Var _, _ -> false + | Cic.Rel n, Cic.Rel m + | Cic.Rel n, Cic.Appl (Cic.Rel m::_) -> + n + (List.length context' - contextlen) = m + | Cic.Rel _, _ -> false | _,_ -> raise (ProofEngineTypes.Fail - "The term to unfold is neither a constant nor a variable") + "The term to unfold is not a constant, a variable or a bound variable ") in let appl he tl = if tl = [] then he else Cic.Appl (he::tl) in