-
Notifications
You must be signed in to change notification settings - Fork 0
/
Results.mch
62 lines (50 loc) · 1.02 KB
/
Results.mch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
MACHINE Results
SETS CAR
VARIABLES finish
INVARIANT finish : iseq(CAR)
INITIALISATION finish := []
OPERATIONS
finished(rr) =
PRE rr : CAR & rr /: ran(finish)
THEN finish := finish <- rr
END;
rr <-- query(pp) =
PRE pp : NAT1 & pp <= size(finish)
THEN rr := finish(pp)
END;
disqualify(pp) =
PRE pp : NAT1 & pp <= size(finish)
THEN finish := (finish /|\ pp-1) ^ (finish \|/ pp)
END;
ss <-- medals =
PRE size(finish) >= 3
THEN ss := finish /|\ 3
END;
pp <-- position(cc) =
PRE cc : CAR & cc : ran(finish)
THEN
pp := 1;
WHILE finish(pp) /= cc DO
pp := pp + 1
INVARIANT
pp : 1..size(finish)
VARIANT
size(finish) - pp
END
END;
remove(cc) =
PRE cc : CAR & cc : ran(finish)
THEN
VAR pos IN
pos := 1;
WHILE finish(pos) /= cc DO
pos := pos + 1
INVARIANT
pos : 1..size(finish)
VARIANT
size(finish) - pos
END;
finish := (finish /|\ (pos-1)) ^ (finish \|/ pos)
END
END
END