11 #include "elementary_language.hh"
12 #include "fractional_order.hh"
36 std::vector<double> fractionalPart, accumulatedDurationFromFront, accumulatedDurationFromBack;
37 fractionalPart.resize(timedWord.
wordSize() + 1);
38 accumulatedDurationFromFront.resize(timedWord.
wordSize() + 1);
39 accumulatedDurationFromFront.front() = timedWord.getDurations().front();
40 fractionalPart.front() = timedWord.getDurations().front() - std::floor(timedWord.getDurations().front());
41 for (std::size_t i = 1; i < fractionalPart.size(); ++i) {
42 accumulatedDurationFromFront.at(i) = accumulatedDurationFromFront.at(i - 1) + timedWord.getDurations().at(i);
43 fractionalPart.at(i) = accumulatedDurationFromFront.at(i);
44 fractionalPart.at(i) -= std::floor(fractionalPart.at(i));
46 accumulatedDurationFromBack.resize(timedWord.
wordSize() + 1);
47 accumulatedDurationFromBack.back() = timedWord.getDurations().back();
48 for (
int i = fractionalPart.size() - 2; i >= 0; --i) {
49 accumulatedDurationFromBack.at(i) = accumulatedDurationFromBack.at(i + 1) + timedWord.getDurations().at(i);
74 [[nodiscard]] std::optional<BackwardRegionalElementaryLanguage>
immediateSuffix()
const {
75 if (this->getWord().
empty() && !this->getTimedCondition().hasSuffix()) {
78 }
else if (this->getTimedCondition().hasSuffix()) {
85 auto word = this->getWord();
86 word.erase(word.begin());
88 {word, this->timedCondition.
removeN()}, this->fractionalOrder.
removeN()});
95 [[nodiscard]] std::vector<BackwardRegionalElementaryLanguage>
prefixes()
const {
96 std::list<BackwardRegionalElementaryLanguage> resultList;
97 auto language = *
this;
98 resultList.push_front(language);
99 auto next = language.immediateSuffix();
101 while (next.has_value()) {
103 resultList.push_front(language);
104 next = language.immediateSuffix();
107 std::vector<BackwardRegionalElementaryLanguage> result;
108 result.resize(resultList.size());
109 std::move(resultList.begin(), resultList.end(), result.begin());
114 std::ostream &print(std::ostream &os)
const {
115 os <<
"(" << this->getWord() <<
", " << this->getTimedCondition() <<
", " << this->fractionalOrder;
120 [[nodiscard]]
const FractionalOrder &getFractionalOrder()
const {
121 return fractionalOrder;
125 return this->word == another.word && this->timedCondition == another.timedCondition &&
126 this->fractionalOrder == another.fractionalOrder;
131 return lang.print(os);
135 return boost::hash_value(std::make_tuple(lang.getWord(), lang.getTimedCondition(), lang.getFractionalOrder()));
A back regional elementary language.
Definition: backward_regional_elementary_language.hh:22
std::vector< BackwardRegionalElementaryLanguage > prefixes() const
Return the suffixes in the shorter to the longer order.
Definition: backward_regional_elementary_language.hh:95
BackwardRegionalElementaryLanguage predecessor() const
Construct the continuous predecessor.
Definition: backward_regional_elementary_language.hh:66
static BackwardRegionalElementaryLanguage fromTimedWord(const TimedWord &timedWord)
Construct the fractional elementary language containing the given timed word.
Definition: backward_regional_elementary_language.hh:35
BackwardRegionalElementaryLanguage predecessor(char action) const
Construct the discrete predecessor.
Definition: backward_regional_elementary_language.hh:59
BackwardRegionalElementaryLanguage()=default
Construct the empty language.
std::optional< BackwardRegionalElementaryLanguage > immediateSuffix() const
Return the immediate suffix if exists.
Definition: backward_regional_elementary_language.hh:74
An elementary language.
Definition: elementary_language.hh:23
static ElementaryLanguage empty()
Construct the empty elementary language containing only 0.
Definition: elementary_language.hh:38
Order on the fractional part of the variables.
Definition: fractional_order.hh:24
FractionalOrder extendZero() const
Rename each variable to and add such that .
Definition: fractional_order.hh:165
FractionalOrder predecessor() const
Make it to be the predecessor.
Definition: fractional_order.hh:125
FractionalOrder removeN() const
Remove .
Definition: fractional_order.hh:153
std::deque< ClockVariables > predecessorVariables() const
Return the variable to backward-elapse.
Definition: fractional_order.hh:108
A timed condition, a finite conjunction of inequalities of the form , where and .
Definition: timed_condition.hh:19
TimedCondition removeN() const
Remove .
Definition: timed_condition.hh:523
TimedCondition extendZero() const
Rename each variable to and add such that .
Definition: timed_condition.hh:558
TimedCondition predecessor(const std::deque< ClockVariables > &variables) const
Make a continuous predecessor by backward-elapsing variables.
Definition: timed_condition.hh:435
TimedCondition suffix(const std::deque< ClockVariables > &variables) const
Make a continuous suffix.
Definition: timed_condition.hh:483
A timed word.
Definition: timed_word.hh:25
std::size_t wordSize() const
Return the number of the actions in this timed word.
Definition: timed_word.hh:150
Definition: experiment_runner.hh:23
Definition: external_transition_maker.hh:149