Sequences
The `definition' parts of this chapter are a formal specification
of the sequence section of the tool-kit.
The principle of definition before use has been observed in all cases.
Furthermore, all definitions are explicit,
so that the model conjecture for the whole of this section
is trivially satisfied.
Written by Sam Valentine
Last updated September 1999
section seqdefs parents numdefs, setdefs |
Name
Definition
function 20 leftassoc (_ .. _) |
_ .. _ == a, b: { k: | a k b } |
Name
# | -- | Number of members of a set |
Definition
# [X] == { S: X; n: | 1 .. n S } |
Name
items | -- | Bag of elements of an indexed set |
Definition
items [I, X] == s: I X | x: X finite (s { x })  |
x: ran s # (s { x }) |
Name
min, max | -- | Minimum and maximum of a set of numbers |
Definition
min == { S: 1 ; m: | |
m S ( n: S m n) S m ) |
max == {S: 1 ; m: | |
m S ( n: S m n) S m ) |
Sequences
Name
sequence | -- | Sequences |
seq | -- | Finite sequences |
sequence1 | -- | Non-empty sequences |
isequence | -- | Injective sequences |
Definition
sequence X == { f: 1 X | n: dom f; m: 1 | m < n m dom f } |
sequence1 X == { f: sequence X | f } |
isequence X == sequence X ( 1 X) |
isequence1 X == { f: isequence X | f } |
seq X == { f: sequence X | finite f } |
seq1 X == { f: seq X | f } |
iseq X == { f: isequence X | finite f } |
iseq1 X == { f: iseq X | f } |
Description
sequence X is the set of finite or infinite sequences over X.
These are functions from
1 to X where for every element
in the domain, all lower members of
1 are also in the domain.
There are then three possible orthogonal restrictions on sequences,
generating eight cases in all.
The restrictions are: to finiteness, seq X etc,
to non-emptiness, sequence1 X etc,
and to injectivity, isequence X etc.
Name
Finite Sequence Displays.
Definition
function ( ,, ) |
Name
| -- | Concatenation |
Definition
function 30 leftassoc (_ _) |
_ _ [X] == s: seq X; t: sequence X s { n: dom t n + # s t n } |
Name
Definition
rev [X] == s: seq X { n: dom s # { i: dom s | n i } s n } |
Name
head, last, tail, front | -- | Sequence decomposition |
Definition
head [X] == s: sequence1 X s 1 |
last [X] == s: seq1 X s (# s) |
tail [X] == s: sequence X { m, n: dom s | n = m + 1 m s n } |
front [X] == s: sequence X { m, n: dom s | n = m + 1 m s m } |
Name
squash | -- | Compaction |
| -- | Extraction |
| -- | Filtering |
Definition
squash [X] == f: X { p: dom f # { i: dom f | i p } f p } |
function 40 leftassoc (_ _) |
_ _ [X] == s: sequence X; V: X squash (s V) |
function 41 rightassoc (_ _) |
_ _ [X] == U: ; s: sequence X squash (U s) |
Name
prefix | -- | Prefix relation |
suffix | -- | Suffix relation |
infix | -- | Segment relation |
Definition
_ prefix _ [X] == { s, t: sequence X | s t } |
_ suffix _ [X] == { s, t: sequence X | ( u: seq X u s = t) } |
_ infix _ [X] == { s, t: sequence X | ( u: seq X u s t) } |
Name
Definition
+/ [ I ] == { f: (I ) | |
( , 0) f |
( S: I ; p: I ; x: | |
p S (S \ { p }, x) f |
(S, x + p.2) f) ) |
Name
| -- | Distributed concatenation |
Definition
[X] == s: sequence sequence X | front s sequence seq X |
{ m: dom s; n: 1 | n dom (s m) |
(n + +/ ( k: 1 .. m - 1 # (s k)), s m n) ) |
Name
Definition
iter [X] == { f: (X X) (X X) | |
(0, ( R: X X id X)) f |
( k: ; R, S: X X; g: (X X) (X X) | |
(R, S) g (k, g) f |
h: (X X) (X X) (R, R S) h (k + 1, h) f) |
( k: ; R, S: X X; g: (X X) (X X) | |
(R ~ , S) g (k, g) f |
h: (X X) (X X) (R, S) h (- k, h) f) ) |
Notation
iter k R is sometimes written Rk.
_ _ [X] == r : X X; n : iter n r |
IT 22-Jan-2002