History log of /seL4-l4v-10.1.1/HOL4/src/tfl/src/Defn.sig
Revision Date Author Comments
# dbcf5197 04-Aug-2016 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Add function Defn.Hol_multi_defns.

This involves moving some code from TotalDefn to Defn.


# c13a00c1 20-Nov-2012 Michael Norrish <michael.norrish@nicta.com.au>

Remove tfl/src/Functional.{sig,sml}; redirect to src/1/Pmatch instead.

This preliminary check-in doesn’t bring across all of the differences
between Functional and Pmatch. On the assumption that the differences
are important, I’ll patch Pmatch as necessary on this branch before
merging back into master.

Intention is to have this done before proceeding with work on
features/case-const-argflip. Given that, this is progress of a sort
with Github issue #97.


# 845531b5 14-Sep-2011 Michael Norrish <Michael.Norrish@nicta.com.au>

Remove trailing whitespace in source files.


# dea61e3e 30-Aug-2011 Scott Owens <Scott.Owens@cl.cam.ac.uk>

Add hooks in Defn to support termination proofs in other Script files.

The new tgoal_no_def and tprove_no_ind functions take the (terminiation
condition constrained) equation and induction theorems as stored in a theory by
Defn.save_defn and start a termination proof. This seems to work because the
existing tgoal and tprove functions do not look at then Defn.defn object other
than to get the equation and induction theorems.

This allows me to write a Hol_defn and save_defn in one Script file and carry
out the termination proof in a different Script file. It might be better to add
the defn object itself to the Theory file, but there doesn't appear to be any
immediate practical benefit (the defn object seems to be undocumented).


# 4761143b 10-Aug-2009 Tjark Weber <Tjark.Weber@cl.cam.ac.uk>

Removed trailing whitespace from all .sml and .sig files.

This affects over 900 files and was done using emacs's delete-trailing-whitespace
function in batch mode. Building the system with Poly/ML and Moscow ML seems to
work, so I'm hoping these changes don't break anything. Please complain if
they do!


# d2eed5a0 18-Oct-2008 Konrad Slind <konrad.slind@gmail.com>

Added support for making multiple definitions
in one invocation.


# 7b11d4a6 14-Jun-2008 Konrad Slind <konrad.slind@gmail.com>

Added proofManagerLib. This adds a type of "goal trees"
as an alternative to goalstacks. Relevant entrypoints:

gt ` .... ` -- start a goaltree proof,
analogous to g
eq ` ... ` -- expand a tactic,
analogous to e (except that
the text of the tactic is
delimited by quotes).

A goaltree manages the construction of the final
tactic, so should ease some of the script maintenance
that the goalstack requires.

Backup and restart are just as for goalstacks.

All the entrypoints for goalstacks are just as they
were before; there shouldn't be any difference.


# 0ed151ff 13-Aug-2007 Konrad Slind <konrad.slind@gmail.com>

Fixed a subtle bug in termination condition extraction,
whereby multiple let-bindings for a variable would
cause Define to be unpredictable and sometimes broken.
Now variables get renamed in order to make the definition
process succeed. So the definition

Define `field_exp_aux (r5:word32,r6:word32,r7:word32,r10) =
if r6 = 0w then (r7,r10) else
if r6 && 1w = 0w then
let r6 = r6 >>> 1 in
let r2 = r5 in
let r3 = r5 in
let (r4,r10) = field_mult (r2,r3,r10) in
let r5 = r4 in
field_exp_aux (r5:word32,r6:word32,r7:word32,r10)
else
let r6 = r6 >>> 1 in
let r2 = r7 in
let r3 = r5 in
let (r4,r10) = field_mult (r2,r3,r10) in
let r7 = r4 in
let r2 = r5 in
let r3 = r5 in
let (r4,r10) = field_mult (r2,r3,r10) in
let r5 = r4 in
field_exp_aux (r5:word32,r6:word32,r7:word32,r10)`;

will, in the second recursive call, rename r7,r2,r3,r4,r5,r6,
and r10 (twice):

|- field_exp_aux (r5,r6,r7,r10) =
(if r6 = 0w then
(r7,r10)
else
(if r6 && 1w = 0w then
(let r6' = r6 >>> 1 in
let r2 = r5 in
let r3 = r5 in
let (r4,r10') = field_mult (r2,r3,r10) in
let r5' = r4 in
field_exp_aux (r5',r6',r7,r10'))
else
(let r6' = r6 >>> 1 in
let r2 = r7 in
let r3 = r5 in
let (r4,r10') = field_mult (r2,r3,r10) in
let r7' = r4 in
let r2' = r5 in
let r3' = r5 in
let (r4',r10'') = field_mult (r2',r3',r10') in
let r5' = r4' in
field_exp_aux (r5',r6',r7',r10'')))) : thm

Thanks to Magnus for bringing this to my attention.


# bb896b6b 30-Jan-2007 Konrad Slind <konrad.slind@gmail.com>

Support for tDefine.


# 20133481 23-Oct-2006 Konrad Slind <konrad.slind@gmail.com>

Define now handles simple definitions defined by
pattern-matching against (numeric) constants, e.g.

Define `(f 0 = 1) /\ (f 1 = 1) /\ (f n = f (n-1) + f (n-2)`;

But more testing/robustification needs to be done.


# 73093559 04-Aug-2004 Konrad Slind <konrad.slind@gmail.com>

Moved TotalDefn to num/termination.
Also, fixed up "dec-suc-ification" used in Defn.sml, to use a hook.


# e57ad10f 15-Oct-2002 Keith Wansbrough <keith@lochan.org>

Make Hol_defn and friends report location of the definition at fault.
Sorry, can't be more precise at the moment.


# 5bc90516 19-Dec-2001 Michael Norrish <Michael.Norrish@nicta.com.au>

Defn.sig needs to change to reflect changed type of tstore_defn.


# 344c1826 18-Dec-2001 Konrad Slind <konrad.slind@gmail.com>

Minor mods to persistence of things introduced via TFL. In particular,
tstore_defn doesn't call add_funs twice.


# 8230a0db 18-Dec-2001 Konrad Slind <konrad.slind@gmail.com>

Made Define store its resulting equations in the compset in a persistent
manner.


# 3d2f9ce3 20-Jun-2001 Konrad Slind <konrad.slind@gmail.com>

Change stemming from split of TypeBase into TypeBasePure and TypeBase.


# 202f9fdc 08-May-2001 Konrad Slind <konrad.slind@gmail.com>

Changes to improve interface for nested definitions.


# cfdc1706 11-Apr-2001 Michael Norrish <Michael.Norrish@nicta.com.au>

Modifications caused by change of TypeBase signature.


# 54911cb6 05-Jan-2001 Konrad Slind <konrad.slind@gmail.com>

Minor changes.


# 05fad346 06-Apr-2000 Konrad Slind <konrad.slind@gmail.com>

Defn.tgoal is changed to deliver a goal of the form

?R . TC_1(R) /\ ... /\ TC_k(R) /\ WF R

When the proof is finished, the finalizer in the goalstack will
not return this theorem, but the specified recursion eqns. and
induction theorem.


# 0530154d 22-Mar-2000 Konrad Slind <konrad.slind@gmail.com>

Things are starting to stabilize. The main change from the last
update is that defns can be saved (in a sense). In the next revision,
defns will be written into a persistent DefnBase.


# 8b23d815 20-Mar-2000 Konrad Slind <konrad.slind@gmail.com>

Ongoing revisions. Defn has been split into a basic datastructure
and manipulations (Defn0) and the definition entrypoints (Defn).
This allows a prettyprinter for the "defn" type to be automatically
installed when the std.prelude runs. Defn0 is part of basicHol90.


# f039c49c 17-Mar-2000 Konrad Slind <konrad.slind@gmail.com>

Big re-organizational changes. Tfl and tflLib are gone ... the relevant
files are instead Defn and TotalDefn.


# 81d90cf6 28-Nov-1999 Konrad Slind <konrad.slind@gmail.com>

Re-organization, hopefully to make things clearer.


# 2813abd3 08-Nov-1999 Konrad Slind <konrad.slind@gmail.com>

1. Added a termination interface to Defn. This takes a defn and attaches a
new goalstack to the list of current proofs. There is also an analogue
that wraps up a defn and a tactic and applies the tactic to the
termination constraints of the definition. If the tactic proves the
goal, then the unconstrained recursion equations and induction theorem
are returned.


tgoal : defn -> proofs
tprove : defn * tactic -> thm * thm

In tprove, some cleverness is used to arrange that the ultimate goal
(namely the unconstrained recursion equations and induction theorem) is
not what is initially seen by the user; instead the first goal appears
to be something of the form

?R. TC_1 /\ ... /\ TC_n /\ WF R

Proving this will deliver the top_thm()

|- rec. eqns /\ ind. thm

One problem with this sleight of hand is its behaviour with respect to
"restart" -- restarting takes us to the ultimate goal. To regain the
original state, Defn.TC_TAC <defn> may be used.

2. Halts.TC_SIMP_CONV uses a standard set of theorems about WF to simplify
goals ensuing from giving the witness for R above. Typically, one would
work by going

val foo_defn = Hol_fun "foo" <eqns for foo> ;

Defn.tgoal foo_defn;
e (EXISTS_TAC <some termination relation>);
e (CONV_TAC Halts.TC_SIMP_CONV);


# c27fb33a 22-Sep-1999 Konrad Slind <konrad.slind@gmail.com>

New features in Defn and Halts.


# e567b715 18-Aug-1999 Konrad Slind <konrad.slind@gmail.com>

Major changes to accomodate TFL advances. Now mutual, nested, and
schematic recursions can be given. Termination relations can be
deferred for these (in fact, deferred definitions are the only
way of making such definitions currently).

WFScript.sml has been eliminated and its components have been
dispersed to the appropriate theories (pairTheory, prim_recTheory,
and listTheory).

Defn provides a high-level interface to deferred definitions.
Defn relies on very little background support, so it can be
used when one does not need (or desire) the full weight of
bossLib.

Halts has been moved from bossLib.

tflLib may soon go away, since its functionality should in the
longer run be subsumed by Defn + Halts.