root/trunk/CspCASL/Morphism.hs @ 11220

Revision 11220, 1.6 kB (checked in by csliam, 11 months ago)

Fixed looping

Line 
1{- |
2Module      :  $Header$
3Description :  Symbols and signature morphisms for the CspCASL logic
4Copyright   :  (c) Liam O'Reilly, Markus Roggenbach, Swansea University 2008
5License     :  similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
6
7Maintainer  :  csliam@swansea.ac.uk
8Stability   :  provisional
9Portability :  portable
10
11Symbols and signature morphisms for the CASL logic
12-}
13
14module CspCASL.Morphism where
15
16import CASL.Sign
17import CASL.Morphism as CASL_Morphism
18import Common.Id(simpleIdToId)
19import CspCASL.SignCSP
20
21import qualified Data.Map as Map
22import qualified Data.Set as Set
23
24-- | Calculate the set of symbols for a CspCASL signature
25symOf :: CspCASLSign -> Set.Set Symbol
26symOf sigma =
27    let caslSymbols = CASL_Morphism.symOf sigma -- Get CASL symbols
28        cspExt = extendedInfo sigma
29        chanNames = Set.fromList $ Map.keys (chans cspExt) -- Get the channel names
30        procNames = Set.fromList $ Map.keys (procSet cspExt) -- Get the process names
31        mkChanSymbol c = Symbol {
32                           symName = simpleIdToId c,
33                           symbType = OtherTypeKind "CHANNEL_KIND"
34                         }
35        mkProcNameSymbol p = Symbol {
36                               symName = simpleIdToId p,
37                               symbType = OtherTypeKind "PROC_NAME_KIND"
38                             }
39        -- Make channel symbols from names
40        chanSymbols = Set.map mkChanSymbol chanNames
41        -- Make process name symbols from names
42        procNameSymbols = Set.map mkProcNameSymbol procNames
43    in Set.unions [caslSymbols, chanSymbols, procNameSymbols]
Note: See TracBrowser for help on using the browser.