Mutext DRS generator

This commit is contained in:
Artur Meski
2018-04-29 18:54:19 +01:00
parent 36b59b5baf
commit 06a28f9e54
2 changed files with 83 additions and 1 deletions

View File

@@ -155,7 +155,7 @@ std::string FormRSCTLK::toStr(void) const
return "NK[" + getSingleAgent() + "](" + arg[0]->toStr() + ")"; return "NK[" + getSingleAgent() + "](" + arg[0]->toStr() + ")";
} }
else if (oper == RSCTLK_UK) { else if (oper == RSCTLK_UK) {
return "UK[" + getSingleAgent() + "](" + arg[0]->toStr() + ")"; return "K[" + getSingleAgent() + "](" + arg[0]->toStr() + ")";
} }
else { else {

82
in/gen_drs_mutex.py Executable file
View File

@@ -0,0 +1,82 @@
#!/usr/bin/env python
from sys import argv,exit
OPTIONS_STR = """
options { use-context-automaton; }
"""
CONTROLLER_STR = """
ct {
{{lock},{release} -> {lock}};
{{req},{} -> {lock}};
};
"""
PROC_STR = """
proc{:d} {{
{{{{out, busy}}, {{}} -> {{req}}}};
{{{{out}}, {{}} -> {{req}}}};
{{{{req}}, {{lock}} -> {{in}}}};
{{{{in}}, {{busy}} -> {{out, release}}}};
{{{{in, busy}}, {{}} -> {{in}}}};
{{{{in, lock}}, {{}} -> {{req}}}};
}};
"""
CA_STR = """
context-automaton {{
states {{ s0, s1 }}
init-state {{ s0 }}
transitions {{
{:s}
}}
}}
"""
PROPERTY_STR = """
rsctlk-property { AG(proc0.in IMPLIES K[proc0](~proc1.in) ) }
"""
#################################################################
if len(argv) < 2:
print("Usage: {:s} <number of modules>".format(argv[0]))
exit(100)
n = int(argv[1])
out = ""
out += OPTIONS_STR
out += "reactions {\n"
out += CONTROLLER_STR
for i in range(n):
out += PROC_STR.format(i)
out += "}\n"
transitions = ""
init_trans = 8*" " + "{ ct={} "
for i in range(n):
init_trans += "proc{:d}={{out}} ".format(i)
init_trans += "}: s0 -> s1;\n"
transitions += init_trans
for i in range(n):
transitions += "{:s}{{ ct={{}} proc{:d}={{}} }}: s1 -> s1;\n".format(8*" ", i)
out += CA_STR.format(transitions)
out += PROPERTY_STR
print(out)
# { ct={} proc1={out} }: s0 -> s1;
# { ct={} proc2={out} }: s0 -> s1;
# { ct={} proc1={} }: s1 -> s1;
# { ct={} proc2={} }: s1 -> s1;