| 
103
 | 
     1  | 
**** Isabelle-93 : a faster version of Isabelle-92 ****
  | 
| 
 | 
     2  | 
  | 
| 
 | 
     3  | 
Isabelle now runs faster through a combination of improvements: pattern
  | 
| 
 | 
     4  | 
unification, discrimination nets and removal of assumptions during
  | 
| 
 | 
     5  | 
simplification.  A new simplifier, although less flexible than the old one,
  | 
| 
 | 
     6  | 
runs many times faster for large subgoals.  Classical reasoning
  | 
| 
 | 
     7  | 
(e.g. fast_tac) runs up to 30% faster when large numbers of rules are
  | 
| 
 | 
     8  | 
involved.  Incompatibilities are few, and mostly concern the simplifier.
  | 
| 
 | 
     9  | 
  | 
| 
 | 
    10  | 
THE SPEEDUPS
  | 
| 
 | 
    11  | 
  | 
| 
 | 
    12  | 
The new simplifier is described in the Reference Manual, Chapter 8.  See
  | 
| 
 | 
    13  | 
below for advice on converting.
  | 
| 
 | 
    14  | 
  | 
| 
 | 
    15  | 
Pattern unification is completely invisible to users.  It efficiently
  | 
| 
 | 
    16  | 
handles a common case of higher-order unification.
  | 
| 
 | 
    17  | 
  | 
| 
 | 
    18  | 
Discrimination nets replace the old stringtrees.  They provide fast lookup
  | 
| 
 | 
    19  | 
in a large set of rules for matching or unification.  New "net" tactics
  | 
| 
 | 
    20  | 
replace the "compat_..." tactics based on stringtrees.  Tactics
  | 
| 
 | 
    21  | 
biresolve_from_nets_tac, bimatch_from_nets_tac, resolve_from_net_tac and
  | 
| 
 | 
    22  | 
match_from_net_tac take a net, rather than a list of rules, and perform
  | 
| 
 | 
    23  | 
resolution or matching.  Tactics net_biresolve_tac, net_bimatch_tac
  | 
| 
 | 
    24  | 
net_resolve_tac and net_match_tac take a list of rules, build a net
  | 
| 
 | 
    25  | 
(internally) and perform resolution or matching.
  | 
| 
 | 
    26  | 
  | 
| 
 | 
    27  | 
The tactical METAHYPS, which allows a subgoal's hypotheses to be taken as a
  | 
| 
 | 
    28  | 
list of theorems, has been extended to handle unknowns (although not type
  | 
| 
 | 
    29  | 
unknowns).  The simplification tactics now use METAHYPS to economise on
  | 
| 
 | 
    30  | 
storage consumption, and to avoid problems involving "parameters" bound in
  | 
| 
 | 
    31  | 
a subgoal.  The modified simplifier now requires the auto_tac to take an
  | 
| 
 | 
    32  | 
extra argument: a list of theorems, which represents the assumptions of the
  | 
| 
 | 
    33  | 
current subgoal.
  | 
| 
 | 
    34  | 
  | 
| 
 | 
    35  | 
OTHER CHANGES
  | 
| 
 | 
    36  | 
  | 
| 
 | 
    37  | 
Apart from minor improvements in Pure Isabelle, the main other changes are
  | 
| 
 | 
    38  | 
extensions to object-logics.  HOL now contains a treatment of co-induction
  | 
| 
 | 
    39  | 
and co-recursion, while ZF contains a formalization of equivalence classes,
  | 
| 
 | 
    40  | 
the integers and binary arithmetic.  None of this material is documented.
  | 
| 
 | 
    41  | 
  | 
| 
 | 
    42  | 
  | 
| 
 | 
    43  | 
CONVERTING FROM THE OLD TO THE NEW SIMPLIFIER (for FOL/ZF/LCF/HOL)
  | 
| 
 | 
    44  | 
  | 
| 
 | 
    45  | 
1.  Run a crude shell script to convert your ML-files:
  | 
| 
 | 
    46  | 
  | 
| 
 | 
    47  | 
	change_simp *ML
  | 
| 
 | 
    48  | 
  | 
| 
 | 
    49  | 
2.  Most congruence rules are no longer needed.  Hence you should remove all
  | 
| 
 | 
    50  | 
calls to mk_congs and mk_typed_congs (they no longer exist) and most
  | 
| 
 | 
    51  | 
occurrences of addcongs.  The only exception are congruence rules for special
  | 
| 
 | 
    52  | 
constants like (in FOL)
  | 
| 
 | 
    53  | 
  | 
| 
 | 
    54  | 
[| ?P <-> ?P'; ?P' ==> ?Q <-> ?Q' |] ==> ?P --> ?Q = ?P' --> ?Q'
  | 
| 
 | 
    55  | 
and 
  | 
| 
 | 
    56  | 
[| A=A';  !!x. x:A' ==> P(x) <-> P'(x) |] ==>
  | 
| 
 | 
    57  | 
(ALL x:A. P(x)) <-> (ALL x:A'. P'(x))
  | 
| 
 | 
    58  | 
  | 
| 
 | 
    59  | 
where some of the arguments are simplified under additional premises.  Most
  | 
| 
 | 
    60  | 
likely you don't have any constructs like that, or they are already included
  | 
| 
 | 
    61  | 
in the basic simpset.
  | 
| 
 | 
    62  | 
  | 
| 
 | 
    63  | 
3.  In case you have used the addsplits facilities of the old simplifier:
  | 
| 
 | 
    64  | 
The case-splitting and simplification tactics have been separated.  If you
  | 
| 
 | 
    65  | 
want to interleave case-splitting with simplification, you have do so
  | 
| 
 | 
    66  | 
explicitly by the following command:
  | 
| 
 | 
    67  | 
  | 
| 
 | 
    68  | 
ss setloop (split_tac split_thms)
  | 
| 
 | 
    69  | 
  | 
| 
 | 
    70  | 
where ss is a simpset and split_thms the list of case-splitting theorems.
  | 
| 
 | 
    71  | 
The shell script in step 1 tries to convert to from addsplits to setloop
  | 
| 
 | 
    72  | 
automatically.
  | 
| 
 | 
    73  | 
  | 
| 
 | 
    74  | 
4.  If you have used setauto, you have to change it to setsolver by hand.
  | 
| 
 | 
    75  | 
The solver is more delicate than the auto tactic used to be.  For details see
  | 
| 
 | 
    76  | 
the full description of the new simplifier.  One very slight incompatibility
  | 
| 
 | 
    77  | 
is the fact that the old auto tactic could sometimes see premises as part of
  | 
| 
 | 
    78  | 
the proof state, whereas now they are always passed explicit as arguments.
  | 
| 
 | 
    79  | 
  | 
| 
 | 
    80  | 
5.  It is quite likely that a few proofs require further hand massaging.
  | 
| 
 | 
    81  | 
  | 
| 
 | 
    82  | 
Known incompatibilities:
  | 
| 
 | 
    83  | 
- Applying a rewrite rule cannot instantiate a subgoal.  This rules out
  | 
| 
 | 
    84  | 
solving a premise of a conditional rewrite rule with extra unknowns by
  | 
| 
 | 
    85  | 
rewriting.  Only the solver can instantiate.
  | 
| 
 | 
    86  | 
  | 
| 
 | 
    87  | 
Known bugs:
  | 
| 
 | 
    88  | 
- The names of bound variables can be changed by the simplifier.
  | 
| 
 | 
    89  | 
  | 
| 
 | 
    90  | 
  |