A Control Example
As an example, let us reduce the while-statement of the program:
n := 0 – 3;
if n then i := n else i := 0 – n fi;
fact := 1;
while i do
fact := fact * i;
i := i – 1
od
to its environment value.
The environment at the start of the while-loop is {n=-3, i=3, fact=1}
.
Rule 24 applies
<E|Env> ⇒ <V|Env>, V>0
<'while' E 'do' L 'od' | Env> ⇒
<L ; 'while' E 'do' L 'od' | Env>
because
<i | {n=-3, i=3, fact=1}> ⇒ <3 | {n=-3, i=3, fact=1}>
and
3 > 0
.
By Rule 18,
<S|Env> ⇒ Env1
<S ';' L | Env> ⇒ <L | Env1>
we must compute the environment resulting from the application of the body of the loop to the environment {n=-3, i=3, fact=1}
:
<fact ':=' fact '*' i | {n=-3, i=3, fact=1}>
⇒ <fact ':=' 1 '*' i | {n=-3, i=3, fact=1}> (Rules 15 and 9)
⇒ <fact ':=' 1 '*' 3 | {n=-3, i=3, fact=1}> (Rules 15 and 12)
⇒ <fact ':=' 3 | {n=-3, i=3, fact=1}> (Rules 5 and 17)
⇒ {n=-3, i=3, fact=1} & {fact=3} (Rule 16)
= {n=-3, i=3, fact=3}
Update the environment from {n=-3, i=3, fact=1}
to {n=-3, i=3, fact=3}:
<fact ':=' fact '*' i; i ':=' i '–' '1'|{n=-3,i=3,fact=1}>
⇒ <i ':=' i '–' '1' | {n=-3, i=3, fact=3}> (Rule 18)