| 1 | {- | |
|---|
| 2 | Module : $Header$ |
|---|
| 3 | Description : Provides transformations from Csp Processes to Isabelle terms |
|---|
| 4 | Copyright : (c) Andy Gimblett, Liam O'Reilly and Markus Roggenbach, |
|---|
| 5 | Swansea University 2008 |
|---|
| 6 | License : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt |
|---|
| 7 | |
|---|
| 8 | Maintainer : csliam@swansea.ac.uk |
|---|
| 9 | Stability : provisional |
|---|
| 10 | Portability : portable |
|---|
| 11 | |
|---|
| 12 | Provides transformations from Csp Processes to Isabelle terms |
|---|
| 13 | |
|---|
| 14 | -} |
|---|
| 15 | module CspCASL.Trans_CspProver where |
|---|
| 16 | |
|---|
| 17 | import CASL.AS_Basic_CASL (SORT, VAR) |
|---|
| 18 | |
|---|
| 19 | import Common.Id |
|---|
| 20 | |
|---|
| 21 | import CspCASL.AS_CspCASL_Process |
|---|
| 22 | import CspCASL.CspProver_Consts |
|---|
| 23 | import CspCASL.Trans_Consts |
|---|
| 24 | |
|---|
| 25 | import Isabelle.IsaSign |
|---|
| 26 | import Isabelle.IsaConsts |
|---|
| 27 | |
|---|
| 28 | transProcess :: PROCESS -> Term |
|---|
| 29 | transProcess pr = case pr of |
|---|
| 30 | -- precedence 0 |
|---|
| 31 | Skip _ -> cspProver_skipOp |
|---|
| 32 | Stop _ -> cspProver_stopOp |
|---|
| 33 | Div _ -> cspProver_divOp |
|---|
| 34 | Run es _ -> App (cspProver_runOp) (transEventSet es) NotCont |
|---|
| 35 | Chaos es _ -> App (cspProver_chaosOp) (transEventSet es) NotCont |
|---|
| 36 | NamedProcess pn ts _ -> |
|---|
| 37 | let pnTerm = conDouble $ show pn |
|---|
| 38 | in if (null ts) |
|---|
| 39 | then pnTerm |
|---|
| 40 | else App pnTerm (conDouble $ show ts) NotCont |
|---|
| 41 | -- precedence 1 |
|---|
| 42 | ConditionalProcess _ p q _ -> |
|---|
| 43 | cspProver_conditionalOp true (transProcess p) (transProcess q) |
|---|
| 44 | -- precedence 2 |
|---|
| 45 | Hiding p es _ -> |
|---|
| 46 | cspProver_hidingOp (transProcess p) (transEventSet es) |
|---|
| 47 | RenamingProcess p r _ -> |
|---|
| 48 | cspProver_renamingOp (transProcess p) (transRenaming r) |
|---|
| 49 | -- precedence 3 |
|---|
| 50 | Sequential p q _ -> |
|---|
| 51 | cspProver_sequenceOp (transProcess p) (transProcess q) |
|---|
| 52 | PrefixProcess ev p _ -> |
|---|
| 53 | cspProver_action_prefixOp (transEvent ev) (transProcess p) |
|---|
| 54 | InternalPrefixProcess v s p _ -> |
|---|
| 55 | cspProver_internal_prefix_choiceOp (transVar v) |
|---|
| 56 | (transSort s) |
|---|
| 57 | (transProcess p) |
|---|
| 58 | ExternalPrefixProcess v s p _ -> |
|---|
| 59 | cspProver_external_prefix_choiceOp (transVar v) |
|---|
| 60 | (transSort s) |
|---|
| 61 | (transProcess p) |
|---|
| 62 | -- precedence 4 |
|---|
| 63 | InternalChoice p q _ -> |
|---|
| 64 | cspProver_internal_choiceOp (transProcess p) (transProcess q) |
|---|
| 65 | ExternalChoice p q _ -> |
|---|
| 66 | cspProver_external_choiceOp (transProcess p) (transProcess q) |
|---|
| 67 | -- precedence 5 |
|---|
| 68 | Interleaving p q _ -> |
|---|
| 69 | cspProver_interleavingOp (transProcess p) (transProcess q) |
|---|
| 70 | SynchronousParallel p q _ -> |
|---|
| 71 | cspProver_synchronousOp (transProcess p) (transProcess q) |
|---|
| 72 | GeneralisedParallel p es q _ -> |
|---|
| 73 | cspProver_general_parallelOp (transProcess p) |
|---|
| 74 | (transEventSet es) |
|---|
| 75 | (transProcess q) |
|---|
| 76 | |
|---|
| 77 | AlphabetisedParallel p les res q _ -> |
|---|
| 78 | cspProver_alphabetised_parallelOp (transProcess p) |
|---|
| 79 | (transEventSet les) |
|---|
| 80 | (transEventSet res) |
|---|
| 81 | (transProcess q) |
|---|
| 82 | |
|---|
| 83 | transEventSet :: EVENT_SET -> Term |
|---|
| 84 | transEventSet evs = |
|---|
| 85 | let |
|---|
| 86 | tranCommType ct = conDouble $ (tokStr ct) ++ barExtS |
|---|
| 87 | in case evs of |
|---|
| 88 | EventSet commTypes _ -> Set $ FixedSet $ map tranCommType commTypes |
|---|
| 89 | |
|---|
| 90 | transEvent :: EVENT -> Term |
|---|
| 91 | transEvent ev = |
|---|
| 92 | case ev of |
|---|
| 93 | TermEvent _caslTerm _ -> conDouble "not yet done" |
|---|
| 94 | ChanSend _ _ _ -> conDouble "not yet done" |
|---|
| 95 | ChanNonDetSend _ _ _ _ -> conDouble "not yet done" |
|---|
| 96 | ChanRecv _ _ _ _ -> conDouble "not yet done" |
|---|
| 97 | |
|---|
| 98 | transVar :: VAR -> Term |
|---|
| 99 | transVar v = conDouble $ tokStr v |
|---|
| 100 | |
|---|
| 101 | transSort :: SORT -> Term |
|---|
| 102 | transSort sort = let sortBarString = convertSort2String sort ++ barExtS |
|---|
| 103 | in conDouble sortBarString |
|---|
| 104 | |
|---|
| 105 | transRenaming :: RENAMING -> Term |
|---|
| 106 | transRenaming _ = conDouble "not yet done" |
|---|