History log of /seL4-l4v-10.1.1/HOL4/src/simp/src/simpLib.sig
Revision Date Author Comments
# 838f97d0 19-Mar-2018 Michael Norrish <Michael.Norrish@nicta.com.au>

Up to core types


# 5b282aae 06-Dec-2015 Michael Norrish <Michael.Norrish@nicta.com.au>

More moving lcsymtacs implementations elsewhere

Eventually lcsymtacs will just be a bunch of 'open' declarations, and
then people won't bother to include it at all.


# 9938df5f 05-Nov-2015 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Update simpLib.remove_theorems to work over terms (lhs patterns) instead of theorems.

Congruence rules aren't removed but it now works for removing AC rewrites, e.g.

> SIMP_CONV (simpLib.remove_theorems [``a * b``] (pure_ss++numSimps.ARITH_AC_ss)) [] ``c * b + a``;
val it =
|- c * b + a = a + c * b:
thm


# b02e20ad 04-Nov-2015 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Add simpLib.remove_theorems.

This is essentially untested - it may or may not help with issue #313. For example:

> SIMP_CONV (simpLib.remove_theorems [DECIDE ``T /\ a = a``] bool_ss) [] ``T /\ x /\ T``;
val it = |- T ∧ x ∧ T ⇔ T ∧ x: thm


# eb334519 12-Jun-2015 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Add two more variants of FULL_SIMP_TAC.

The tactics NO_STRIP_FULL_SIMP_TAC and NO_STRIP_REV_FULL_SIMP_TAC don't use STRIP_THM_THEN. This means that simplifying with an assumption ``a \/ b`` will not split the current goal into two sub-goals.


# 3a5c12d3 18-Jul-2012 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Add REV_FULL_SIMP_TAC. This is the same as FULL_SIMP_TAC but it simplifies assumptions in the reverse order.


# 2b7ef975 25-Mar-2011 Michael Norrish <Michael.Norrish@nicta.com.au>

Allow simpset fragments to contain pre-order simplification data.


# 6cac8296 07-Mar-2011 Konrad Slind <konrad.slind@gmail.com>

Addition of destructors and recognizers for datatypes.
So far, I've just got basic support put in.

Some other trivial mods as well.


# ddf3c11d 02-Mar-2011 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Add ssfrag_names_of, which lists the fragment names within in a simpset.


# 68c733b0 28-Oct-2010 Michael Norrish <Michael.Norrish@nicta.com.au>

Handle compilation error for stringSimps; change ssfrag internals.

Clearly, nothing used that file because it was only Moscow ML
compilation that complained about it. Anyway, I've added a
destructor function to the simpLib API for getting the rewrites out
of a simpset fragment. I also changed the internal representation
so that SSFRAG is no longer the constructor. Instead SSFRAG_CON is,
and I will now be able to add additional fields to the record that
it takes as an argument.


# dbc54d18 27-Oct-2010 Michael Norrish <Michael.Norrish@nicta.com.au>

Make ssfrag an abstract type, and SSFRAG a function, not a constructor.

This will help me add extra components to ssfrag values while retaining
much of the old API.


# 2a29c74d 26-Mar-2010 Anthony Fox <anthony.fox@cl.cam.ac.uk>

Added a few more operations for working with simpsets and simpset fragments.
In particular, added the facility to remove named fragments from a simpset.
This is done fairly crudely -- the new simpset is simply rebuilt using all of
the remaining fragments.

This enables you do do things like:

- SIMP_CONV (simpLib.remove_ssfrags (srw_ss()) ["word arith"]) [] ``...``

and

- val ss = diminish_srw_ss ["word arith","word logic"];
- e (SRW_TAC [] []);
- val _ = augment_srw_ss ss;

Doing this will re-order the fragments, which I believe can affect behaviour?
diminish_srw_ss isn't persistent -- not sure if that is good or not.

The new operations are:

> val name_ss : string -> ssfrag -> ssfrag

(* Give a name to a fragment. *)

> val named_merge_ss : string -> ssfrag list -> ssfrag

(* A version of merge_ss that allows users to name the merged fragment. *)

> val std_conv_ss : stdconvdata -> ssfrag

where

type stdconvdata = { name: string, pats: term list, conv: conv }

(* A simplified interface to conv_ss. For conversions with: no
side-conditions, trace level 2 and for a list of "variable only" keys. *)

> partition_ssfrags : string list -> ssfrag list ->
(ssfrag list * ssfrag list)

(* Partition a simpset fragment list: lhs for fragments in a list of
names and rhs for those not in the list. *)

> remove_ssfrags : simpset -> string list -> simpset

(* Remove named fragments from a simpset. *)

> diminish_srw_ss : string list -> simpLib.ssfrag list

(* Remove named fragments from srw_ss. Returns removed fragments. *)


# 13ec5e25 10-Mar-2010 Michael Norrish <Michael.Norrish@nicta.com.au>

Rework the handling of bounded rewrites to fix bug in previous check-in.

Unfortunately, the type of the filter field of a ssfrag has to change;
I'll adjust our documentation shortly.


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


# 63ab90d3 30-Mar-2009 Michael Norrish <Michael.Norrish@nicta.com.au>

Add an "easy-to-use" interface to the rewrite-with-preorders
functionality. I will document this in the DESCRIPTION before we
release.


# aab88471 11-Mar-2009 Michael Norrish <Michael.Norrish@nicta.com.au>

Add an entry-point to the simpLib API that I hope will be sufficient
to allow congLib-like functionality in the base simplifier.


# 162a458a 12-Oct-2008 Michael Norrish <Michael.Norrish@nicta.com.au>

Implement a scheme whereby a simpset can be limited to apply no more
than a limited number of rewrites/conversions/d.p. invocations. The
limit is stored in a simpset. By default all simpsets are unlimited.
To limit a simpset, use
limit n simpset
and it will then stop simplifying after n actions.

There is a border case: if a conditional rewrite requires exactly as
many rewrites to solve its side-conditions as it is limited to, it
will still go through with the rewrite, thereby exceeding the limit by
one (n side conditions, plus the final simplification)

The design is there to give a (better) guarantee of termination than
simpLib currently provides. For this reason, I didn't go with the
otherwise appealing idea of just letting side-condition discharge
ignore the limit entirely.


# aed05f4e 20-Jul-2008 Konrad Slind <konrad.slind@gmail.com>

A whole mess of small changes intended
at making simpsets prettyprint informatively
in the interactive loop. Very possibly
I haven't updated all the files in the examples
directories.


# 5038f15d 18-Jul-2008 Konrad Slind <konrad.slind@gmail.com>

Tracking facility: only those rewrites that
actually apply are remembered. Can be useful
for teaching students about what the rewriter
has done, but does not keep full information
(such as what subterm is rewritten).


# c84ed800 05-May-2007 Konrad Slind <konrad.slind@gmail.com>

Added entrypoint for making an "ss" thingy from a conversion.


# 626d5c18 28-Mar-2006 Thomas Tuerk <Thomas.Tuerk@cl.cam.ac.uk>

Addition of the parameter relation to the reducers apply function and extraction of traversedata_for_ss out of SIMP_QCONV. Both changes were made to implement congLib


# 014f6140 15-Feb-2006 Konrad Slind <konrad.slind@gmail.com>

Changed the TypeBase to be indexed by types. Originally it was
indexed by a single string (representing the type operator), then
Michael changed it to a pair of strings (precise representation
of the type operator). The latest change allows non-datatypes to
be added to the TypeBase. This will allow case analysis and
termination proofs to be supported for non-datatypes.

I reckon there are still a few bugs left after the massive
revision, so you might want to wait a while before upgrading.


# 13f030c2 07-Feb-2006 Michael Norrish <Michael.Norrish@nicta.com.au>

Wide-ranging change to make the TypeBase export an interface forcing users
to be concerned about which theory their types are from. Interactive users
of the "induction_of", "axiom_of" and similar functions are thrown the only
bone: they can effectively omit the theory parameter by using "" instead
of a theory name.
Prompted by a bug found by Tom Ridge where it was impossible to define
a pattern matching function on a type with the same name as another type
because the pattern-matching code was using dest_type and TypeBase.read
on just the type-operator name.


# 4cddaa12 12-Jul-2005 Michael Norrish <Michael.Norrish@nicta.com.au>

Changed a couple of misleading/annoying names. The type ssdata is now
called ssfrag (to bring it into line with documentation that talks about
simpset fragments), and the constructor SIMPSET is now called SSFRAG.
It never created a simpset, so the latter was a stupid name.


# a90e31ac 12-Jun-2005 Michael Norrish <Michael.Norrish@nicta.com.au>

New entrypoint in simpLib to make it easier to construct custom simpsets.


# 7659e0eb 01-Jul-2003 Konrad Slind <konrad.slind@gmail.com>

First cut at adding in useful rewriting annotations, so that people
don't have to remember arcane entrypoints to do things like
incorporating AC reasoning. The provided annotations are

AC : thm -> thm -> thm
Cong : thm -> thm

An invocation like

SIMP_TAC ss [AC th1 th2, ...]

says to use permutative rewriting with th1 and th2 (which are a statement
of associativity and commutativity, respectively). An invocation like

SIMP_TAC ss [Cong th, ...]

says to use th as a congruence rule when rewriting.


# 39a6e7cf 16-Jun-2002 Konrad Slind <konrad.slind@gmail.com>

Fixes to the induction theorems that TFL produces. Changes to recInduct
to reflect this. Other minor changes.


# 5e849c0b 30-May-2002 Konrad Slind <konrad.slind@gmail.com>

Robustification of permutative rewriting. Added an entrypoint aimed
at easing construction of simpset of permutative rewrites.


# 3199033e 29-May-2002 Konrad Slind <konrad.slind@gmail.com>

Fixing recInduct in SingleStep.sml, adding RESTR_EVAL thingies to bossLib,
adding distinction between "strip_pair" and "spine_pair" in pairSyntax,
and other minor things.


# 58841e67 29-Apr-1999 Michael Norrish <Michael.Norrish@nicta.com.au>

Initial revision