| 1 | {- | |
|---|
| 2 | Module : $Header$ |
|---|
| 3 | Description : Symbols and signature morphisms for the CspCASL logic |
|---|
| 4 | Copyright : (c) Liam O'Reilly, Markus Roggenbach, Swansea University 2008 |
|---|
| 5 | License : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt |
|---|
| 6 | |
|---|
| 7 | Maintainer : csliam@swansea.ac.uk |
|---|
| 8 | Stability : provisional |
|---|
| 9 | Portability : portable |
|---|
| 10 | |
|---|
| 11 | Symbols and signature morphisms for the CASL logic |
|---|
| 12 | -} |
|---|
| 13 | |
|---|
| 14 | module CspCASL.Morphism where |
|---|
| 15 | |
|---|
| 16 | import CASL.Sign |
|---|
| 17 | import CASL.Morphism as CASL_Morphism |
|---|
| 18 | import Common.Id(simpleIdToId) |
|---|
| 19 | import CspCASL.SignCSP |
|---|
| 20 | |
|---|
| 21 | import qualified Data.Map as Map |
|---|
| 22 | import qualified Data.Set as Set |
|---|
| 23 | |
|---|
| 24 | -- | Calculate the set of symbols for a CspCASL signature |
|---|
| 25 | symOf :: CspCASLSign -> Set.Set Symbol |
|---|
| 26 | symOf 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] |
|---|