Invariantes e interface para Maria


Considere a seguinte classe do Haskell que especifica uma rede P/T.

{-# OPTIONS -fglasgow-exts #-}
module PTNet where

import Data.Set
import Data.Map

class (Eq p, Show p, Eq t, Show t) => PTNet n p t where
    places :: n p t -> Set p
    trans :: n p t -> Set t
    pre :: n p t -> Map (p,t) Int
    pos :: n p t -> Map (t,p) Int
    capacity :: n p t -> Map p Int
    initial :: n p t -> Map p Int


Os tipos de dados Set e Map implementam, respectivamente, conjuntos e funções finitas e fazem parte das bibliotecas hierárquicas do GHC.

Pretende-se neste projecto implementar o algoritmo para cálculo de invariantes de lugar apresentado nas aulas teóricas. A função implementada deve aceitar qualquer rede que implemente a interface acima definida.

Também se pretende um gerador de descrições de rede compatível com a ferramenta Maria, para que se possa fazer a verificação de fórmulas LTL sobre uma qualquer rede definida em Haskell.