History log of /seL4-l4v-master/HOL4/src/n-bit/fcpScript.sml
Revision Date Author Comments
# b8cf66f9 26-Apr-2020 Chun Tian (binghe) <binghe.lisp@gmail.com>

Enhanced fcpTheory (FCP_FST, FCP_SND, FCP_CONCAT_THM, ...); moved duplicated HAS_SIZE to upstream


# 18b62363 11-Apr-2019 Michael Norrish <Michael.Norrish@nicta.com.au>

Get src/n-bit to build given tight-equality


# 523c72e2 21-Mar-2018 Michael Norrish <Michael.Norrish@nicta.com.au>

Fixes of bag, container, finite_map and in n-bit/


# 4a0d8598 08-Sep-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Set grammar ancestries in fcp and word theories

These are test cases for the new machinery


# 778bb566 29-Jan-2016 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Clean up some code.


# 21846f50 21-Mar-2013 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Make sure FCP_UPDATE doesn't get added to the_compset.


# 20561d78 20-Mar-2013 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Clean up of fcpTheory. Also added a few new constants.

The new constants are: FCP_CONCAT, FCP_ZIP and FCP_FOLD.

The definition of V2L has changed — avoiding the unnecessary use of Hilbert choice. Also removed the sub1 type constructor. These were introduced in 102792de.


# 45d51319 04-Dec-2012 Michael Norrish <Michael.Norrish@nicta.com.au>

Fix hand-rolled case-constant in finite Cartesian product theory.

This is progress with github issue #97.


# 5f779b4f 16-Nov-2012 Konrad Slind <konrad.slind@gmail.com>

Pushing things so I can work on case constant flipping.


# f7801731 19-Aug-2012 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Remove theorems that are already available in listTheory.


# 221bb191 12-Sep-2011 Michael Norrish <Michael.Norrish@nicta.com.au>

Change fcp$HAS_SIZE to have fixity NONASSOC-450.

The 450 fixity level is standard for binary relations. The previous
level of 8 used for HAS_SIZE is so weak that it even works badly with
the propositional connectives, forcing things like

... /\ (s HAS_SIZE n) /\ ...


# 4341ad42 04-May-2010 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Further extend the bounds generation under WORD_DECIDE. For example, can now
prove:

wordsLib.WORD_DECIDE
``((4w * (3 >< 1) b + 10w) << 2) // 3w <+ 57w :word16``

Also added WORD_EXTRACT_ss to WORD_CONV. Unfortunately this can break proofs.


# 2357de9b 20-Apr-2010 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Remove unnecessary antecedent to a theorem.


# 58f60751 20-Jan-2010 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Add evaluation support for FCP index and update. This has required fixing
a problem with the evaluation of EL, namely EVAL ``EL i x`` didn't terminate.


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


# 8654de63 07-Feb-2009 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Attempt to tidy up (fix) EmitML and finish off the transition that Scott
started. EmitML has been moved to the end of the build sequence. "Hooks"
have been eliminated and all EmitML related stuff has been removed from the
various theory directories. All code for generating ML/Caml is now
self-contained within src/emit. I've not tested the generated Caml code but
the SML seems to build fine.

The directories:

src/theoryML
src/theoryOcaml
src/emitScript

have been replaced by

src/emit/theories/ML
src/emit/theories/Caml
src/emit/theories


# 4b557ffa 20-Jan-2009 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Free the name "index".


# 52134d03 08-Sep-2008 James Reynolds <jr291@cam.ac.uk>

Two extra theorems produced for the benefit of
examples/acl2/ml/translateTheory


# 97869177 17-Mar-2008 Konrad Slind <konrad.slind@gmail.com>

Temporary change to get the theory to build. Probably
mn200 will want to change names to "array" versions,
but I'll leave that to him.


# 10d44dd8 16-Mar-2008 Michael Norrish <Michael.Norrish@nicta.com.au>

Demonstrate that arrays are an algebraic datatype, though this isn't
as much use as we might like because our datatype package doesn't
handle functions.


# 44d99bb3 24-Jan-2008 Peter Homeier <palantir@trustworthytools.com>

Revised expressions of the form <term>:<type> ' <term> to be (<term><type>) ' <term>
to avoid confusion with the type variable ' .


# 6c5d8404 17-Jan-2008 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Changed the standard symbol for fcp$index, from %% to '. The old symbol
can still be used, so existing code shouldn't break.


# 2f5f5719 28-Aug-2007 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Turns off bracket syntax for array types when using EmitML.


# 102792de 07-Mar-2007 James Reynolds <jr291@cam.ac.uk>

fcpScript: Included some list <-> fcp theories and an 'a sub1 type which reduces the cardinality by one


# 6c300ea0 08-Feb-2007 Anthony Fox <anthony.fox@cl.cam.ac.uk>

FSUBST is now called FCP_UPDATE.


# 122b778a 06-Feb-2007 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Moved the function substitution operation (:-) to standard part of
the distribution.

substTheory.SUBST_EVAL:
|- !f a b c. (a :- b) f c = (if a = c then b else f c)

A couple of theorems have been renamed in the process:

SUBST_EQ2 -> SUBST_IMP_ID
SUBST_EQ3 -> SUBST_ID

Likewise renamed these theorems for FCP substitution (:+).


# 1f327341 01-Feb-2007 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Added a substitute operation :+ for FCPs.

Also made EmitML work with numeric types e.g. ``:2`` gets the ML
type "unit bit0".


# 3331a1b2 29-Jan-2007 Anthony Fox <anthony.fox@cl.cam.ac.uk>

A cleaner solution for emitting ML code for Finite Cartesian Products.

The ``:'a itself`` type is given a type constructor "ITSELF n" in ML,
where "n" is the dimindex size of ``:'a``.


# 44f68827 17-Jan-2007 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Second go at changing the scheme for index types. The new scheme uses:
``:one``, ``:'a bit0``, and ``:'a bit1``. For example, ``:i18`` is
``:one bit0 bit0 bit1 bit0``. The EmitML code is more like the original
version i.e. the performance loss is avoided.


# 3b931fc5 20-Dec-2006 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Have changed the way that index types are created. The new scheme
uses a canonical form, with ``:bool # 'a`` used to double the index
size and ``:'a option`` used to increment it. The index type is
generated by a new function fcpLib.index_type; for example:

- fcpLib.index_type 5;
> val it = ``:(bool # bool) option`` : hol_type

The function fcpLib.mk_index_type performs roughly as it did before,
however, a type abbreviation is now used for the index type. These
abbreviations are printed for indexes > 8. For example:

- fcpLib.mk_index_type 5;
> val it =
(|- FINITE UNIV, |- CARD UNIV = 5, |- dimindex (:(bool # bool) option) = 5)
: thm * thm * thm
- ``:i5``;
> val it = ``:(bool # bool) option`` : hol_type

- fcpLib.mk_index_type 30;
> val it = (|- FINITE UNIV, |- CARD UNIV = 30, |- dimindex (:i30) = 30) :
thm * thm * thm

It is not expected that these changes will break anything...


# bbc18a37 23-Aug-2006 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Added a theorem about concatenating sub-words.


# 212a13a6 07-Jun-2006 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Some rationalisation with the use of computeLib.auto_import_definitions.

Also, TOP and MSB are computed, saved and added to the compsets for
the standard word sizes.


# 127eb546 06-Jun-2006 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Using Define for dimindex mucks up evaluation.

Added TOP_def to the SIZES_ss fragment and the evaluation compsets.


# c64ec72f 05-Jun-2006 Michael Norrish <Michael.Norrish@nicta.com.au>

Alter the n-bit word theories to use the :'a itself type, and also add
new constants (TOP(:'a) and MSB(:'a)) to stand for the numeric value of
2 ** width, and 2 ** (width - 1). Using these makes the expression
of several results a lot nicer. As the updated proofs in integer_wordScript
demonstrate, you don't always have to expand these definitions either,
which is nice.
I'm not 100% sure that these are the best names for these constants.


# bcdb58d6 30-Sep-2005 Konrad Slind <konrad.slind@gmail.com>

Syntax support for words.


# 80adb28b 21-Sep-2005 Anthony Fox <anthony.fox@cl.cam.ac.uk>

The standard word sizes are now provided in machine_wordsTheory - previously
they could be loaded with machine_wordsLib, but then the type theorems
weren't saved in a proper theory.


# 1d0debf0 14-Sep-2005 Anthony Fox <anthony.fox@cl.cam.ac.uk>

A new theory of words - based on an idea from John Harrison.
This is now a unified theory of words - so there's no more need
for the Functor or mkword.exe.

The old library (n_bit) will eventually be dropped, so current
users are advised to adopt the new library as soon as possible.
NB. bitTheory is nearly identical to the old bitsTheory.

The new representing type is finite Cartesian products e.g.
:bool ** 'a is the type for words whose length is the size
of the indexing type 'a.

The function fcpLib.mk_index_type can be used to create the
required index type.

Most theorems from the old theory should be present (if I've
missed any out then let me know). NB. A few theorems have
changed name and some have been dropped (e.g. there is no longer
a word_suc function).

Some symbols have changed. This avoids complaints from the
parser and should hopefully aid readability.

old new
two's comp. : ~ $-
bitwise not : NOT ~
bitwise or : | !!
bitwise and : & &&
bitwise xor : # ??
unsigned < : <. <+
unsigned <= : <=. <=+
unsigned > : >. >+
unsigned >= : >=. >=+

The bits and slice functions no longer map to :num - they now
map from :bool ** 'a to :bool ** 'a.

bits : WORD_BITS h l w (h -- l) w
slice : WORD_SLICE h l w (h <> l) w

The function w2w converts between words of different sizes
(unsigned) and sw2sw is a signed (2's complement)
word-word conversion.

The library machine_wordsLib provides the types word4, word8
word16, word32 and word64. Ground term evaluation with
EVAL should work here. Some operations (+, *) can be evaluated
with alpha types e.g.

EVAL ``6w + 4w``;
<<HOL message: inventing new type variable names: 'a>>
> val it = |- 6w + 4w = 10w : thm

Subtraction only works when the word size is known e.g.

EVAL ``6w:word8 - 4w``;
> val it = |- 6w - 4w = 258w : thm

An attempt to do evaluation with alpha types around will likely
result in gibberish.