Esempio n. 1
0
def _instantiate(spec_text):
    section_by_name = parse_ltl(spec_text, logging.getLogger())
    input_signals = [QuantifiedSignal('r', i) for i in range(nof_processes)]
    output_signals = [QuantifiedSignal('g', i) for i in range(nof_processes)]

    assumptions = section_by_name[PAR_ASSUMPTIONS]
    guarantees = section_by_name[PAR_GUARANTEES]

    inst_assumptions = list(
        chain(
            *
            [_instantiate_expr2(a, nof_processes, False)
             for a in assumptions]))

    inst_guarantees = list(
        chain(
            *[_instantiate_expr2(g, nof_processes, False)
              for g in guarantees]))

    assumptions_as_strings = [
        ConverterToWringVisitor().dispatch(a) + ';\n' for a in inst_assumptions
    ]
    guarantees_as_strings = [
        ConverterToWringVisitor().dispatch(g) + ';\n' for g in inst_guarantees
    ]

    return input_signals, output_signals, assumptions_as_strings, guarantees_as_strings
Esempio n. 2
0
def _get_spec(ltl_text: str, logger: Logger) -> (list, list, list, list):
    #all the assumptions are conjugated together
    #the guarantees are separated into different SpecProperty objects

    data_by_section = par_parser.parse_ltl(ltl_text, logger)
    if data_by_section is None:
        return

    assumptions = data_by_section[PAR_ASSUMPTIONS]
    guarantees = data_by_section[PAR_GUARANTEES]

    anon_inputs = [s.name for s in data_by_section[PAR_INPUT_VARIABLES]]
    anon_outputs = [s.name for s in data_by_section[PAR_OUTPUT_VARIABLES]]

    return anon_inputs, anon_outputs, assumptions, guarantees
Esempio n. 3
0
def _get_spec(ltl_text:str, logger:Logger) -> (list, list, list, list):
    #all the assumptions are conjugated together
    #the guarantees are separated into different SpecProperty objects

    data_by_section = par_parser.parse_ltl(ltl_text, logger)
    if data_by_section is None:
        return

    assumptions = data_by_section[PAR_ASSUMPTIONS]
    guarantees = data_by_section[PAR_GUARANTEES]

    anon_inputs = [s.name for s in data_by_section[PAR_INPUT_VARIABLES]]
    anon_outputs = [s.name for s in data_by_section[PAR_OUTPUT_VARIABLES]]

    return anon_inputs, anon_outputs, assumptions, guarantees
    def __init__(self, filename=None, content=None):
        '''
        Constructor
        '''
        try:

            # read content
            if filename is not None:
                with open(filename, 'r') as fh:
                    content = fh.read()
            assert(content is not None)
            spec_dict = par_parser.parse_ltl(content, None)

            # global system parameters
            system_parameters = {t[0]: t[1] for t
                                 in spec_dict[par_lexer_desc.PAR_GENERAL]}
            self.__system_parameters = system_parameters

            self.templates_count = int(
                system_parameters[par_lexer_desc.PAR_GENERAL_TEMPLATE_COUNT])
            self.templates = [Template(i)
                              for i in range(0, self.templates_count)]

            # signals
            for sig in spec_dict[par_lexer_desc.PAR_INPUT_VARIABLES]:
                assert(type(sig.template_index) is int)
                self.templates[sig.template_index].inputs.append(sig)
            for sig in spec_dict[par_lexer_desc.PAR_OUTPUT_VARIABLES]:
                self.templates[sig.template_index].outputs.append(sig)

            # assumptions
            self.assumptions = [Assumption(formula) for formula
                                in spec_dict[par_lexer_desc.PAR_ASSUMPTIONS]]
            self.guarantees = [Guarantee(formula) for formula
                               in spec_dict[par_lexer_desc.PAR_GUARANTEES]]

            # bound
            self.bound = (0,) * self.templates_count

            # cut-off
            self.cutoff = (0,) * self.templates_count
        except Exception as e:
            raise SpecificationException("Error while reading "
                                         "specification: %s" % e)
Esempio n. 5
0
def _instantiate(spec_text):
    section_by_name = parse_ltl(spec_text, logging.getLogger())
    input_signals = [QuantifiedSignal('r', i) for i in range(nof_processes)]
    output_signals = [QuantifiedSignal('g', i) for i in range(nof_processes)]

    assumptions = section_by_name[PAR_ASSUMPTIONS]
    guarantees = section_by_name[PAR_GUARANTEES]

    inst_assumptions = list(chain(*[_instantiate_expr2(a, nof_processes, False)
                                    for a in assumptions]))

    inst_guarantees = list(chain(*[_instantiate_expr2(g, nof_processes, False)
                                   for g in guarantees]))

    assumptions_as_strings = [ConverterToWringVisitor().dispatch(a) + ';\n'
                              for a in inst_assumptions]
    guarantees_as_strings = [ConverterToWringVisitor().dispatch(g) + ';\n'
                             for g in inst_guarantees]

    return input_signals, output_signals, assumptions_as_strings, guarantees_as_strings
Esempio n. 6
0
import parsing.par_parser as parser

SIMPLE_SPEC = """
[GENERAL]
templates: 2

[INPUT_VARIABLES] #no support of global variables => all the variables are assumed to be indexed!
r_0;r_1;

[OUTPUT_VARIABLES]
g_0;g_1;

[ASSUMPTIONS]
Forall (i) r_0_i=0;
Forall (i) G(F((r_0_i=0)+(g_0_i=0)));
Forall (i) r_1_i=0;
Forall (i) G(F((r_1_i=0)+(g_1_i=0)));

[GUARANTEES]
Forall (i) g_0_i=0;
Forall (i) g_1_i=0;
Forall (i,j) G(!((g_0_i=1) * (g_0_j=1)));
Forall (i,j) G(!((g_0_i=1) * (g_1_j=1)));
Forall (i,j) G(!((g_1_i=1) * (g_1_j=1)));
"""


# par_parser.bparser.parse(input=SIMPLE_SPEC)
parser.parse_ltl(SIMPLE_SPEC, logging.getLogger())