CSPM-FiringRules-0.4.1.2: src/CSPM/FiringRules/Rules.hs
-----------------------------------------------------------------------------
-- |
-- Module : CSPM.FiringRules.Rules
-- Copyright : (c) Fontaine 2010 - 2011
-- License : BSD3
--
-- Maintainer : fontaine@cs.uni-duesseldorf.de
-- Stability : experimental
-- Portability : GHC-only
--
-- This module defines data types for (CSP) proof trees.
-- A proof tree shows that a particular transition is valid
-- with respect to the firing rules semantics.
--
-- (For more info on the firing rule semantics
-- see: The Theory and Practice of Concurrency A.W. Roscoe 1999.)
--
-- We use three separate data types:
-- 'RuleTau' stores a proof tree for a tau rule,
-- 'RuleTick' stores a proof tree for a tick rule and
-- 'RuleEvent' stores a proof tree for an event from Sigma.
--
-- There is a one-to-one correspondence between
-- each constructor of the data types 'RuleTau', 'RuleTick', 'RuleEvent'
-- and one fireing rule.
--
-----------------------------------------------------------------------------
{-# LANGUAGE FlexibleContexts, StandaloneDeriving, UndecidableInstances #-}
{-# LANGUAGE DeriveDataTypeable #-}
module CSPM.FiringRules.Rules
where
import CSPM.CoreLanguage
import Data.Typeable
-- | A sum-type for tau, tick and regular proof trees.
data Rule i
= TauRule (RuleTau i)
| TickRule (RuleTick i)
| EventRule (RuleEvent i)
deriving Typeable
-- | Is this a proof tree for a tau-transition ?
isTauRule :: Rule i -> Bool
isTauRule (TauRule {}) = True
isTauRule _ = False
-- | Representation of tau proof trees.
data RuleTau i
= Hidden (EventSet i) (RuleEvent i)
| HideTau (EventSet i) (RuleTau i)
| SeqTau (RuleTau i) (Process i)
| SeqTick (RuleTick i) (Process i)
| InternalChoiceL (Process i) (Process i)
| InternalChoiceR (Process i) (Process i)
| ChaosStop (EventSet i)
| TimeoutOccurs (Process i) (Process i)
| TimeoutTauR (RuleTau i) (Process i)
| ExtChoiceTauL (RuleTau i) (Process i)
| ExtChoiceTauR (Process i) (RuleTau i)
| InterleaveTauL (RuleTau i) (Process i)
| InterleaveTauR (Process i) (RuleTau i)
| InterleaveTickL (RuleTick i) (Process i)
| InterleaveTickR (Process i) (RuleTick i)
| ShareTauL (EventSet i) (RuleTau i) (Process i)
| ShareTauR (EventSet i) (Process i) (RuleTau i)
| ShareTickL (EventSet i) (RuleTick i) (Process i)
| ShareTickR (EventSet i) (Process i) (RuleTick i)
| AParallelTauL (EventSet i) (EventSet i) (RuleTau i) (Process i)
| AParallelTauR (EventSet i) (EventSet i) (Process i) (RuleTau i)
| AParallelTickL (EventSet i) (EventSet i) (RuleTick i) (Process i)
| AParallelTickR (EventSet i) (EventSet i) (Process i) (RuleTick i)
| InterruptTauL (RuleTau i) (Process i)
| InterruptTauR (Process i) (RuleTau i)
| TauRepAParallel [Either (EventSet i,Process i) (EventSet i,RuleTau i)]
| RenamingTau (RenamingRelation i) (RuleTau i)
| LinkLinked (RenamingRelation i) (RuleEvent i) (RuleEvent i)
| LinkTauL (RenamingRelation i) (RuleTau i) (Process i)
| LinkTauR (RenamingRelation i) (Process i) (RuleTau i)
| LinkTickL (RenamingRelation i) (RuleTick i) (Process i)
| LinkTickR (RenamingRelation i) (Process i) (RuleTick i)
| ExceptionTauL (EventSet i) (RuleTau i) (Process i)
| ExceptionTauR (EventSet i) (Process i) (RuleTau i)
| TraceSwitchOn (Process i) -- pseudo-tau for debugging
-- | Representation of tick proof trees.
data RuleTick i
= SkipTick
| HiddenTick (EventSet i) (RuleTick i)
| InterruptTick (RuleTick i) (Process i)
| TimeoutTick (RuleTick i) (Process i)
| ShareOmega (EventSet i)
| AParallelOmega (EventSet i) (EventSet i)
| RepAParallelOmega [EventSet i]
| InterleaveOmega
| ExtChoiceTickL (RuleTick i) (Process i)
| ExtChoiceTickR (Process i) (RuleTick i)
| RenamingTick (RenamingRelation i) (RuleTick i)
| LinkParallelTick (RenamingRelation i)
-- | Representation of regular proof trees.
data RuleEvent i
= HPrefix (Event i) (Prefix i)
| ExtChoiceL (RuleEvent i) (Process i)
| ExtChoiceR (Process i) (RuleEvent i)
| InterleaveL (RuleEvent i) (Process i)
| InterleaveR (Process i) (RuleEvent i)
| SeqNormal (RuleEvent i) (Process i)
| NotHidden (EventSet i) (RuleEvent i)
| NotShareL (EventSet i) (RuleEvent i) (Process i)
| NotShareR (EventSet i) (Process i) (RuleEvent i)
| Shared (EventSet i) (RuleEvent i) (RuleEvent i)
| AParallelL (EventSet i) (EventSet i) (RuleEvent i) (Process i)
| AParallelR (EventSet i) (EventSet i) (Process i) (RuleEvent i)
| AParallelBoth (EventSet i) (EventSet i) (RuleEvent i) (RuleEvent i)
| RepAParallelEvent [EventRepAPart i]
| NoInterrupt (RuleEvent i) (Process i)
| InterruptOccurs (Process i) (RuleEvent i)
| TimeoutNo (RuleEvent i) (Process i)
| Rename (RenamingRelation i) (Event i) (RuleEvent i)
-- todo make special cases for Rename injective and rename relational
| RenameNotInDomain (RenamingRelation i) (RuleEvent i)
| ChaosEvent (EventSet i) (Event i)
| LinkEventL (RenamingRelation i) (RuleEvent i) (Process i)
| LinkEventR (RenamingRelation i) (Process i) (RuleEvent i)
| NoException (EventSet i) (RuleEvent i) (Process i)
| ExceptionOccurs (EventSet i) (Process i) (RuleEvent i)
type EventRepAPart i
= Either (EventSet i, Process i) (EventSet i, RuleEvent i)
{-
Not sure about this.
Maybe this moves somewhere else or should be implemented differently.
This is somehow complicated by the use of type families
-}
deriving instance
(Show (Event i), Show (Prefix i), Show (Process i), Show (ExtProcess i)
,Show (EventSet i), Show (RenamingRelation i))
=> Show (RuleEvent i)
deriving instance
(Eq (Event i), Eq (Prefix i), Eq (Process i), Eq (ExtProcess i)
,Eq (EventSet i), Eq (RenamingRelation i) )
=> Eq (RuleEvent i)
deriving instance
(Ord (Event i), Ord (Prefix i), Ord (Process i), Ord (ExtProcess i)
,Ord (EventSet i), Ord (RenamingRelation i) )
=> Ord (RuleEvent i)
deriving instance
(Show (Process i), Show (EventSet i), Show (Prefix i), Show (ExtProcess i)
,Show (RenamingRelation i))
=> Show (RuleTick i)
deriving instance
(Eq (Process i), Eq (EventSet i), Eq (Prefix i), Eq (ExtProcess i)
,Eq (RenamingRelation i))
=> Eq (RuleTick i)
deriving instance
(Ord (Process i), Ord (EventSet i), Ord (Prefix i), Ord (ExtProcess i)
,Ord (RenamingRelation i))
=> Ord (RuleTick i)
deriving instance
(Show (RuleEvent i), Show (RuleTick i), Show (Process i)
,Show (EventSet i), Show (RenamingRelation i))
=> Show (RuleTau i)
deriving instance
(Eq (RuleEvent i), Eq (RuleTick i), Eq (Process i)
,Eq (EventSet i), Eq (RenamingRelation i))
=> Eq (RuleTau i)
deriving instance
(Ord (RuleEvent i), Ord (RuleTick i), Ord (Process i), Ord (EventSet i)
,Ord (ExtProcess i), Ord (Prefix i), Ord (Event i),Ord (RenamingRelation i) )
=> Ord (RuleTau i)
deriving instance
(Show (RuleEvent i), Show (RuleTick i), Show (RuleTau i))
=> Show (Rule i)
deriving instance
(Eq (RuleEvent i), Eq (RuleTick i), Eq (RuleTau i))
=> Eq (Rule i)