7 changed files with 228 additions and 100 deletions
			
			
		- 
					28src/storm-pars-cli/storm-pars.cpp
- 
					97src/storm-pars/analysis/AssumptionMaker.cpp
- 
					34src/storm-pars/analysis/AssumptionMaker.h
- 
					111src/storm-pars/analysis/Lattice.cpp
- 
					9src/storm-pars/analysis/Lattice.h
- 
					41src/storm-pars/analysis/LatticeExtender.cpp
- 
					8src/storm-pars/analysis/LatticeExtender.h
| @ -0,0 +1,97 @@ | |||||
|  | //
 | ||||
|  | // Created by Jip Spel on 03.09.18.
 | ||||
|  | //
 | ||||
|  | 
 | ||||
|  | #include "AssumptionMaker.h"
 | ||||
|  | 
 | ||||
|  | namespace storm { | ||||
|  |     namespace analysis { | ||||
|  |         template<typename ValueType> | ||||
|  |         AssumptionMaker<ValueType>::AssumptionMaker(storm::analysis::LatticeExtender<ValueType>* latticeExtender, uint_fast64_t numberOfStates) { | ||||
|  |             this->latticeExtender = latticeExtender; | ||||
|  |             this->numberOfStates = numberOfStates; | ||||
|  |             this->expressionManager = std::make_shared<storm::expressions::ExpressionManager>(storm::expressions::ExpressionManager()); | ||||
|  |             for (uint_fast64_t i = 0; i < this->numberOfStates; ++i) { | ||||
|  |                 expressionManager->declareIntegerVariable(std::to_string(i)); | ||||
|  |                 expressionManager->declareFreshIntegerVariable(); | ||||
|  |             } | ||||
|  |         } | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |         template<typename ValueType> | ||||
|  |         std::map<storm::analysis::Lattice*, std::set<std::shared_ptr<storm::expressions::BinaryRelationExpression>>> | ||||
|  |                 AssumptionMaker<ValueType>::startMakingAssumptions(storm::analysis::Lattice* lattice, uint_fast64_t critical1, uint_fast64_t critical2) { | ||||
|  | 
 | ||||
|  |             std::map<storm::analysis::Lattice*, std::set<std::shared_ptr<storm::expressions::BinaryRelationExpression>>> result; | ||||
|  | 
 | ||||
|  |             std::set<std::shared_ptr<storm::expressions::BinaryRelationExpression>> emptySet; | ||||
|  |             if (critical1 == numberOfStates || critical2 == numberOfStates) { | ||||
|  |                 result.insert(std::pair<storm::analysis::Lattice*, std::set<std::shared_ptr<storm::expressions::BinaryRelationExpression>>>(lattice, emptySet)); | ||||
|  |             } else { | ||||
|  |                 storm::expressions::Variable var1 = expressionManager->getVariable(std::to_string(critical1)); | ||||
|  |                 storm::expressions::Variable var2 = expressionManager->getVariable(std::to_string(critical2)); | ||||
|  |                 std::set<std::shared_ptr<storm::expressions::BinaryRelationExpression>> assumptions1; | ||||
|  |                 std::shared_ptr<storm::expressions::BinaryRelationExpression> assumption1 | ||||
|  |                     = std::make_shared<storm::expressions::BinaryRelationExpression>(storm::expressions::BinaryRelationExpression(*expressionManager, var1.getType(), | ||||
|  |                         var1.getExpression().getBaseExpressionPointer(), var2.getExpression().getBaseExpressionPointer(), | ||||
|  |                         storm::expressions::BinaryRelationExpression::RelationType::Greater)); | ||||
|  |                 assumptions1.insert(assumption1); | ||||
|  |                 auto lattice1 = new storm::analysis::Lattice(*lattice); | ||||
|  |                 auto myMap = (runRecursive(lattice1, assumptions1)); | ||||
|  |                 result.insert(myMap.begin(), myMap.end()); | ||||
|  | 
 | ||||
|  |                 std::set<std::shared_ptr<storm::expressions::BinaryRelationExpression>> assumptions2; | ||||
|  |                 std::shared_ptr<storm::expressions::BinaryRelationExpression> assumption2 | ||||
|  |                     = std::make_shared<storm::expressions::BinaryRelationExpression>(storm::expressions::BinaryRelationExpression(*expressionManager, var1.getType(), | ||||
|  |                         var2.getExpression().getBaseExpressionPointer(), var1.getExpression().getBaseExpressionPointer(), | ||||
|  |                         storm::expressions::BinaryRelationExpression::RelationType::Greater)); | ||||
|  |                 assumptions2.insert(assumption2); | ||||
|  | 
 | ||||
|  |                 auto lattice2 = new storm::analysis::Lattice(*lattice); | ||||
|  |                 auto myMap2 = (runRecursive(lattice2, assumptions2)); | ||||
|  |                 result.insert(myMap2.begin(), myMap2.end()); | ||||
|  |             } | ||||
|  |             return result; | ||||
|  |         } | ||||
|  | 
 | ||||
|  |         template<typename ValueType> | ||||
|  |         std::map<storm::analysis::Lattice*, std::set<std::shared_ptr<storm::expressions::BinaryRelationExpression>>> AssumptionMaker<ValueType>::runRecursive(storm::analysis::Lattice* lattice, std::set<std::shared_ptr<storm::expressions::BinaryRelationExpression>> assumptions) { | ||||
|  |             std::map<storm::analysis::Lattice*, std::set<std::shared_ptr<storm::expressions::BinaryRelationExpression>>> result; | ||||
|  |             std::tuple<storm::analysis::Lattice*, uint_fast64_t, uint_fast64_t> criticalPair = this->latticeExtender->extendLattice(lattice, assumptions); | ||||
|  | 
 | ||||
|  |             if (std::get<1>(criticalPair) == numberOfStates) { | ||||
|  |                 result.insert(std::pair<storm::analysis::Lattice*, std::set<std::shared_ptr<storm::expressions::BinaryRelationExpression>>>(lattice, assumptions)); | ||||
|  |             } else { | ||||
|  |                 storm::expressions::Variable var1 = expressionManager->getVariable(std::to_string(std::get<1>(criticalPair))); | ||||
|  |                 storm::expressions::Variable var2 = expressionManager->getVariable(std::to_string(std::get<2>(criticalPair))); | ||||
|  | 
 | ||||
|  |                 std::set<std::shared_ptr<storm::expressions::BinaryRelationExpression>> assumptions1 = std::set<std::shared_ptr<storm::expressions::BinaryRelationExpression>>(assumptions); | ||||
|  |                 std::shared_ptr<storm::expressions::BinaryRelationExpression> assumption1 = std::make_shared<storm::expressions::BinaryRelationExpression>(storm::expressions::BinaryRelationExpression(*expressionManager, var1.getType(), | ||||
|  |                                                                                     var1.getExpression().getBaseExpressionPointer(), var2.getExpression().getBaseExpressionPointer(), | ||||
|  |                                                                                     storm::expressions::BinaryRelationExpression::RelationType::Greater)); | ||||
|  |                 assumptions1.insert(assumption1); | ||||
|  |                 auto lattice1 = new storm::analysis::Lattice(*lattice); | ||||
|  |                 auto myMap = (runRecursive(lattice1, assumptions1)); | ||||
|  |                 result.insert(myMap.begin(), myMap.end()); | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |                 std::set<std::shared_ptr<storm::expressions::BinaryRelationExpression>>  assumptions2 = assumptions; | ||||
|  |                 std::shared_ptr<storm::expressions::BinaryRelationExpression> assumption2 = std::make_shared<storm::expressions::BinaryRelationExpression>(storm::expressions::BinaryRelationExpression(*expressionManager, var1.getType(), | ||||
|  |                                                                                     var2.getExpression().getBaseExpressionPointer(), var1.getExpression().getBaseExpressionPointer(), | ||||
|  |                                                                                     storm::expressions::BinaryRelationExpression::RelationType::Greater))   ; | ||||
|  |                 assumptions2.insert(assumption2); | ||||
|  |                 auto lattice2 = new storm::analysis::Lattice(*lattice); | ||||
|  |                 myMap = (runRecursive(lattice2, assumptions2)); | ||||
|  |                 result.insert(myMap.begin(), myMap.end()); | ||||
|  |             } | ||||
|  | 
 | ||||
|  |             return result; | ||||
|  |         } | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |         template class AssumptionMaker<storm::RationalFunction>; | ||||
|  |     } | ||||
|  | } | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | // Een map met daarin een pointer naar de lattic en een set met de geldende assumptions voor die lattice
 | ||||
| @ -0,0 +1,34 @@ | |||||
|  | // | ||||
|  | // Created by Jip Spel on 03.09.18. | ||||
|  | // | ||||
|  | 
 | ||||
|  | #ifndef STORM_ASSUMPTIONMAKER_H | ||||
|  | #define STORM_ASSUMPTIONMAKER_H | ||||
|  | 
 | ||||
|  | #include "Lattice.h" | ||||
|  | #include "storm/storage/expressions/BinaryRelationExpression.h" | ||||
|  | #include "LatticeExtender.h" | ||||
|  | 
 | ||||
|  | namespace storm { | ||||
|  |     namespace analysis { | ||||
|  | 
 | ||||
|  |         template<typename ValueType> | ||||
|  |         class AssumptionMaker { | ||||
|  |         public: | ||||
|  |             AssumptionMaker(storm::analysis::LatticeExtender<ValueType>* latticeExtender, uint_fast64_t numberOfStates); | ||||
|  | 
 | ||||
|  |             std::map<storm::analysis::Lattice*, std::set<std::shared_ptr<storm::expressions::BinaryRelationExpression>>> startMakingAssumptions(storm::analysis::Lattice* lattice, uint_fast64_t critical1, uint_fast64_t critical2); | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |         private: | ||||
|  |             std::map<storm::analysis::Lattice*, std::set<std::shared_ptr<storm::expressions::BinaryRelationExpression>>> runRecursive(storm::analysis::Lattice* lattice, std::set<std::shared_ptr<storm::expressions::BinaryRelationExpression>> assumptions); | ||||
|  | 
 | ||||
|  |             storm::analysis::LatticeExtender<ValueType>* latticeExtender; | ||||
|  | 
 | ||||
|  |             std::shared_ptr<storm::expressions::ExpressionManager> expressionManager; | ||||
|  | 
 | ||||
|  |             uint_fast64_t numberOfStates; | ||||
|  |         }; | ||||
|  |     } | ||||
|  | } | ||||
|  | #endif //STORM_ASSUMPTIONMAKER_H | ||||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue