History log of /seL4-l4v-master/HOL4/src/pattern_matches/patternMatchesScript.sml
Revision Date Author Comments
# 819deebf 08-Mar-2019 Michael Norrish <Michael.Norrish@nicta.com.au>

Get all (incl. -t1 tests) up to src/boss building w/tight-equality


# 55622e44 24-Apr-2017 Michael Norrish <Michael.Norrish@nicta.com.au>

Get core HOL to build with new definition of "by"

Progress with github issue #407


# cb387b5f 14-Feb-2017 Thomas Tuerk <thomas@tuerk-brechen.de>

patternMatchesLib: implement flattening

Also implement general (non boolean) lifting and extending the input as
necessary auxiliary functionality.


# 3b2c5dca 23-Jan-2017 Thomas Tuerk <thomas@tuerk-brechen.de>

patternMatchesLib: further cleanups

- restructure some proofs in patternMatchesTheory
- provide additional selftest
- minor improvements to nchotomy computation
- provide equality version of PMATCH_IS_EXHAUSTIVE_FULL_CONSEQ_CHECK
- rename PMATCH_IS_EXHAUSTIVE_FULL_CONSEQ_CHECK ->
PMATCH_IS_EXHAUSTIVE_COMPILE_CONSEQ_CHECK
- remove patternMatchesExamples.ML, since it got replaced by
selftest.sml and proper documentation is nearly ready


# 3755995f 15-Jan-2017 Thomas Tuerk <thomas@tuerk-brechen.de>

patternMatches: remove dead code

Remove old version of definitions and lemmata accidentilly left by
6c1bd42517e3224fca860aabc5bf040af7cc455e in patternMatchesScript.


# 6c1bd425 15-Jan-2017 Thomas Tuerk <thomas@tuerk-brechen.de>

patternMatchesLib: improve lifting

The lifting of pmatch case-expressions to the next boolean level was not
implemented well. It was rather slow, there was poor support for rows
with overlapping patterns and variable names were not chosen nicely.

This commit reimplements PMATCH_LIFT_BOOL_CONV and PMATCH_TO_TOP_RULE.
As part of this reimplementation, checking for exhaustiveness got
improved. In this process PMATCH_IS_EXHAUSTIVE_CONSEQ_CONV got renamed
to PMATCH_IS_EXHAUSTIVE_FULL_CONSEQ_CHECK (since it is no consequence
conversion). However, usually the new PMATCH_IS_EXHAUSTIVE_CONSEQ_CHECK
should be used instead.


# bb06ae24 28-Jul-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Fix pre-boss theories in light of pat_assum renaming


# 4596eee1 20-Jan-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Start on Absyn-level approach to PMATCH-parsing


# fb3bc705 17-Jan-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

Code for new style pattern-match parsing

Syntax as described in github issue #286 parses.

Examples:

> ``case x of 0 => 3 | SUC n when n < 10 => n + 1``;
val it =
``PMATCH x
[PMATCH_ROW (λ_. 0) (K T) (λ_. 3);
PMATCH_ROW (λn. SUC n) (λn. n < 10) (λn. n + 1)]``:
term
> Datatype `tree = Lf | Nd tree 'a tree`;
<<HOL message: Defined type: "tree">>
val it = (): unit
> ``case t of Lf => 0 | Nd t1 x t2 => x + f t1``;
val it =
``PMATCH t
[PMATCH_ROW (λ_. Lf) (K T) (λ_. 0);
PMATCH_ROW (λ(t1,x,t2). Nd t1 x t2) (K T) (λ(t1,x,t2). x + f t1)]``:
term
> ``x + case t of Lf => 0 | x .| Nd t1 x t2 => f t1``;
<<HOL message: inventing new type variable names: 'a>>
val it =
``x +
PMATCH t
[PMATCH_ROW (λ_. Lf) (K T) (λ_. 0);
PMATCH_ROW (λx. Nd t1 x t2) (K T) (λx. f t1)]``:
term
> ``x + case t of Lf => 0 | t1,t2 .| Nd t1 x t2 => f t1``;
val it =
``x +
PMATCH t
[PMATCH_ROW (λ_. Lf) (K T) (λ_. 0);
PMATCH_ROW (λ(t1,t2). Nd t1 x t2) (K T) (λ(t1,t2). f t1)]``:
term
> ``x + case t of Lf => 0 | t1,t2 .| Nd t1 x t2 when g t2 > 6 => f t1``;
val it =
``x +
PMATCH t
[PMATCH_ROW (λ_. Lf) (K T) (λ_. 0);
PMATCH_ROW (λ(t1,t2). Nd t1 x t2) (λ(t1,t2). g t2 > 6)
(λ(t1,t2). f t1)]``:
term

I think we do still need a separate notation to indicate no variables
are to be bound, as

| .| pat => rhs

won't work when .| is an infix. Maybe

| ..| pat => rhs

This would be needed in a situation where all of the variables in pat
have to be read as free (referring to variables occurring in a wider
context).


# 37a0feac 17-Jan-2016 Michael Norrish <Michael.Norrish@nicta.com.au>

patternMatches turns on pmatch, adds .| infix


# 995109fe 30-Dec-2015 Thomas Tuerk <thomas@tuerk-brechen.de>

patternMatches: remove unicode in src


# 910f1a9c 05-Sep-2015 Thomas Tuerk <thomas@tuerk-brechen.de>

pattern_matches: add support for computeLib


# e4c39ed8 05-Sep-2015 Thomas Tuerk <thomas@tuerk-brechen.de>

move "pattern_matches" examples to "src"