A seguir: Visited nodes invariant Acima: Programação Paralela Anterior: Theorem 1: ``Proof'' for
Queremos mostrar que s[i] = hungry leads-to s[i] = eating. Vamos começar mostrando que
![]()
![]()
![]()
Consideremos agora uma computação infinita
em que um sítio
i0 ficou com fome em um certo instante t0, e permaneceu com fome
até o fim dos tempos. Pelo que acabamos de demonstrar, sabemos que no
instante t0 tínhamos root(i0) = F, e portanto que para
todo instante
,
. Se no
instante t0 tínhamos Next[i] = j0, a regra 5 certamente
terá sido executada em um instante t1 > t0. Um Request terá sido
enviado por i0. Este Request não pode ter visitado um número
ilimitado de sítios , como veremos a seguir. Portanto, teremos um
sítio i1 onde o Request de i terá se estabilizado a partir de
um instante t2. Por
ou
,teremos
para todo instante
Isto só é possível se i1 também nunca
chegou a comer na computação
, a partir do instante t2.
Pelo mesmo raciocínio, existe um sítio i2 que a partir
de um certo instante reteve o Request
de i1, e que nunca chegou a comer. Portanto, a única possibilidade
de existência de
é a exitência de uma sequência
infinita de sítios
tal que, a partir
de um certo instante, o Request de
ik esteja retido em ik+1. Mas como ik
ik+1,
esta sequência não pode conter repetições, e
não pode
existir.
Para provar que um Request não pode visitar um número ilimitado de sítios, vamos demonstrar o seguinte invariante:
A7 não é indutivo, e precisamos reforçá-lo com o seguinte predicado:
![]()
Como para todo i
é inicialmente vazio, A8 é válido
inicialmente. Precisamos agora varrer todas as regras do algoritmo,
demonstrando que se A8 for válido antes da execução da regra,
A8 será válido também após a sua execução.
A8 corre o risco de ser invalidado por regras que modifiquem
o valor de algum
ou que eliminem relações
para algum par de sítios.