Browse Source

Added some benchmark models from param website

Fixed two bugs considering nonatomic subformulae and constant results
Qualitative modelchecking needs to be done when applying a policy!


Former-commit-id: bd88228214
tempestpy_adaptions
TimQu 9 years ago
parent
commit
4a874a5a29
  1. 2
      examples/pmdp/brp/brp.prctl
  2. 400
      examples/pmdp/brp/brpRegions.txt
  3. 139
      examples/pmdp/brp/brp_16_2.nm
  4. 139
      examples/pmdp/brp/brp_256_5.nm
  5. 139
      examples/pmdp/brp/brp_512_5.nm
  6. 139
      examples/pmdp/brp/brp_64_4.nm
  7. 69
      examples/pmdp/consensus/4pars/coin4_2.nm
  8. 69
      examples/pmdp/consensus/4pars/coin4_8.nm
  9. 4
      examples/pmdp/consensus/coin.prctl
  10. 400
      examples/pmdp/consensus/coin2ParRegions.txt
  11. 65
      examples/pmdp/consensus/coin2_1024.nm
  12. 56
      examples/pmdp/consensus/coin2_128.nm
  13. 41
      examples/pmdp/consensus/coin2_2.nm
  14. 56
      examples/pmdp/consensus/coin2_4.nm
  15. 41
      examples/pmdp/consensus/coin2_64.nm
  16. 56
      examples/pmdp/consensus/coin2_7.nm
  17. 41
      examples/pmdp/consensus/coin2_8.nm
  18. 67
      examples/pmdp/consensus/coin4_2.nm
  19. 67
      examples/pmdp/consensus/coin4_8.nm
  20. 69
      examples/pmdp/consensus/coin6_2.nm
  21. 70
      examples/pmdp/consensus/coin6_8.nm
  22. 4
      src/modelchecker/region/AbstractSparseRegionModelChecker.cpp
  23. 18
      src/modelchecker/region/SparseDtmcRegionModelChecker.cpp
  24. 23
      src/modelchecker/region/SparseMdpRegionModelChecker.cpp
  25. 19
      src/solver/GameSolver.cpp
  26. 23
      src/solver/GmmxxMinMaxLinearEquationSolver.cpp
  27. 8
      test/functional/modelchecker/SparseMdpRegionModelCheckerTest.cpp

2
examples/pmdp/brp/brp.prctl

@ -0,0 +1,2 @@
P<0.5 [ F (s=5 & T) ]

400
examples/pmdp/brp/brpRegions.txt

@ -0,0 +1,400 @@
0.000010<=pL<=0.050000, 0.000010<=pK<=0.050000;
0.000010<=pL<=0.050000, 0.050000<=pK<=0.100000;
0.000010<=pL<=0.050000, 0.100000<=pK<=0.150000;
0.000010<=pL<=0.050000, 0.150000<=pK<=0.200000;
0.000010<=pL<=0.050000, 0.200000<=pK<=0.250000;
0.000010<=pL<=0.050000, 0.250000<=pK<=0.300000;
0.000010<=pL<=0.050000, 0.300000<=pK<=0.350000;
0.000010<=pL<=0.050000, 0.350000<=pK<=0.400000;
0.000010<=pL<=0.050000, 0.400000<=pK<=0.450000;
0.000010<=pL<=0.050000, 0.450000<=pK<=0.500000;
0.000010<=pL<=0.050000, 0.500000<=pK<=0.550000;
0.000010<=pL<=0.050000, 0.550000<=pK<=0.600000;
0.000010<=pL<=0.050000, 0.600000<=pK<=0.650000;
0.000010<=pL<=0.050000, 0.650000<=pK<=0.700000;
0.000010<=pL<=0.050000, 0.700000<=pK<=0.750000;
0.000010<=pL<=0.050000, 0.750000<=pK<=0.800000;
0.000010<=pL<=0.050000, 0.800000<=pK<=0.850000;
0.000010<=pL<=0.050000, 0.850000<=pK<=0.900000;
0.000010<=pL<=0.050000, 0.900000<=pK<=0.950000;
0.000010<=pL<=0.050000, 0.950000<=pK<=0.999990;
0.050000<=pL<=0.100000, 0.000010<=pK<=0.050000;
0.050000<=pL<=0.100000, 0.050000<=pK<=0.100000;
0.050000<=pL<=0.100000, 0.100000<=pK<=0.150000;
0.050000<=pL<=0.100000, 0.150000<=pK<=0.200000;
0.050000<=pL<=0.100000, 0.200000<=pK<=0.250000;
0.050000<=pL<=0.100000, 0.250000<=pK<=0.300000;
0.050000<=pL<=0.100000, 0.300000<=pK<=0.350000;
0.050000<=pL<=0.100000, 0.350000<=pK<=0.400000;
0.050000<=pL<=0.100000, 0.400000<=pK<=0.450000;
0.050000<=pL<=0.100000, 0.450000<=pK<=0.500000;
0.050000<=pL<=0.100000, 0.500000<=pK<=0.550000;
0.050000<=pL<=0.100000, 0.550000<=pK<=0.600000;
0.050000<=pL<=0.100000, 0.600000<=pK<=0.650000;
0.050000<=pL<=0.100000, 0.650000<=pK<=0.700000;
0.050000<=pL<=0.100000, 0.700000<=pK<=0.750000;
0.050000<=pL<=0.100000, 0.750000<=pK<=0.800000;
0.050000<=pL<=0.100000, 0.800000<=pK<=0.850000;
0.050000<=pL<=0.100000, 0.850000<=pK<=0.900000;
0.050000<=pL<=0.100000, 0.900000<=pK<=0.950000;
0.050000<=pL<=0.100000, 0.950000<=pK<=0.999990;
0.100000<=pL<=0.150000, 0.000010<=pK<=0.050000;
0.100000<=pL<=0.150000, 0.050000<=pK<=0.100000;
0.100000<=pL<=0.150000, 0.100000<=pK<=0.150000;
0.100000<=pL<=0.150000, 0.150000<=pK<=0.200000;
0.100000<=pL<=0.150000, 0.200000<=pK<=0.250000;
0.100000<=pL<=0.150000, 0.250000<=pK<=0.300000;
0.100000<=pL<=0.150000, 0.300000<=pK<=0.350000;
0.100000<=pL<=0.150000, 0.350000<=pK<=0.400000;
0.100000<=pL<=0.150000, 0.400000<=pK<=0.450000;
0.100000<=pL<=0.150000, 0.450000<=pK<=0.500000;
0.100000<=pL<=0.150000, 0.500000<=pK<=0.550000;
0.100000<=pL<=0.150000, 0.550000<=pK<=0.600000;
0.100000<=pL<=0.150000, 0.600000<=pK<=0.650000;
0.100000<=pL<=0.150000, 0.650000<=pK<=0.700000;
0.100000<=pL<=0.150000, 0.700000<=pK<=0.750000;
0.100000<=pL<=0.150000, 0.750000<=pK<=0.800000;
0.100000<=pL<=0.150000, 0.800000<=pK<=0.850000;
0.100000<=pL<=0.150000, 0.850000<=pK<=0.900000;
0.100000<=pL<=0.150000, 0.900000<=pK<=0.950000;
0.100000<=pL<=0.150000, 0.950000<=pK<=0.999990;
0.150000<=pL<=0.200000, 0.000010<=pK<=0.050000;
0.150000<=pL<=0.200000, 0.050000<=pK<=0.100000;
0.150000<=pL<=0.200000, 0.100000<=pK<=0.150000;
0.150000<=pL<=0.200000, 0.150000<=pK<=0.200000;
0.150000<=pL<=0.200000, 0.200000<=pK<=0.250000;
0.150000<=pL<=0.200000, 0.250000<=pK<=0.300000;
0.150000<=pL<=0.200000, 0.300000<=pK<=0.350000;
0.150000<=pL<=0.200000, 0.350000<=pK<=0.400000;
0.150000<=pL<=0.200000, 0.400000<=pK<=0.450000;
0.150000<=pL<=0.200000, 0.450000<=pK<=0.500000;
0.150000<=pL<=0.200000, 0.500000<=pK<=0.550000;
0.150000<=pL<=0.200000, 0.550000<=pK<=0.600000;
0.150000<=pL<=0.200000, 0.600000<=pK<=0.650000;
0.150000<=pL<=0.200000, 0.650000<=pK<=0.700000;
0.150000<=pL<=0.200000, 0.700000<=pK<=0.750000;
0.150000<=pL<=0.200000, 0.750000<=pK<=0.800000;
0.150000<=pL<=0.200000, 0.800000<=pK<=0.850000;
0.150000<=pL<=0.200000, 0.850000<=pK<=0.900000;
0.150000<=pL<=0.200000, 0.900000<=pK<=0.950000;
0.150000<=pL<=0.200000, 0.950000<=pK<=0.999990;
0.200000<=pL<=0.250000, 0.000010<=pK<=0.050000;
0.200000<=pL<=0.250000, 0.050000<=pK<=0.100000;
0.200000<=pL<=0.250000, 0.100000<=pK<=0.150000;
0.200000<=pL<=0.250000, 0.150000<=pK<=0.200000;
0.200000<=pL<=0.250000, 0.200000<=pK<=0.250000;
0.200000<=pL<=0.250000, 0.250000<=pK<=0.300000;
0.200000<=pL<=0.250000, 0.300000<=pK<=0.350000;
0.200000<=pL<=0.250000, 0.350000<=pK<=0.400000;
0.200000<=pL<=0.250000, 0.400000<=pK<=0.450000;
0.200000<=pL<=0.250000, 0.450000<=pK<=0.500000;
0.200000<=pL<=0.250000, 0.500000<=pK<=0.550000;
0.200000<=pL<=0.250000, 0.550000<=pK<=0.600000;
0.200000<=pL<=0.250000, 0.600000<=pK<=0.650000;
0.200000<=pL<=0.250000, 0.650000<=pK<=0.700000;
0.200000<=pL<=0.250000, 0.700000<=pK<=0.750000;
0.200000<=pL<=0.250000, 0.750000<=pK<=0.800000;
0.200000<=pL<=0.250000, 0.800000<=pK<=0.850000;
0.200000<=pL<=0.250000, 0.850000<=pK<=0.900000;
0.200000<=pL<=0.250000, 0.900000<=pK<=0.950000;
0.200000<=pL<=0.250000, 0.950000<=pK<=0.999990;
0.250000<=pL<=0.300000, 0.000010<=pK<=0.050000;
0.250000<=pL<=0.300000, 0.050000<=pK<=0.100000;
0.250000<=pL<=0.300000, 0.100000<=pK<=0.150000;
0.250000<=pL<=0.300000, 0.150000<=pK<=0.200000;
0.250000<=pL<=0.300000, 0.200000<=pK<=0.250000;
0.250000<=pL<=0.300000, 0.250000<=pK<=0.300000;
0.250000<=pL<=0.300000, 0.300000<=pK<=0.350000;
0.250000<=pL<=0.300000, 0.350000<=pK<=0.400000;
0.250000<=pL<=0.300000, 0.400000<=pK<=0.450000;
0.250000<=pL<=0.300000, 0.450000<=pK<=0.500000;
0.250000<=pL<=0.300000, 0.500000<=pK<=0.550000;
0.250000<=pL<=0.300000, 0.550000<=pK<=0.600000;
0.250000<=pL<=0.300000, 0.600000<=pK<=0.650000;
0.250000<=pL<=0.300000, 0.650000<=pK<=0.700000;
0.250000<=pL<=0.300000, 0.700000<=pK<=0.750000;
0.250000<=pL<=0.300000, 0.750000<=pK<=0.800000;
0.250000<=pL<=0.300000, 0.800000<=pK<=0.850000;
0.250000<=pL<=0.300000, 0.850000<=pK<=0.900000;
0.250000<=pL<=0.300000, 0.900000<=pK<=0.950000;
0.250000<=pL<=0.300000, 0.950000<=pK<=0.999990;
0.300000<=pL<=0.350000, 0.000010<=pK<=0.050000;
0.300000<=pL<=0.350000, 0.050000<=pK<=0.100000;
0.300000<=pL<=0.350000, 0.100000<=pK<=0.150000;
0.300000<=pL<=0.350000, 0.150000<=pK<=0.200000;
0.300000<=pL<=0.350000, 0.200000<=pK<=0.250000;
0.300000<=pL<=0.350000, 0.250000<=pK<=0.300000;
0.300000<=pL<=0.350000, 0.300000<=pK<=0.350000;
0.300000<=pL<=0.350000, 0.350000<=pK<=0.400000;
0.300000<=pL<=0.350000, 0.400000<=pK<=0.450000;
0.300000<=pL<=0.350000, 0.450000<=pK<=0.500000;
0.300000<=pL<=0.350000, 0.500000<=pK<=0.550000;
0.300000<=pL<=0.350000, 0.550000<=pK<=0.600000;
0.300000<=pL<=0.350000, 0.600000<=pK<=0.650000;
0.300000<=pL<=0.350000, 0.650000<=pK<=0.700000;
0.300000<=pL<=0.350000, 0.700000<=pK<=0.750000;
0.300000<=pL<=0.350000, 0.750000<=pK<=0.800000;
0.300000<=pL<=0.350000, 0.800000<=pK<=0.850000;
0.300000<=pL<=0.350000, 0.850000<=pK<=0.900000;
0.300000<=pL<=0.350000, 0.900000<=pK<=0.950000;
0.300000<=pL<=0.350000, 0.950000<=pK<=0.999990;
0.350000<=pL<=0.400000, 0.000010<=pK<=0.050000;
0.350000<=pL<=0.400000, 0.050000<=pK<=0.100000;
0.350000<=pL<=0.400000, 0.100000<=pK<=0.150000;
0.350000<=pL<=0.400000, 0.150000<=pK<=0.200000;
0.350000<=pL<=0.400000, 0.200000<=pK<=0.250000;
0.350000<=pL<=0.400000, 0.250000<=pK<=0.300000;
0.350000<=pL<=0.400000, 0.300000<=pK<=0.350000;
0.350000<=pL<=0.400000, 0.350000<=pK<=0.400000;
0.350000<=pL<=0.400000, 0.400000<=pK<=0.450000;
0.350000<=pL<=0.400000, 0.450000<=pK<=0.500000;
0.350000<=pL<=0.400000, 0.500000<=pK<=0.550000;
0.350000<=pL<=0.400000, 0.550000<=pK<=0.600000;
0.350000<=pL<=0.400000, 0.600000<=pK<=0.650000;
0.350000<=pL<=0.400000, 0.650000<=pK<=0.700000;
0.350000<=pL<=0.400000, 0.700000<=pK<=0.750000;
0.350000<=pL<=0.400000, 0.750000<=pK<=0.800000;
0.350000<=pL<=0.400000, 0.800000<=pK<=0.850000;
0.350000<=pL<=0.400000, 0.850000<=pK<=0.900000;
0.350000<=pL<=0.400000, 0.900000<=pK<=0.950000;
0.350000<=pL<=0.400000, 0.950000<=pK<=0.999990;
0.400000<=pL<=0.450000, 0.000010<=pK<=0.050000;
0.400000<=pL<=0.450000, 0.050000<=pK<=0.100000;
0.400000<=pL<=0.450000, 0.100000<=pK<=0.150000;
0.400000<=pL<=0.450000, 0.150000<=pK<=0.200000;
0.400000<=pL<=0.450000, 0.200000<=pK<=0.250000;
0.400000<=pL<=0.450000, 0.250000<=pK<=0.300000;
0.400000<=pL<=0.450000, 0.300000<=pK<=0.350000;
0.400000<=pL<=0.450000, 0.350000<=pK<=0.400000;
0.400000<=pL<=0.450000, 0.400000<=pK<=0.450000;
0.400000<=pL<=0.450000, 0.450000<=pK<=0.500000;
0.400000<=pL<=0.450000, 0.500000<=pK<=0.550000;
0.400000<=pL<=0.450000, 0.550000<=pK<=0.600000;
0.400000<=pL<=0.450000, 0.600000<=pK<=0.650000;
0.400000<=pL<=0.450000, 0.650000<=pK<=0.700000;
0.400000<=pL<=0.450000, 0.700000<=pK<=0.750000;
0.400000<=pL<=0.450000, 0.750000<=pK<=0.800000;
0.400000<=pL<=0.450000, 0.800000<=pK<=0.850000;
0.400000<=pL<=0.450000, 0.850000<=pK<=0.900000;
0.400000<=pL<=0.450000, 0.900000<=pK<=0.950000;
0.400000<=pL<=0.450000, 0.950000<=pK<=0.999990;
0.450000<=pL<=0.500000, 0.000010<=pK<=0.050000;
0.450000<=pL<=0.500000, 0.050000<=pK<=0.100000;
0.450000<=pL<=0.500000, 0.100000<=pK<=0.150000;
0.450000<=pL<=0.500000, 0.150000<=pK<=0.200000;
0.450000<=pL<=0.500000, 0.200000<=pK<=0.250000;
0.450000<=pL<=0.500000, 0.250000<=pK<=0.300000;
0.450000<=pL<=0.500000, 0.300000<=pK<=0.350000;
0.450000<=pL<=0.500000, 0.350000<=pK<=0.400000;
0.450000<=pL<=0.500000, 0.400000<=pK<=0.450000;
0.450000<=pL<=0.500000, 0.450000<=pK<=0.500000;
0.450000<=pL<=0.500000, 0.500000<=pK<=0.550000;
0.450000<=pL<=0.500000, 0.550000<=pK<=0.600000;
0.450000<=pL<=0.500000, 0.600000<=pK<=0.650000;
0.450000<=pL<=0.500000, 0.650000<=pK<=0.700000;
0.450000<=pL<=0.500000, 0.700000<=pK<=0.750000;
0.450000<=pL<=0.500000, 0.750000<=pK<=0.800000;
0.450000<=pL<=0.500000, 0.800000<=pK<=0.850000;
0.450000<=pL<=0.500000, 0.850000<=pK<=0.900000;
0.450000<=pL<=0.500000, 0.900000<=pK<=0.950000;
0.450000<=pL<=0.500000, 0.950000<=pK<=0.999990;
0.500000<=pL<=0.550000, 0.000010<=pK<=0.050000;
0.500000<=pL<=0.550000, 0.050000<=pK<=0.100000;
0.500000<=pL<=0.550000, 0.100000<=pK<=0.150000;
0.500000<=pL<=0.550000, 0.150000<=pK<=0.200000;
0.500000<=pL<=0.550000, 0.200000<=pK<=0.250000;
0.500000<=pL<=0.550000, 0.250000<=pK<=0.300000;
0.500000<=pL<=0.550000, 0.300000<=pK<=0.350000;
0.500000<=pL<=0.550000, 0.350000<=pK<=0.400000;
0.500000<=pL<=0.550000, 0.400000<=pK<=0.450000;
0.500000<=pL<=0.550000, 0.450000<=pK<=0.500000;
0.500000<=pL<=0.550000, 0.500000<=pK<=0.550000;
0.500000<=pL<=0.550000, 0.550000<=pK<=0.600000;
0.500000<=pL<=0.550000, 0.600000<=pK<=0.650000;
0.500000<=pL<=0.550000, 0.650000<=pK<=0.700000;
0.500000<=pL<=0.550000, 0.700000<=pK<=0.750000;
0.500000<=pL<=0.550000, 0.750000<=pK<=0.800000;
0.500000<=pL<=0.550000, 0.800000<=pK<=0.850000;
0.500000<=pL<=0.550000, 0.850000<=pK<=0.900000;
0.500000<=pL<=0.550000, 0.900000<=pK<=0.950000;
0.500000<=pL<=0.550000, 0.950000<=pK<=0.999990;
0.550000<=pL<=0.600000, 0.000010<=pK<=0.050000;
0.550000<=pL<=0.600000, 0.050000<=pK<=0.100000;
0.550000<=pL<=0.600000, 0.100000<=pK<=0.150000;
0.550000<=pL<=0.600000, 0.150000<=pK<=0.200000;
0.550000<=pL<=0.600000, 0.200000<=pK<=0.250000;
0.550000<=pL<=0.600000, 0.250000<=pK<=0.300000;
0.550000<=pL<=0.600000, 0.300000<=pK<=0.350000;
0.550000<=pL<=0.600000, 0.350000<=pK<=0.400000;
0.550000<=pL<=0.600000, 0.400000<=pK<=0.450000;
0.550000<=pL<=0.600000, 0.450000<=pK<=0.500000;
0.550000<=pL<=0.600000, 0.500000<=pK<=0.550000;
0.550000<=pL<=0.600000, 0.550000<=pK<=0.600000;
0.550000<=pL<=0.600000, 0.600000<=pK<=0.650000;
0.550000<=pL<=0.600000, 0.650000<=pK<=0.700000;
0.550000<=pL<=0.600000, 0.700000<=pK<=0.750000;
0.550000<=pL<=0.600000, 0.750000<=pK<=0.800000;
0.550000<=pL<=0.600000, 0.800000<=pK<=0.850000;
0.550000<=pL<=0.600000, 0.850000<=pK<=0.900000;
0.550000<=pL<=0.600000, 0.900000<=pK<=0.950000;
0.550000<=pL<=0.600000, 0.950000<=pK<=0.999990;
0.600000<=pL<=0.650000, 0.000010<=pK<=0.050000;
0.600000<=pL<=0.650000, 0.050000<=pK<=0.100000;
0.600000<=pL<=0.650000, 0.100000<=pK<=0.150000;
0.600000<=pL<=0.650000, 0.150000<=pK<=0.200000;
0.600000<=pL<=0.650000, 0.200000<=pK<=0.250000;
0.600000<=pL<=0.650000, 0.250000<=pK<=0.300000;
0.600000<=pL<=0.650000, 0.300000<=pK<=0.350000;
0.600000<=pL<=0.650000, 0.350000<=pK<=0.400000;
0.600000<=pL<=0.650000, 0.400000<=pK<=0.450000;
0.600000<=pL<=0.650000, 0.450000<=pK<=0.500000;
0.600000<=pL<=0.650000, 0.500000<=pK<=0.550000;
0.600000<=pL<=0.650000, 0.550000<=pK<=0.600000;
0.600000<=pL<=0.650000, 0.600000<=pK<=0.650000;
0.600000<=pL<=0.650000, 0.650000<=pK<=0.700000;
0.600000<=pL<=0.650000, 0.700000<=pK<=0.750000;
0.600000<=pL<=0.650000, 0.750000<=pK<=0.800000;
0.600000<=pL<=0.650000, 0.800000<=pK<=0.850000;
0.600000<=pL<=0.650000, 0.850000<=pK<=0.900000;
0.600000<=pL<=0.650000, 0.900000<=pK<=0.950000;
0.600000<=pL<=0.650000, 0.950000<=pK<=0.999990;
0.650000<=pL<=0.700000, 0.000010<=pK<=0.050000;
0.650000<=pL<=0.700000, 0.050000<=pK<=0.100000;
0.650000<=pL<=0.700000, 0.100000<=pK<=0.150000;
0.650000<=pL<=0.700000, 0.150000<=pK<=0.200000;
0.650000<=pL<=0.700000, 0.200000<=pK<=0.250000;
0.650000<=pL<=0.700000, 0.250000<=pK<=0.300000;
0.650000<=pL<=0.700000, 0.300000<=pK<=0.350000;
0.650000<=pL<=0.700000, 0.350000<=pK<=0.400000;
0.650000<=pL<=0.700000, 0.400000<=pK<=0.450000;
0.650000<=pL<=0.700000, 0.450000<=pK<=0.500000;
0.650000<=pL<=0.700000, 0.500000<=pK<=0.550000;
0.650000<=pL<=0.700000, 0.550000<=pK<=0.600000;
0.650000<=pL<=0.700000, 0.600000<=pK<=0.650000;
0.650000<=pL<=0.700000, 0.650000<=pK<=0.700000;
0.650000<=pL<=0.700000, 0.700000<=pK<=0.750000;
0.650000<=pL<=0.700000, 0.750000<=pK<=0.800000;
0.650000<=pL<=0.700000, 0.800000<=pK<=0.850000;
0.650000<=pL<=0.700000, 0.850000<=pK<=0.900000;
0.650000<=pL<=0.700000, 0.900000<=pK<=0.950000;
0.650000<=pL<=0.700000, 0.950000<=pK<=0.999990;
0.700000<=pL<=0.750000, 0.000010<=pK<=0.050000;
0.700000<=pL<=0.750000, 0.050000<=pK<=0.100000;
0.700000<=pL<=0.750000, 0.100000<=pK<=0.150000;
0.700000<=pL<=0.750000, 0.150000<=pK<=0.200000;
0.700000<=pL<=0.750000, 0.200000<=pK<=0.250000;
0.700000<=pL<=0.750000, 0.250000<=pK<=0.300000;
0.700000<=pL<=0.750000, 0.300000<=pK<=0.350000;
0.700000<=pL<=0.750000, 0.350000<=pK<=0.400000;
0.700000<=pL<=0.750000, 0.400000<=pK<=0.450000;
0.700000<=pL<=0.750000, 0.450000<=pK<=0.500000;
0.700000<=pL<=0.750000, 0.500000<=pK<=0.550000;
0.700000<=pL<=0.750000, 0.550000<=pK<=0.600000;
0.700000<=pL<=0.750000, 0.600000<=pK<=0.650000;
0.700000<=pL<=0.750000, 0.650000<=pK<=0.700000;
0.700000<=pL<=0.750000, 0.700000<=pK<=0.750000;
0.700000<=pL<=0.750000, 0.750000<=pK<=0.800000;
0.700000<=pL<=0.750000, 0.800000<=pK<=0.850000;
0.700000<=pL<=0.750000, 0.850000<=pK<=0.900000;
0.700000<=pL<=0.750000, 0.900000<=pK<=0.950000;
0.700000<=pL<=0.750000, 0.950000<=pK<=0.999990;
0.750000<=pL<=0.800000, 0.000010<=pK<=0.050000;
0.750000<=pL<=0.800000, 0.050000<=pK<=0.100000;
0.750000<=pL<=0.800000, 0.100000<=pK<=0.150000;
0.750000<=pL<=0.800000, 0.150000<=pK<=0.200000;
0.750000<=pL<=0.800000, 0.200000<=pK<=0.250000;
0.750000<=pL<=0.800000, 0.250000<=pK<=0.300000;
0.750000<=pL<=0.800000, 0.300000<=pK<=0.350000;
0.750000<=pL<=0.800000, 0.350000<=pK<=0.400000;
0.750000<=pL<=0.800000, 0.400000<=pK<=0.450000;
0.750000<=pL<=0.800000, 0.450000<=pK<=0.500000;
0.750000<=pL<=0.800000, 0.500000<=pK<=0.550000;
0.750000<=pL<=0.800000, 0.550000<=pK<=0.600000;
0.750000<=pL<=0.800000, 0.600000<=pK<=0.650000;
0.750000<=pL<=0.800000, 0.650000<=pK<=0.700000;
0.750000<=pL<=0.800000, 0.700000<=pK<=0.750000;
0.750000<=pL<=0.800000, 0.750000<=pK<=0.800000;
0.750000<=pL<=0.800000, 0.800000<=pK<=0.850000;
0.750000<=pL<=0.800000, 0.850000<=pK<=0.900000;
0.750000<=pL<=0.800000, 0.900000<=pK<=0.950000;
0.750000<=pL<=0.800000, 0.950000<=pK<=0.999990;
0.800000<=pL<=0.850000, 0.000010<=pK<=0.050000;
0.800000<=pL<=0.850000, 0.050000<=pK<=0.100000;
0.800000<=pL<=0.850000, 0.100000<=pK<=0.150000;
0.800000<=pL<=0.850000, 0.150000<=pK<=0.200000;
0.800000<=pL<=0.850000, 0.200000<=pK<=0.250000;
0.800000<=pL<=0.850000, 0.250000<=pK<=0.300000;
0.800000<=pL<=0.850000, 0.300000<=pK<=0.350000;
0.800000<=pL<=0.850000, 0.350000<=pK<=0.400000;
0.800000<=pL<=0.850000, 0.400000<=pK<=0.450000;
0.800000<=pL<=0.850000, 0.450000<=pK<=0.500000;
0.800000<=pL<=0.850000, 0.500000<=pK<=0.550000;
0.800000<=pL<=0.850000, 0.550000<=pK<=0.600000;
0.800000<=pL<=0.850000, 0.600000<=pK<=0.650000;
0.800000<=pL<=0.850000, 0.650000<=pK<=0.700000;
0.800000<=pL<=0.850000, 0.700000<=pK<=0.750000;
0.800000<=pL<=0.850000, 0.750000<=pK<=0.800000;
0.800000<=pL<=0.850000, 0.800000<=pK<=0.850000;
0.800000<=pL<=0.850000, 0.850000<=pK<=0.900000;
0.800000<=pL<=0.850000, 0.900000<=pK<=0.950000;
0.800000<=pL<=0.850000, 0.950000<=pK<=0.999990;
0.850000<=pL<=0.900000, 0.000010<=pK<=0.050000;
0.850000<=pL<=0.900000, 0.050000<=pK<=0.100000;
0.850000<=pL<=0.900000, 0.100000<=pK<=0.150000;
0.850000<=pL<=0.900000, 0.150000<=pK<=0.200000;
0.850000<=pL<=0.900000, 0.200000<=pK<=0.250000;
0.850000<=pL<=0.900000, 0.250000<=pK<=0.300000;
0.850000<=pL<=0.900000, 0.300000<=pK<=0.350000;
0.850000<=pL<=0.900000, 0.350000<=pK<=0.400000;
0.850000<=pL<=0.900000, 0.400000<=pK<=0.450000;
0.850000<=pL<=0.900000, 0.450000<=pK<=0.500000;
0.850000<=pL<=0.900000, 0.500000<=pK<=0.550000;
0.850000<=pL<=0.900000, 0.550000<=pK<=0.600000;
0.850000<=pL<=0.900000, 0.600000<=pK<=0.650000;
0.850000<=pL<=0.900000, 0.650000<=pK<=0.700000;
0.850000<=pL<=0.900000, 0.700000<=pK<=0.750000;
0.850000<=pL<=0.900000, 0.750000<=pK<=0.800000;
0.850000<=pL<=0.900000, 0.800000<=pK<=0.850000;
0.850000<=pL<=0.900000, 0.850000<=pK<=0.900000;
0.850000<=pL<=0.900000, 0.900000<=pK<=0.950000;
0.850000<=pL<=0.900000, 0.950000<=pK<=0.999990;
0.900000<=pL<=0.950000, 0.000010<=pK<=0.050000;
0.900000<=pL<=0.950000, 0.050000<=pK<=0.100000;
0.900000<=pL<=0.950000, 0.100000<=pK<=0.150000;
0.900000<=pL<=0.950000, 0.150000<=pK<=0.200000;
0.900000<=pL<=0.950000, 0.200000<=pK<=0.250000;
0.900000<=pL<=0.950000, 0.250000<=pK<=0.300000;
0.900000<=pL<=0.950000, 0.300000<=pK<=0.350000;
0.900000<=pL<=0.950000, 0.350000<=pK<=0.400000;
0.900000<=pL<=0.950000, 0.400000<=pK<=0.450000;
0.900000<=pL<=0.950000, 0.450000<=pK<=0.500000;
0.900000<=pL<=0.950000, 0.500000<=pK<=0.550000;
0.900000<=pL<=0.950000, 0.550000<=pK<=0.600000;
0.900000<=pL<=0.950000, 0.600000<=pK<=0.650000;
0.900000<=pL<=0.950000, 0.650000<=pK<=0.700000;
0.900000<=pL<=0.950000, 0.700000<=pK<=0.750000;
0.900000<=pL<=0.950000, 0.750000<=pK<=0.800000;
0.900000<=pL<=0.950000, 0.800000<=pK<=0.850000;
0.900000<=pL<=0.950000, 0.850000<=pK<=0.900000;
0.900000<=pL<=0.950000, 0.900000<=pK<=0.950000;
0.900000<=pL<=0.950000, 0.950000<=pK<=0.999990;
0.950000<=pL<=0.999990, 0.000010<=pK<=0.050000;
0.950000<=pL<=0.999990, 0.050000<=pK<=0.100000;
0.950000<=pL<=0.999990, 0.100000<=pK<=0.150000;
0.950000<=pL<=0.999990, 0.150000<=pK<=0.200000;
0.950000<=pL<=0.999990, 0.200000<=pK<=0.250000;
0.950000<=pL<=0.999990, 0.250000<=pK<=0.300000;
0.950000<=pL<=0.999990, 0.300000<=pK<=0.350000;
0.950000<=pL<=0.999990, 0.350000<=pK<=0.400000;
0.950000<=pL<=0.999990, 0.400000<=pK<=0.450000;
0.950000<=pL<=0.999990, 0.450000<=pK<=0.500000;
0.950000<=pL<=0.999990, 0.500000<=pK<=0.550000;
0.950000<=pL<=0.999990, 0.550000<=pK<=0.600000;
0.950000<=pL<=0.999990, 0.600000<=pK<=0.650000;
0.950000<=pL<=0.999990, 0.650000<=pK<=0.700000;
0.950000<=pL<=0.999990, 0.700000<=pK<=0.750000;
0.950000<=pL<=0.999990, 0.750000<=pK<=0.800000;
0.950000<=pL<=0.999990, 0.800000<=pK<=0.850000;
0.950000<=pL<=0.999990, 0.850000<=pK<=0.900000;
0.950000<=pL<=0.999990, 0.900000<=pK<=0.950000;
0.950000<=pL<=0.999990, 0.950000<=pK<=0.999990;

139
examples/pmdp/brp/brp_16_2.nm

@ -0,0 +1,139 @@
// bounded retransmission protocol [D'AJJL01]
// gxn/dxp 23/05/2001
// Modified by Ernst Moritz Hahn (emh@cs.uni-sb.de)
mdp
//dtmc
// number of chunks
const int N = 16;
// maximum number of retransmissions
const int MAX = 2;
// reliability of channels
const double pL;
const double pK;
global T : bool;
module sender
s : [0..6];
// 0 idle
// 1 next_frame
// 2 wait_ack
// 3 retransmit
// 4 success
// 5 error
// 6 wait sync
srep : [0..3];
// 0 bottom
// 1 not ok (nok)
// 2 do not know (dk)
// 3 ok (ok)
nrtr : [0..MAX];
i : [0..N];
bs : bool;
s_ab : bool;
fs : bool;
ls : bool;
// idle
[NewFile] (s=0) -> (s'=1) & (i'=1) & (srep'=0);
// next_frame
[aF] (s=1) -> (s'=2) & (fs'=(i=1)) & (ls'=(i=N)) & (bs'=s_ab) & (nrtr'=0);
// wait_ack
[aB] (s=2) -> (s'=4) & (s_ab'=!s_ab);
[TO_Msg] (s=2) -> (s'=3);
[TO_Ack] (s=2) -> (s'=3);
// retransmit
[aF] (s=3) & (nrtr<MAX) -> (s'=2) & (fs'=(i=1)) & (ls'=(i=N)) & (bs'=s_ab) & (nrtr'=nrtr+1);
[] (s=3) & (nrtr=MAX) & (i<N) -> (s'=5) & (srep'=1);
[] (s=3) & (nrtr=MAX) & (i=N) -> (s'=5) & (srep'=2);
// success
[] (s=4) & (i<N) -> (s'=1) & (i'=i+1);
[] (s=4) & (i=N) -> (s'=0) & (srep'=3);
// error
[SyncWait] (s=5) -> (s'=6);
// wait sync
[SyncWait] (s=6) -> (s'=0) & (s_ab'=false);
endmodule
module receiver
r : [0..5];
// 0 new_file
// 1 fst_safe
// 2 frame_received
// 3 frame_reported
// 4 idle
// 5 resync
rrep : [0..4];
// 0 bottom
// 1 fst
// 2 inc
// 3 ok
// 4 nok
fr : bool;
lr : bool;
br : bool;
r_ab : bool;
recv : bool;
// new_file
[SyncWait] (r=0) -> (r'=0);
[aG] (r=0) -> (r'=1) & (fr'=fs) & (lr'=ls) & (br'=bs) & (recv'=T);
// fst_safe_frame
[] (r=1) -> (r'=2) & (r_ab'=br);
// frame_received
[] (r=2) & (r_ab=br) & (fr=true) & (lr=false) -> (r'=3) & (rrep'=1);
[] (r=2) & (r_ab=br) & (fr=false) & (lr=false) -> (r'=3) & (rrep'=2);
[] (r=2) & (r_ab=br) & (fr=false) & (lr=true) -> (r'=3) & (rrep'=3);
[aA] (r=2) & !(r_ab=br) -> (r'=4);
// frame_reported
[aA] (r=3) -> (r'=4) & (r_ab'=!r_ab);
// idle
[aG] (r=4) -> (r'=2) & (fr'=fs) & (lr'=ls) & (br'=bs) & (recv'=T);
[SyncWait] (r=4) & (ls=true) -> (r'=5);
[SyncWait] (r=4) & (ls=false) -> (r'=5) & (rrep'=4);
// resync
[SyncWait] (r=5) -> (r'=0) & (rrep'=0);
endmodule
module checker
[NewFile] (T=false) -> (T'=false);
[NewFile] (T=false) -> (T'=true);
endmodule
module channelK
k : [0..2];
// idle
[aF] (k=0) -> pK : (k'=1) + 1-pK : (k'=2);
// sending
[aG] (k=1) -> (k'=0);
// lost
[TO_Msg] (k=2) -> (k'=0);
endmodule
module channelL
l : [0..2];
// idle
[aA] (l=0) -> pL : (l'=1) + 1-pL : (l'=2);
// sending
[aB] (l=1) -> (l'=0);
// lost
[TO_Ack] (l=2) -> (l'=0);
endmodule

139
examples/pmdp/brp/brp_256_5.nm

@ -0,0 +1,139 @@
// bounded retransmission protocol [D'AJJL01]
// gxn/dxp 23/05/2001
// Modified by Ernst Moritz Hahn (emh@cs.uni-sb.de)
mdp
//dtmc
// number of chunks
const int N = 256;
// maximum number of retransmissions
const int MAX = 5;
// reliability of channels
const double pL;
const double pK;
global T : bool;
module sender
s : [0..6];
// 0 idle
// 1 next_frame
// 2 wait_ack
// 3 retransmit
// 4 success
// 5 error
// 6 wait sync
srep : [0..3];
// 0 bottom
// 1 not ok (nok)
// 2 do not know (dk)
// 3 ok (ok)
nrtr : [0..MAX];
i : [0..N];
bs : bool;
s_ab : bool;
fs : bool;
ls : bool;
// idle
[NewFile] (s=0) -> (s'=1) & (i'=1) & (srep'=0);
// next_frame
[aF] (s=1) -> (s'=2) & (fs'=(i=1)) & (ls'=(i=N)) & (bs'=s_ab) & (nrtr'=0);
// wait_ack
[aB] (s=2) -> (s'=4) & (s_ab'=!s_ab);
[TO_Msg] (s=2) -> (s'=3);
[TO_Ack] (s=2) -> (s'=3);
// retransmit
[aF] (s=3) & (nrtr<MAX) -> (s'=2) & (fs'=(i=1)) & (ls'=(i=N)) & (bs'=s_ab) & (nrtr'=nrtr+1);
[] (s=3) & (nrtr=MAX) & (i<N) -> (s'=5) & (srep'=1);
[] (s=3) & (nrtr=MAX) & (i=N) -> (s'=5) & (srep'=2);
// success
[] (s=4) & (i<N) -> (s'=1) & (i'=i+1);
[] (s=4) & (i=N) -> (s'=0) & (srep'=3);
// error
[SyncWait] (s=5) -> (s'=6);
// wait sync
[SyncWait] (s=6) -> (s'=0) & (s_ab'=false);
endmodule
module receiver
r : [0..5];
// 0 new_file
// 1 fst_safe
// 2 frame_received
// 3 frame_reported
// 4 idle
// 5 resync
rrep : [0..4];
// 0 bottom
// 1 fst
// 2 inc
// 3 ok
// 4 nok
fr : bool;
lr : bool;
br : bool;
r_ab : bool;
recv : bool;
// new_file
[SyncWait] (r=0) -> (r'=0);
[aG] (r=0) -> (r'=1) & (fr'=fs) & (lr'=ls) & (br'=bs) & (recv'=T);
// fst_safe_frame
[] (r=1) -> (r'=2) & (r_ab'=br);
// frame_received
[] (r=2) & (r_ab=br) & (fr=true) & (lr=false) -> (r'=3) & (rrep'=1);
[] (r=2) & (r_ab=br) & (fr=false) & (lr=false) -> (r'=3) & (rrep'=2);
[] (r=2) & (r_ab=br) & (fr=false) & (lr=true) -> (r'=3) & (rrep'=3);
[aA] (r=2) & !(r_ab=br) -> (r'=4);
// frame_reported
[aA] (r=3) -> (r'=4) & (r_ab'=!r_ab);
// idle
[aG] (r=4) -> (r'=2) & (fr'=fs) & (lr'=ls) & (br'=bs) & (recv'=T);
[SyncWait] (r=4) & (ls=true) -> (r'=5);
[SyncWait] (r=4) & (ls=false) -> (r'=5) & (rrep'=4);
// resync
[SyncWait] (r=5) -> (r'=0) & (rrep'=0);
endmodule
module checker
[NewFile] (T=false) -> (T'=false);
[NewFile] (T=false) -> (T'=true);
endmodule
module channelK
k : [0..2];
// idle
[aF] (k=0) -> pK : (k'=1) + 1-pK : (k'=2);
// sending
[aG] (k=1) -> (k'=0);
// lost
[TO_Msg] (k=2) -> (k'=0);
endmodule
module channelL
l : [0..2];
// idle
[aA] (l=0) -> pL : (l'=1) + 1-pL : (l'=2);
// sending
[aB] (l=1) -> (l'=0);
// lost
[TO_Ack] (l=2) -> (l'=0);
endmodule

139
examples/pmdp/brp/brp_512_5.nm

@ -0,0 +1,139 @@
// bounded retransmission protocol [D'AJJL01]
// gxn/dxp 23/05/2001
// Modified by Ernst Moritz Hahn (emh@cs.uni-sb.de)
mdp
//dtmc
// number of chunks
const int N = 512;
// maximum number of retransmissions
const int MAX = 5;
// reliability of channels
const double pL;
const double pK;
global T : bool;
module sender
s : [0..6];
// 0 idle
// 1 next_frame
// 2 wait_ack
// 3 retransmit
// 4 success
// 5 error
// 6 wait sync
srep : [0..3];
// 0 bottom
// 1 not ok (nok)
// 2 do not know (dk)
// 3 ok (ok)
nrtr : [0..MAX];
i : [0..N];
bs : bool;
s_ab : bool;
fs : bool;
ls : bool;
// idle
[NewFile] (s=0) -> (s'=1) & (i'=1) & (srep'=0);
// next_frame
[aF] (s=1) -> (s'=2) & (fs'=(i=1)) & (ls'=(i=N)) & (bs'=s_ab) & (nrtr'=0);
// wait_ack
[aB] (s=2) -> (s'=4) & (s_ab'=!s_ab);
[TO_Msg] (s=2) -> (s'=3);
[TO_Ack] (s=2) -> (s'=3);
// retransmit
[aF] (s=3) & (nrtr<MAX) -> (s'=2) & (fs'=(i=1)) & (ls'=(i=N)) & (bs'=s_ab) & (nrtr'=nrtr+1);
[] (s=3) & (nrtr=MAX) & (i<N) -> (s'=5) & (srep'=1);
[] (s=3) & (nrtr=MAX) & (i=N) -> (s'=5) & (srep'=2);
// success
[] (s=4) & (i<N) -> (s'=1) & (i'=i+1);
[] (s=4) & (i=N) -> (s'=0) & (srep'=3);
// error
[SyncWait] (s=5) -> (s'=6);
// wait sync
[SyncWait] (s=6) -> (s'=0) & (s_ab'=false);
endmodule
module receiver
r : [0..5];
// 0 new_file
// 1 fst_safe
// 2 frame_received
// 3 frame_reported
// 4 idle
// 5 resync
rrep : [0..4];
// 0 bottom
// 1 fst
// 2 inc
// 3 ok
// 4 nok
fr : bool;
lr : bool;
br : bool;
r_ab : bool;
recv : bool;
// new_file
[SyncWait] (r=0) -> (r'=0);
[aG] (r=0) -> (r'=1) & (fr'=fs) & (lr'=ls) & (br'=bs) & (recv'=T);
// fst_safe_frame
[] (r=1) -> (r'=2) & (r_ab'=br);
// frame_received
[] (r=2) & (r_ab=br) & (fr=true) & (lr=false) -> (r'=3) & (rrep'=1);
[] (r=2) & (r_ab=br) & (fr=false) & (lr=false) -> (r'=3) & (rrep'=2);
[] (r=2) & (r_ab=br) & (fr=false) & (lr=true) -> (r'=3) & (rrep'=3);
[aA] (r=2) & !(r_ab=br) -> (r'=4);
// frame_reported
[aA] (r=3) -> (r'=4) & (r_ab'=!r_ab);
// idle
[aG] (r=4) -> (r'=2) & (fr'=fs) & (lr'=ls) & (br'=bs) & (recv'=T);
[SyncWait] (r=4) & (ls=true) -> (r'=5);
[SyncWait] (r=4) & (ls=false) -> (r'=5) & (rrep'=4);
// resync
[SyncWait] (r=5) -> (r'=0) & (rrep'=0);
endmodule
module checker
[NewFile] (T=false) -> (T'=false);
[NewFile] (T=false) -> (T'=true);
endmodule
module channelK
k : [0..2];
// idle
[aF] (k=0) -> pK : (k'=1) + 1-pK : (k'=2);
// sending
[aG] (k=1) -> (k'=0);
// lost
[TO_Msg] (k=2) -> (k'=0);
endmodule
module channelL
l : [0..2];
// idle
[aA] (l=0) -> pL : (l'=1) + 1-pL : (l'=2);
// sending
[aB] (l=1) -> (l'=0);
// lost
[TO_Ack] (l=2) -> (l'=0);
endmodule

139
examples/pmdp/brp/brp_64_4.nm

@ -0,0 +1,139 @@
// bounded retransmission protocol [D'AJJL01]
// gxn/dxp 23/05/2001
// Modified by Ernst Moritz Hahn (emh@cs.uni-sb.de)
mdp
//dtmc
// number of chunks
const int N = 64;
// maximum number of retransmissions
const int MAX = 4;
// reliability of channels
const double pL;
const double pK;
global T : bool;
module sender
s : [0..6];
// 0 idle
// 1 next_frame
// 2 wait_ack
// 3 retransmit
// 4 success
// 5 error
// 6 wait sync
srep : [0..3];
// 0 bottom
// 1 not ok (nok)
// 2 do not know (dk)
// 3 ok (ok)
nrtr : [0..MAX];
i : [0..N];
bs : bool;
s_ab : bool;
fs : bool;
ls : bool;
// idle
[NewFile] (s=0) -> (s'=1) & (i'=1) & (srep'=0);
// next_frame
[aF] (s=1) -> (s'=2) & (fs'=(i=1)) & (ls'=(i=N)) & (bs'=s_ab) & (nrtr'=0);
// wait_ack
[aB] (s=2) -> (s'=4) & (s_ab'=!s_ab);
[TO_Msg] (s=2) -> (s'=3);
[TO_Ack] (s=2) -> (s'=3);
// retransmit
[aF] (s=3) & (nrtr<MAX) -> (s'=2) & (fs'=(i=1)) & (ls'=(i=N)) & (bs'=s_ab) & (nrtr'=nrtr+1);
[] (s=3) & (nrtr=MAX) & (i<N) -> (s'=5) & (srep'=1);
[] (s=3) & (nrtr=MAX) & (i=N) -> (s'=5) & (srep'=2);
// success
[] (s=4) & (i<N) -> (s'=1) & (i'=i+1);
[] (s=4) & (i=N) -> (s'=0) & (srep'=3);
// error
[SyncWait] (s=5) -> (s'=6);
// wait sync
[SyncWait] (s=6) -> (s'=0) & (s_ab'=false);
endmodule
module receiver
r : [0..5];
// 0 new_file
// 1 fst_safe
// 2 frame_received
// 3 frame_reported
// 4 idle
// 5 resync
rrep : [0..4];
// 0 bottom
// 1 fst
// 2 inc
// 3 ok
// 4 nok
fr : bool;
lr : bool;
br : bool;
r_ab : bool;
recv : bool;
// new_file
[SyncWait] (r=0) -> (r'=0);
[aG] (r=0) -> (r'=1) & (fr'=fs) & (lr'=ls) & (br'=bs) & (recv'=T);
// fst_safe_frame
[] (r=1) -> (r'=2) & (r_ab'=br);
// frame_received
[] (r=2) & (r_ab=br) & (fr=true) & (lr=false) -> (r'=3) & (rrep'=1);
[] (r=2) & (r_ab=br) & (fr=false) & (lr=false) -> (r'=3) & (rrep'=2);
[] (r=2) & (r_ab=br) & (fr=false) & (lr=true) -> (r'=3) & (rrep'=3);
[aA] (r=2) & !(r_ab=br) -> (r'=4);
// frame_reported
[aA] (r=3) -> (r'=4) & (r_ab'=!r_ab);
// idle
[aG] (r=4) -> (r'=2) & (fr'=fs) & (lr'=ls) & (br'=bs) & (recv'=T);
[SyncWait] (r=4) & (ls=true) -> (r'=5);
[SyncWait] (r=4) & (ls=false) -> (r'=5) & (rrep'=4);
// resync
[SyncWait] (r=5) -> (r'=0) & (rrep'=0);
endmodule
module checker
[NewFile] (T=false) -> (T'=false);
[NewFile] (T=false) -> (T'=true);
endmodule
module channelK
k : [0..2];
// idle
[aF] (k=0) -> pK : (k'=1) + 1-pK : (k'=2);
// sending
[aG] (k=1) -> (k'=0);
// lost
[TO_Msg] (k=2) -> (k'=0);
endmodule
module channelL
l : [0..2];
// idle
[aA] (l=0) -> pL : (l'=1) + 1-pL : (l'=2);
// sending
[aB] (l=1) -> (l'=0);
// lost
[TO_Ack] (l=2) -> (l'=0);
endmodule

69
examples/pmdp/consensus/4pars/coin4_2.nm

@ -1,69 +0,0 @@
// COIN FLIPPING PROTOCOL FOR POLYNOMIAL RANDOMIZED CONSENSUS [AH90]
// gxn/dxp 20/11/00
mdp
// constants
const int N=4;
const int K=2;
const int range = 2*(K+1)*N;
const int counter_init = (K+1)*N;
const int left = N;
const int right = 2*(K+1)*N - N;
//Coin Probabilities
const double p1;
const double p2;
const double p3;
const double p4;
// shared coin
global counter : [0..range] init counter_init;
module process1
// program counter
pc1 : [0..3];
// 0 - flip
// 1 - write
// 2 - check
// 3 - finished
// local coin
coin1 : [0..1];
// flip coin
[] (pc1=0) -> p1 : (coin1'=0) & (pc1'=1) + 1-p1 : (coin1'=1) & (pc1'=1);
// write tails -1 (reset coin to add regularity)
[] (pc1=1) & (coin1=0) & (counter>0) -> 1 : (counter'=counter-1) & (pc1'=2) & (coin1'=0);
// write heads +1 (reset coin to add regularity)
[] (pc1=1) & (coin1=1) & (counter<range) -> 1 : (counter'=counter+1) & (pc1'=2) & (coin1'=0);
// check
// decide tails
[] (pc1=2) & (counter<=left) -> 1 : (pc1'=3) & (coin1'=0);
// decide heads
[] (pc1=2) & (counter>=right) -> 1 : (pc1'=3) & (coin1'=1);
// flip again
[] (pc1=2) & (counter>left) & (counter<right) -> 1 : (pc1'=0);
// loop (all loop together when done)
[done] (pc1=3) -> 1 : (pc1'=3);
endmodule
// construct remaining processes through renaming
module process2 = process1[pc1=pc2,coin1=coin2,p1=p2] endmodule
module process3 = process1[pc1=pc3,coin1=coin3,p1=p3] endmodule
module process4 = process1[pc1=pc4,coin1=coin4,p1=p4] endmodule
// labels
label "finished" = pc1=3 & pc2=3 & pc3=3 & pc4=3 ;
label "all_coins_equal_0" = coin1=0 & coin2=0 & coin3=0 & coin4=0 ;
label "all_coins_equal_1" = coin1=1 & coin2=1 & coin3=1 & coin4=1 ;
label "agree" = coin1=coin2 & coin2=coin3 & coin3=coin4 ;
label "finish_with_1" = pc1=3 & pc2=3 & pc3=3 & pc4=3 & coin1=1 & coin2=1 & coin3=1 & coin4=1 ;
// rewards
rewards "steps"
true : 1;
endrewards

69
examples/pmdp/consensus/4pars/coin4_8.nm

@ -1,69 +0,0 @@
// COIN FLIPPING PROTOCOL FOR POLYNOMIAL RANDOMIZED CONSENSUS [AH90]
// gxn/dxp 20/11/00
mdp
// constants
const int N=4;
const int K=8;
const int range = 2*(K+1)*N;
const int counter_init = (K+1)*N;
const int left = N;
const int right = 2*(K+1)*N - N;
//Coin Probabilities
const double p1;
const double p2;
const double p3;
const double p4;
// shared coin
global counter : [0..range] init counter_init;
module process1
// program counter
pc1 : [0..3];
// 0 - flip
// 1 - write
// 2 - check
// 3 - finished
// local coin
coin1 : [0..1];
// flip coin
[] (pc1=0) -> p1 : (coin1'=0) & (pc1'=1) + 1-p1 : (coin1'=1) & (pc1'=1);
// write tails -1 (reset coin to add regularity)
[] (pc1=1) & (coin1=0) & (counter>0) -> 1 : (counter'=counter-1) & (pc1'=2) & (coin1'=0);
// write heads +1 (reset coin to add regularity)
[] (pc1=1) & (coin1=1) & (counter<range) -> 1 : (counter'=counter+1) & (pc1'=2) & (coin1'=0);
// check
// decide tails
[] (pc1=2) & (counter<=left) -> 1 : (pc1'=3) & (coin1'=0);
// decide heads
[] (pc1=2) & (counter>=right) -> 1 : (pc1'=3) & (coin1'=1);
// flip again
[] (pc1=2) & (counter>left) & (counter<right) -> 1 : (pc1'=0);
// loop (all loop together when done)
[done] (pc1=3) -> 1 : (pc1'=3);
endmodule
// construct remaining processes through renaming
module process2 = process1[pc1=pc2,coin1=coin2,p1=p2] endmodule
module process3 = process1[pc1=pc3,coin1=coin3,p1=p3] endmodule
module process4 = process1[pc1=pc4,coin1=coin4,p1=p4] endmodule
// labels
label "finished" = pc1=3 & pc2=3 & pc3=3 & pc4=3 ;
label "all_coins_equal_0" = coin1=0 & coin2=0 & coin3=0 & coin4=0 ;
label "all_coins_equal_1" = coin1=1 & coin2=1 & coin3=1 & coin4=1 ;
label "agree" = coin1=coin2 & coin2=coin3 & coin3=coin4 ;
label "finish_with_1" = pc1=3 & pc2=3 & pc3=3 & pc4=3 & coin1=1 & coin2=1 & coin3=1 & coin4=1 ;
// rewards
rewards "steps"
true : 1;
endrewards

4
examples/pmdp/consensus/coin.prctl

@ -0,0 +1,4 @@
P>=0.25 [ F "finished"&"all_coins_equal_1" ]

400
examples/pmdp/consensus/coin2ParRegions.txt

@ -0,0 +1,400 @@
0.000010<=p1<=0.050000, 0.000010<=p2<=0.050000;
0.000010<=p1<=0.050000, 0.050000<=p2<=0.100000;
0.000010<=p1<=0.050000, 0.100000<=p2<=0.150000;
0.000010<=p1<=0.050000, 0.150000<=p2<=0.200000;
0.000010<=p1<=0.050000, 0.200000<=p2<=0.250000;
0.000010<=p1<=0.050000, 0.250000<=p2<=0.300000;
0.000010<=p1<=0.050000, 0.300000<=p2<=0.350000;
0.000010<=p1<=0.050000, 0.350000<=p2<=0.400000;
0.000010<=p1<=0.050000, 0.400000<=p2<=0.450000;
0.000010<=p1<=0.050000, 0.450000<=p2<=0.500000;
0.000010<=p1<=0.050000, 0.500000<=p2<=0.550000;
0.000010<=p1<=0.050000, 0.550000<=p2<=0.600000;
0.000010<=p1<=0.050000, 0.600000<=p2<=0.650000;
0.000010<=p1<=0.050000, 0.650000<=p2<=0.700000;
0.000010<=p1<=0.050000, 0.700000<=p2<=0.750000;
0.000010<=p1<=0.050000, 0.750000<=p2<=0.800000;
0.000010<=p1<=0.050000, 0.800000<=p2<=0.850000;
0.000010<=p1<=0.050000, 0.850000<=p2<=0.900000;
0.000010<=p1<=0.050000, 0.900000<=p2<=0.950000;
0.000010<=p1<=0.050000, 0.950000<=p2<=0.999990;
0.050000<=p1<=0.100000, 0.000010<=p2<=0.050000;
0.050000<=p1<=0.100000, 0.050000<=p2<=0.100000;
0.050000<=p1<=0.100000, 0.100000<=p2<=0.150000;
0.050000<=p1<=0.100000, 0.150000<=p2<=0.200000;
0.050000<=p1<=0.100000, 0.200000<=p2<=0.250000;
0.050000<=p1<=0.100000, 0.250000<=p2<=0.300000;
0.050000<=p1<=0.100000, 0.300000<=p2<=0.350000;
0.050000<=p1<=0.100000, 0.350000<=p2<=0.400000;
0.050000<=p1<=0.100000, 0.400000<=p2<=0.450000;
0.050000<=p1<=0.100000, 0.450000<=p2<=0.500000;
0.050000<=p1<=0.100000, 0.500000<=p2<=0.550000;
0.050000<=p1<=0.100000, 0.550000<=p2<=0.600000;
0.050000<=p1<=0.100000, 0.600000<=p2<=0.650000;
0.050000<=p1<=0.100000, 0.650000<=p2<=0.700000;
0.050000<=p1<=0.100000, 0.700000<=p2<=0.750000;
0.050000<=p1<=0.100000, 0.750000<=p2<=0.800000;
0.050000<=p1<=0.100000, 0.800000<=p2<=0.850000;
0.050000<=p1<=0.100000, 0.850000<=p2<=0.900000;
0.050000<=p1<=0.100000, 0.900000<=p2<=0.950000;
0.050000<=p1<=0.100000, 0.950000<=p2<=0.999990;
0.100000<=p1<=0.150000, 0.000010<=p2<=0.050000;
0.100000<=p1<=0.150000, 0.050000<=p2<=0.100000;
0.100000<=p1<=0.150000, 0.100000<=p2<=0.150000;
0.100000<=p1<=0.150000, 0.150000<=p2<=0.200000;
0.100000<=p1<=0.150000, 0.200000<=p2<=0.250000;
0.100000<=p1<=0.150000, 0.250000<=p2<=0.300000;
0.100000<=p1<=0.150000, 0.300000<=p2<=0.350000;
0.100000<=p1<=0.150000, 0.350000<=p2<=0.400000;
0.100000<=p1<=0.150000, 0.400000<=p2<=0.450000;
0.100000<=p1<=0.150000, 0.450000<=p2<=0.500000;
0.100000<=p1<=0.150000, 0.500000<=p2<=0.550000;
0.100000<=p1<=0.150000, 0.550000<=p2<=0.600000;
0.100000<=p1<=0.150000, 0.600000<=p2<=0.650000;
0.100000<=p1<=0.150000, 0.650000<=p2<=0.700000;
0.100000<=p1<=0.150000, 0.700000<=p2<=0.750000;
0.100000<=p1<=0.150000, 0.750000<=p2<=0.800000;
0.100000<=p1<=0.150000, 0.800000<=p2<=0.850000;
0.100000<=p1<=0.150000, 0.850000<=p2<=0.900000;
0.100000<=p1<=0.150000, 0.900000<=p2<=0.950000;
0.100000<=p1<=0.150000, 0.950000<=p2<=0.999990;
0.150000<=p1<=0.200000, 0.000010<=p2<=0.050000;
0.150000<=p1<=0.200000, 0.050000<=p2<=0.100000;
0.150000<=p1<=0.200000, 0.100000<=p2<=0.150000;
0.150000<=p1<=0.200000, 0.150000<=p2<=0.200000;
0.150000<=p1<=0.200000, 0.200000<=p2<=0.250000;
0.150000<=p1<=0.200000, 0.250000<=p2<=0.300000;
0.150000<=p1<=0.200000, 0.300000<=p2<=0.350000;
0.150000<=p1<=0.200000, 0.350000<=p2<=0.400000;
0.150000<=p1<=0.200000, 0.400000<=p2<=0.450000;
0.150000<=p1<=0.200000, 0.450000<=p2<=0.500000;
0.150000<=p1<=0.200000, 0.500000<=p2<=0.550000;
0.150000<=p1<=0.200000, 0.550000<=p2<=0.600000;
0.150000<=p1<=0.200000, 0.600000<=p2<=0.650000;
0.150000<=p1<=0.200000, 0.650000<=p2<=0.700000;
0.150000<=p1<=0.200000, 0.700000<=p2<=0.750000;
0.150000<=p1<=0.200000, 0.750000<=p2<=0.800000;
0.150000<=p1<=0.200000, 0.800000<=p2<=0.850000;
0.150000<=p1<=0.200000, 0.850000<=p2<=0.900000;
0.150000<=p1<=0.200000, 0.900000<=p2<=0.950000;
0.150000<=p1<=0.200000, 0.950000<=p2<=0.999990;
0.200000<=p1<=0.250000, 0.000010<=p2<=0.050000;
0.200000<=p1<=0.250000, 0.050000<=p2<=0.100000;
0.200000<=p1<=0.250000, 0.100000<=p2<=0.150000;
0.200000<=p1<=0.250000, 0.150000<=p2<=0.200000;
0.200000<=p1<=0.250000, 0.200000<=p2<=0.250000;
0.200000<=p1<=0.250000, 0.250000<=p2<=0.300000;
0.200000<=p1<=0.250000, 0.300000<=p2<=0.350000;
0.200000<=p1<=0.250000, 0.350000<=p2<=0.400000;
0.200000<=p1<=0.250000, 0.400000<=p2<=0.450000;
0.200000<=p1<=0.250000, 0.450000<=p2<=0.500000;
0.200000<=p1<=0.250000, 0.500000<=p2<=0.550000;
0.200000<=p1<=0.250000, 0.550000<=p2<=0.600000;
0.200000<=p1<=0.250000, 0.600000<=p2<=0.650000;
0.200000<=p1<=0.250000, 0.650000<=p2<=0.700000;
0.200000<=p1<=0.250000, 0.700000<=p2<=0.750000;
0.200000<=p1<=0.250000, 0.750000<=p2<=0.800000;
0.200000<=p1<=0.250000, 0.800000<=p2<=0.850000;
0.200000<=p1<=0.250000, 0.850000<=p2<=0.900000;
0.200000<=p1<=0.250000, 0.900000<=p2<=0.950000;
0.200000<=p1<=0.250000, 0.950000<=p2<=0.999990;
0.250000<=p1<=0.300000, 0.000010<=p2<=0.050000;
0.250000<=p1<=0.300000, 0.050000<=p2<=0.100000;
0.250000<=p1<=0.300000, 0.100000<=p2<=0.150000;
0.250000<=p1<=0.300000, 0.150000<=p2<=0.200000;
0.250000<=p1<=0.300000, 0.200000<=p2<=0.250000;
0.250000<=p1<=0.300000, 0.250000<=p2<=0.300000;
0.250000<=p1<=0.300000, 0.300000<=p2<=0.350000;
0.250000<=p1<=0.300000, 0.350000<=p2<=0.400000;
0.250000<=p1<=0.300000, 0.400000<=p2<=0.450000;
0.250000<=p1<=0.300000, 0.450000<=p2<=0.500000;
0.250000<=p1<=0.300000, 0.500000<=p2<=0.550000;
0.250000<=p1<=0.300000, 0.550000<=p2<=0.600000;
0.250000<=p1<=0.300000, 0.600000<=p2<=0.650000;
0.250000<=p1<=0.300000, 0.650000<=p2<=0.700000;
0.250000<=p1<=0.300000, 0.700000<=p2<=0.750000;
0.250000<=p1<=0.300000, 0.750000<=p2<=0.800000;
0.250000<=p1<=0.300000, 0.800000<=p2<=0.850000;
0.250000<=p1<=0.300000, 0.850000<=p2<=0.900000;
0.250000<=p1<=0.300000, 0.900000<=p2<=0.950000;
0.250000<=p1<=0.300000, 0.950000<=p2<=0.999990;
0.300000<=p1<=0.350000, 0.000010<=p2<=0.050000;
0.300000<=p1<=0.350000, 0.050000<=p2<=0.100000;
0.300000<=p1<=0.350000, 0.100000<=p2<=0.150000;
0.300000<=p1<=0.350000, 0.150000<=p2<=0.200000;
0.300000<=p1<=0.350000, 0.200000<=p2<=0.250000;
0.300000<=p1<=0.350000, 0.250000<=p2<=0.300000;
0.300000<=p1<=0.350000, 0.300000<=p2<=0.350000;
0.300000<=p1<=0.350000, 0.350000<=p2<=0.400000;
0.300000<=p1<=0.350000, 0.400000<=p2<=0.450000;
0.300000<=p1<=0.350000, 0.450000<=p2<=0.500000;
0.300000<=p1<=0.350000, 0.500000<=p2<=0.550000;
0.300000<=p1<=0.350000, 0.550000<=p2<=0.600000;
0.300000<=p1<=0.350000, 0.600000<=p2<=0.650000;
0.300000<=p1<=0.350000, 0.650000<=p2<=0.700000;
0.300000<=p1<=0.350000, 0.700000<=p2<=0.750000;
0.300000<=p1<=0.350000, 0.750000<=p2<=0.800000;
0.300000<=p1<=0.350000, 0.800000<=p2<=0.850000;
0.300000<=p1<=0.350000, 0.850000<=p2<=0.900000;
0.300000<=p1<=0.350000, 0.900000<=p2<=0.950000;
0.300000<=p1<=0.350000, 0.950000<=p2<=0.999990;
0.350000<=p1<=0.400000, 0.000010<=p2<=0.050000;
0.350000<=p1<=0.400000, 0.050000<=p2<=0.100000;
0.350000<=p1<=0.400000, 0.100000<=p2<=0.150000;
0.350000<=p1<=0.400000, 0.150000<=p2<=0.200000;
0.350000<=p1<=0.400000, 0.200000<=p2<=0.250000;
0.350000<=p1<=0.400000, 0.250000<=p2<=0.300000;
0.350000<=p1<=0.400000, 0.300000<=p2<=0.350000;
0.350000<=p1<=0.400000, 0.350000<=p2<=0.400000;
0.350000<=p1<=0.400000, 0.400000<=p2<=0.450000;
0.350000<=p1<=0.400000, 0.450000<=p2<=0.500000;
0.350000<=p1<=0.400000, 0.500000<=p2<=0.550000;
0.350000<=p1<=0.400000, 0.550000<=p2<=0.600000;
0.350000<=p1<=0.400000, 0.600000<=p2<=0.650000;
0.350000<=p1<=0.400000, 0.650000<=p2<=0.700000;
0.350000<=p1<=0.400000, 0.700000<=p2<=0.750000;
0.350000<=p1<=0.400000, 0.750000<=p2<=0.800000;
0.350000<=p1<=0.400000, 0.800000<=p2<=0.850000;
0.350000<=p1<=0.400000, 0.850000<=p2<=0.900000;
0.350000<=p1<=0.400000, 0.900000<=p2<=0.950000;
0.350000<=p1<=0.400000, 0.950000<=p2<=0.999990;
0.400000<=p1<=0.450000, 0.000010<=p2<=0.050000;
0.400000<=p1<=0.450000, 0.050000<=p2<=0.100000;
0.400000<=p1<=0.450000, 0.100000<=p2<=0.150000;
0.400000<=p1<=0.450000, 0.150000<=p2<=0.200000;
0.400000<=p1<=0.450000, 0.200000<=p2<=0.250000;
0.400000<=p1<=0.450000, 0.250000<=p2<=0.300000;
0.400000<=p1<=0.450000, 0.300000<=p2<=0.350000;
0.400000<=p1<=0.450000, 0.350000<=p2<=0.400000;
0.400000<=p1<=0.450000, 0.400000<=p2<=0.450000;
0.400000<=p1<=0.450000, 0.450000<=p2<=0.500000;
0.400000<=p1<=0.450000, 0.500000<=p2<=0.550000;
0.400000<=p1<=0.450000, 0.550000<=p2<=0.600000;
0.400000<=p1<=0.450000, 0.600000<=p2<=0.650000;
0.400000<=p1<=0.450000, 0.650000<=p2<=0.700000;
0.400000<=p1<=0.450000, 0.700000<=p2<=0.750000;
0.400000<=p1<=0.450000, 0.750000<=p2<=0.800000;
0.400000<=p1<=0.450000, 0.800000<=p2<=0.850000;
0.400000<=p1<=0.450000, 0.850000<=p2<=0.900000;
0.400000<=p1<=0.450000, 0.900000<=p2<=0.950000;
0.400000<=p1<=0.450000, 0.950000<=p2<=0.999990;
0.450000<=p1<=0.500000, 0.000010<=p2<=0.050000;
0.450000<=p1<=0.500000, 0.050000<=p2<=0.100000;
0.450000<=p1<=0.500000, 0.100000<=p2<=0.150000;
0.450000<=p1<=0.500000, 0.150000<=p2<=0.200000;
0.450000<=p1<=0.500000, 0.200000<=p2<=0.250000;
0.450000<=p1<=0.500000, 0.250000<=p2<=0.300000;
0.450000<=p1<=0.500000, 0.300000<=p2<=0.350000;
0.450000<=p1<=0.500000, 0.350000<=p2<=0.400000;
0.450000<=p1<=0.500000, 0.400000<=p2<=0.450000;
0.450000<=p1<=0.500000, 0.450000<=p2<=0.500000;
0.450000<=p1<=0.500000, 0.500000<=p2<=0.550000;
0.450000<=p1<=0.500000, 0.550000<=p2<=0.600000;
0.450000<=p1<=0.500000, 0.600000<=p2<=0.650000;
0.450000<=p1<=0.500000, 0.650000<=p2<=0.700000;
0.450000<=p1<=0.500000, 0.700000<=p2<=0.750000;
0.450000<=p1<=0.500000, 0.750000<=p2<=0.800000;
0.450000<=p1<=0.500000, 0.800000<=p2<=0.850000;
0.450000<=p1<=0.500000, 0.850000<=p2<=0.900000;
0.450000<=p1<=0.500000, 0.900000<=p2<=0.950000;
0.450000<=p1<=0.500000, 0.950000<=p2<=0.999990;
0.500000<=p1<=0.550000, 0.000010<=p2<=0.050000;
0.500000<=p1<=0.550000, 0.050000<=p2<=0.100000;
0.500000<=p1<=0.550000, 0.100000<=p2<=0.150000;
0.500000<=p1<=0.550000, 0.150000<=p2<=0.200000;
0.500000<=p1<=0.550000, 0.200000<=p2<=0.250000;
0.500000<=p1<=0.550000, 0.250000<=p2<=0.300000;
0.500000<=p1<=0.550000, 0.300000<=p2<=0.350000;
0.500000<=p1<=0.550000, 0.350000<=p2<=0.400000;
0.500000<=p1<=0.550000, 0.400000<=p2<=0.450000;
0.500000<=p1<=0.550000, 0.450000<=p2<=0.500000;
0.500000<=p1<=0.550000, 0.500000<=p2<=0.550000;
0.500000<=p1<=0.550000, 0.550000<=p2<=0.600000;
0.500000<=p1<=0.550000, 0.600000<=p2<=0.650000;
0.500000<=p1<=0.550000, 0.650000<=p2<=0.700000;
0.500000<=p1<=0.550000, 0.700000<=p2<=0.750000;
0.500000<=p1<=0.550000, 0.750000<=p2<=0.800000;
0.500000<=p1<=0.550000, 0.800000<=p2<=0.850000;
0.500000<=p1<=0.550000, 0.850000<=p2<=0.900000;
0.500000<=p1<=0.550000, 0.900000<=p2<=0.950000;
0.500000<=p1<=0.550000, 0.950000<=p2<=0.999990;
0.550000<=p1<=0.600000, 0.000010<=p2<=0.050000;
0.550000<=p1<=0.600000, 0.050000<=p2<=0.100000;
0.550000<=p1<=0.600000, 0.100000<=p2<=0.150000;
0.550000<=p1<=0.600000, 0.150000<=p2<=0.200000;
0.550000<=p1<=0.600000, 0.200000<=p2<=0.250000;
0.550000<=p1<=0.600000, 0.250000<=p2<=0.300000;
0.550000<=p1<=0.600000, 0.300000<=p2<=0.350000;
0.550000<=p1<=0.600000, 0.350000<=p2<=0.400000;
0.550000<=p1<=0.600000, 0.400000<=p2<=0.450000;
0.550000<=p1<=0.600000, 0.450000<=p2<=0.500000;
0.550000<=p1<=0.600000, 0.500000<=p2<=0.550000;
0.550000<=p1<=0.600000, 0.550000<=p2<=0.600000;
0.550000<=p1<=0.600000, 0.600000<=p2<=0.650000;
0.550000<=p1<=0.600000, 0.650000<=p2<=0.700000;
0.550000<=p1<=0.600000, 0.700000<=p2<=0.750000;
0.550000<=p1<=0.600000, 0.750000<=p2<=0.800000;
0.550000<=p1<=0.600000, 0.800000<=p2<=0.850000;
0.550000<=p1<=0.600000, 0.850000<=p2<=0.900000;
0.550000<=p1<=0.600000, 0.900000<=p2<=0.950000;
0.550000<=p1<=0.600000, 0.950000<=p2<=0.999990;
0.600000<=p1<=0.650000, 0.000010<=p2<=0.050000;
0.600000<=p1<=0.650000, 0.050000<=p2<=0.100000;
0.600000<=p1<=0.650000, 0.100000<=p2<=0.150000;
0.600000<=p1<=0.650000, 0.150000<=p2<=0.200000;
0.600000<=p1<=0.650000, 0.200000<=p2<=0.250000;
0.600000<=p1<=0.650000, 0.250000<=p2<=0.300000;
0.600000<=p1<=0.650000, 0.300000<=p2<=0.350000;
0.600000<=p1<=0.650000, 0.350000<=p2<=0.400000;
0.600000<=p1<=0.650000, 0.400000<=p2<=0.450000;
0.600000<=p1<=0.650000, 0.450000<=p2<=0.500000;
0.600000<=p1<=0.650000, 0.500000<=p2<=0.550000;
0.600000<=p1<=0.650000, 0.550000<=p2<=0.600000;
0.600000<=p1<=0.650000, 0.600000<=p2<=0.650000;
0.600000<=p1<=0.650000, 0.650000<=p2<=0.700000;
0.600000<=p1<=0.650000, 0.700000<=p2<=0.750000;
0.600000<=p1<=0.650000, 0.750000<=p2<=0.800000;
0.600000<=p1<=0.650000, 0.800000<=p2<=0.850000;
0.600000<=p1<=0.650000, 0.850000<=p2<=0.900000;
0.600000<=p1<=0.650000, 0.900000<=p2<=0.950000;
0.600000<=p1<=0.650000, 0.950000<=p2<=0.999990;
0.650000<=p1<=0.700000, 0.000010<=p2<=0.050000;
0.650000<=p1<=0.700000, 0.050000<=p2<=0.100000;
0.650000<=p1<=0.700000, 0.100000<=p2<=0.150000;
0.650000<=p1<=0.700000, 0.150000<=p2<=0.200000;
0.650000<=p1<=0.700000, 0.200000<=p2<=0.250000;
0.650000<=p1<=0.700000, 0.250000<=p2<=0.300000;
0.650000<=p1<=0.700000, 0.300000<=p2<=0.350000;
0.650000<=p1<=0.700000, 0.350000<=p2<=0.400000;
0.650000<=p1<=0.700000, 0.400000<=p2<=0.450000;
0.650000<=p1<=0.700000, 0.450000<=p2<=0.500000;
0.650000<=p1<=0.700000, 0.500000<=p2<=0.550000;
0.650000<=p1<=0.700000, 0.550000<=p2<=0.600000;
0.650000<=p1<=0.700000, 0.600000<=p2<=0.650000;
0.650000<=p1<=0.700000, 0.650000<=p2<=0.700000;
0.650000<=p1<=0.700000, 0.700000<=p2<=0.750000;
0.650000<=p1<=0.700000, 0.750000<=p2<=0.800000;
0.650000<=p1<=0.700000, 0.800000<=p2<=0.850000;
0.650000<=p1<=0.700000, 0.850000<=p2<=0.900000;
0.650000<=p1<=0.700000, 0.900000<=p2<=0.950000;
0.650000<=p1<=0.700000, 0.950000<=p2<=0.999990;
0.700000<=p1<=0.750000, 0.000010<=p2<=0.050000;
0.700000<=p1<=0.750000, 0.050000<=p2<=0.100000;
0.700000<=p1<=0.750000, 0.100000<=p2<=0.150000;
0.700000<=p1<=0.750000, 0.150000<=p2<=0.200000;
0.700000<=p1<=0.750000, 0.200000<=p2<=0.250000;
0.700000<=p1<=0.750000, 0.250000<=p2<=0.300000;
0.700000<=p1<=0.750000, 0.300000<=p2<=0.350000;
0.700000<=p1<=0.750000, 0.350000<=p2<=0.400000;
0.700000<=p1<=0.750000, 0.400000<=p2<=0.450000;
0.700000<=p1<=0.750000, 0.450000<=p2<=0.500000;
0.700000<=p1<=0.750000, 0.500000<=p2<=0.550000;
0.700000<=p1<=0.750000, 0.550000<=p2<=0.600000;
0.700000<=p1<=0.750000, 0.600000<=p2<=0.650000;
0.700000<=p1<=0.750000, 0.650000<=p2<=0.700000;
0.700000<=p1<=0.750000, 0.700000<=p2<=0.750000;
0.700000<=p1<=0.750000, 0.750000<=p2<=0.800000;
0.700000<=p1<=0.750000, 0.800000<=p2<=0.850000;
0.700000<=p1<=0.750000, 0.850000<=p2<=0.900000;
0.700000<=p1<=0.750000, 0.900000<=p2<=0.950000;
0.700000<=p1<=0.750000, 0.950000<=p2<=0.999990;
0.750000<=p1<=0.800000, 0.000010<=p2<=0.050000;
0.750000<=p1<=0.800000, 0.050000<=p2<=0.100000;
0.750000<=p1<=0.800000, 0.100000<=p2<=0.150000;
0.750000<=p1<=0.800000, 0.150000<=p2<=0.200000;
0.750000<=p1<=0.800000, 0.200000<=p2<=0.250000;
0.750000<=p1<=0.800000, 0.250000<=p2<=0.300000;
0.750000<=p1<=0.800000, 0.300000<=p2<=0.350000;
0.750000<=p1<=0.800000, 0.350000<=p2<=0.400000;
0.750000<=p1<=0.800000, 0.400000<=p2<=0.450000;
0.750000<=p1<=0.800000, 0.450000<=p2<=0.500000;
0.750000<=p1<=0.800000, 0.500000<=p2<=0.550000;
0.750000<=p1<=0.800000, 0.550000<=p2<=0.600000;
0.750000<=p1<=0.800000, 0.600000<=p2<=0.650000;
0.750000<=p1<=0.800000, 0.650000<=p2<=0.700000;
0.750000<=p1<=0.800000, 0.700000<=p2<=0.750000;
0.750000<=p1<=0.800000, 0.750000<=p2<=0.800000;
0.750000<=p1<=0.800000, 0.800000<=p2<=0.850000;
0.750000<=p1<=0.800000, 0.850000<=p2<=0.900000;
0.750000<=p1<=0.800000, 0.900000<=p2<=0.950000;
0.750000<=p1<=0.800000, 0.950000<=p2<=0.999990;
0.800000<=p1<=0.850000, 0.000010<=p2<=0.050000;
0.800000<=p1<=0.850000, 0.050000<=p2<=0.100000;
0.800000<=p1<=0.850000, 0.100000<=p2<=0.150000;
0.800000<=p1<=0.850000, 0.150000<=p2<=0.200000;
0.800000<=p1<=0.850000, 0.200000<=p2<=0.250000;
0.800000<=p1<=0.850000, 0.250000<=p2<=0.300000;
0.800000<=p1<=0.850000, 0.300000<=p2<=0.350000;
0.800000<=p1<=0.850000, 0.350000<=p2<=0.400000;
0.800000<=p1<=0.850000, 0.400000<=p2<=0.450000;
0.800000<=p1<=0.850000, 0.450000<=p2<=0.500000;
0.800000<=p1<=0.850000, 0.500000<=p2<=0.550000;
0.800000<=p1<=0.850000, 0.550000<=p2<=0.600000;
0.800000<=p1<=0.850000, 0.600000<=p2<=0.650000;
0.800000<=p1<=0.850000, 0.650000<=p2<=0.700000;
0.800000<=p1<=0.850000, 0.700000<=p2<=0.750000;
0.800000<=p1<=0.850000, 0.750000<=p2<=0.800000;
0.800000<=p1<=0.850000, 0.800000<=p2<=0.850000;
0.800000<=p1<=0.850000, 0.850000<=p2<=0.900000;
0.800000<=p1<=0.850000, 0.900000<=p2<=0.950000;
0.800000<=p1<=0.850000, 0.950000<=p2<=0.999990;
0.850000<=p1<=0.900000, 0.000010<=p2<=0.050000;
0.850000<=p1<=0.900000, 0.050000<=p2<=0.100000;
0.850000<=p1<=0.900000, 0.100000<=p2<=0.150000;
0.850000<=p1<=0.900000, 0.150000<=p2<=0.200000;
0.850000<=p1<=0.900000, 0.200000<=p2<=0.250000;
0.850000<=p1<=0.900000, 0.250000<=p2<=0.300000;
0.850000<=p1<=0.900000, 0.300000<=p2<=0.350000;
0.850000<=p1<=0.900000, 0.350000<=p2<=0.400000;
0.850000<=p1<=0.900000, 0.400000<=p2<=0.450000;
0.850000<=p1<=0.900000, 0.450000<=p2<=0.500000;
0.850000<=p1<=0.900000, 0.500000<=p2<=0.550000;
0.850000<=p1<=0.900000, 0.550000<=p2<=0.600000;
0.850000<=p1<=0.900000, 0.600000<=p2<=0.650000;
0.850000<=p1<=0.900000, 0.650000<=p2<=0.700000;
0.850000<=p1<=0.900000, 0.700000<=p2<=0.750000;
0.850000<=p1<=0.900000, 0.750000<=p2<=0.800000;
0.850000<=p1<=0.900000, 0.800000<=p2<=0.850000;
0.850000<=p1<=0.900000, 0.850000<=p2<=0.900000;
0.850000<=p1<=0.900000, 0.900000<=p2<=0.950000;
0.850000<=p1<=0.900000, 0.950000<=p2<=0.999990;
0.900000<=p1<=0.950000, 0.000010<=p2<=0.050000;
0.900000<=p1<=0.950000, 0.050000<=p2<=0.100000;
0.900000<=p1<=0.950000, 0.100000<=p2<=0.150000;
0.900000<=p1<=0.950000, 0.150000<=p2<=0.200000;
0.900000<=p1<=0.950000, 0.200000<=p2<=0.250000;
0.900000<=p1<=0.950000, 0.250000<=p2<=0.300000;
0.900000<=p1<=0.950000, 0.300000<=p2<=0.350000;
0.900000<=p1<=0.950000, 0.350000<=p2<=0.400000;
0.900000<=p1<=0.950000, 0.400000<=p2<=0.450000;
0.900000<=p1<=0.950000, 0.450000<=p2<=0.500000;
0.900000<=p1<=0.950000, 0.500000<=p2<=0.550000;
0.900000<=p1<=0.950000, 0.550000<=p2<=0.600000;
0.900000<=p1<=0.950000, 0.600000<=p2<=0.650000;
0.900000<=p1<=0.950000, 0.650000<=p2<=0.700000;
0.900000<=p1<=0.950000, 0.700000<=p2<=0.750000;
0.900000<=p1<=0.950000, 0.750000<=p2<=0.800000;
0.900000<=p1<=0.950000, 0.800000<=p2<=0.850000;
0.900000<=p1<=0.950000, 0.850000<=p2<=0.900000;
0.900000<=p1<=0.950000, 0.900000<=p2<=0.950000;
0.900000<=p1<=0.950000, 0.950000<=p2<=0.999990;
0.950000<=p1<=0.999990, 0.000010<=p2<=0.050000;
0.950000<=p1<=0.999990, 0.050000<=p2<=0.100000;
0.950000<=p1<=0.999990, 0.100000<=p2<=0.150000;
0.950000<=p1<=0.999990, 0.150000<=p2<=0.200000;
0.950000<=p1<=0.999990, 0.200000<=p2<=0.250000;
0.950000<=p1<=0.999990, 0.250000<=p2<=0.300000;
0.950000<=p1<=0.999990, 0.300000<=p2<=0.350000;
0.950000<=p1<=0.999990, 0.350000<=p2<=0.400000;
0.950000<=p1<=0.999990, 0.400000<=p2<=0.450000;
0.950000<=p1<=0.999990, 0.450000<=p2<=0.500000;
0.950000<=p1<=0.999990, 0.500000<=p2<=0.550000;
0.950000<=p1<=0.999990, 0.550000<=p2<=0.600000;
0.950000<=p1<=0.999990, 0.600000<=p2<=0.650000;
0.950000<=p1<=0.999990, 0.650000<=p2<=0.700000;
0.950000<=p1<=0.999990, 0.700000<=p2<=0.750000;
0.950000<=p1<=0.999990, 0.750000<=p2<=0.800000;
0.950000<=p1<=0.999990, 0.800000<=p2<=0.850000;
0.950000<=p1<=0.999990, 0.850000<=p2<=0.900000;
0.950000<=p1<=0.999990, 0.900000<=p2<=0.950000;
0.950000<=p1<=0.999990, 0.950000<=p2<=0.999990;

65
examples/pmdp/consensus/coin2_1024.nm

@ -1,65 +0,0 @@
// COIN FLIPPING PROTOCOL FOR POLYNOMIAL RANDOMIZED CONSENSUS [AH90]
// gxn/dxp 20/11/00
mdp
// constants
const int N=2;
const int K=1024;
const int range = 2*(K+1)*N;
const int counter_init = (K+1)*N;
const int left = N;
const int right = 2*(K+1)*N - N;
//Coin Probabilities
const double p;
const double q;
// shared coin
global counter : [0..range] init counter_init;
module process1
// program counter
pc1 : [0..3];
// 0 - flip
// 1 - write
// 2 - check
// 3 - finished
// local coin
coin1 : [0..1];
// flip coin
[] (pc1=0) -> p : (coin1'=0) & (pc1'=1) + 1-p : (coin1'=1) & (pc1'=1);
// write tails -1 (reset coin to add regularity)
[] (pc1=1) & (coin1=0) & (counter>0) -> 1 : (counter'=counter-1) & (pc1'=2) & (coin1'=0);
// write heads +1 (reset coin to add regularity)
[] (pc1=1) & (coin1=1) & (counter<range) -> 1 : (counter'=counter+1) & (pc1'=2) & (coin1'=0);
// check
// decide tails
[] (pc1=2) & (counter<=left) -> 1 : (pc1'=3) & (coin1'=0);
// decide heads
[] (pc1=2) & (counter>=right) -> 1 : (pc1'=3) & (coin1'=1);
// flip again
[] (pc1=2) & (counter>left) & (counter<right) -> 1 : (pc1'=0);
// loop (all loop together when done)
[done] (pc1=3) -> 1 : (pc1'=3);
endmodule
// construct remaining processes through renaming
module process2 = process1[pc1=pc2,coin1=coin2,p=q] endmodule
// labels
label "finished" = pc1=3 & pc2=3 ;
label "all_coins_equal_0" = coin1=0 & coin2=0 ;
label "all_coins_equal_1" = coin1=1 & coin2=1 ;
label "agree" = coin1=coin2 ;
label "finish_with_1" = pc1=3 & pc2=3 & coin1=1 & coin2=1 ;
// rewards
rewards "steps"
true : 1;
endrewards

56
examples/pmdp/consensus/coin2_128.nm

@ -0,0 +1,56 @@
//Randomised Consensus Protocol
mdp
const double p1; // in [0.2 , 0.8]
const double p2; // in [0.2 , 0.8]
const int N=2;
const int K=128;
const int range = 2*(K+1)*N;
const int counter_init = (K+1)*N;
const int left = N;
const int right = 2*(K+1)*N - N;
// shared coin
global counter : [0..range] init counter_init;
module process1
// program counter
pc1 : [0..3];
// 0 - flip
// 1 - write
// 2 - check
// 3 - finished
// local coin
coin1 : [0..1];
// flip coin
[] (pc1=0) -> p1 : (coin1'=0) & (pc1'=1) + 1 - p1 : (coin1'=1) & (pc1'=1);
// write tails -1 (reset coin to add regularity)
[] (pc1=1) & (coin1=0) & (counter>0) -> (counter'=counter-1) & (pc1'=2) & (coin1'=0);
// write heads +1 (reset coin to add regularity)
[] (pc1=1) & (coin1=1) & (counter<range) -> (counter'=counter+1) & (pc1'=2) & (coin1'=0);
// check
// decide tails
[] (pc1=2) & (counter<=left) -> (pc1'=3) & (coin1'=0);
// decide heads
[] (pc1=2) & (counter>=right) -> (pc1'=3) & (coin1'=1);
// flip again
[] (pc1=2) & (counter>left) & (counter<right) -> (pc1'=0);
// loop (all loop together when done)
[done] (pc1=3) -> (pc1'=3);
endmodule
module process2 = process1[pc1=pc2,coin1=coin2,p1=p2] endmodule
label "finished" = pc1=3 &pc2=3 ;
label "all_coins_equal_1" = coin1=1 &coin2=1 ;
rewards "steps"
true : 1;
endrewards

41
examples/pmdp/consensus/coin2_2.nm

@ -1,9 +1,10 @@
// COIN FLIPPING PROTOCOL FOR POLYNOMIAL RANDOMIZED CONSENSUS [AH90]
// gxn/dxp 20/11/00
//Randomised Consensus Protocol
mdp
const double p1; // in [0.2 , 0.8]
const double p2; // in [0.2 , 0.8]
// constants
const int N=2;
const int K=2;
const int range = 2*(K+1)*N;
@ -11,10 +12,6 @@ const int counter_init = (K+1)*N;
const int left = N;
const int right = 2*(K+1)*N - N;
//Coin Probabilities
const double p;
const double q;
// shared coin
global counter : [0..range] init counter_init;
@ -31,35 +28,29 @@ module process1
coin1 : [0..1];
// flip coin
[] (pc1=0) -> p : (coin1'=0) & (pc1'=1) + 1-p : (coin1'=1) & (pc1'=1);
[] (pc1=0) -> p1 : (coin1'=0) & (pc1'=1) + 1 - p1 : (coin1'=1) & (pc1'=1);
// write tails -1 (reset coin to add regularity)
[] (pc1=1) & (coin1=0) & (counter>0) -> 1 : (counter'=counter-1) & (pc1'=2) & (coin1'=0);
[] (pc1=1) & (coin1=0) & (counter>0) -> (counter'=counter-1) & (pc1'=2) & (coin1'=0);
// write heads +1 (reset coin to add regularity)
[] (pc1=1) & (coin1=1) & (counter<range) -> 1 : (counter'=counter+1) & (pc1'=2) & (coin1'=0);
[] (pc1=1) & (coin1=1) & (counter<range) -> (counter'=counter+1) & (pc1'=2) & (coin1'=0);
// check
// decide tails
[] (pc1=2) & (counter<=left) -> 1 : (pc1'=3) & (coin1'=0);
[] (pc1=2) & (counter<=left) -> (pc1'=3) & (coin1'=0);
// decide heads
[] (pc1=2) & (counter>=right) -> 1 : (pc1'=3) & (coin1'=1);
[] (pc1=2) & (counter>=right) -> (pc1'=3) & (coin1'=1);
// flip again
[] (pc1=2) & (counter>left) & (counter<right) -> 1 : (pc1'=0);
[] (pc1=2) & (counter>left) & (counter<right) -> (pc1'=0);
// loop (all loop together when done)
[done] (pc1=3) -> 1 : (pc1'=3);
[done] (pc1=3) -> (pc1'=3);
endmodule
// construct remaining processes through renaming
module process2 = process1[pc1=pc2,coin1=coin2,p=q] endmodule
// labels
label "finished" = pc1=3 & pc2=3 ;
label "all_coins_equal_0" = coin1=0 & coin2=0 ;
label "all_coins_equal_1" = coin1=1 & coin2=1 ;
label "agree" = coin1=coin2 ;
label "finish_with_1" = pc1=3 & pc2=3 & coin1=1 & coin2=1 ;
// rewards
module process2 = process1[pc1=pc2,coin1=coin2,p1=p2] endmodule
label "finished" = pc1=3 &pc2=3 ;
label "all_coins_equal_1" = coin1=1 &coin2=1 ;
rewards "steps"
true : 1;
endrewards

56
examples/pmdp/consensus/coin2_4.nm

@ -0,0 +1,56 @@
//Randomised Consensus Protocol
mdp
const double p1; // in [0.2 , 0.8]
const double p2; // in [0.2 , 0.8]
const int N=2;
const int K=4;
const int range = 2*(K+1)*N;
const int counter_init = (K+1)*N;
const int left = N;
const int right = 2*(K+1)*N - N;
// shared coin
global counter : [0..range] init counter_init;
module process1
// program counter
pc1 : [0..3];
// 0 - flip
// 1 - write
// 2 - check
// 3 - finished
// local coin
coin1 : [0..1];
// flip coin
[] (pc1=0) -> p1 : (coin1'=0) & (pc1'=1) + 1 - p1 : (coin1'=1) & (pc1'=1);
// write tails -1 (reset coin to add regularity)
[] (pc1=1) & (coin1=0) & (counter>0) -> (counter'=counter-1) & (pc1'=2) & (coin1'=0);
// write heads +1 (reset coin to add regularity)
[] (pc1=1) & (coin1=1) & (counter<range) -> (counter'=counter+1) & (pc1'=2) & (coin1'=0);
// check
// decide tails
[] (pc1=2) & (counter<=left) -> (pc1'=3) & (coin1'=0);
// decide heads
[] (pc1=2) & (counter>=right) -> (pc1'=3) & (coin1'=1);
// flip again
[] (pc1=2) & (counter>left) & (counter<right) -> (pc1'=0);
// loop (all loop together when done)
[done] (pc1=3) -> (pc1'=3);
endmodule
module process2 = process1[pc1=pc2,coin1=coin2,p1=p2] endmodule
label "finished" = pc1=3 &pc2=3 ;
label "all_coins_equal_1" = coin1=1 &coin2=1 ;
rewards "steps"
true : 1;
endrewards

41
examples/pmdp/consensus/coin2_64.nm

@ -1,9 +1,10 @@
// COIN FLIPPING PROTOCOL FOR POLYNOMIAL RANDOMIZED CONSENSUS [AH90]
// gxn/dxp 20/11/00
//Randomised Consensus Protocol
mdp
const double p1; // in [0.2 , 0.8]
const double p2; // in [0.2 , 0.8]
// constants
const int N=2;
const int K=64;
const int range = 2*(K+1)*N;
@ -11,10 +12,6 @@ const int counter_init = (K+1)*N;
const int left = N;
const int right = 2*(K+1)*N - N;
//Coin Probabilities
const double p;
const double q;
// shared coin
global counter : [0..range] init counter_init;
@ -31,35 +28,29 @@ module process1
coin1 : [0..1];
// flip coin
[] (pc1=0) -> p : (coin1'=0) & (pc1'=1) + 1-p : (coin1'=1) & (pc1'=1);
[] (pc1=0) -> p1 : (coin1'=0) & (pc1'=1) + 1 - p1 : (coin1'=1) & (pc1'=1);
// write tails -1 (reset coin to add regularity)
[] (pc1=1) & (coin1=0) & (counter>0) -> 1 : (counter'=counter-1) & (pc1'=2) & (coin1'=0);
[] (pc1=1) & (coin1=0) & (counter>0) -> (counter'=counter-1) & (pc1'=2) & (coin1'=0);
// write heads +1 (reset coin to add regularity)
[] (pc1=1) & (coin1=1) & (counter<range) -> 1 : (counter'=counter+1) & (pc1'=2) & (coin1'=0);
[] (pc1=1) & (coin1=1) & (counter<range) -> (counter'=counter+1) & (pc1'=2) & (coin1'=0);
// check
// decide tails
[] (pc1=2) & (counter<=left) -> 1 : (pc1'=3) & (coin1'=0);
[] (pc1=2) & (counter<=left) -> (pc1'=3) & (coin1'=0);
// decide heads
[] (pc1=2) & (counter>=right) -> 1 : (pc1'=3) & (coin1'=1);
[] (pc1=2) & (counter>=right) -> (pc1'=3) & (coin1'=1);
// flip again
[] (pc1=2) & (counter>left) & (counter<right) -> 1 : (pc1'=0);
[] (pc1=2) & (counter>left) & (counter<right) -> (pc1'=0);
// loop (all loop together when done)
[done] (pc1=3) -> 1 : (pc1'=3);
[done] (pc1=3) -> (pc1'=3);
endmodule
// construct remaining processes through renaming
module process2 = process1[pc1=pc2,coin1=coin2,p=q] endmodule
// labels
label "finished" = pc1=3 & pc2=3 ;
label "all_coins_equal_0" = coin1=0 & coin2=0 ;
label "all_coins_equal_1" = coin1=1 & coin2=1 ;
label "agree" = coin1=coin2 ;
label "finish_with_1" = pc1=3 & pc2=3 & coin1=1 & coin2=1 ;
// rewards
module process2 = process1[pc1=pc2,coin1=coin2,p1=p2] endmodule
label "finished" = pc1=3 &pc2=3 ;
label "all_coins_equal_1" = coin1=1 &coin2=1 ;
rewards "steps"
true : 1;
endrewards

56
examples/pmdp/consensus/coin2_7.nm

@ -0,0 +1,56 @@
//Randomised Consensus Protocol
mdp
const double p1; // in [0.2 , 0.8]
const double p2; // in [0.2 , 0.8]
const int N=2;
const int K=7;
const int range = 2*(K+1)*N;
const int counter_init = (K+1)*N;
const int left = N;
const int right = 2*(K+1)*N - N;
// shared coin
global counter : [0..range] init counter_init;
module process1
// program counter
pc1 : [0..3];
// 0 - flip
// 1 - write
// 2 - check
// 3 - finished
// local coin
coin1 : [0..1];
// flip coin
[] (pc1=0) -> p1 : (coin1'=0) & (pc1'=1) + 1 - p1 : (coin1'=1) & (pc1'=1);
// write tails -1 (reset coin to add regularity)
[] (pc1=1) & (coin1=0) & (counter>0) -> (counter'=counter-1) & (pc1'=2) & (coin1'=0);
// write heads +1 (reset coin to add regularity)
[] (pc1=1) & (coin1=1) & (counter<range) -> (counter'=counter+1) & (pc1'=2) & (coin1'=0);
// check
// decide tails
[] (pc1=2) & (counter<=left) -> (pc1'=3) & (coin1'=0);
// decide heads
[] (pc1=2) & (counter>=right) -> (pc1'=3) & (coin1'=1);
// flip again
[] (pc1=2) & (counter>left) & (counter<right) -> (pc1'=0);
// loop (all loop together when done)
[done] (pc1=3) -> (pc1'=3);
endmodule
module process2 = process1[pc1=pc2,coin1=coin2,p1=p2] endmodule
label "finished" = pc1=3 &pc2=3 ;
label "all_coins_equal_1" = coin1=1 &coin2=1 ;
rewards "steps"
true : 1;
endrewards

41
examples/pmdp/consensus/coin2_8.nm

@ -1,9 +1,10 @@
// COIN FLIPPING PROTOCOL FOR POLYNOMIAL RANDOMIZED CONSENSUS [AH90]
// gxn/dxp 20/11/00
//Randomised Consensus Protocol
mdp
const double p1; // in [0.2 , 0.8]
const double p2; // in [0.2 , 0.8]
// constants
const int N=2;
const int K=8;
const int range = 2*(K+1)*N;
@ -11,10 +12,6 @@ const int counter_init = (K+1)*N;
const int left = N;
const int right = 2*(K+1)*N - N;
//Coin Probabilities
const double p;
const double q;
// shared coin
global counter : [0..range] init counter_init;
@ -31,35 +28,29 @@ module process1
coin1 : [0..1];
// flip coin
[] (pc1=0) -> p : (coin1'=0) & (pc1'=1) + 1-p : (coin1'=1) & (pc1'=1);
[] (pc1=0) -> p1 : (coin1'=0) & (pc1'=1) + 1 - p1 : (coin1'=1) & (pc1'=1);
// write tails -1 (reset coin to add regularity)
[] (pc1=1) & (coin1=0) & (counter>0) -> 1 : (counter'=counter-1) & (pc1'=2) & (coin1'=0);
[] (pc1=1) & (coin1=0) & (counter>0) -> (counter'=counter-1) & (pc1'=2) & (coin1'=0);
// write heads +1 (reset coin to add regularity)
[] (pc1=1) & (coin1=1) & (counter<range) -> 1 : (counter'=counter+1) & (pc1'=2) & (coin1'=0);
[] (pc1=1) & (coin1=1) & (counter<range) -> (counter'=counter+1) & (pc1'=2) & (coin1'=0);
// check
// decide tails
[] (pc1=2) & (counter<=left) -> 1 : (pc1'=3) & (coin1'=0);
[] (pc1=2) & (counter<=left) -> (pc1'=3) & (coin1'=0);
// decide heads
[] (pc1=2) & (counter>=right) -> 1 : (pc1'=3) & (coin1'=1);
[] (pc1=2) & (counter>=right) -> (pc1'=3) & (coin1'=1);
// flip again
[] (pc1=2) & (counter>left) & (counter<right) -> 1 : (pc1'=0);
[] (pc1=2) & (counter>left) & (counter<right) -> (pc1'=0);
// loop (all loop together when done)
[done] (pc1=3) -> 1 : (pc1'=3);
[done] (pc1=3) -> (pc1'=3);
endmodule
// construct remaining processes through renaming
module process2 = process1[pc1=pc2,coin1=coin2,p=q] endmodule
// labels
label "finished" = pc1=3 & pc2=3 ;
label "all_coins_equal_0" = coin1=0 & coin2=0 ;
label "all_coins_equal_1" = coin1=1 & coin2=1 ;
label "agree" = coin1=coin2 ;
label "finish_with_1" = pc1=3 & pc2=3 & coin1=1 & coin2=1 ;
// rewards
module process2 = process1[pc1=pc2,coin1=coin2,p1=p2] endmodule
label "finished" = pc1=3 &pc2=3 ;
label "all_coins_equal_1" = coin1=1 &coin2=1 ;
rewards "steps"
true : 1;
endrewards

67
examples/pmdp/consensus/coin4_2.nm

@ -1,67 +0,0 @@
// COIN FLIPPING PROTOCOL FOR POLYNOMIAL RANDOMIZED CONSENSUS [AH90]
// gxn/dxp 20/11/00
mdp
// constants
const int N=4;
const int K=2;
const int range = 2*(K+1)*N;
const int counter_init = (K+1)*N;
const int left = N;
const int right = 2*(K+1)*N - N;
//Coin Probabilities
const double p;
const double q;
// shared coin
global counter : [0..range] init counter_init;
module process1
// program counter
pc1 : [0..3];
// 0 - flip
// 1 - write
// 2 - check
// 3 - finished
// local coin
coin1 : [0..1];
// flip coin
[] (pc1=0) -> p : (coin1'=0) & (pc1'=1) + 1-p : (coin1'=1) & (pc1'=1);
// write tails -1 (reset coin to add regularity)
[] (pc1=1) & (coin1=0) & (counter>0) -> 1 : (counter'=counter-1) & (pc1'=2) & (coin1'=0);
// write heads +1 (reset coin to add regularity)
[] (pc1=1) & (coin1=1) & (counter<range) -> 1 : (counter'=counter+1) & (pc1'=2) & (coin1'=0);
// check
// decide tails
[] (pc1=2) & (counter<=left) -> 1 : (pc1'=3) & (coin1'=0);
// decide heads
[] (pc1=2) & (counter>=right) -> 1 : (pc1'=3) & (coin1'=1);
// flip again
[] (pc1=2) & (counter>left) & (counter<right) -> 1 : (pc1'=0);
// loop (all loop together when done)
[done] (pc1=3) -> 1 : (pc1'=3);
endmodule
// construct remaining processes through renaming
module process2 = process1[pc1=pc2,coin1=coin2,p=q] endmodule
module process3 = process1[pc1=pc3,coin1=coin3] endmodule
module process4 = process1[pc1=pc4,coin1=coin4,p=q] endmodule
// labels
label "finished" = pc1=3 & pc2=3 & pc3=3 & pc4=3 ;
label "all_coins_equal_0" = coin1=0 & coin2=0 & coin3=0 & coin4=0 ;
label "all_coins_equal_1" = coin1=1 & coin2=1 & coin3=1 & coin4=1 ;
label "agree" = coin1=coin2 & coin2=coin3 & coin3=coin4 ;
label "finish_with_1" = pc1=3 & pc2=3 & pc3=3 & pc4=3 & coin1=1 & coin2=1 & coin3=1 & coin4=1 ;
// rewards
rewards "steps"
true : 1;
endrewards

67
examples/pmdp/consensus/coin4_8.nm

@ -1,67 +0,0 @@
// COIN FLIPPING PROTOCOL FOR POLYNOMIAL RANDOMIZED CONSENSUS [AH90]
// gxn/dxp 20/11/00
mdp
// constants
const int N=4;
const int K=8;
const int range = 2*(K+1)*N;
const int counter_init = (K+1)*N;
const int left = N;
const int right = 2*(K+1)*N - N;
//Coin Probabilities
const double p;
const double q;
// shared coin
global counter : [0..range] init counter_init;
module process1
// program counter
pc1 : [0..3];
// 0 - flip
// 1 - write
// 2 - check
// 3 - finished
// local coin
coin1 : [0..1];
// flip coin
[] (pc1=0) -> p : (coin1'=0) & (pc1'=1) + 1-p : (coin1'=1) & (pc1'=1);
// write tails -1 (reset coin to add regularity)
[] (pc1=1) & (coin1=0) & (counter>0) -> 1 : (counter'=counter-1) & (pc1'=2) & (coin1'=0);
// write heads +1 (reset coin to add regularity)
[] (pc1=1) & (coin1=1) & (counter<range) -> 1 : (counter'=counter+1) & (pc1'=2) & (coin1'=0);
// check
// decide tails
[] (pc1=2) & (counter<=left) -> 1 : (pc1'=3) & (coin1'=0);
// decide heads
[] (pc1=2) & (counter>=right) -> 1 : (pc1'=3) & (coin1'=1);
// flip again
[] (pc1=2) & (counter>left) & (counter<right) -> 1 : (pc1'=0);
// loop (all loop together when done)
[done] (pc1=3) -> 1 : (pc1'=3);
endmodule
// construct remaining processes through renaming
module process2 = process1[pc1=pc2,coin1=coin2,p=q] endmodule
module process3 = process1[pc1=pc3,coin1=coin3] endmodule
module process4 = process1[pc1=pc4,coin1=coin4,p=q] endmodule
// labels
label "finished" = pc1=3 & pc2=3 & pc3=3 & pc4=3 ;
label "all_coins_equal_0" = coin1=0 & coin2=0 & coin3=0 & coin4=0 ;
label "all_coins_equal_1" = coin1=1 & coin2=1 & coin3=1 & coin4=1 ;
label "agree" = coin1=coin2 & coin2=coin3 & coin3=coin4 ;
label "finish_with_1" = pc1=3 & pc2=3 & pc3=3 & pc4=3 & coin1=1 & coin2=1 & coin3=1 & coin4=1 ;
// rewards
rewards "steps"
true : 1;
endrewards

69
examples/pmdp/consensus/coin6_2.nm

@ -1,69 +0,0 @@
// COIN FLIPPING PROTOCOL FOR POLYNOMIAL RANDOMIZED CONSENSUS [AH90]
// gxn/dxp 20/11/00
mdp
// constants
const int N=6;
const int K=2;
const int range = 2*(K+1)*N;
const int counter_init = (K+1)*N;
const int left = N;
const int right = 2*(K+1)*N - N;
//Coin Probabilities
const double p;
const double q;
// shared coin
global counter : [0..range] init counter_init;
module process1
// program counter
pc1 : [0..3];
// 0 - flip
// 1 - write
// 2 - check
// 3 - finished
// local coin
coin1 : [0..1];
// flip coin
[] (pc1=0) -> p : (coin1'=0) & (pc1'=1) + 1-p : (coin1'=1) & (pc1'=1);
// write tails -1 (reset coin to add regularity)
[] (pc1=1) & (coin1=0) & (counter>0) -> (counter'=counter-1) & (pc1'=2) & (coin1'=0);
// write heads +1 (reset coin to add regularity)
[] (pc1=1) & (coin1=1) & (counter<range) -> (counter'=counter+1) & (pc1'=2) & (coin1'=0);
// check
// decide tails
[] (pc1=2) & (counter<=left) -> (pc1'=3) & (coin1'=0);
// decide heads
[] (pc1=2) & (counter>=right) -> (pc1'=3) & (coin1'=1);
// flip again
[] (pc1=2) & (counter>left) & (counter<right) -> (pc1'=0);
// loop (all loop together when done)
[done] (pc1=3) -> (pc1'=3);
endmodule
// construct remaining processes through renaming
module process2 = process1[pc1=pc2,coin1=coin2,p=q] endmodule
module process3 = process1[pc1=pc3,coin1=coin3] endmodule
module process4 = process1[pc1=pc4,coin1=coin4,p=q] endmodule
module process5 = process1[pc1=pc5,coin1=coin5] endmodule
module process6 = process1[pc1=pc6,coin1=coin6,p=q] endmodule
// labels
label "finished" = pc1=3 & pc2=3 & pc3=3 & pc4=3 & pc5=3 & pc6=3 ;
label "all_coins_equal_0" = coin1=0 & coin2=0 & coin3=0 & coin4=0 & coin5=0 & coin6=0 ;
label "all_coins_equal_1" = coin1=1 & coin2=1 & coin3=1 & coin4=1 & coin5=1 & coin6=1 ;
label "agree" = coin1=coin2 & coin2=coin3 & coin3=coin4 & coin4=coin5 & coin5=coin6 ;
label "finish_with_1" = pc1=3 & pc2=3 & pc3=3 & pc4=3 & pc5=3 & pc6=3 & coin1=1 & coin2=1 & coin3=1 & coin4=1 & coin5=1 & coin6=1;
// rewards
rewards "steps"
true : 1;
endrewards

70
examples/pmdp/consensus/coin6_8.nm

@ -1,70 +0,0 @@
// COIN FLIPPING PROTOCOL FOR POLYNOMIAL RANDOMIZED CONSENSUS [AH90]
// gxn/dxp 20/11/00
mdp
// constants
const int N=6;
const int K=8;
const int range = 2*(K+1)*N;
const int counter_init = (K+1)*N;
const int left = N;
const int right = 2*(K+1)*N - N;
//Coin Probabilities
const double p;
const double q;
// shared coin
global counter : [0..range] init counter_init;
module process1
// program counter
pc1 : [0..3];
// 0 - flip
// 1 - write
// 2 - check
// 3 - finished
// local coin
coin1 : [0..1];
// flip coin
[] (pc1=0) -> p : (coin1'=0) & (pc1'=1) + 1-p : (coin1'=1) & (pc1'=1);
// write tails -1 (reset coin to add regularity)
[] (pc1=1) & (coin1=0) & (counter>0) -> (counter'=counter-1) & (pc1'=2) & (coin1'=0);
// write heads +1 (reset coin to add regularity)
[] (pc1=1) & (coin1=1) & (counter<range) -> (counter'=counter+1) & (pc1'=2) & (coin1'=0);
// check
// decide tails
[] (pc1=2) & (counter<=left) -> (pc1'=3) & (coin1'=0);
// decide heads
[] (pc1=2) & (counter>=right) -> (pc1'=3) & (coin1'=1);
// flip again
[] (pc1=2) & (counter>left) & (counter<right) -> (pc1'=0);
// loop (all loop together when done)
[done] (pc1=3) -> (pc1'=3);
endmodule
// construct remaining processes through renaming
module process2 = process1[pc1=pc2,coin1=coin2,p=q] endmodule
module process3 = process1[pc1=pc3,coin1=coin3] endmodule
module process4 = process1[pc1=pc4,coin1=coin4,p=q] endmodule
module process5 = process1[pc1=pc5,coin1=coin5] endmodule
module process6 = process1[pc1=pc6,coin1=coin6,p=q] endmodule
// labels
label "finished" = pc1=3 & pc2=3 & pc3=3 & pc4=3 & pc5=3 & pc6=3 ;
label "all_coins_equal_0" = coin1=0 & coin2=0 & coin3=0 & coin4=0 & coin5=0 & coin6=0 ;
label "all_coins_equal_1" = coin1=1 & coin2=1 & coin3=1 & coin4=1 & coin5=1 & coin6=1 ;
label "agree" = coin1=coin2 & coin2=coin3 & coin3=coin4 & coin4=coin5 & coin5=coin6 ;
label "finish_with_1" = pc1=3 & pc2=3 & pc3=3 & pc4=3 & coin1=1 & coin2=1 & coin3=1 & coin4=1 ;
label "finish_with_1" = pc1=3 & pc2=3 & pc3=3 & pc4=3 & pc5=3 & pc6=3 & coin1=1 & coin2=1 & coin3=1 & coin4=1 & coin5=1 & coin6=1;
// rewards
rewards "steps"
true : 1;
endrewards

4
src/modelchecker/region/AbstractSparseRegionModelChecker.cpp

@ -194,7 +194,6 @@ namespace storm {
STORM_LOG_THROW(this->getSpecifiedFormula()!=nullptr, storm::exceptions::InvalidStateException, "Tried to analyze a region although no property has been specified" );
STORM_LOG_DEBUG("Analyzing the region " << region.toString());
//std::cout << "Analyzing the region " << region.toString() << std::endl;
//switches for the different steps.
bool done=false;
@ -203,7 +202,7 @@ namespace storm {
bool doSampling=storm::settings::regionSettings().doSample();
bool doSmt=storm::settings::regionSettings().doSmt();
if(!done && this->isResultConstant()){
if(this->isResultConstant()){
STORM_LOG_DEBUG("Checking a region although the result is constant, i.e., independent of the region. This makes sense none.");
if(this->valueIsInBoundOfFormula(this->getReachabilityValue(region.getSomePoint()))){
region.setCheckResult(RegionCheckResult::ALLSAT);
@ -435,6 +434,7 @@ namespace storm {
}
else{
outstream << "Simple model: " << this->getSimpleModel()->getNumberOfStates() << " states, " << this->getSimpleModel()->getNumberOfTransitions() << " transitions" << std::endl;
outstream << "Simple formula: " << *this->getSimpleFormula() << std::endl;
}
outstream << "Approximation is " << (this->isApproximationApplicable ? "" : "not ") << "applicable" << std::endl;
outstream << "Number of checked regions: " << this->numOfCheckedRegions << std::endl;

18
src/modelchecker/region/SparseDtmcRegionModelChecker.cpp

@ -90,6 +90,10 @@ namespace storm {
} else {
preprocessForProbabilities(maybeStates, targetStates, isApproximationApplicable, constantResult);
}
if(constantResult && constantResult.get()>=storm::utility::zero<ConstantType>()){
//The result is already known. Nothing else to do here
return;
}
STORM_LOG_DEBUG("Elimination of states with constant outgoing transitions is happening now.");
// Determine the set of states that is reachable from the initial state without jumping over a target state.
storm::storage::BitVector reachableStates = storm::utility::graph::getReachableStates(this->getModel().getTransitionMatrix(), this->getModel().getInitialStates(), maybeStates, targetStates);
@ -245,9 +249,10 @@ namespace storm {
boost::optional<ConstantType>& constantResult) {
STORM_LOG_DEBUG("Preprocessing for Dtmcs and reachability probabilities invoked.");
//Get Target States
storm::logic::AtomicLabelFormula const& labelFormula = this->getSpecifiedFormula()->asProbabilityOperatorFormula().getSubformula().asEventuallyFormula().getSubformula().asAtomicLabelFormula();
storm::modelchecker::SparsePropositionalModelChecker<ParametricSparseModelType> modelChecker(this->getModel());
std::unique_ptr<CheckResult> targetStatesResultPtr = modelChecker.checkAtomicLabelFormula(labelFormula);
std::unique_ptr<CheckResult> targetStatesResultPtr = modelChecker.check(
this->getSpecifiedFormula()->asProbabilityOperatorFormula().getSubformula().asEventuallyFormula().getSubformula()
);
targetStates = std::move(targetStatesResultPtr->asExplicitQualitativeCheckResult().getTruthValuesVector());
//maybeStates: Compute the subset of states that have a probability of 0 or 1, respectively and reduce the considered states accordingly.
std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 = storm::utility::graph::performProb01(this->getModel(), storm::storage::BitVector(this->getModel().getNumberOfStates(),true), targetStates);
@ -258,6 +263,7 @@ namespace storm {
STORM_LOG_WARN("The probability of the initial state is constant (zero or one)");
this->reachabilityFunction = std::make_shared<ParametricType>(statesWithProbability01.first.get(initialState) ? storm::utility::zero<ParametricType>() : storm::utility::one<ParametricType>());
constantResult = statesWithProbability01.first.get(initialState) ? storm::utility::zero<ConstantType>() : storm::utility::one<ConstantType>();
isApproximationApplicable = true;
return; //nothing else to do...
}
//extend target states
@ -302,9 +308,10 @@ namespace storm {
rewardModel=&(this->getModel().getUniqueRewardModel()->second);
}
//Get target states
storm::logic::AtomicLabelFormula const& labelFormula = this->getSpecifiedFormula()->asRewardOperatorFormula().getSubformula().asReachabilityRewardFormula().getSubformula().asAtomicLabelFormula();
storm::modelchecker::SparsePropositionalModelChecker<ParametricSparseModelType> modelChecker(this->getModel());
std::unique_ptr<CheckResult> targetStatesResultPtr= modelChecker.checkAtomicLabelFormula(labelFormula);
storm::modelchecker::SparsePropositionalModelChecker<ParametricSparseModelType> modelChecker(this->getModel());
std::unique_ptr<CheckResult> targetStatesResultPtr = modelChecker.check(
this->getSpecifiedFormula()->asRewardOperatorFormula().getSubformula().asReachabilityRewardFormula().getSubformula()
);
targetStates = std::move(targetStatesResultPtr->asExplicitQualitativeCheckResult().getTruthValuesVector());
//maybeStates: Compute the subset of states that has a reachability reward less than infinity.
storm::storage::BitVector statesWithProbability1 = storm::utility::graph::performProb1(this->getModel().getBackwardTransitions(), storm::storage::BitVector(this->getModel().getNumberOfStates(), true), targetStates);
@ -319,6 +326,7 @@ namespace storm {
// In that case, we are going to throw in exception if the function is accessed (i.e. in getReachabilityFunction);
this->reachabilityFunction = statesWithProbability1.get(initialState) ? std::make_shared<ParametricType>(storm::utility::zero<ParametricType>()) : nullptr;
constantResult = statesWithProbability1.get(initialState) ? storm::utility::zero<ConstantType>() : storm::utility::infinity<ConstantType>();
isApproximationApplicable = true;
return; //nothing else to do...
}
//check if approximation is applicable and whether the result is constant

23
src/modelchecker/region/SparseMdpRegionModelChecker.cpp

@ -58,13 +58,13 @@ namespace storm {
if (eventuallyFormula.getSubformula().isPropositionalFormula()) {
return true;
}
} else if (formula.isReachabilityRewardFormula()) {
storm::logic::ReachabilityRewardFormula reachabilityRewardFormula = formula.asReachabilityRewardFormula();
if (reachabilityRewardFormula.getSubformula().isPropositionalFormula()) {
return true;
}
// } else if (formula.isReachabilityRewardFormula()) {
// storm::logic::ReachabilityRewardFormula reachabilityRewardFormula = formula.asReachabilityRewardFormula();
// if (reachabilityRewardFormula.getSubformula().isPropositionalFormula()) {
// return true;
// }
}
STORM_LOG_DEBUG("Region Model Checker could not handle (sub)formula " << formula);
STORM_LOG_DEBUG("Region Model Checker could not handle (sub)formula " << formula);
return false;
}
@ -77,7 +77,10 @@ namespace storm {
STORM_LOG_THROW(this->getModel().getInitialStates().getNumberOfSetBits() == 1, storm::exceptions::InvalidArgumentException, "Input model is required to have exactly one initial state.");
storm::storage::BitVector maybeStates, targetStates;
preprocessForProbabilities(maybeStates, targetStates, isApproximationApplicable, constantResult);
if(constantResult && constantResult.get()>=storm::utility::zero<ConstantType>()){
//The result is already known. Nothing else to do here
return;
}
STORM_LOG_DEBUG("Elimination of deterministic states with constant outgoing transitions is happening now.");
// Determine the set of states that is reachable from the initial state without jumping over a target state.
storm::storage::BitVector reachableStates = storm::utility::graph::getReachableStates(this->getModel().getTransitionMatrix(), this->getModel().getInitialStates(), maybeStates, targetStates);
@ -198,9 +201,10 @@ namespace storm {
boost::optional<ConstantType>& constantResult) {
STORM_LOG_DEBUG("Preprocessing for Mdps and reachability probabilities invoked.");
//Get Target States
storm::logic::AtomicLabelFormula const& labelFormula = this->getSpecifiedFormula()->asProbabilityOperatorFormula().getSubformula().asEventuallyFormula().getSubformula().asAtomicLabelFormula();
storm::modelchecker::SparsePropositionalModelChecker<ParametricSparseModelType> modelChecker(this->getModel());
std::unique_ptr<CheckResult> targetStatesResultPtr = modelChecker.checkAtomicLabelFormula(labelFormula);
std::unique_ptr<CheckResult> targetStatesResultPtr = modelChecker.check(
this->getSpecifiedFormula()->asProbabilityOperatorFormula().getSubformula().asEventuallyFormula().getSubformula()
);
targetStates = std::move(targetStatesResultPtr->asExplicitQualitativeCheckResult().getTruthValuesVector());
//maybeStates: Compute the subset of states that have a probability of 0 or 1, respectively and reduce the considered states accordingly.
@ -216,6 +220,7 @@ namespace storm {
if (!maybeStates.get(initialState)) {
STORM_LOG_WARN("The probability of the initial state is constant (zero or one)");
constantResult = statesWithProbability01.first.get(initialState) ? storm::utility::zero<ConstantType>() : storm::utility::one<ConstantType>();
isApproximationApplicable = true;
return; //nothing else to do...
}
//extend target states

19
src/solver/GameSolver.cpp

@ -4,6 +4,7 @@
#include "src/utility/solver.h"
#include "src/storage/SparseMatrix.h"
#include "src/utility/vector.h"
#include "src/utility/graph.h"
namespace storm {
namespace solver {
@ -34,10 +35,24 @@ namespace storm {
selectedRows[pl1State] = player2Matrix.getRowGroupIndices()[pl2State] + (*initialPlayer2Policy)[pl2State];
}
storm::storage::SparseMatrix<ValueType> eqSysMatrix = player2Matrix.selectRowsFromRowIndexSequence(selectedRows, true);
eqSysMatrix.convertToEquationSystem();
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = storm::utility::solver::LinearEquationSolverFactory<ValueType>().create(eqSysMatrix);
std::vector<ValueType> subB(numberOfPlayer1States);
storm::utility::vector::selectVectorValues<ValueType>(subB, selectedRows, b);
//depending on the choices, qualitative properties might have changed.
storm::storage::BitVector targetStates(subB.size(), false);
for(std::size_t index = 0; index < targetStates.size(); ++index){
if(!storm::utility::isZero(subB[index])){
targetStates.set(index);
}
}
auto prob01States = storm::utility::graph::performProb01(eqSysMatrix.transpose(), storm::storage::BitVector(targetStates.size(), true), targetStates);
for(auto const& probZeroState : prob01States.first){
x[probZeroState] = storm::utility::zero<ValueType>();
}
for(auto const& probZeroState : prob01States.second){
x[probZeroState] = storm::utility::one<ValueType>();
}
eqSysMatrix.convertToEquationSystem();
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = storm::utility::solver::LinearEquationSolverFactory<ValueType>().create(eqSysMatrix);
solver->solveEquationSystem(x, subB);
}

23
src/solver/GmmxxMinMaxLinearEquationSolver.cpp

@ -9,6 +9,7 @@
#include "src/settings/modules/GeneralSettings.h"
#include "src/settings/modules/GmmxxEquationSolverSettings.h"
#include "utility/graph.h"
namespace storm {
namespace solver {
@ -49,13 +50,27 @@ namespace storm {
if(initialPolicy != nullptr){
//Get initial values for x like it is done for policy iteration.
storm::storage::SparseMatrix<ValueType> submatrix = this->A.selectRowsFromRowGroups(*initialPolicy, true);
submatrix.convertToEquationSystem();
GmmxxLinearEquationSolver<ValueType> gmmLinearEquationSolver(submatrix);
std::vector<ValueType> subB(rowGroupIndices.size() - 1);
storm::utility::vector::selectVectorValues<ValueType>(subB, *initialPolicy, rowGroupIndices, b);
//depending on the choice, qualitative properties might have changed.
storm::storage::BitVector targetStates(subB.size(), false);
for(std::size_t index = 0; index < targetStates.size(); ++index){
if(!storm::utility::isZero(subB[index])){
targetStates.set(index);
}
}
auto prob01States = storm::utility::graph::performProb01(submatrix.transpose(), storm::storage::BitVector(targetStates.size(), true), targetStates);
for(auto const& probZeroState : prob01States.first){
(*currentX)[probZeroState] = storm::utility::zero<ValueType>();
}
for(auto const& probZeroState : prob01States.second){
(*currentX)[probZeroState] = storm::utility::one<ValueType>();
}
submatrix.convertToEquationSystem();
GmmxxLinearEquationSolver<ValueType> gmmLinearEquationSolver(submatrix);
// Solve the resulting linear equation system
std::vector<ValueType> deterministicMultiplyResult(rowGroupIndices.size() - 1);
gmmLinearEquationSolver.solveEquationSystem(*currentX, subB, &deterministicMultiplyResult);
gmmLinearEquationSolver.solveEquationSystem(*currentX, subB);
}
uint_fast64_t iterations = 0;

8
test/functional/modelchecker/SparseMdpRegionModelCheckerTest.cpp

@ -72,7 +72,7 @@ TEST(SparseMdpRegionModelCheckerTest, two_dice_Prob) {
TEST(SparseMdpRegionModelCheckerTest, coin_Prob) {
std::string const& programFile = STORM_CPP_BASE_PATH "/examples/pmdp/consensus/coin2_2.nm";
std::string const& formulaAsString = "P>0.25 [F \"finish_with_1\" ]";
std::string const& formulaAsString = "P>0.25 [F \"finished\"&\"all_coins_equal_1\" ]";
std::string const& constantsAsString = ""; //e.g. pL=0.9,TOACK=0.5
//Build model, formula, region model checker
@ -91,9 +91,9 @@ TEST(SparseMdpRegionModelCheckerTest, coin_Prob) {
modelchecker.specifyFormula(formulas[0]);
//start testing
auto allSatRegion=storm::modelchecker::region::ParameterRegion<storm::RationalFunction>::parseRegion("0.3<=p<=0.45,0.2<=q<=0.54");
auto exBothRegion=storm::modelchecker::region::ParameterRegion<storm::RationalFunction>::parseRegion("0.4<=p<=0.65,0.5<=q<=0.7");
auto allVioRegion=storm::modelchecker::region::ParameterRegion<storm::RationalFunction>::parseRegion("0.4<=p<=0.7,0.55<=q<=0.6");
auto allSatRegion=storm::modelchecker::region::ParameterRegion<storm::RationalFunction>::parseRegion("0.3<=p1<=0.45,0.2<=p2<=0.54");
auto exBothRegion=storm::modelchecker::region::ParameterRegion<storm::RationalFunction>::parseRegion("0.4<=p1<=0.65,0.5<=p2<=0.7");
auto allVioRegion=storm::modelchecker::region::ParameterRegion<storm::RationalFunction>::parseRegion("0.4<=p1<=0.7,0.55<=p2<=0.6");
EXPECT_NEAR(0.95127874851, modelchecker.getReachabilityValue(allSatRegion.getLowerBounds()), storm::settings::generalSettings().getPrecision());
EXPECT_NEAR(0.26787251126, modelchecker.getReachabilityValue(allSatRegion.getUpperBounds()), storm::settings::generalSettings().getPrecision());

Loading…
Cancel
Save