|
5 | 5 |
|
6 | 6 |
|
7 | 7 | def model_checking(
|
8 |
| - model: stormvogel.model.Model, prop: str | stormpy.Property, scheduler: bool = False |
| 8 | + model: stormvogel.model.Model, prop: str, scheduler: bool = False |
9 | 9 | ) -> stormvogel.result.Result | None:
|
10 | 10 | """
|
11 | 11 | Instead of calling this function, the stormpy model checker can be used by first mapping a model to a stormpy model,
|
12 | 12 | then calling the stormpy model checker with it followed by converting the model checker result to a stormvogel result.
|
13 | 13 | This function just performs this procedure automatically.
|
14 | 14 | """
|
15 | 15 |
|
16 |
| - # We can choose between provoding properties as a string or as a stormpy.Property object |
17 |
| - if isinstance(prop, str): |
18 |
| - prop = stormpy.parse_properties_without_context(prop) # TODO make this work |
| 16 | + prop = stormpy.parse_properties(prop) |
19 | 17 |
|
20 | 18 | stormpy_model = stormvogel.mapping.stormvogel_to_stormpy(model)
|
21 | 19 | stormpy_result = stormpy.model_checking(
|
22 |
| - stormpy_model, prop, extract_scheduler=scheduler |
| 20 | + stormpy_model, prop[0], extract_scheduler=scheduler |
23 | 21 | )
|
24 |
| - assert stormvogel_model is not None |
| 22 | + assert model is not None |
25 | 23 | stormvogel_result = stormvogel.result.convert_model_checking_result(
|
26 |
| - stormvogel_model, stormpy_result |
| 24 | + model, stormpy_result |
27 | 25 | )
|
28 | 26 |
|
29 | 27 | return stormvogel_result
|
30 | 28 |
|
31 | 29 |
|
32 | 30 | if __name__ == "__main__":
|
33 |
| - path = stormpy.examples.files.prism_dtmc_die |
34 |
| - prism_program = stormpy.parse_prism_program(path) |
35 |
| - formula_str = "P=? [F s=7 & d=2]" |
36 |
| - properties = stormpy.parse_properties(formula_str, prism_program) |
37 |
| - model = stormpy.build_model(prism_program, properties) |
38 |
| - |
39 |
| - stormvogel_model = stormvogel.mapping.stormpy_to_stormvogel(model) |
| 31 | + dtmc = stormvogel.model.new_dtmc("Die") |
| 32 | + init = dtmc.get_initial_state() |
| 33 | + init.set_transitions( |
| 34 | + [(1 / 6, dtmc.new_state(f"rolled{i}", {"rolled": i})) for i in range(6)] |
| 35 | + ) |
| 36 | + dtmc.add_self_loops() |
40 | 37 |
|
41 |
| - assert stormvogel_model is not None |
42 |
| - stormvogel_results = model_checking(stormvogel_model, properties[0]) |
| 38 | + stormvogel_results = model_checking(dtmc, 'Pmin=? [F "rolled1"]') |
43 | 39 | print(stormvogel_results)
|
44 |
| - |
45 |
| - # stormvogel_results = model_checking(stormvogel_model, formula_str) |
46 |
| - # print(stormvogel_results) |
0 commit comments