]> matita.cs.unibo.it Git - helm.git/commitdiff
the predicate for elim was not built correctly when more than one right parameter...
authorFerruccio Guidi <ferruccio.guidi@unibo.it>
Wed, 18 Jul 2007 16:07:11 +0000 (16:07 +0000)
committerFerruccio Guidi <ferruccio.guidi@unibo.it>
Wed, 18 Jul 2007 16:07:11 +0000 (16:07 +0000)
components/tactics/primitiveTactics.ml

index 70502d1b28030650e0540348f5582b9b9ba06369..47acc7c583a30cc789d96439852dfc5361b70aa2 100644 (file)
@@ -517,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
@@ -532,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
@@ -545,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 actual_args in
-   HLog.debug ("PRED: " ^ CicPp.ppterm ~metasenv pred ^ " ARGS: " ^ String.concat " " (List.map (CicPp.ppterm ~metasenv) actual_args));
+   let metasenv, pred, arg = 
+      mk_pred metasenv context goal arg cpattern (List.rev actual_args)
+   in
+   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 =