Infix fixity no longer takes just a number
specifying precedence, instead Infix is of type
(int * associativity) -> fixity. This means that
where fixities are required, you can no longer write something
like Infix 300, and must now write Infix(300,
RIGHT) instead. Possible associativities are
LEFT, RIGHT and NONASSOC.
Alternatively, it is possible to use Infixl and
Infixr as abbreviations for the left and right
associative versions of Infix. (I.e., you can
write Infixl 300.)
new_infix_definition no longer
exists. Instead, there are two new functions
new_infixl_definition and
new_infixr_definition with the same signatures.
These define left associative and right associative constants
respectively.
new_recursive_definition no longer
takes fixity information at all. Most definitions with this
function specified the ("do nothing") Prefix
fixity, and because new_recursive_definition can
now define multiple (mutually recursive) functions all at once,
an interface where one fixity was specified was deemed
inappropriate.
You will need to use set_fixity,
add_rule or add_infix to manipulate
the grammar in a separate interaction. The last two functions
above are documented in the Reference manual.
(n,b :num # bool), one now should write
(n:num,b:bool) or (n,b):num#bool.
This change makes HOL syntax more like the ML syntax.
dest_comb, mk_abs etc) are now open
when an interactive HOL session begins. The "record" versions
of these functions are still available through the
Rsyntax structure.
Def_MN_Type, or the underlying
nested_recLib) expects datatype axioms for types
such as lists under which recursive occurrences are nested.
These axioms need to be of the "old" form (with a unique
existence constant ?!), not the new. For example,
the old list axiom is listTheory.list_Axiom_old.
In any case, it's recommended that such definitions be reworked
to use the Hol_datatype function.
define_type can
now no longer be used as input to the
new_recursive_definition function. You can
convert old style axioms to new style ones, by using
Prim_rec_Compat.old_style_to_new.
restr_binderTheory has been merged into
res_quanTheory.
ListTheory has been renamed
to rich_listTheory.
bossLib function primDefine no
longer exists. This is an oversight that will be corrected in
Taupo-3. Here's a workaround; the effect of
primDefine (Term`fact(x) = (x=0 => 1 | x*fact(x-1))`) Prefix "fact";
> val it =
|- (fact x = ((x = 0) => 1 | (x * fact (x - 1)))) /\
(!P. (!x. (~(x = 0) ==> P (x - 1)) ==> P x) ==> (!v. P v))
can be obtained by
val tm = Term`fact(x) = (x=0 => 1 | x*fact(x-1))`;
xDefine "fact" `^tm`;
Equations stored under "fact_def".
Induction stored under "fact_ind".
> val it = |- fact x = (if x=0 then 1 else x * fact (x-1)) : Thm.thm
- theorem "fact_ind";
> val it = |- !P. (!x. (~(x = 0) ==> P (x - 1)) ==> P x) ==> !v. P v