Nesta subseção são apresentadas definições que precisamente caracterizam metamodelos e modelos executáveis, incluindo adaptativos, assim como conceitos relacionados, tendo o SBMM como formalismo subjacente.
Seja um metamodelo arbitrário MM = (nameMM, C, , E, R, descriptorc, descriptore) e
SemanticsMM = (state_propsMM, event_classMM, bMM) uma semântica de execução
para MM. Seja C = {c1, c2, ... cn} com descriptorc(ck) = (metaclassnamek, Pk) para k =
1, 2, ..., n. O metamodelo PetriMM de nome “PetriMetamodel” da eq. (73) e o modelo
PetriM de nome “MyPetriNet01” da eq. (74) são utilizados como exemplos ao longo
das definições. Para esse metamodelo, considera-se a semântica SemanticsPetriMM =
162
state_propsPetriMM(c1) = ;
state_propsPetriMM(c2) = ;
state_propsPetriMM(c3) = { (“numberOfTokens”, e1, 1..1) };
state_propsPetriMM(c4) = ;
state_propsPetriMM(c6) = ;
event_classPetriMM = {c6};
bPetriMM: especificado no Quadro 7.
Alguns dos conceitos apresentados abaixo já foram mencionados. Entretanto, suas definições são reescritas de forma mais precisa através de fórmulas e sentenças em lógica de primeira ordem.
Definição 1. Propriedades de Estado. pkj Pk é uma propriedade de estado de
acordo com a semântica SemanticsMM se e somente se pkj state_propsMM(ck). Uma
propriedade de estado tem o objetivo de descrever, parcial ou totalmente, o estado de execução dos modelos executáveis conformes a MM. A função auxiliar state_props_allMM(c) pode ser obtida a partir de state_propsMM. Ela mapeia a
metaclasse c em suas propriedades de estado e também naquelas de suas supermetaclasses, transitivamente, de acordo com (76).
state_props_allMM c = state_propsMM c ∪ ⋃ state_propsMM x
c,x ∈Γ+ (76)
Não se permite propriedades de estado em metaclasses de evento (ver Definição 5 adiante).
Exemplo da Definição 1. Em PetriMM, p31 = (“numberOfTokens”, e1, 1..1) é a única
163
Definição 2. Slots de Estado. Seja M = (nameM, nameMM, I, descriptori) um modelo
arbitrário conforme a MM. Seja I = {i1, i2, ... iq} com descriptori(ik) = (instancenamek,
metaclassnamek, Sk) para k = 1, 2, ..., q. O slot skj = (propertynamekj, valkj) Sk é dito
ser um slot de estado de acordo com a semântica SemanticsMM se e somente se
(w, t, m) state_props_allMM(metaclass(MM, metaclassnamek)) (w =
propertynamekj). Em outras palavras, skj é um slot de estado se e somente se ele
corresponder a uma propriedade de estado da metaclasse identificada por propertynamek ou qualquer uma de suas supermetaclasses em MM. O conjunto de
todos os slots de estado de uma instância ik é denotado por state_slotsMM(ik).
Exemplo da Definição 2. Em PetriM, tem-se state_slotsPetriM(i1) =
{(“numberOfTokens”, “3”)}, state_slotsPetriM(i2) = {(“numberOfTokens”, “1”)},
state_slotsPetriM(i3) = {(“numberOfTokens”, “0”)} e state_slotsPetriM(ik) = para todos
os outros k.
Definição 3. Metamodelos Executáveis por Estado. MM é dito ser executável por
estado de acordo com a semântica SemanticsMM se e somente se state_propsMM(c1)
... state_propsMM(cn) . Em outras palavras, é necessário haver pelo menos
uma propriedade de estado em qualquer metaclasse.
Exemplo da Definição 3. De acordo com a definição, PetriMM é um metamodelo
executável por estado.
Definição 4. Estado de Execução de um Modelo. Seja M = (nameM, nameMM, I,
descriptori) um modelo arbitrário conforme a MM. Seja I = {i1, i2, ... iq} com
descriptori(ik) = (instancenamek, metaclassnamek, Sk) para k = 1, 2, ..., q. O estado
de execução de M de acordo com a semântica SemanticsMM é o conjunto de todos
os slots de estado de todas as instâncias combinados com os nomes das instâncias em um par ordenado, excluindo-se aquelas instâncias que não tem slots de estado. A eq. (77) expressa esse conceito através da função ExecState. O estado de execução descreve um snapshot do modelo em execução. Uma vez que os slots
164 não contêm informação sobre suas instâncias proprietárias em si mesmos, os nomes das instâncias foram incluídos nos pares para identificar completamente os “carregadores” de cada informação de estado.
ExecState M = ⋃ { instancename , state_slotsMM i } ∈I ∧ a e_ o MM ≠∅
(77)
Exemplo da Definição 4. ExecState(PetriM) = { (“place01”, {(“numberOfTokens”,
“3”)}), (“place02”, {(“numberOfTokens”, ”1”)}), (“place03”, {(“numberOfTokens”, “0”)}) }. O resultado da função descreve completamente o estado de execução de PetriM.
Definição 5. Metaclasses de Evento. c C é dita ser uma metaclasse de evento
de acordo com a semântica SemanticsMM se e somente se c event_metaclassMM.
Observe que se x é uma submetaclasse de c, isto é, (x,c) +, então x também
pertence a event_classMM. Caso contrário, event_classMM não é considerado um
conjunto válido para compor SemanticsMM. Como outra restrição, metaclasses de
evento não podem conter propriedades de estado, isto é, c C (c event_classMM
state_props_allMM(c) = ).
Exemplo da Definição 5. Em PetriMM, c6 (Firing) é a única metaclasse de evento.
Definição 6. Eventos Concretos. Seja M = (nameM, nameMM, I, descriptori) um
modelo arbitrário conforme a MM. ev I é dito ser um evento concreto de acordo com a semântica SemanticsMM se e somente se pelo menos um de seus tipos é um
elemento de event_classMM, ou seja, t types(MM,M,ev) (t event_classMM).
Exemplo da Definição 6. PetriM não possui nenhum evento concreto tal como
apresentado na subseção 5.2.3. Entretanto, se o motor de execução instanciar ev tal que descriptori(ev) = {“firing01”, “Firing”, {(“timeStamp”, “1”), (“transition”, i4)}), então
165
Definição 7. Propriedades Estruturais. pkj Pk é uma propriedade estrutural de
acordo com a semântica SemanticsMM se e somente se pkj state_propsMM(ck) ck
event_classMM. Em outras palavras, propriedades estruturais são aquelas que não
são propriedades de estado e nem pertencem a uma metaclasse de evento. Também se define a função auxiliar strucutral_propsMM(c) que retorna o conjunto de
propriedades estruturais da metaclasse c. Esta função não é uma nova parte de SemanticsMM porque pode ser obtida a partir de state_propsMM e event_classMM.
Outra função strucutral_props_allMM(c) é definida como um mapeamento da
metaclasse c para suas propriedades estruturais considerando também aquelas de suas supermetaclasses, transitivamente. Sua definição é análoga à eq. (76).
Exemplo da Definição 7. Em PetriMM, structural_propsMM(c1) = {(“weight”, e1, 1..1),
(“source”, c2, 1..1), (“destination”, c2, 1..1)}, strucutral_propsMM(c2) = ,
strucutral_propsMM(c3) = , structural_propsMM(c4) e structural_props(c6) = .
Definição 8. Slots Estruturais. Seja M = (nameM, nameMM, I, descriptori) um modelo
arbitrário conforme a MM. Seja I = {i1, i2, ... iq} com descriptori(ik) = (instancenamek,
metaclassnamek, Sk) para k = 1, 2, ..., q. skj = (propertynamekj, valkj) Sk é dito ser
um slot estrutural de acordo com SemanticsMM se e somente se (w, t, m)
structural_props_allMM(metaclass(MM, metaclassnamek)) (w = propertynamekj). Em
outras palavras, skj é um slot estrutural se e somente se corresponder a uma
propriedade estrutural da metaclasse identificada por metaclassnamek em MM, ou
de uma de suas supermetaclasses. O conjunto de todos os slots estruturais da instância ik é denotado por structural_slotsMM(ik).
Exemplo da Definição 8. Em PetriM, tem-se structural_slotsPetriM(i5) = {(“weight”, “3”),
(“source”, i1), (“destination”, i4)}, strucutral_slotsPetriM(i6) = {(“weight”, “1”), (“source”,
i2), (“destination”, i4)} e structural_slotsPetriM(i7) = {(“weight”, “2”), (“source”, i4),
166
Definição 9. Parte Estrutural do Modelo. Seja M = (nameM, nameMM, I, descriptori)
um modelo arbitrário conforme a MM. Seja I = {i1, i2, ... iq} com descriptori(ik) =
(instancenamek, metaclassnamek, Sk) para k = 1, 2, ..., q. A parte estrutural de M de
acordo com a semântica SemanticsMM é o conjunto de slots estruturais de todas as instâncias combinados com os nomes das instâncias em pares ordenados de acordo com (78). Essa definição é análoga à definição de estado de execução de um modelo. A parte estrutural está relacionada aos elementos do modelo que permanecem inalterados durante a execução não-adaptativa do modelo (ver Definição 10 mais adiante). Uma vez que os slots não contêm informação sobre suas instâncias proprietárias em si mesmos, os nomes das instâncias foram incluídos nos pares para identificar completamente os “carregadores” de cada informação estrutural.
StructuralPart M = ⋃{ instancename , structural_slotsMM i } ∈I
(78)
Diferentemente da definição de ExecState, em StructuralPart até mesmo as instâncias que não possuem slots estruturais são incluídas na definição.
Exemplo da Definição 9. StructuralPart(PetriM) = {(“arc01”, {(“weight”, “3”),
(“source”, i1), (“destination”, i4)}), (“arc02”, {(“weight”, “1”), (“source”, i2), (“destination”,
i4)}), (“arc03”, {(“weight”, “2”), (“source”, i4), (“destination”, i3)}), (“transition01”, ),
(“place01”, ), (“place02”, ), (“place03”, )}. Ela descreve completamente a parte estrutural do modelo.
Definição 10. Metamodelos Executáveis Não-Adaptativos. MM é um metamodelo
executável não-adaptativo de acordo com a semântica SemanticsMM se e somente
se ele é executável por estado (Definição 3) e o modelo de saída computado por bMM
tem parte estrutural (Definição 9) igual àquela do modelo de entrada, para qualquer modelo e evento concreto de entrada. Essa condição é representada pela eq. (79).
167 Seja M = (nameM, nameMM, I, descriptori) um modelo arbitrário conforme a MM em
qualquer passo de execução.
M M(MM) ( ev IMM(event_classMM) ( ( t types(MM, M, ev) ( t
event_classMM ) ) ( StructuralPart( bMM (M, ev) ) = StructuralPart(M) ) ) ) (79)
Exemplo da Definição 10. PetriMM é um metamodelo executável não-adaptativo de
acordo com SemanticsPetriMM porque bPetriMM, como especificado no Quadro 7, nunca
altera a parte estrutural do modelo de entrada. A função é capaz apenas de alterar slots relacionados à propriedade numberOfTokens, que é uma propriedade de estado. Além disso, esta função não insere novas instâncias de qualquer metaclasse no modelo.
Definição 11. Modelos Executáveis Não-Adaptativos. M é um modelo executável
não-adaptativo de acordo com a semântica SemanticsMM se e somente se seu
metamodelo MM é executável não-adaptativo (Definição 10) de acordo com a mesma semântica e se M é conforme a MM.
Exemplo da Definição 11. PetriM é um modelo executável não-adaptativo de acordo
com SemanticsPetriMM porque ele é conforme a PetriMM, que é um metamodelo
executável não-adaptativo.
Neste ponto, a definição de metamodelos e modelos executáveis adaptativos aparecem quase que naturalmente com base nos conceitos apresentados acima.
Definição 12. Metamodelos Executáveis Adaptativos. MM é um metamodelo
executável adaptativo de acordo com a semântica SemanticsMM se e somente se o
modelo de saída computado por bMM tem parte estrutural (Definição 9) diferente da
168 possíveis. Esta situação está representada pela eq. (80). Seja M = (nameM, nameMM,
I, descriptori) um modelo arbitrário conforme a MM em qualquer passo de execução.
M M(MM) ( ev IMM(event_classMM) ( ( t types(MM, M, ev) ( t
event_classMM StructuralPart( bMM (M, ev) ) StructuralPart(M) ) ) ) ) (80)
Definição 13. Modelos Executáveis Adaptativos. M é um modelo executável
adaptativo de acordo com a semântica SemanticsMM se e somente se seu
metamodelo MM é executável adaptativo (Definição 12) de acordo com a mesma semântica e se M é conforme a MM.
Exemplo da Definição 13. PetriM não é um modelo adaptativo de acordo com
SemanticsPetriMM porque ele é conforme a PetriMM, que não é um metamodelo
executável adaptativo.
Definição 14. Metamodelos Executáveis. MM é um metamodelo executável de
acordo com a semântica SemanticsMM se e somente se ele for executável não-
adaptativo (Definição 10) ou executável adaptativo (Definição 12) de acordo com a mesma semântica. Alternativamente, pode-se dizer que a DSML especificada por MM é executável.
Exemplo da Definição 14. PetriMM é um metamodelo executável de acordo com a
semântica SemanticsPetriMM porque ele é executável não-adaptativo.
Definição 15. Modelos Executáveis. M é um modelo executável de acordo com a
semântica SemanticsMM se e somente se seu metamodelo MM é executável de
169
Exemplo da Definição 15. PetriM é um modelo executável de acordo com a
semântica SemanticsPetriMM porque ele é conforme a PetriMM, que é um metamodelo
executável.