History log of /seL4-l4v-master/HOL4/examples/dev/compile.sml
Revision Date Author Comments
# 8d2dfbce 18-Nov-2018 Michael Norrish <Michael.Norrish@nicta.com.au>

Remove Globals.priming.

Also remove references to it in code that isn't being tested in the
regression checking build-sequence, and so is probably bit-rotted.

Provide numvariant version of variant, which behaves like

with_flag(Globals.priming,SOME "") (variant avoids)

Document change/incompatibility in release notes.


# 4888f523 15-Oct-2017 Michael Norrish <Michael.Norrish@nicta.com.au>

Remove eqtype declaration for term type


# 97475109 27-Jul-2012 Michael Norrish <michael.norrish@nicta.com.au>

Remove trailing whitespace in examples directory.


# 6acdb5d3 11-Jun-2012 Konrad Slind <konrad.slind@gmail.com>

Updating h/w synthesis stuff so that it works again.


# 4ad190a9 25-Sep-2009 Peter Homeier <palantir@trustworthytools.com>

Changed hol-mode.src and src/parse/PPBackEnd.sml so that type variables are displayed in purple.

"Everybody's cute... Everybody's cute, even me. But in purple, I'm STUNNING!"
(Centauri Ambassador Londo Molari, Babylon 5, The Parliament of Dreams)


# 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!


# f39037ec 20-Jan-2009 Konrad Slind <konrad.slind@gmail.com>

Get dev stuff working again.


# cf145d92 15-May-2008 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Avoid parsing incompatibilities with wordsTheory.


# 927035f4 12-May-2008 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Updated Juliano's hardware compilation to work with wordsTheory. There are
now some nasty parser warnings with "===>", "<>" and possibly others.

The dev/booth example was/is broken (I haven't attempted to repair it).

Have updated dev/AES/word8 and Crypto/AES. Perhaps dev/AES should be removed?

The hardware compilation for Crypto/TEA and Crypto/RC6 are now broken.
Updating the Crypto examples should be straightforward. Once done I can
delete src/n_bit.


# 1f43f91a 27-Jan-2008 Konrad Slind <konrad.slind@gmail.com>

Added propositional logic (pedagogical example)
and updated the README. Some other files
seem to have been changed as well.


# 76c6bb40 04-Dec-2006 Juliano Iyoda <jmi27@cam.ac.uk>

Small change to hwDefine2: the function addTerminationTheorems allows the user to add new theorems to prove termination


# c2c8a029 11-Sep-2006 Juliano Iyoda <jmi27@cam.ac.uk>

Changed hwDefine to work with wordsTheory


# 8d1010a1 26-May-2006 Juliano Iyoda <jmi27@cam.ac.uk>

Update NEW_MAKE_CIRCUIT with Mike Gordon's improvement of the synthesis for conditionals. Changes are indicated by (* new *)


# 93dd4003 15-May-2006 Mike Gordon <mjcg@cl.cam.ac.uk>

Improve synthesis for conditionals.


# 1604d2a9 05-Apr-2006 Juliano Iyoda <jmi27@cam.ac.uk>

Changed inlineCompile to accept Let-exps.
Also updating Mike's change to COMB_SYNTH_CONV to deal
with more cases involving tuples.


# 9a6ed4a4 10-Mar-2006 Konrad Slind <konrad.slind@gmail.com>

Improved hwDefine to solve more termination problems ... don't
always have to give a measure, for example.


# 9605317c 18-Feb-2006 Konrad Slind <konrad.slind@gmail.com>

Catching up MAKE_NETLIST to recent changes.


# 41bcddef 09-Feb-2006 Mike Gordon <mjcg@cl.cam.ac.uk>

Initial (probably buggy) release of a new Verilog back end. This
generates "behavioral" rather than "structural" Verilog (i.e. the body
of a generated module consists of continuous assignments and always
statements rather than module instances). I haven't deleted the code
for generating separate module definitions and instances for
components (this is now obsolete and I'll delete it once the new
approach has been validated). There is now a single way of linking
combinational HOL code to Verilog:


(*****************************************************************************)
(* Library associating HOL terms with ML functions for generating *)
(* combinational Verilog. Typical example: *)
(* *)
(* add_vsynth *)
(* [(``\(in1,in2). in1 >> in2``, *)
(* (fn[i1,i2] => ("{{31{" ^ i1 ^ "[31]}}," ^ i1 ^ "} >> " ^i2))), *)
(* (``UNCURRY $>>``, *)
(* (fn[i1,i2] => ("{{31{" ^ i1 ^ "[31]}}," ^ i1 ^ "} >> " ^i2)))] *)
(* *)
(* which will cause both *)
(* *)
(* ``COMB (\(in1,in2). in1 >> in2) (x<>y, z)`` *)
(* *)
(* and *)
(* *)
(* ``COMB (UNCURRY $>>) (x<>y, z)`` *)
(* *)
(* to generate the Verilog statement *)
(* *)
(* assign z = {{31{x[31]}},x} >> y; *)
(*****************************************************************************)

AddBinop can now be defined by:

fun AddBinop (_:string, (hbinop,vbinop)) =
add_vsynth[(hbinop, fn[i1,i2] => (i1 ^ " " ^ vbinop ^ " " ^ i2))];

[Note that a module name isn't needed anymore.]


# abe217f8 04-Feb-2006 Konrad Slind <konrad.slind@gmail.com>

Spotted another optimization (getting rid of unnecessary applications
of higher-order rewriting, as usual).

Also added newcirDefine, which should behave as cirDefine, except
faster.


# f490eeb2 05-Feb-2006 Konrad Slind <konrad.slind@gmail.com>

Made STEP5 of MAKE_NETLIST (and NEW_MAKE_CIRCUIT) much faster. Seems
basically constant time now, rather than being the bottleneck it
was before.


# 2053bdae 04-Feb-2006 Mike Gordon <mjcg@cl.cam.ac.uk>

Commenting out some rewrites that were (apparently) generating:
CONSTANT (0w,1w,2w,3w)

(* COMB_CONSTANT_1,COMB_CONSTANT_2,COMB_CONSTANT_3, *)

This make break other things. Also various changes to enhance
COMB_SYNTH_CONV which I wrongly thought was the problem, but which
may also break synthesis.


# 86b52901 04-Feb-2006 Mike Gordon <mjcg@cl.cam.ac.uk>

Not sure what changed in compile.sml, but better diagnostics added to
vsynth.sml


# e85dabc2 03-Feb-2006 Konrad Slind <konrad.slind@gmail.com>

*** empty log message ***


# 6e8d4049 02-Feb-2006 Mike Gordon <mjcg@cl.cam.ac.uk>

Preliminary attempt to handle combinational lets.
Example:

> val H_def = |- H x = x + 1 : thm
- add_combinational["H"];
> val J_def = |- J x = (let y = H x in y + y + y) : thm
- MAKE_CIRCUIT(EXPAND_COMPONENTS(REFINE_ALL J_dev));
> val it =
|- InfRise clk ==>
(?v0 v1 v2 v3 v4 v5 v6.
DtypeT (clk,load,v3) /\ NOT (v3,v2) /\ AND (v2,load,v1) /\
NOT (v1,done) /\ CONSTANT 1 v5 /\
COMB (UNCURRY $+) (inp <> v5,v4) /\
COMB (UNCURRY $+) (v4 <> v4,v6) /\
COMB (UNCURRY $+) (v6 <> v4,v0) /\ Dtype (clk,v0,out)) ==>
DEV J (load at clk,inp at clk,done at clk,out at clk) : thm


# 565c48ab 02-Feb-2006 Konrad Slind <konrad.slind@gmail.com>

Support for lets, by having a Let combinator. The intent is to use
Let as a way of avoiding the translation to Seq and Par, which
doesn't keep the sharing of the let. The Let expression eventually
is replaced by an ordinary "let" which, thanks to Mike, is dealt
with in COMB_SYNTH_CONV.


# 5904c6ad 01-Feb-2006 Mike Gordon <mjcg@cl.cam.ac.uk>

Improving COMB_SYNTH_CONV treatment of ``let (v1,v2) = ... in ...``.
Example:

> val tm =
``COMB
(\(x1,x2,x3,x4).
(let (y1,(y2,y3),y4) = (x1 + x2,(x3,x2),x3 + x4) in
let (z1,z2) = (y1 + y2,y3 + y4) in
z1 - z2 + (z2 - z1))) (in1 <> in2 <> in3 <> in4,out)`` : term

- (TOP_DEPTH_CONV COMB_SYNTH_CONV THENC EXISTS_OUT_CONV) tm;
> val it =
|- COMB
(\(x1,x2,x3,x4).
(let (y1,(y2,y3),y4) = (x1 + x2,(x3,x2),x3 + x4) in
let (z1,z2) = (y1 + y2,y3 + y4) in
z1 - z2 + (z2 - z1))) (in1 <> in2 <> in3 <> in4,out) =
?v0 v1 v2 v3 v4 v5.
COMB (UNCURRY $+) (in1 <> in2,v1) /\
COMB (UNCURRY $+) (in3 <> in4,v0) /\
COMB (UNCURRY $+) (v1 <> in3,v3) /\
COMB (UNCURRY $+) (in2 <> v0,v2) /\
COMB (UNCURRY $-) (v3 <> v2,v5) /\
COMB (UNCURRY $-) (v2 <> v3,v4) /\
COMB (UNCURRY $+) (v5 <> v4,out) : thm


# eb4d93ef 01-Feb-2006 Mike Gordon <mjcg@cl.cam.ac.uk>

Changing a dest_abs to dest_pabs makes paired lets work:

- (REDEPTH_CONV(COMB_SYNTH_CONV) THENC EXISTS_OUT_CONV)
``COMB(\(x1,x2,x3).
(let (y1,(y2,y3),y4) = (x1+x2,(x1+1,x2-1),x3) in y1+y1+y2+y4+y3))
(in1 <> in2 <> in3,out)``;
<<HOL message: inventing new type variable names: 'a>>
> val it =
|- COMB
(\(x1,x2,x3).
(let (y1,(y2,y3),y4) = (x1 + x2,(x1 + 1,x2 - 1),x3) in
y1 + y1 + y2 + y4 + y3)) (in1 <> in2 <> in3,out) =
?v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15.
COMB (UNCURRY $+) (in1 <> in2,v2) /\ CONSTANT 1 v6 /\
COMB (UNCURRY $+) (in1 <> v6,v5) /\ CONSTANT 1 v7 /\
COMB (UNCURRY $-) (in2 <> v7,v4) /\
COMB (UNCURRY $,) (v5 <> v4,v3) /\
COMB (UNCURRY $,) (v3 <> in3,v1) /\
COMB (UNCURRY $,) (v2 <> v1,v0) /\
COMB (\((x1,x2,x3),y1,(y2,y3),y4). y1)
((in1 <> in2 <> in3) <> v0,v15) /\
COMB (\((x1,x2,x3),y1,(y2,y3),y4). y1)
((in1 <> in2 <> in3) <> v0,v14) /\
COMB (UNCURRY $+) (v15 <> v14,v13) /\
COMB (\((x1,x2,x3),y1,(y2,y3),y4). y2)
((in1 <> in2 <> in3) <> v0,v12) /\
COMB (UNCURRY $+) (v13 <> v12,v11) /\
COMB (\((x1,x2,x3),y1,(y2,y3),y4). y4)
((in1 <> in2 <> in3) <> v0,v10) /\
COMB (UNCURRY $+) (v11 <> v10,v9) /\
COMB (\((x1,x2,x3),y1,(y2,y3),y4). y3)
((in1 <> in2 <> in3) <> v0,v8) /\
COMB (UNCURRY $+) (v9 <> v8,out) : thm
-
May need to do something to eliminate the `rewiring' COMBs.


# 6a5fe8f5 01-Feb-2006 Mike Gordon <mjcg@cl.cam.ac.uk>

Added a case to COMB_SYNTH_CONV to handle let-terms
(experimental extension intended to be useful for Konrad).
For example:

- COMB_SYNTH_CONV
``COMB(\(x1,x2,x3). let y = x1 + x2 in y - x3) (in1 <> in2 <> in3, out)``;
> val it =
|- COMB (\(x1,x2,x3). (let y = x1 + x2 in y - x3))
(in1 <> in2 <> in3,out) =
?%%genvar%%805.
COMB (\(x1,x2,x3). x1 + x2) (in1 <> in2 <> in3,%%genvar%%805) /\
COMB (\((x1,x2,x3),y). y - x3)
((in1 <> in2 <> in3) <> %%genvar%%805,out) : thm


# 378d1050 26-Jan-2006 Juliano Iyoda <jmi27@cam.ac.uk>

unimportant changes


# a01df5de 26-Jan-2006 Juliano Iyoda <jmi27@cam.ac.uk>

Added new compiler with whole program compaction optimisation


# 6a618bd4 12-Nov-2005 Konrad Slind <konrad.slind@gmail.com>

Have added an optimized version of MAKE_CIRCUIT, called
NEW_MAKE_CIRCUIT. It should be a drop-in replacement,
although the circuits it returns are not always alpha-convertible
with those of MAKE_CIRCUIT. Please try it out ... it's much
faster (6 secs vs 45 for final call to MAKE_CIRCUIT in
dev/FactScript.sml).


# df021246 30-Oct-2005 Konrad Slind <konrad.slind@gmail.com>

Added a new "sw" directory for the software compiler being
written by Li, Owens, and Slind. This is a temporary hiding
place for work-in-progress.


# e9f227aa 11-Jul-2005 Konrad Slind <konrad.slind@gmail.com>

Optimization of standardization apart of variables, done in
first phase of MOVE_EXISTS_OUT_CONV. My previous solution,
using subst, was dumb. By building up a substitution continuation
on the way down from the root of the term, and applying it at all
variables, things are much faster. There may be lessons for the
implementation of Term.subst here ...


# 9758bec1 09-Jul-2005 Konrad Slind <konrad.slind@gmail.com>

Optimized renaming done in STANDARDIZE_EXISTS_CONV. Still too
slow ... good test of subst.


# db0a1c48 09-Jul-2005 Konrad Slind <konrad.slind@gmail.com>

Yet another insignificant tweak.


# 4290968c 08-Jul-2005 Konrad Slind <konrad.slind@gmail.com>

Duh. Changed ifprint to if_print.


# 2f00fb8f 08-Jul-2005 Konrad Slind <konrad.slind@gmail.com>

Fixed subtle bug in COMB_SYNTH_CONV where

COMB (\(x,x).t) (inp,out)

not being dealt with properly in processing results of
BUS_MATCH. Also added a bit of debug support.


# e63dc3ee 07-Jul-2005 Konrad Slind <konrad.slind@gmail.com>

Optimizations to MAKE_NETLIST. It runs much faster on most examples
now. The optimizations should get moved to MAKE_CIRCUIT as well.


# 32c8fdd9 23-Jun-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Better error message when trying to hwDefine a non-function.
Need to think about hwDefine `c = (T,F,F,T)`, which Konrad needs.


# 70372d5e 30-May-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Added cirDefine to generate circuits in one step. Tweaked examples.
Updated README.


# 7e7a141e 17-May-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Added REFINE_ALL that uses previous results of hwDefine that are now
stored in a reference hwDefineLib. See Fact.ml for an example.

Various other tweaks and improvements (e.g. refinement combinators
simplified and extended).

Proved

|- !n. FACT n < 2 ** WL ==> (FACT n = w2n(Fact32(n2w n)))

and similar results for Mult, MultIter in Fact32Script.sml.

README updated.


# 2e3a1bf2 20-Apr-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Lots of changes aimed at partially automating the adding of new HOL
and Verilog unary and binary operators to synthesis. Read about
AddUnop, AddBinop in README and see how they are used in Fact.ml and
Fact32/Fact32.ml


# c59fd332 16-Apr-2005 Juliano Iyoda <jmi27@cam.ac.uk>

Changed the proof in RecCompileConvert to a (hopefully) more general one able that accepts the interface of APPLY_NEXTd (Booth multiplier example).


# 8d97f4fc 12-Apr-2005 Konrad Slind <konrad.slind@gmail.com>

Extended hwDefine to automatically handle decrement-based iterations
on words. Also the reference variable "termination_simps" can be
updated to add in new theorems that help establish termination.

Note that we can't handle the problem once-and-forall, since each
different word length needs a new theorem (wordnTheory.WORD_PRED_THM).


# 87132fce 07-Apr-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Various tweaks. Added a preliminary very version of the factorial
example that works with values of type ``:word32`` rather than with
``:num``. Needed some messy support for n-bit numerals (``0w``,
``1w``, ``2w``, ... etc).


# f8a3d313 04-Apr-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Mainly a bugfix for a nested varstruct problem spotted by Konrad
whilst compiling AES.

Also, taking the opportunity to checkin Various other tweaks
(e.g. FlipFlopT/F renamed to DtypeT/F).


# 93ac2dba 29-Mar-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Fixed a bug in RecConvert causing looping. Added a check to hwDefine
to print an error message if a recursive definition doesn't have a
measure.


# 6a6d56e8 29-Mar-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

General tidy up, including replacing the odd and ad-hoc definition of
DEL by a more conventional one (and thereby eliminating the need for
REG and REGF). README file has been updated.

Some, but not all, of the "x" value simulation problems have now gone
away.


# 5dbd6c7a 19-Feb-2005 Konrad Slind <konrad.slind@gmail.com>

First hack at fixing problem in hwDefine.


# e2ab0866 19-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Simplified the API for generating Verilog and updated README (old
stuff still exists in vsynth.sml). Added Verilog support for =,+,-,<
(need a uniform way of doing this as currently one has to edit
compile.sml, compileScript.sml and vsynth.sml).


# 42498f01 15-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Have changed the way inputs and outputs are split by MAKE_NETLIST and
MAKE_CIRCUIT. This is partly to improve the circuits (fewer variables)
and partly to make the representation in HOL closer to Verilog. A
benificial side-effect is that the code is simpler (and probably more
efficient - ABS_IN_OUT_SPLIT_CONV has gone, for example). See README
for updated descriptions. Note that synthesis to Verilog (vsynth.sml)
is broken -- but I'm revising that so that separate modules are
generated for the design and the stimulus (i.e. environment). Will fix
soon(ish).


# 967281d5 13-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Minor tweak to stuff in comments. No code changes.


# d6c07324 11-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Tidying up.


# dd4850db 11-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Some tweaks, and rollback to (hopefully) working version of MAKE_CIRCUIT.


# 1cf1a965 11-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Reverting to old and inefficent version of COMB_SYNTH_CONV. I ran
regression test on new code, but didn't check results fully (I wonder
how common this is in the real world). Was failing to split inputs in:

val MULTd_net = time MAKE_NETLIST MULTd_dev;

from booth/boothDevScript.sml.


# d8120346 11-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Code improvements from KXS. Not sure what are the other things
"cvs ci" is picking up!


# bc99607c 10-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Refine away "at clk" temporal abstractions on ``inp`` and ``out``
in circuits made with MAKE_CIRCUIT.


# 63e9a942 10-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Split inputs and outputs. Now get the following from Konrad's example:

val to_state_net =
|- (\(load,inp,done,out).
?v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18
v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33
v34.
(inp =
v15 <> v14 <> v13 <> v12 <> v11 <> v10 <> v9 <> v8 <> v7 <>
v6 <> v5 <> v4 <> v3 <> v2 <> v1 <> v0) /\
(out =
v31 <> v30 <> v29 <> v28 <> v27 <> v26 <> v25 <> v24 <> v23 <>
v22 <> v21 <> v20 <> v19 <> v18 <> v17 <> v16) /\
DEL (load,v34) /\ NOT (v34,v33) /\ AND (v33,load,v32) /\
NOT (v32,done) /\ DEL (v15,v31) /\ DEL (v11,v30) /\
DEL (v7,v29) /\ DEL (v3,v28) /\ DEL (v14,v27) /\
DEL (v10,v26) /\ DEL (v6,v25) /\ DEL (v2,v24) /\
DEL (v13,v23) /\ DEL (v9,v22) /\ DEL (v5,v21) /\ DEL (v1,v20) /\
DEL (v12,v19) /\ DEL (v8,v18) /\ DEL (v4,v17) /\
DEL (v0,v16)) ===> DEV to_state : thm

Also made MK_CIRCUIT split inputs and outputs. Seems to work. Probably
needs tuning.


# 9d8af654 09-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Currently failing attempt to split up input and output busses.
See: BUS_SPLIT and ABS_IN_OUT_SPLIT_CONV. Will slog on in the morning,
but totally burned out now. Need to get unwinding working.


# e4408f6f 09-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Another tweak and removed some annoying warning messages. I hope the Utah
examples are compiling better now. I'm still tuning though ...


# 251d102d 09-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Another tweak (use COMB_ID more aggressively).


# e8ab00cb 09-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Experimental tweak to compiler to better handle Konrad's examples like:

to_state
(b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15) =
(b0,b4,b8,b12,b1,b5,b9,b13,b2,b6,b10,b14,b3,b7,b11,b15)

Not fully tested (but have to dash to Wadler's talk).


# cefd64ef 08-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Existentially quantify local wires in circuits using

(*****************************************************************************)
(* |- P ==> Q *)
(* ---------------- (x not free in Q) *)
(* |- (?x. P) ==> Q *)
(*****************************************************************************)
fun ANTE_EXISTS_INTRO v th =
(let val (t1,t2) = dest_imp(concl th)
val exists_tm = mk_exists(v,t1)
val th1 = ASSUME exists_tm
val th2 = UNDISCH th
val th3 = CHOOSE (v,th1) th2
in
DISCH exists_tm th3
end)
handle HOL_ERR _ => th;

For some reason rewriting with LEFT_FORALL_IMP_THM didn't work.


# 9e9c55b8 07-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Made COMB_SYNTH_CONV compile conditionals using MUX. A few other
tweaks and renamings.


# a103edaa 07-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Removing tex (renamed to doc). Tweak to compiler.


# f4647602 06-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Tweaks to compiler. Also added ML function "add_combinational" to declare
functions as combinational for synthesis (see README for details).


# fb79d3c8 06-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Added MAKE_CIRCUIT that generates circuits build out of clocked dtype
registers. Details in the the updated README.


# cc005825 01-Feb-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Minor tweaks to MAKE_NETLIST and COMB_SYNTH_CONV. Also a few theorems
for later use in temporal refinement.


# d7715c8d 31-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Add "0" to combinational_constants. Further improves circuit for FACT.


# 8e06a101 30-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Implemented DEL in terms of simpler primitives (DEL_def replaced by DEL_THM).


# 6eab9e91 30-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

I may reimplement COMB_SYNTH_CONV to be less clunky (it currently uses
unwindLib and tactics to validate synthesis on-the-fly). Until I get
around to this, I've added some diagnostic printing if a proof failure
happens.


# c3897653 29-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Added a crude tool COMB_SYNTH_CONV to synthesise functions
representing combinational circuits to netlists. Probably not robust,
but works on FactScript.sml. Added REDEPTH_CONV COMB_SYNTH_CONV
to MAKE_NETLIST.


# 384a988a 27-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Tidy up. Upated README. Added more optimisations
(see description of PRECEDE and FOLLOW in README).


# 2f25456d 27-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Improvements to synthesis (both to speed and generated netlists). Aiming
to get to a form that can be pretty printed to Verilog.


# 5e71c8a1 26-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Minor cleanup and improvement of netlist synthesis.


# 43460aef 25-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Improved synthesis of comninational circuits:

- val (RightShift,_,RightShift_dev) =
hwDefine
`RightShift (b1,b2,b3,b4,b5,b6,b7,b8) = (F,b1,b2,b3,b4,b5,b6,b7)`;
<<HOL message: inventing new type variable names: 'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h>>
Definition has been stored under "RightShift_def".
> val RightShift =
|- !b1 b2 b3 b4 b5 b6 b7 b8.
RightShift (b1,b2,b3,b4,b5,b6,b7,b8) = (F,b1,b2,b3,b4,b5,b6,b7) : thm
val RightShift_dev =
|- DEV
(Par (\(b1,b2,b3,b4,b5,b6,b7,b8). F)
(Par (\(b1,b2,b3,b4,b5,b6,b7,b8). b1)
(Par (\(b1,b2,b3,b4,b5,b6,b7,b8). b2)
(Par (\(b1,b2,b3,b4,b5,b6,b7,b8). b3)
(Par (\(b1,b2,b3,b4,b5,b6,b7,b8). b4)
(Par (\(b1,b2,b3,b4,b5,b6,b7,b8). b5)
(Par (\(b1,b2,b3,b4,b5,b6,b7,b8). b6)
(\(b1,b2,b3,b4,b5,b6,b7,b8). b7)))))))) ===>
DEV RightShift : thm
- val RightShift_cir = MAKE_NETLIST (REFINE (DEPTHR ATM_REFINE) RightShift_dev);
> val RightShift_cir =
|- (\(load,inp,done,out).
?v0 v1 v2 v3.
DEL (load,v3) /\ NOT (v3,v2) /\ AND (v2,load,v1) /\
NOT (v1,done) /\
COMB
((\x. F) <>
(FST <>
((\x. FST (SND x)) <>
((\x. FST (SND (SND x))) <>
((\x. FST (SND (SND (SND x)))) <>
((\x. FST (SND (SND (SND (SND x))))) <>
((\x. FST (SND (SND (SND (SND (SND x)))))) <>
(\x. FST (SND (SND (SND (SND (SND (SND x))))))))))))))
(inp,v0) /\ DEL (v0,out)) ===> DEV RightShift : thm


# 7fcb1c6c 25-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Renamed "Compile" to "CompileProg" and defined Compile
to have a more useful meaning. Renamed ConvertCompile to
CompileConvert (as it now does Compile(Convert ...)). Updated README.


# de634257 24-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Removing some junk from a failed experiment (FactTheory now builds
much more quickly).


# 65627f2d 24-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Very preliminary attempt to improve netlist synthesis by merging
combinational logic preceding a DEV into the interface to the
DEV. Goal is to cut down the number of handshakes, especially those
packaging up 'selector' logic like ``\(m,n).n`` etc.

Needs further thought and examples.


# 708bf31d 20-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Minor tweaks; improved and updated README.


# 9ad09cd6 20-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Tweaks to improve netlists created with MAKE_NETLIST
(see README). May add more such changes tomorrow.


# 5b205277 20-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Added MAKE_NETLIST to generate netlist representations in HOL.

See README and revised FactScript.sml.

Used some old code to drag existential quantifiers to the head of a
conjunction in which I spotted the rather unacceptable:

mk_oracle_thm(Tag.read "EXISTS_OUT_CONV")([],mk_eq(t,t3))

Will need to make this respectable sometime soon. May be a performance
challenge though.

Konrad: is there something better to use off-the-shelf
(EXISTS_OUT_CONV is hol88 era code)


# 80e73386 19-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Revision of yesterday's version to make refinements more analogous
to conversions. I've also changed some names around (Sorry).

See README for latest stuff.

Main changes are:

1. Refine renamed to REFINE and now doesn't "depth" scan the circuit.
The scanning is done explicitly by an operator DEPTHR (which
is analogous to DEPTH_CONV).

2. Have added refinement combining operators THENR, ORELSER.

3. Lib renamed to LIB_REFINE.

4. ATMfn renamed to ATM_REFINE.

An example (see FactScript.sml) is:

REFINE
(DEPTHR(LIB_REFINE[FactIter_dev])
THENR DEPTHR(LIB_REFINE[SUBS [MultThm] Mult_dev])
THENR DEPTHR(LIB_REFINE[MultIter_dev])
THENR DEPTHR ATM_REFINE)
Fact_dev;

I hope this is converging! I should take a rest and do some more PSL
proofs now.


# 3344cf34 18-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Changed the "design flow" model to be more flexible. Hardware can now
be refined, so top-down development better supported. See README and
revised FactScript.sml example. Libraries are only used for
refinement, not in generating hardware (so library argument of
hwDefine has gone). This is experimental. Comments?


# a6a5ef8a 17-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Installing KXS's hwDefine. See README.


# 2474032c 13-Jan-2005 Mike Gordon <mjcg@cl.cam.ac.uk>

Adding Juliano Iyoda's theory of handshaking devices and various
supporting HOL tools. See the README file. Putting the stuff here so that
Cambridge and Utah can collaborate on further developments
----------------------------------------------------------------------
composeScript.sml devScript.sml compileScript.sml CVS: compile.sml
FactScript.sml CVS:
----------------------------------------------------------------------