Ejemplo n.º 1
0
def parse_acacia_and_build_expr(ltl_text:str, part_text:str,
                                ltl_to_atm:LTLToAutomaton,
                                strengthen_lvl) -> Spec:
    """ Note: parses and strengthens the formula. """

    input_signals, output_signals, data_by_unit = acacia_parser.parse(ltl_text, part_text)

    assert data_by_unit is not None

    ltl_properties = []
    for (unit_name, unit_data) in data_by_unit.items():
        assumptions = unit_data[0]
        guarantees = unit_data[1]

        a_safeties, a_livenesses = split_safety_liveness(assumptions, ltl_to_atm)
        g_safeties, g_livenesses = split_safety_liveness(guarantees, ltl_to_atm)

        if strengthen_lvl == 2:
            ltl_property = strengthen2([], [],
                                       a_safeties, g_safeties,
                                       a_livenesses, g_livenesses)
        elif strengthen_lvl == 1:
            ltl_property = strengthen1([], [],
                                       a_safeties, g_safeties,
                                       a_livenesses, g_livenesses)
        else:
            ltl_property = and_expr(list(a_safeties) + list(a_livenesses))\
                           >> and_expr(list(g_safeties) + list(g_livenesses))
        ltl_properties.append(ltl_property)

    return Spec(input_signals, output_signals, and_expr(ltl_properties))
Ejemplo n.º 2
0
Archivo: bosy.py Proyecto: 5nizza/Party
def _get_acacia_spec(ltl_text:str, part_text:str, logger:logging.Logger) -> (list, list, SpecProperty):
    input_signals, output_signals, data_by_name = acacia_parser.parse(ltl_text, part_text, logger)

    if data_by_name is None:
        return None, None, None

    spec_properties = []
    for (unit_name, unit_data) in data_by_name.items():
        assumptions = unit_data[0]
        guarantees = unit_data[1]
        spec_properties.append(SpecProperty(assumptions, guarantees))

    spec_property = and_properties(spec_properties)

    return input_signals, output_signals, spec_property
Ejemplo n.º 3
0
def _get_acacia_spec(ltl_text: str, part_text: str,
                     logger: logging.Logger) -> (list, list, SpecProperty):
    input_signals, output_signals, data_by_name = acacia_parser.parse(
        ltl_text, part_text, logger)

    if data_by_name is None:
        return None, None, None

    spec_properties = []
    for (unit_name, unit_data) in data_by_name.items():
        assumptions = unit_data[0]
        guarantees = unit_data[1]
        spec_properties.append(SpecProperty(assumptions, guarantees))

    spec_property = and_properties(spec_properties)

    return input_signals, output_signals, spec_property
Ejemplo n.º 4
0
        root.append(ltl_node)


def _get_doctype():
    return '<!DOCTYPE SynthesisProblem SYSTEM "./SynSpec.dtd">\n'


if __name__ == '__main__':
    if len(sys.argv) != 2:
        print('Missing arguments. \n{me} <acacia_ltl>'.format(me=__file__))
        exit(0)

    ltl_text = open(sys.argv[1]).read()
    part_text = open(sys.argv[1].replace('.ltl', '.part')).read()

    input_signals, output_signals, data_by_name = acacia_parser.parse(ltl_text, part_text, logging.getLogger())

    root = ET.Element('SynthesisProblem')
    ET.SubElement(root, 'Title')
    ET.SubElement(root, 'Description')
    path_to_ltl = ET.SubElement(root, 'PathToLTLCompiler')
    path_to_ltl.text = 'hoho!'  # unbeast cannot handle an empty path

    #: :type: Element
    inputs_element = ET.SubElement(root, 'GlobalInputs')
    _define_signals(input_signals, inputs_element)

    outputs_element = ET.SubElement(root, 'GlobalOutputs')
    _define_signals(output_signals, outputs_element)

    all_assumptions = set()