Title: Sequences
1Sequences
At the end of this lecture you should be able to
- provide a definition of a VDM sequence
- utilize and interpret sequence notation
- make appropriate use of the VDM sequence
operators - define a sequence by comprehension
- identify situations in which a sequence is an
appropriate data type - write VDM specifications using the sequence type.
2Introduction
A sequence is an ordered collection of
objects In a sequence, repetitions are
significant.
Examples
The queue of patients waiting for a doctor.
Planes circling an airport.
3Notation
A sequence is specified by enclosing its members
in square brackets
s a, d, f, a, d, d, c
queue michael, varinder, elizabeth, winston,
judith
a, d, f ? a, f, d
4Retrieving items from the sequence
s a, d, f, a, d, d, c
queue michael, varinder, elizabeth, winston,
judith
s(3)
f
queue(4)
winston
s(10)
undefined
5Sequence operators
s a, d, f, a, d, d, c
queue michael, varinder, elizabeth, winston,
judith
len operator
Returns the length of a sequence
len s
7
len queue
5
6Sequence operators
s a, d, f, a, d, d, c
queue michael, varinder, elizabeth, winston,
judith
elems operator
Returns a set that contains all the members of
the sequence
elems s
a, d, f, c
elems queue
michael, varinder, elizabeth, winston, judith
7Sequence operators
s a, d, f, a, d, d, c
queue michael, varinder, elizabeth, winston,
judith
inds operator
Returns a set of all the indices of the sequence
inds s
1, 2, 3, 4, 5, 6, 7
inds queue
1, 2, 3, 4, 5
inds
8Sequence operators
s a, d, f, a, d, d, c
queue michael, varinder, elizabeth, winston,
judith
head (hd) operator
Returns the first element in the sequence
hd s
a
hd queue
michael
hd
undefined
9Sequence operators
s a, d, f, a, d, d, c
queue michael, varinder, elizabeth, winston,
judith
tail (tl) operator
Returns a sequence containing all but the first
element
tl s
d, f, a, d, d, c
tl queue
varinder, elizabeth, winston, judith
tl
undefined
tl a
10Sequence operators
first w, e, r, w
second t, w, q
concatenation operator ( ) operator
operates on two sequences, and returns a sequence
that consists of the two sequences joined
together
first second
w, e, r, w, t, w, q
second first
t, w, q, w, e, r, w
first
w, e, r, w
11Sequence operators
the override operator ()
Takes a sequence and gives us a new sequence with
a particular element of the old sequence
overridden by a new element
a, c, d, e 1 ? z
z, c, d, e
a, c, d, e 2 ? x, 4 ? y
a, x, d, y
a, c, d, e 7 ? g
undefined
12Sequence operators
subsequence operator
allow us to extract a part of a sequence between
two indices
s a, d, f, a, d, d, c
s(2, ... , 5)
d, f, a, d
s(2, ... , 2)
d
s(2, ... , 13)
undefined
s(1, ... ,0)
s(8, ... , 7)
13Sequence by comprehension
expression(a) a ? SomeSet ? test (a)
a a ? 1,,10 ? is-odd(a)
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
s1 2, 3, 4, 7, 9, 11, 6, 7, 8, 14, 39, 45, 3
s2 s1(i) i ? inds s1 ? s1(i) gt 10
11, 14, 39, 45
14Using the sequence type in VDM-SL
To declare a variable to be of type sequence we
place an asterisk after the name of the type
contained within the sequence.
seq ?
convoy SpaceCraft
15Specifying a stack
Stack stack Element push(Element) pop()
Element isEmpty() Boolean
16Specifying the state of the stack
types Element
TOKEN
state Stack of stack init mk-Stack(s) ? end
Element
s
17The push operation
push( ) ext pre
post
itemIn Element
stack Element
wr
TRUE
18The pop operation
pop( ) ext pre post
itemRemoved Element
stack Element
wr
stack ?
?
19The isEmpty operation
isEmpty( ) ext pre post
query ?
stack Element
rd
TRUE
?
query
stack
20Re-thinking the Airport system
In the new system, when an aircraft approaches
the airport it is placed in a queue, and must
circle the airport until a runway becomes
available Only aircraft that have permission to
land are allowed to circle The circling aircraft
are landed on a first-come-first served basis.
21Re-specifying the state
types state Airport2 of
init mk-Airport2 ( ) ? end
Aircraft TOKEN
permission Aircraft-set landed
Aircraft-set circling
Aircraft
inv mk-Airport2(p,l,c) ? ?
p, l, c
p ? l
? c
22The new invariant
- Landed planes must have permission
- Circling planes must have permission
- Circling planes can not be landed
- All circling planes are unique
inv mk-Airport2(p,l,c) ?
l ? p
? elems c ? p
? elems c ? l
? isUnique(c)
isUnique(seqIn Aircraft) query ? pre
true post query ? ? i1 ,i2 ? inds seqIn ? i1 ?
i2 ? seqIn(i1) ? seqIn(i2)
23Re-specifying the operations
The following operations access only the
permission and landed components, and do not
therefore need to be changed
- givePermission
- recordTakeOff
- numberWaiting
- atAirport
- getPermission
- getLanded
The meaning of recordLanding will change in the
new specification
Two new operations are required
- getCircling
- allowToCircle
24allowToCircle operation
allowToCircle (
) ext pre post
craftIn Aircraft
circling Aircraft
wr
rd
permission Aircraft-set
rd
landed Aircraft-set
craftIn ? permission
? craftIn ? elems circling
? craftIn ? landed
25The modified recordLanding operation
recordLanding( ) ext pre post
circling Aircraft
wr
wr
landed Aircraft-set
circling ?
26Some useful functions to use with sequences
A function that returns the last element in a
sequence
last( ) pre
post
sequenceIn Element
elementOut Element
sequenceIn ?
elementOut sequenceIn(len sequenceIn)
27Some useful functions to use with sequences
A function that returns the sequence with the
last element removed.
allButLast(
) pre post
sequenceIn Element
sequenceOut Element
sequenceIn ?
sequenceOut sequenceIn(1, ..., (len sequenceIn
- 1))
28Some useful functions to use with sequences
A find function Returns the index of a particular
element Assuming elements are unique
find(
) pre post
sequenceIn Element, element Element
position ?
element ? elems sequencIn
sequenceIn(position) element
29Some useful functions to use with sequences
A find function Returns the index of a particular
element Assuming elements are not unique
find(
) pre post
sequenceIn Element, element Element
position ?
element ? elems sequencIn
sequenceIn(position) element
? ?i ? inds sequenceIn ? sequenceIn(i) element
?position ? i