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