]> matita.cs.unibo.it Git - helm.git/commitdiff
Inversion principles generation falls back to cases tactic when elim is not
authorWilmer Ricciotti <ricciott@cs.unibo.it>
Mon, 23 Jan 2012 13:47:33 +0000 (13:47 +0000)
committerWilmer Ricciotti <ricciott@cs.unibo.it>
Mon, 23 Jan 2012 13:47:33 +0000 (13:47 +0000)
available.

matita/components/ng_tactics/nInversion.ml

index ee0cc41c3e68fb66eccd692a1bc03a486969f22f..12e14be46b0a9163c12716ddd859b6d12bf2d4a8 100644 (file)
@@ -110,10 +110,10 @@ let mk_inverter ~jmeq name is_ind it leftno ?selection outsort (status: #NCic.st
  let nparams = List.length args in
 
  (* the default is a dependent inversion *)
- let is_dependent = (selection = None && jmeq) in
+ let is_dependent = (selection = None && (jmeq || nparams = 0)) in
 
  pp (lazy ("nparams = " ^ string_of_int nparams));
- if nparams = 0 
+ if (nparams = 0 && not is_dependent)
    then raise (Failure "inverter: the type must have at least one right parameter") 
    else 
      let xs = List.map (fun n -> "x" ^ (string_of_int n)) (HExtlib.list_seq 1 (leftno+nparams+1)) in
@@ -175,7 +175,11 @@ NotationPt.Implicit (`Tagged "end"));
       "",0,(None,[],
         Some (if jmeq then jmeqpatt selection
                      else leibpatt selection)) in
-     let elim_tac = if is_ind then NTactics.elim_tac else NTactics.cases_tac in
+     (* let elim_tac = if is_ind then NTactics.elim_tac else NTactics.cases_tac in *)
+     let elim_tac ~what ~where s =
+       try NTactics.elim_tac ~what ~where s 
+       with NTacStatus.Error _ -> NTactics.cases_tac ~what ~where s
+     in
      let status =
       NTactics.block_tac 
        (NTactics.branch_tac ::