P/T Nets em Haskell


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.

Neste projecto pretende-se que desenvolva uma implementação de referência deste tipo de dados, e uma pequena biblioteca para análise e manipulação de redes. Esta biblioteca deve incluir no mínimo funções genéricas para calcular o grafo de acessibilidade e os invariantes de lugar. O grafo de acessibilidade deve ser implementado usando a biblioteca Data.Graph.Inductive distribuida com o GHC, por forma a aproveitar as suas potencialidades de geração de layouts para a ferramenta Graphviz de visualização de grafos.

Para permitir a interligação com a ferramenta DaNAMiCS também deve ser desenvolvido um parser que interprete os ficheiros com extensão bim.