Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
DftSymmetries.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstddef>
4#include <iostream>
5#include <map>
6#include <vector>
7
8namespace storm::dft {
9namespace storage {
10
12 public:
13 DftSymmetries() = default;
14
15 DftSymmetries(std::map<size_t, std::vector<std::vector<size_t>>> groups);
16
17 size_t nrSymmetries() const;
18
24 std::vector<size_t>::const_iterator begin() const;
25
31 std::vector<size_t>::const_iterator end() const;
32
39 std::vector<std::vector<size_t>> const& getSymmetryGroup(size_t index) const;
40
41 friend std::ostream& operator<<(std::ostream& out, DftSymmetries const& symmetries);
42
43 private:
44 bool existsInFirstSymmetry(size_t index, size_t value) const;
45
46 bool existsInSymmetry(size_t index, size_t value) const;
47
56 int applySymmetry(std::vector<std::vector<size_t>> const& symmetry, size_t value, size_t index) const;
57
66 std::vector<std::vector<size_t>> createSymmetry(std::vector<std::vector<size_t>> parentSymmetry, std::vector<std::vector<size_t>> childSymmetry,
67 size_t index);
68
69 void sortHierarchical(size_t parent, std::vector<size_t>& candidates);
70
71 // Symmetry groups: top level element of group -> symmetry
72 // Each symmetry is given by a list of the equivalence classes
73 // Each equivalence class is given by all symmetric elements
74 std::map<size_t, std::vector<std::vector<size_t>>> groups;
75
76 // Top element of groups sorted by their size in increasing order
77 std::vector<size_t> sortedSymmetries;
78};
79
80} // namespace storage
81} // namespace storm::dft
std::vector< std::vector< size_t > > const & getSymmetryGroup(size_t index) const
Get symmetry group corresponding to give top level index.
std::vector< size_t >::const_iterator begin() const
Retrieves an constant iterator that points to the beginning of the ordered symmetry groups.
friend std::ostream & operator<<(std::ostream &out, DftSymmetries const &symmetries)
std::vector< size_t >::const_iterator end() const
Retrieves an constant iterator that points past the last ordered symmetry group.