next up previous contents
Next: Classes e exemplos de Up: Lógica temporal no STeP Previous: Sintaxe dos operadores temporais

Estrutura de um ficheiro de especificação

Um ficheiro de especificação contém normalmente três partes:

Na sua versão mais reduzida, um ficheiro de especificação pode conter apenas uma fórmula que será, por omissão, o objectivo da prova. Caso se pretendam definir vários objectivos então é necessário definir uma secção de propriedades, composta por um conjunto de linhas da forma:

PROPERTY nome da propriedade : fórmula temporal
Os axiomas são definidos de acordo com a seguinte sintaxe:
AXIOM nome do axioma : fórmula temporal

A secção de declarações pode ser usada para especificar as seguintes entidades:

Um possível ficheiro de especificação para o programa da figura 1.1 é apresentado na figura 2.1.


  
Figure 2.1: Exemplo de ficheiro de especificação

SPEC

value COMMUTATIVE gcd : int*int --> int 

AXIOM gcd1: []Forall m,n:int . (m != n --> gcd(m,n) = gcd(m-n,n))

AXIOM gcd2: []Forall m:int . (m > 0 --> gcd(m,m) = m)
AXIOM gcd3: []Forall m:int . (m < 0 --> gcd(m,m) = -m)

PROPERTY aux1: [](y1 > 0)
PROPERTY aux2: [](y2 > 0)
PROPERTY aux3: [](gcd(y1,y2) = gcd(a,b))

PROPERTY part-corr: l8 ==> g = gcd(a,b)




Sempre que o ficheiro de especificação contenha mais do que uma única fórmula, deve começar pela palavra reservada SPEC. Tal como nos ficheiros SPL, os comentários fazem-se utilizando o caracter %, para indicar um comentário que só vai até ao fim da linha, ou usando (* e *) para um comentário que ocupe várias linhas. A extensão mais usada para estes ficheiros é .spec. Para ler um ficheiro de especificação para o STeP utiliza-se a opção Load specification do menu File.


next up previous contents
Next: Classes e exemplos de Up: Lógica temporal no STeP Previous: Sintaxe dos operadores temporais

1999-05-25