summaryrefslogtreecommitdiff
path: root/Assignment2/src/run.py
blob: 94862bfc35e71eaf19cc7e22549340e9ba9da63a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/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()