lib/scripts/convert.pl
changeset 11068 e91f576830e9
parent 11029 a221d8a9413c
child 11081 ce9a6746cd1e
equal deleted inserted replaced
11067:60c83075e41f 11068:e91f576830e9
    24   s/([\w\'\.]+) RS ([\w\'\.]+) RS ([\w\'\.]+) RS ([\w\'\.]+)/$1 \[THEN $2, THEN $3, THEN $4\]/g;
    24   s/([\w\'\.]+) RS ([\w\'\.]+) RS ([\w\'\.]+) RS ([\w\'\.]+)/$1 \[THEN $2, THEN $3, THEN $4\]/g;
    25   s/\(([\w\'\.]+) RS ([\w\'\.]+) RS ([\w\'\.]+)\)/$1 \[THEN $2, THEN $3\]/g;
    25   s/\(([\w\'\.]+) RS ([\w\'\.]+) RS ([\w\'\.]+)\)/$1 \[THEN $2, THEN $3\]/g;
    26   s/([\w\'\.]+) RS ([\w\'\.]+) RS ([\w\'\.]+)/$1 \[THEN $2, THEN $3\]/g;
    26   s/([\w\'\.]+) RS ([\w\'\.]+) RS ([\w\'\.]+)/$1 \[THEN $2, THEN $3\]/g;
    27   s/\(([\w\'\.]+) RS ([\w\'\.]+)\)/$1 \[THEN $2\]/g;
    27   s/\(([\w\'\.]+) RS ([\w\'\.]+)\)/$1 \[THEN $2\]/g;
    28   s/([\w\'\.]+) RS ([\w\'\.]+)/$1 \[THEN $2\]/g;
    28   s/([\w\'\.]+) RS ([\w\'\.]+)/$1 \[THEN $2\]/g;
       
    29   s/THEN sym\b/symmetric$1/g;
    29 }
    30 }
    30 
    31 
    31 sub subst_RS_fun {
    32 sub subst_RS_fun {
    32   my $s = shift;
    33   my $s = shift;
    33   $_ = $s;
    34   $_ = $s;
    97   s/ALLGOALS \(asm_full_simp_tac \(simpset\(\) (.*?)\)\)/simp_all $1/g;
    98   s/ALLGOALS \(asm_full_simp_tac \(simpset\(\) (.*?)\)\)/simp_all $1/g;
    98   s/ALLGOALS \(full_simp_tac \(simpset\(\) (.*?)\)\)/simp_all (no_asm_use) $1/g;
    99   s/ALLGOALS \(full_simp_tac \(simpset\(\) (.*?)\)\)/simp_all (no_asm_use) $1/g;
    99   s/ALLGOALS \(asm_simp_tac \(simpset\(\) (.*?)\)\)/simp_all (no_asm_simp) $1/g;
   100   s/ALLGOALS \(asm_simp_tac \(simpset\(\) (.*?)\)\)/simp_all (no_asm_simp) $1/g;
   100   s/ALLGOALS \(simp_tac \(simpset\(\) (.*?)\)\)/simp_all (no_asm) $1/g;
   101   s/ALLGOALS \(simp_tac \(simpset\(\) (.*?)\)\)/simp_all (no_asm) $1/g;
   101 
   102 
   102   s/atac 1/assumption/g;
   103   s/a((ssume_)?)tac 1/assumption/g;
   103   s/atac (\d+)/tactic \"assume_tac $1\"/g;
   104   s/a((ssume_)?)tac (\d+)/tactic \"assume_tac $1\"/g;
   104   s/^mp_tac 1/erule (1) notE impE/g;
   105   s/\bmp_tac 1/erule (1) notE impE/g;
   105   s/^mp_tac (\d+)/erule_tac [$1] notE impE, tactic \"assume_tac $1\"/g;
   106   s/\bmp_tac (\d+)/erule_tac [$1] notE impE, tactic \"assume_tac $1\"/g;
   106 
   107 
   107   s/hypsubst_tac 1/hypsubst/g;
   108   s/hypsubst_tac 1/hypsubst/g;
   108   s/arith_tac 1/arith/g;
   109   s/arith_tac 1/arith/g;
   109   s/strip_tac 1/intro strip/g;
   110   s/strip_tac 1/intro strip/g;
   110   s/split_all_tac 1/simp (no_asm_simp) only: split_tupled_all/g;
   111   s/split_all_tac 1/simp (no_asm_simp) only: split_tupled_all/g;
   111 
   112 
   112   s/rotate_tac (\d+) 1/rotate_tac $1/g;
       
   113   s/rotate_tac (\d+) (\d+)/rotate_tac [$2] $1/g;
   113   s/rotate_tac (\d+) (\d+)/rotate_tac [$2] $1/g;
   114   s/rotate_tac (~\d+) 1/rotate_tac -$1/g;
   114   s/rotate_tac ~ *(\d+) (\d+)/rotate_tac [$2] -$1/g;
   115   s/rotate_tac (~\d+) (\d+)/rotate_tac [$2] -$1/g;
       
   116   s/rename_tac (\".*?\") 1/rename_tac $1/g;
       
   117   s/rename_tac (\".*?\") (\d+)/rename_tac [$2] $1/g;
   115   s/rename_tac (\".*?\") (\d+)/rename_tac [$2] $1/g;
   118   s/case_tac (\".*?\") 1/case_tac $1/g;
       
   119   s/case_tac (\".*?\") (\d+)/case_tac [$2] $1/g;
   116   s/case_tac (\".*?\") (\d+)/case_tac [$2] $1/g;
   120   s/induct_tac (\".*?\") 1/induct_tac $1/g;
       
   121   s/induct_tac (\".*?\") (\d+)/induct_tac [$2] $1/g;
   117   s/induct_tac (\".*?\") (\d+)/induct_tac [$2] $1/g;
   122   s/induct_thm_tac ([\w\'\. \[,\]]+?) (\".*?\") 1/induct_tac $2 rule: $1/g;
       
   123   s/induct_thm_tac ([\w\'\. \[,\]]+?) (\".*?\") (\d+)/induct_tac [$3] $2 rule: $1/g;
   118   s/induct_thm_tac ([\w\'\. \[,\]]+?) (\".*?\") (\d+)/induct_tac [$3] $2 rule: $1/g;
   124   s/subgoal_tac (\".*?\") 1/subgoal_tac $1/g;
       
   125   s/subgoal_tac (\".*?\") (\d+)/subgoal_tac [$2] $1/g;
   119   s/subgoal_tac (\".*?\") (\d+)/subgoal_tac [$2] $1/g;
   126   s/thin_tac (\".*?\") *1/erule_tac V = $1 in thin_rl/g;
       
   127   s/thin_tac (\".*?\") *(\d+)/erule_tac [$2] V = $1 in thin_rl/g;
   120   s/thin_tac (\".*?\") *(\d+)/erule_tac [$2] V = $1 in thin_rl/g;
   128 
   121 
   129   s/THEN /, /g;
   122   s/THEN /, /g;
   130   s/ORELSE/|/g;
   123   s/ORELSE/|/g;
   131   subst_RS();
   124   subst_RS();
       
   125 
       
   126   s/\(\"(.*?)\" *, *(\".*?\")\) *, */$1 = $2 and /g; # instantiations
       
   127   s/\(\"(.*?)\" *, *(\".*?\")\)/$1 = $2/g;       # last instantiation
   132 
   128 
   133   s/rewtac ([\w\'\. \[,\]]+)/unfold $1/g;
   129   s/rewtac ([\w\'\. \[,\]]+)/unfold $1/g;
   134   s/stac ([\w\'\. \[,\]]+?) 1/subst $1/g;
   130   s/stac ([\w\'\. \[,\]]+?) 1/subst $1/g;
   135   s/rtac ([\w\'\. \[,\]]+?) 1/rule $1/g;
   131   s/rtac ([\w\'\. \[,\]]+?) 1/rule $1/g;
   136   s/rtac ([\w\'\. \[,\]]+?) (\d+)/rule_tac [$2] $1/g;
   132   s/rtac ([\w\'\. \[,\]]+?) (\d+)/rule_tac [$2] $1/g;
   137   s/res_inst_tac \[\((\".*?\"),(\".*?\")\)\] ([\w\'\. \[,\]]+?) 1/rule_tac $1 = $2 in $3/g;
   133   s/res_inst_tac \[(.*?)\] ([\w\'\. \[,\]]+?) (\d+)/rule_tac [$3] $1 in $2/g;
   138   s/dtac ([\w\'\. \[,\]]+?) 1/drule $1/g;
   134   s/dtac ([\w\'\. \[,\]]+?) 1/drule $1/g;
   139   s/dtac ([\w\'\. \[,\]]+?) (\d+)/drule_tac [$2] $1/g;
   135   s/dtac ([\w\'\. \[,\]]+?) (\d+)/drule_tac [$2] $1/g;
   140   s/dres_inst_tac \[\((\".*?\"),(\".*?\")\)\] ([\w\'\. \[,\]]+?) 1/drule_tac $1 = $2 in $3/g;
   136   s/dres_inst_tac \[(.*?)\] ([\w\'\. \[,\]]+?) (\d+)/drule_tac [$3] $1 in $2/g;
   141   s/datac ([\w\'\. \[,\]]+?) (\d+) 1/drule ($2) $1/g;
   137   s/datac ([\w\'\. \[,\]]+?) (\d+) 1/drule ($2) $1/g;
   142   s/etac ([\w\'\. \[,\]]+?) 1/erule $1/g;
   138   s/etac ([\w\'\. \[,\]]+?) 1/erule $1/g;
   143   s/etac ([\w\'\. \[,\]]+?) (\d+)/erule_tac [$2] $1/g;
   139   s/etac ([\w\'\. \[,\]]+?) (\d+)/erule_tac [$2] $1/g;
   144   s/eres_inst_tac \[\((\".*?\"),(\".*?\")\)\] ([\w\'\. \[,\]]+?) 1/erule_tac $1 = $2 in $3/g;
   140   s/eres_inst_tac \[(.*?)\] ([\w\'\. \[,\]]+?) (\d+)/erule_tac [$3] $1 in $2/g;
   145   s/eatac ([\w\'\. \[,\]]+?) (\d+) 1/erule ($2) $1/g;
   141   s/eatac ([\w\'\. \[,\]]+?) (\d+) 1/erule ($2) $1/g;
   146   s/forward_tac \[([\w\'\. \[,\]]+)\] 1/frule $1/g;
   142   s/forward_tac \[([\w\'\. \[,\]]+)\] 1/frule $1/g;
   147   s/forward_tac \[([\w\'\. \[,\]]+)\] (\d+)/frule_tac [$2] $1/g;
   143   s/forward_tac \[([\w\'\. \[,\]]+)\] (\d+)/frule_tac [$2] $1/g;
   148   s/ftac ([\w\'\. \[,\]]+?) 1/frule $1/g;
   144   s/ftac ([\w\'\. \[,\]]+?) 1/frule $1/g;
   149   s/ftac ([\w\'\. \[,\]]+?) (\d+)/frule_tac [$2] $1/g;
   145   s/ftac ([\w\'\. \[,\]]+?) (\d+)/frule_tac [$2] $1/g;
   150   s/forw_inst_tac \[\((\".*?\"),(\".*?\")\)\] ([\w\'\. \[,\]]+?) 1/frule_tac $1 = $2 in $3/g;
   146   s/forw_inst_tac \[(.*?)\] ([\w\'\. \[,\]]+?) (\d+)/frule_tac [$3] $1 in $2/g;
   151   s/fatac ([\w\'\. \[,\]]+?) (\d+) 1/frule ($2) $1/g;
   147   s/fatac ([\w\'\. \[,\]]+?) (\d+) 1/frule ($2) $1/g;
   152 
   148 
   153 
   149 
   154   s/fold_goals_tac *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"fold ".thmlist($1)/eg;
   150   s/fold_goals_tac *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"fold ".thmlist($1)/eg;
   155   s/rewrite_goals_tac *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"unfold ".thmlist($1)/eg;
   151   s/rewrite_goals_tac *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"unfold ".thmlist($1)/eg;
   156   s/cut_facts_tac *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+) 1/"cut_tac ".thmlist($1)/eg;
   152   s/cut_inst_tac \[(.*?)\] ([\w\'\. \[,\]]+?) (\d+)/cut_tac [$3] $1 in $2/g;
       
   153   s/cut_facts_tac *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+) (\d+)/"cut_tac [$2] ".thmlist($1)/eg;
   157   s/resolve_tac *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+) 1/"rule ".thmlist($1)/eg;
   154   s/resolve_tac *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+) 1/"rule ".thmlist($1)/eg;
   158 
   155 
   159   s/addIs *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"intro: ".thmlist($1)/eg;
   156   s/addIs *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"intro: ".thmlist($1)/eg;
   160   s/addSIs *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"intro!: ".thmlist($1)/eg;
   157   s/addSIs *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"intro!: ".thmlist($1)/eg;
   161   s/addEs *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"elim: ".thmlist($1)/eg;
   158   s/addEs *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"elim: ".thmlist($1)/eg;
   168   s/addcongs *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"cong add: ".thmlist($1)/eg;
   165   s/addcongs *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"cong add: ".thmlist($1)/eg;
   169   s/delcongs *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"cong del: ".thmlist($1)/eg;
   166   s/delcongs *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"cong del: ".thmlist($1)/eg;
   170   s/addsplits *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"split add: ".thmlist($1)/eg;
   167   s/addsplits *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"split add: ".thmlist($1)/eg;
   171   s/delsplits *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"split del: ".thmlist($1)/eg;
   168   s/delsplits *(\[[\w\'\. ,]*\]|[\w\'\. \[,\]]+)/"split del: ".thmlist($1)/eg;
   172 
   169 
       
   170   s/_tac \[1\]/_tac/g;
   173   s/ +/ /g;                       # remove multiple whitespace
   171   s/ +/ /g;                       # remove multiple whitespace
   174   s/\( /\(/; s/ \)/\)/g;  # remove leading and trailing space inside parentheses
   172   s/\( /\(/; s/ \)/\)/g;  # remove leading and trailing space inside parentheses
   175   s/^ *(.*?) *$/$1/s;             # remove enclosing whitespace
   173   s/^ *(.*?) *$/$1/s;             # remove enclosing whitespace
   176   s/^([a-zA-Z])/ $1/ if (!($lead =~ m/[\s\(]$/)); # add space if required
   174   s/^([a-zA-Z])/ $1/ if (!($lead =~ m/[\s\(]$/)); # add space if required
   177   $_;
   175   $_;
   187     open TMPR,$tmpfile or die "Can't find tmp file $tmp: $!\n";
   185     open TMPR,$tmpfile or die "Can't find tmp file $tmp: $!\n";
   188     while(<TMPR>) {
   186     while(<TMPR>) {
   189       s/@@(\d+)@@/$thmnames[$1]/eg;
   187       s/@@(\d+)@@/$thmnames[$1]/eg;
   190       print TMPW $_;
   188       print TMPW $_;
   191     }
   189     }
   192     system("mv $currfile $currfile~0~");
   190     system("mv $currfile $currfile~0~") if($currfile ne $default);
   193     system("rm $tmpfile");
   191     system("rm $tmpfile");
   194   }
   192   }
   195 }
   193 }
   196 
   194 
   197 sub done {
   195 sub done {
   201   "done";
   199   "done";
   202 }
   200 }
   203 
   201 
   204 $currfile = "";
   202 $currfile = "";
   205 $next = "nonempty";
   203 $next = "nonempty";
       
   204 $default = "convert_default_stdout";
   206 while (<>) { # main loop
   205 while (<>) { # main loop
   207   if ($ARGV ne $currfile) {
   206   if ($ARGV ne $currfile) {
   208     $x=$_; backpatch_thmnames; $_=$x;
   207     $x=$_; backpatch_thmnames; $_=$x;
   209     $currfile = $ARGV;
   208     $currfile = ($ARGV eq "-" ? $default : $ARGV);
   210     $thmcount=0;
   209     $thmcount=0;
   211     $finalfile = "$currfile.thy";
   210     $finalfile = "$currfile.thy";
   212     $tmpfile   = "$finalfile.~0~";
   211     $tmpfile   = "$finalfile.~0~";
   213     open(ARGVOUT, '>'.$tmpfile);
   212     open(ARGVOUT, '>'.$tmpfile);
   214     select(ARGVOUT);
   213     select(ARGVOUT);
   236   }
   235   }
   237   $_=$line;
   236   $_=$line;
   238   s/^Goalw *(\[[\w\'\.\s,]*\]|[\w\'\. \[,\]]+) *(.+)/
   237   s/^Goalw *(\[[\w\'\.\s,]*\]|[\w\'\. \[,\]]+) *(.+)/
   239     "lemma ".thmname().": $2$head"."apply (unfold ".thmlist($1).")"/se;
   238     "lemma ".thmname().": $2$head"."apply (unfold ".thmlist($1).")"/se;
   240   s/^Goal *(.+)/"lemma ".thmname().": $1"/se;
   239   s/^Goal *(.+)/"lemma ".thmname().": $1"/se;
   241   s/( |^)goal/"(*".thmname()."*)$1goal"/se; # ugly old-style goals
   240   s/\bgoal/"(*".thmname()."*)goal"/se; # ugly old-style goals
   242   s/^qed_spec_mp *\"(.*?)\"/done($1," [rule_format (no_asm)]")/se;
   241   s/^qed_spec_mp *\"(.*?)\"/done($1," [rule_format (no_asm)]")/se;
   243   s/^qed *\"(.*?)\"/done($1,"")/se;
   242   s/^qed *\"(.*?)\"/done($1,"")/se;
       
   243   s/^val *(\w+) *= *result *\( *\) *$/done($1,"")/se;
       
   244   s/^bind_thm *\( *\"(.*?)\" *, *(result *\( *\) *?) *\) *$/done($1,"")/se;
   244   s/^bind_thm *\( *\"(.*?)\" *, *(.*?result *\( *\).*?) *\) *$/done($1,"[?? $2 ??] ")/se;
   245   s/^bind_thm *\( *\"(.*?)\" *, *(.*?result *\( *\).*?) *\) *$/done($1,"[?? $2 ??] ")/se;
   245   s/^bind_thm *\( *\"(.*?)\" *, *(.*?) *\) *$/"lemmas $1 = ".subst_RS_fun($2)/se;
   246   s/^bind_thm *\( *\"(.*?)\" *, *(.*?) *\) *$/"lemmas $1 = ".subst_RS_fun($2)/se;
   246   s/^by(\s*\(?\s*)(.*?)\s*(\)?)\s*$/"apply".$1.process_tac($1,$2).$3/se;
   247   s/^by(\s*\(?\s*)(.*?)\s*(\)?)\s*$/"apply".$1.process_tac($1,$2).$3/se;
   247   s/^(apply +)\( *([\w\'\.]+)\s*\)\s*$/$1$2/;
   248   s/^(apply +)\( *([\w\'\.]+)\s*\)\s*$/$1$2/;
   248                              # remove outermost parentheses if around atoms
   249                              # remove outermost parentheses if around atoms