#!/usr/bin/env python3 from argparse import ArgumentParser, FileType import stormpy # as in https://github.com/moves-rwth/stormpy/blob/master/examples//parametric_models/02-parametric-models.py, but no idea why import stormpy.info if stormpy.info.storm_ratfunc_use_cln(): import pycarl.cln.formula else: import pycarl.gmp.formula def main(): parser = ArgumentParser(description='Model Repair tool') parser.add_argument('--program', '-p', type=FileType('r'), required=True, help='Path to the PRISM program to check and repair') parser.add_argument('--properties', '-f', type=FileType('r'), required=True, help='Path to the properties to check') args = parser.parse_args() program = stormpy.parse_prism_program(args.program.name) properties = args.properties.read() properties = stormpy.parse_properties_for_prism_program(properties, program) model = stormpy.build_parametric_model(program, properties) print('Built a model with {} states and {} transitions'.format( model.nr_states, model.nr_transitions)) params = model.collect_probability_parameters() print('Parameter(s): ' + ', '.join([str(p) for p in params])) for prop in properties: print('Checking:', prop) result = stormpy.model_checking(model, prop) init = model.initial_states[0] func = result.at(init) collector = stormpy.ConstraintCollector(model) print('Well-formed constraints:') for formula in collector.wellformed_constraints: print(formula.get_constraint()) print('Graph preserving constraints:') for formula in collector.graph_preserving_constraints: print(formula.get_constraint()) if __name__ == '__main__': main()