Download MONA Version 1.4 User Manual

Transcript
MONA 1.4
2.7
Example: Reasoning about queues
# Qe describes the valid indices of a queue
pred isWfQueue(var2 Qe) =
all1 p: (p in Qe & p > 0 => p - 1 in Qe);
# isx holds if p
pred is0(var1 p,
pred is1(var1 p,
pred is2(var1 p,
pred is3(var1 p,
contains
var2 Qe,
var2 Qe,
var2 Qe,
var2 Qe,
an x
Q1, Q2)
Q1, Q2)
Q1, Q2)
Q1, Q2)
=
=
=
=
p
p
p
p
in
in
in
in
Qe
Qe
Qe
Qe
# lt compares the elements at positions p
pred lt(var1 p, q, var2 Qe, Q1, Q2) =
(is0(p, Qe, Q1, Q2) & ~is0(q, Qe, Q1,
| (is1(p, Qe, Q1, Q2) & (is2(q, Qe, Q1,
| (is2(p, Qe, Q1, Q2) & (is3(q, Qe, Q1,
&
&
&
&
p
p
p
p
notin
notin
in Q1
in Q1
Q1 & p notin Q2;
Q1 & p in Q2;
& p notin Q2;
& p in Q2;
and q of a queue
Q2))
Q2) | is3(q, Qe, Q1, Q2)))
Q2)));
# isLast holds if p is the last element in the queue
pred isLast(var1 p, var2 Qe) =
p in Qe & (all1 q’: q’ in Qe => q’ <= p);
# an ordered queue of length l
pred Queue(var2 Qe, Q1, Q2, var1 l) =
isLast(l - 1, Qe)
& (all1 p, q: p < q & p in Qe & q in Qe => lt(p, q, Qe, Q1, Q2));
# eqQueue2 compares elements in two queues
pred eqQueue2(var1 p, q, var2 Q1, Q2, Q1’, Q2’) =
(p in Q1 <=> q in Q1’) & (p in Q2 <=> q in Q2’);
# LooseOne holds about a queue Q and a queue Q’ if
# queue Q’ is the same as Q except that one
# element (denoted by p below) is removed
pred LooseOne(var2 Qe, Q1, Q2, Qe’, Q1’, Q2’) =
ex1 p: p in Qe
& (all1 q: (~isLast(q, Qe) => (q in Qe <=> q in Qe’))
& (isLast(q, Qe) => (q notin Qe’)))
& (all1 q: q < p & q in Qe => eqQueue2(q, q, Q1, Q2, Q1’, Q2’))
& (all1 q: q > p & q in Qe => eqQueue2(q, q - 1, Q1, Q2, Q1’, Q2’));
var2 Qe, Q1, Q2;
var2 Qe’, Q1’, Q2’;
# the queue Q
# the queue Q’
assert isWfQueue(Qe);
# the primed variables denote a queue of length 3 containing
# three of the elements 0, 1, 2, 3 in that order and the element 3
Queue(Qe, Q1, Q2, 4);
# the queue Q is a queue of length 3
# containing the elements 0, 1, 2, 3
LooseOne(Qe, Q1, Q2, Qe’, Q1’, Q2’); # Q’ is Q except for one element
ex1 p: is3(p, Qe’, Q1’, Q2’); # Q’ does contain the element 3
Figure 6: lossy queue.mona
17