• No results found

5 Scenekunst i tall 2019

In document Kunst i tall 2019 (sider 87-143)

4.6

Geração de Oráculos

A obtenção dos oráculos é feita partindo das listas de estímulos finais representados em listas Prolog, aplicando cada estímulo à semântica operacional da EAPN, obser- vando se é possível através desse estímulo, as transições associadas dispararem e se subsequentemente são observados os outputs esperados.

Tome-se como exemplo o traço de execução(teste) da listagem 4.8 que foi gerado pela ferramenta.

Listagem 4.8: ’Teste gerado’

[ ( t i c k , n u l l ) , ( t i c k , n u l l ) , ( t i c k , n u l l ) , ( mark w i t h time( suc ( suc ( suc ( zero ) ) ) ) ) ]

Este traço de execução do sistema corresponde à invocação de t✐❝❦ por três vezes finalizando com♠❛r❦ observando-se na gate t✐♠❡ o valor s✉❝✭s✉❝✭s✉❝✭③❡r♦✮✮✮ possivel- mente correspondente ao número det✐❝❦s de input. Este teste, em rigor, deverá passar porque o número det✐❝❦s está de acordo com a observação em t✐♠❡. Para que seja cal- culado o oráculo é necessário que a APN seja transformada em Prolog da forma que se explicará em seguida. Em particular, as regras de transformação serão explanadas no próximo capítulo, no entanto como é necessário compreender que tipo de código Prolog será gerado a partir do modelo para se poder introduzir o método de cálculo do oráculo, ir-se-á introduzir nesta secção o tipo de transformação que deve ser feita.

A EAPN de referência nesta dissertação contém dois places. Um dos places está inicialmente com o token algébrico ③❡r♦ e o place correspondente ao estado final não contém quaisquer tokens. A partir destes factos modelados é produzida a linha Prolog da listagem 4.9 que mais não é do que uma lista com um functor place com dois argumentos: o nome da transição e uma lista dos tokens algébricos que se encontram inicialmente na marcação.

Listagem 4.9: ’Marcação inicial em Prolog’ ✶ [ place ( ’ I n c ’ , [ zero ] ) , place ( ’ Fi nis he d ’ , [ ] ) ]

De seguida transforma-se as transições da seguinte forma: por cada transição que conste da EAPN gera-se uma cláusula como indicado na listagem 4.10.

Listagem 4.10: ’A transição em Prolog’ ✶ t r a n s i t i o n (STIMULUS, OBSERVATION, MARCATION, NEWMARCATION) :−

✷ t a k e o u t (OUTTOKENS, PLACEA,MARCATION, NEW_MARCATION_INTERM) ,

✸ putinMany (INTOKENS, PLACEB,

NEW_MARCATION_INTERM, NEWMARCATION) ,

✹ <Conditions > .

Como se pode observar, a cláusula tem como cabeça o functor ’transition’ de ari- dade 4, onde recebe como argumento o método de input que despotela a transição, a

4. ABORDAGEM PROPOSTA/SOLUÇÃO 4.6. Geração de Oráculos

gate de observação, a marcação que a EAPN apresenta num determinado momento e a marcação nova caso a cláusula suceda.

No corpo da cláusula tem-se o predicadot❛❦❡♦✉t que recebe como argumento uma lista de tokens que são consumidos pela transição, o place de onde deve ser consu- mido; a marcação que a EAPN apresenta e a nova marcação após o consumo dos to- kens. Tem ainda o predicado♣✉t✐♥▼❛♥② que recebe uma lista com os tokens que devem ser depositados no placeP▲❆❈❊❇ e a marcação que resulta do predicado t❛❦❡♦✉t e que devolve a marcação existente após a colocação dos tokens no place de destino. Por fim devem ser acrescentadas ao corpo da cláusula todas as condições algébricas.

O predicado t❛❦❡♦✉t▼❛♥② funciona em cooperação com o predicado t❛❦❡♦✉t tal como se observa na listagem 4.11, e permite retirar vários tokens do multiset de um place. Deste modo, o que acontece neste predicado é um processamento elemento a elemento da lista de tokens a retirar. Por cada elemento é utilizado o predicado t❛❦❡♦✉t (linha 4) para fazer a eliminação do valor algébrico em processamento (Alge- braicValue) do multisetdo place com nome ’Name’, numa dada marcação. Após o processamento desse valor algébrico passa-se ao seguinte na lista com a recursão sobre t❛❦❡♦✉t▼❛♥② com o resto da lista (Tail) e onde a marcação de entrada é a marcação de saída após a eliminação do elemento.

O predicadot❛❦❡♦✉t, por sua vez, procura através do predicado ♠❡♠❜❡r, um place que esteja na marcação que tenha o nome dado como input; a partir daí extrai-se o MultiSet que lhe está associado (linha 8). Na linha seguinte é utilizado o predicado auxiliar❞❡❧❡t❡❢r♦♠ para efectivamente retirar o place da marcação e na linha 10 é, atra- vés do predicado♠❡♠❜❡r, procurado um valor no Multiset do Place que unifique com ❆❧❣❡❜r❛✐❝❱❛❧✉❡. Por fim, na linha seguinte elimina-se o valor do multiset. A marcação de retorno é construída na primeira linha do predicado, onde lhe é adicionado o place retirado já com o novo multiset (sem os tokens).

Nesta solução entra-se em linha de conta com a característica do predicado♠❡♠❜❡r, cujos argumentos são de entrada e saída simultaneamente. Desta forma se o multiset do placeem questão contiver vários elementos (e.g. [a,b,c]), e se se pretender retirar vá- rios também, o Prolog procura por backtracking uma combinação de unificação entre os elementos a retirar e os elementos do place.

Mais se acrescenta que foi concretizada uma solução com o predicados❡❧❡❝t1, mas

para abono da compreensão e para tornar a implementação mais próxima daquilo que realmente acontece com a EAPN em termos semânticos, optou-se por apresentar esta.

Listagem 4.11: ’Predicados takeout e takeoutMany’ ✶ takeoutMany ( [ ] , _ , Marcation , Marcation ) .

4. ABORDAGEM PROPOSTA/SOLUÇÃO 4.6. Geração de Oráculos

✸ takeoutMany ( [ AlgebraicValue | T a i l ] , place (Name) , Marcation , NewMarcation ) :−

✹ t a k e o u t ( AlgebraicValue , place (Name) , Marcation , NewIntermMarcation ) ,

✺ takeoutMany ( T a i l , place (Name) , NewIntermMarcation , NewMarcation ) . ✻

✼ t a k e o u t ( AlgebraicValue , place (Name) , Marcation , [ place (Name, NewMultiSet ) | NewMarcation ] ) :−

✽ member ( place (Name, M u l t i S e t ) ,

Marcation ) , ✾ d e l e t e f r o m ( place (Name, M u l t i S e t ) , Marcation , NewMarcation ) , ✶✵ member ( AlgebraicValue , M u l t i S e t ) , ✶✶ d e l e t e f r o m ( AlgebraicValue , M u l t i S e t , NewMultiSet ) . ✶✷ ✶✸ d e l e t e f r o m ( _ , [ ] , [ ] ) . ✶✹ d e l e t e f r o m (P , [ P | T ] , T ) : − ! . ✶✺ d e l e t e f r o m (X , [ P | T ] , [ P | T a i l R e s u l t ] ) :− d e l e t e f r o m (X , T , T a i l R e s u l t ) .

Em oposição ao funcionamento do predicadot❛❦❡♦✉t▼❛♥② tem-se o predicado ♣✉✲ t✐♥▼❛♥② que permite colocar elementos no multiset de um place. O modo de funcio- namento do predicado♣✉t✐♥▼❛♥② é similar ao do t❛❦❡♦✉t▼❛♥② exceptuando-se o facto de que após ser encontrado o place pretendido é feita uma concatenação com o seu multiset com o fim de lhe adicionar os elementos.

Listagem 4.12: ’Predicados putin e putinMany’

✶ putinMany ( AlgebraicValues , place (Name) , Marcation , [ place (Name, NewMultiSet ) | NewMarcation ] ) :− ✷ member ( place (Name, M u l t i S e t ) , Marcation ) , ✸ d e l e t e f r o m ( place (Name, M u l t i S e t ) , Marcation

, NewMarcation ) ,

✹ append ( AlgebraicValues , M u l t i S e t ,

NewMultiSet ) .

Conclui-se esta explanação com um exemplo concreto de transformação da transi- ção que retira um token do place ’Inc’ e lhe coloca o seu sucessor. Repare-se na linha 1 da figura 4.13, em que o método de input ét✐❝❦ e não tem observação. Na linha 2 pretende-se que seja retirado o token Counter do place ’Inc’ que, em rigor, unificará com zero aquando do primeiro disparo. Na linha 3 instrui-se para que seja colocado de volta o sucessor do token retirado. Por fim, encontra-se a condição da transição obrigando a que Counter não exceda suc10(zero).

Listagem 4.13: ’Exemplo de transformação de uma transição’ ✶ t r a n s i t i o n ( t i c k , null , Marcation , NewMarcation ) :−

✷ t a k e o u t ( Counter , place ( ’ I n c ’ ) , Marcation , NewMarcation1 ) , ✸ p u t i n ( suc ( Counter ) , place ( ’ I n c ’ ) , NewMarcation1 , NewMarcation ) ,

✹ eva l ( algEq ( lessThan ( Counter , suc ( suc ( suc ( suc ( suc ( suc ( suc ( suc ( suc ( suc ( zero ) ) ) ) ) ) ) ) ) ) ) , t r u e) , t r u e) .

O oráculo é, por fim, calculado através do predicado da listagem 4.14. Tem-se um caso base em que se a lista que contém o traço de execução apenas contiver o ele-

In document Kunst i tall 2019 (sider 87-143)