8
Note from Sandip: The original version of this fairness book was developed by
9
Rob Sumners. This version makes several changes, in particular the use of
10
btm-measure and top-measure. A cleaner collection of fairness books were later
11
derived by Rob and submitted to the ACl2 2003 workshop.
13
Fair environment assumptions for the bakery algorithm
15
OK, the following encapsulated functions define the properties of a fair
16
environment for the bakery. This environment is defined by the following three
19
(fair-select env X) -- returns the next input for the bakery algorithm
20
(faie-step env X) -- takes the current environment state, bakery state
21
and Xternal input and returns the next environment
23
(fair-measure env in) -- returns a lexicographic pair (i include some theory
24
below for well-founded ranks based on lexicographic
25
combinations of natural numbers) which is ensured
26
to decrease until the input in is selected.
28
We "install" the fair environment by redefining our step function to include
29
the functions fair-step and fair-select. Thus, with the (bake+ st in) before,
30
we can now define the step function fair-bake+ as a step function using the
31
fair input. The precise definition will be given in programs.lisp.
35
(include-book "measures")
36
(include-book "records")
41
(enqueue e (rest q)))))
43
(defmacro select-ctr (x) `(<- ,x :select-ctr))
44
(defmacro select-que (x) `(<- ,x :select-que))
45
(defmacro env (x) `(<- ,x :env))
48
(if (memberp x q) q (enqueue x q)))
51
(enqueue (first x) (rest x)))
57
(1+ (que-pos x (rest q)))))
59
(defthm enqueue-leaves-que-pos-unchanged
60
(implies (memberp x q)
61
(equal (que-pos x (enqueue e q))
64
(defthm memberp-holds-of-enqueue
65
(memberp e (enqueue e q)))
67
(defthm memberp-preserved-by-enqueue
68
(implies (memberp a q)
69
(memberp a (enqueue e q))))
72
(((fair-select * *) => *)
73
((fair-step * *) => *)
74
((fair-measure * *) => *)
79
(defun fair-select (env X)
80
(if (zp (select-ctr env))
81
(first (select-que env))
85
(defun fair-step (env X)
86
(let ((queue (select-que env)))
87
(if (zp (select-ctr env))
90
:select-que (rotate-que queue))
92
:select-ctr (1- (select-ctr env))
93
:select-que (add-que X queue))))))
96
(defun fair-measure (env in)
98
(que-pos in (select-que env))
99
(nfix (select-ctr env)))))
102
(defun btm-measure ()
106
(defun top-measure ()
109
;;;; exported theorem required to prove invariant with select-que
111
(defthm fair-env-select-que-preserves
112
(memberp (fair-select env X)
113
(select-que (fair-step env X))))
115
(defthm fair-step-preserves-membership
116
(implies (memberp e (select-que env))
117
(memberp e (select-que (fair-step env X)))))
119
;;;; exported properties of fair-measure
121
(defthm fair-measure-is-measure
122
(and (msrp (fair-measure env in))
123
(nat-listp (fair-measure env in))))
125
(defthm fair-measure-is-len-constant
126
(len= (fair-measure (fair-step env in) in)
127
(fair-measure env in)))
129
(defthm input-selection-is-fair
130
(implies (and (memberp in (select-que env))
131
(not (equal in (fair-select env X))))
132
(msr< (fair-measure (fair-step env X) in)
133
(fair-measure env in))))
135
;;;; exported properties of btm-measure
137
(defthm btm-measure-is-measure
138
(and (msrp (btm-measure))
139
(nat-listp (btm-measure))))
141
(defthm btm-measure-is-len=0-fair-measure
142
(len= (fair-measure env in)
145
(defthm btm-measure-msr<-fair-measure
147
(fair-measure env in)))
149
;;;; exported properties of top-measure
151
(defthm top-measure-is-measure
152
(and (msrp (top-measure))
153
(nat-listp (top-measure))))
155
(defthm top-measure-is-len=0-fair-measure
156
(len= (fair-measure env in)
159
(defthm fair-measure-msr<-top-measure
160
(msr< (fair-measure env in)