| 
					
					
						
							
						
					
					
				 | 
				@ -12,9 +12,9 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				                         storm::storage::BitVector* bottomStates, | 
				 | 
				 | 
				                         storm::storage::BitVector* bottomStates, | 
			
		
		
	
		
			
				 | 
				 | 
				                         storm::storage::BitVector* initialMiddleStates, | 
				 | 
				 | 
				                         storm::storage::BitVector* initialMiddleStates, | 
			
		
		
	
		
			
				 | 
				 | 
				                         uint_fast64_t numberOfStates) { | 
				 | 
				 | 
				                         uint_fast64_t numberOfStates) { | 
			
		
		
	
		
			
				 | 
				 | 
				            assert(topStates->getNumberOfSetBits() != 0); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            assert(bottomStates->getNumberOfSetBits() != 0); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            assert((*topStates & *bottomStates).getNumberOfSetBits() == 0); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//            assert(topStates->getNumberOfSetBits() != 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//            assert(bottomStates->getNumberOfSetBits() != 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//            assert((*topStates & *bottomStates).getNumberOfSetBits() == 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
				            nodes = std::vector<Node *>(numberOfStates); | 
				 | 
				 | 
				            nodes = std::vector<Node *>(numberOfStates); | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				            this->numberOfStates = numberOfStates; | 
				 | 
				 | 
				            this->numberOfStates = numberOfStates; | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -22,21 +22,26 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				            this->doneBuilding = false; | 
				 | 
				 | 
				            this->doneBuilding = false; | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				            top = new Node(); | 
				 | 
				 | 
				            top = new Node(); | 
			
		
		
	
		
			
				 | 
				 | 
				            top->states = *topStates; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            bottom = new Node(); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            top->statesAbove = storm::storage::BitVector(numberOfStates); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            bottom->statesAbove = storm::storage::BitVector(numberOfStates); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				            for (auto const& i : *topStates) { | 
				 | 
				 | 
				            for (auto const& i : *topStates) { | 
			
		
		
	
		
			
				 | 
				 | 
				                addedStates->set(i); | 
				 | 
				 | 
				                addedStates->set(i); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                bottom->statesAbove.set(i); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                top->states.insert(i); | 
			
		
		
	
		
			
				 | 
				 | 
				                nodes[i] = top; | 
				 | 
				 | 
				                nodes[i] = top; | 
			
		
		
	
		
			
				 | 
				 | 
				            } | 
				 | 
				 | 
				            } | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				            bottom = new Node(); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            bottom->states = *bottomStates; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            for (auto const& i : *bottomStates) { | 
				 | 
				 | 
				            for (auto const& i : *bottomStates) { | 
			
		
		
	
		
			
				 | 
				 | 
				                addedStates->set(i); | 
				 | 
				 | 
				                addedStates->set(i); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                bottom->states.insert(i); | 
			
		
		
	
		
			
				 | 
				 | 
				                nodes[i] = bottom; | 
				 | 
				 | 
				                nodes[i] = bottom; | 
			
		
		
	
		
			
				 | 
				 | 
				            } | 
				 | 
				 | 
				            } | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				            top->statesAbove = storm::storage::BitVector(numberOfStates); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            bottom->statesAbove = *topStates; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				//            setStatesBelow(top, bottomStates, false);
 | 
				 | 
				 | 
				//            setStatesBelow(top, bottomStates, false);
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				//            bottom->statesBelow = storm::storage::BitVector(numberOfStates);
 | 
				 | 
				 | 
				//            bottom->statesBelow = storm::storage::BitVector(numberOfStates);
 | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -61,9 +66,9 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				                Node *oldNode = (*itr); | 
				 | 
				 | 
				                Node *oldNode = (*itr); | 
			
		
		
	
		
			
				 | 
				 | 
				                if (oldNode != nullptr) { | 
				 | 
				 | 
				                if (oldNode != nullptr) { | 
			
		
		
	
		
			
				 | 
				 | 
				                    Node *newNode = new Node(); | 
				 | 
				 | 
				                    Node *newNode = new Node(); | 
			
		
		
	
		
			
				 | 
				 | 
				                    newNode->states = storm::storage::BitVector(oldNode->states); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    for (auto i = newNode->states.getNextSetIndex(0); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                         i < newNode->states.size(); i = newNode->states.getNextSetIndex(i + 1)) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    // TODO: gaat dit goed of moet er een constructor om
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    newNode->states = oldNode->states; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    for (auto const& i : newNode->states) { | 
			
		
		
	
		
			
				 | 
				 | 
				                        addedStates->set(i); | 
				 | 
				 | 
				                        addedStates->set(i); | 
			
		
		
	
		
			
				 | 
				 | 
				                        nodes[i] = newNode; | 
				 | 
				 | 
				                        nodes[i] = newNode; | 
			
		
		
	
		
			
				 | 
				 | 
				                    } | 
				 | 
				 | 
				                    } | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -81,7 +86,7 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				            for (auto itr = oldNodes.begin(); itr != oldNodes.end(); ++itr) { | 
				 | 
				 | 
				            for (auto itr = oldNodes.begin(); itr != oldNodes.end(); ++itr) { | 
			
		
		
	
		
			
				 | 
				 | 
				                Node *oldNode = (*itr); | 
				 | 
				 | 
				                Node *oldNode = (*itr); | 
			
		
		
	
		
			
				 | 
				 | 
				                if (oldNode != nullptr && oldNode != lattice->getTop() && oldNode != lattice->getBottom()) { | 
				 | 
				 | 
				                if (oldNode != nullptr && oldNode != lattice->getTop() && oldNode != lattice->getBottom()) { | 
			
		
		
	
		
			
				 | 
				 | 
				                    Node *newNode = getNode(oldNode->states.getNextSetIndex(0)); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    Node *newNode = getNode(*(oldNode->states.begin())); | 
			
		
		
	
		
			
				 | 
				 | 
				                    newNode->statesAbove = storm::storage::BitVector(oldNode->statesAbove); | 
				 | 
				 | 
				                    newNode->statesAbove = storm::storage::BitVector(oldNode->statesAbove); | 
			
		
		
	
		
			
				 | 
				 | 
				//                    setStatesAbove(newNode, oldNode->statesAbove, false);
 | 
				 | 
				 | 
				//                    setStatesAbove(newNode, oldNode->statesAbove, false);
 | 
			
		
		
	
		
			
				 | 
				 | 
				//                    setStatesBelow(newNode, oldNode->statesBelow, false);
 | 
				 | 
				 | 
				//                    setStatesBelow(newNode, oldNode->statesBelow, false);
 | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -103,9 +108,12 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				            Node *newNode = new Node(); | 
				 | 
				 | 
				            Node *newNode = new Node(); | 
			
		
		
	
		
			
				 | 
				 | 
				            nodes[state] = newNode; | 
				 | 
				 | 
				            nodes[state] = newNode; | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				            newNode->states = storm::storage::BitVector(numberOfStates); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            newNode->states.set(state); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            newNode->statesAbove = above->states | above->statesAbove; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//            newNode->states = storm::storage::BitVector(numberOfStates);
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            newNode->states.insert(state); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            newNode->statesAbove = above->statesAbove; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            for (auto const& state : above->states) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                newNode->statesAbove.set(state); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            } | 
			
		
		
	
		
			
				 | 
				 | 
				            below->statesAbove.set(state); | 
				 | 
				 | 
				            below->statesAbove.set(state); | 
			
		
		
	
		
			
				 | 
				 | 
				//            comparisons[state] = comparisons[above->states.getNextSetIndex(0)];
 | 
				 | 
				 | 
				//            comparisons[state] = comparisons[above->states.getNextSetIndex(0)];
 | 
			
		
		
	
		
			
				 | 
				 | 
				//            setStatesAbove(newNode, above->statesAbove | above->states, false);
 | 
				 | 
				 | 
				//            setStatesAbove(newNode, above->statesAbove | above->states, false);
 | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -127,7 +135,7 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				        void Lattice::addToNode(uint_fast64_t state, Node *node) { | 
				 | 
				 | 
				        void Lattice::addToNode(uint_fast64_t state, Node *node) { | 
			
		
		
	
		
			
				 | 
				 | 
				            assert(!(*addedStates)[state]); | 
				 | 
				 | 
				            assert(!(*addedStates)[state]); | 
			
		
		
	
		
			
				 | 
				 | 
				            node->states.set(state); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            node->states.insert(state); | 
			
		
		
	
		
			
				 | 
				 | 
				            nodes[state] = node; | 
				 | 
				 | 
				            nodes[state] = node; | 
			
		
		
	
		
			
				 | 
				 | 
				            addedStates->set(state); | 
				 | 
				 | 
				            addedStates->set(state); | 
			
		
		
	
		
			
				 | 
				 | 
				//            comparisons[state] = comparisons[node->states.getNextSetIndex(0)];
 | 
				 | 
				 | 
				//            comparisons[state] = comparisons[node->states.getNextSetIndex(0)];
 | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -152,7 +160,10 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				//            assert ((above->statesAbove & below->statesBelow).getNumberOfSetBits() == 0);
 | 
				 | 
				 | 
				//            assert ((above->statesAbove & below->statesBelow).getNumberOfSetBits() == 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
				//            setStatesBelow(above, below->states | below->statesBelow, true);
 | 
				 | 
				 | 
				//            setStatesBelow(above, below->states | below->statesBelow, true);
 | 
			
		
		
	
		
			
				 | 
				 | 
				//            setStatesAbove(below, above->states | above->statesAbove, true);
 | 
				 | 
				 | 
				//            setStatesAbove(below, above->states | above->statesAbove, true);
 | 
			
		
		
	
		
			
				 | 
				 | 
				            below->statesAbove |= above->states | above->statesAbove; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            for (auto const& state : above->states) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                below->statesAbove.set(state); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            } | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            below->statesAbove |= above->statesAbove; | 
			
		
		
	
		
			
				 | 
				 | 
				            // TODO: comparisons
 | 
				 | 
				 | 
				            // TODO: comparisons
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				//            for (auto i = below->statesBelow.getNextSetIndex(0); i < below->statesBelow.size(); i = below->statesBelow.getNextSetIndex(i + 1)) {
 | 
				 | 
				 | 
				//            for (auto i = below->statesBelow.getNextSetIndex(0); i < below->statesBelow.size(); i = below->statesBelow.getNextSetIndex(i + 1)) {
 | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -283,42 +294,42 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				//        }
 | 
				 | 
				 | 
				//        }
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				        void Lattice::toString(std::ostream &out) { | 
				 | 
				 | 
				        void Lattice::toString(std::ostream &out) { | 
			
		
		
	
		
			
				 | 
				 | 
				            assert (false); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            std::vector<Node*> printedNodes = std::vector<Node*>({}); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            for (auto itr = nodes.begin(); itr != nodes.end(); ++itr) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                if ((*itr) != nullptr && std::find(printedNodes.begin(), printedNodes.end(), (*itr)) == printedNodes.end()) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    Node *node = *itr; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    printedNodes.push_back(*itr); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    out << "Node: {"; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    uint_fast64_t index = node->states.getNextSetIndex(0); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    while (index < node->states.size()) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                        out << index; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                        index = node->states.getNextSetIndex(index + 1); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                        if (index < node->states.size()) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                            out << ", "; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                        } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    out << "}" << "\n"; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    out << "  Address: " << node << "\n"; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    out << "    Above: {"; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    auto statesAbove = node->statesAbove; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    for (auto above : statesAbove) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                        Node* nodeAbove = getNode(above); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                        index = nodeAbove->states.getNextSetIndex(0); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                        out << "{"; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                        while (index < nodeAbove->states.size()) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                            out << index; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                            index = nodeAbove->states.getNextSetIndex(index + 1); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                            if (index < nodeAbove->states.size()) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                                out << ", "; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                            } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                        } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                        out << "}"; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    out << "}" << "\n"; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//            assert (false);
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//            std::vector<Node*> printedNodes = std::vector<Node*>({});
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//            for (auto itr = nodes.begin(); itr != nodes.end(); ++itr) {
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                if ((*itr) != nullptr && std::find(printedNodes.begin(), printedNodes.end(), (*itr)) == printedNodes.end()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                    Node *node = *itr;
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                    printedNodes.push_back(*itr);
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                    out << "Node: {";
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                    uint_fast64_t index = node->states.getNextSetIndex(0);
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                    while (index < node->states.size()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                        out << index;
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                        index = node->states.getNextSetIndex(index + 1);
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                        if (index < node->states.size()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                            out << ", ";
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                        }
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                    }
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                    out << "}" << "\n";
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                    out << "  Address: " << node << "\n";
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                    out << "    Above: {";
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                    auto statesAbove = node->statesAbove;
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                    for (auto above : statesAbove) {
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                        Node* nodeAbove = getNode(above);
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                        index = nodeAbove->states.getNextSetIndex(0);
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                        out << "{";
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                        while (index < nodeAbove->states.size()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                            out << index;
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                            index = nodeAbove->states.getNextSetIndex(index + 1);
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                            if (index < nodeAbove->states.size()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                                out << ", ";
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                            }
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                        }
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                        out << "}";
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                    }
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                    out << "}" << "\n";
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				//                    out << "    Below: {";
 | 
				 | 
				 | 
				//                    out << "    Below: {";
 | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -337,9 +348,9 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				//
 | 
				 | 
				 | 
				//
 | 
			
		
		
	
		
			
				 | 
				 | 
				//                        out << "}";
 | 
				 | 
				 | 
				//                        out << "}";
 | 
			
		
		
	
		
			
				 | 
				 | 
				//                    }
 | 
				 | 
				 | 
				//                    }
 | 
			
		
		
	
		
			
				 | 
				 | 
				                    out << "}" << "\n"; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                    out << "}" << "\n";
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//                }
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//            }
 | 
			
		
		
	
		
			
				 | 
				 | 
				        } | 
				 | 
				 | 
				        } | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				        void Lattice::toDotFile(std::ostream &out) { | 
				 | 
				 | 
				        void Lattice::toDotFile(std::ostream &out) { | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -398,17 +409,13 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				                storm::storage::BitVector statesSeen(node2->statesAbove); | 
				 | 
				 | 
				                storm::storage::BitVector statesSeen(node2->statesAbove); | 
			
		
		
	
		
			
				 | 
				 | 
				                for (auto const &i: node2->statesAbove) { | 
				 | 
				 | 
				                for (auto const &i: node2->statesAbove) { | 
			
		
		
	
		
			
				 | 
				 | 
				                    auto nodeI = getNode(i); | 
				 | 
				 | 
				                    auto nodeI = getNode(i); | 
			
		
		
	
		
			
				 | 
				 | 
				                    // deze kost veel tijd
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    // wat wil ik doen?
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    // ik wil kijken of t nut heeft om de node uberhaupt in te gaan
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                if ((nodeI->statesAbove & statesSeen) != nodeI->statesAbove) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    found = above(node1, nodeI, node2, &statesSeen); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    if ((nodeI->statesAbove & statesSeen) != nodeI->statesAbove) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                        found = above(node1, nodeI, node2, &statesSeen); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    } | 
			
		
		
	
		
			
				 | 
				 | 
				                    if (found) { | 
				 | 
				 | 
				                    if (found) { | 
			
		
		
	
		
			
				 | 
				 | 
				                        for (auto const& state:node1->states) { | 
				 | 
				 | 
				                        for (auto const& state:node1->states) { | 
			
		
		
	
		
			
				 | 
				 | 
				                            node2->statesAbove.set(state); | 
				 | 
				 | 
				                            node2->statesAbove.set(state); | 
			
		
		
	
		
			
				 | 
				 | 
				                        } | 
				 | 
				 | 
				                        } | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                        break; | 
				 | 
				 | 
				                        break; | 
			
		
		
	
		
			
				 | 
				 | 
				                    } | 
				 | 
				 | 
				                    } | 
			
		
		
	
		
			
				 | 
				 | 
				                } | 
				 | 
				 | 
				                } | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -507,7 +514,7 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				//            node1->statesBelow |= node2->statesBelow;
 | 
				 | 
				 | 
				//            node1->statesBelow |= node2->statesBelow;
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				            // add states of node 2 to node 1
 | 
				 | 
				 | 
				            // add states of node 2 to node 1
 | 
			
		
		
	
		
			
				 | 
				 | 
				            node1->states|= node2->states; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            node1->states.insert(node2->states.begin(), node2->states.end()); | 
			
		
		
	
		
			
				 | 
				 | 
				            for(auto const& i : node2->states) { | 
				 | 
				 | 
				            for(auto const& i : node2->states) { | 
			
		
		
	
		
			
				 | 
				 | 
				                nodes[i] = node1; | 
				 | 
				 | 
				                nodes[i] = node1; | 
			
		
		
	
		
			
				 | 
				 | 
				            } | 
				 | 
				 | 
				            } | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
					
				 | 
				
  |