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