LearnTA  0.0.1
equivalence_oracle_memo.hh
1 
6 #pragma once
7 
8 #include "equivalence.hh"
9 #include "equivalence_oracle_by_test.hh"
10 
11 namespace learnta {
19  private:
20  std::unique_ptr<EquivalenceOracle> oracle;
21  EquivalenceOracleByTest oracleByTest;
22  public:
23  EquivalenceOracleMemo (std::unique_ptr<EquivalenceOracle> &&oracle, const TimedAutomaton &target) : oracle(std::move(oracle)), oracleByTest(target) {}
24 
28  [[nodiscard]] std::optional<TimedWord> findCounterExample(const TimedAutomaton &hypothesis) override {
29  ++eqQueryCount;
30  auto result = oracleByTest.findCounterExample(hypothesis);
31  if (result) {
32  return result;
33  } else {
34  result = oracle->findCounterExample(hypothesis);
35  if (result) {
36  oracleByTest.push_back(*result);
37  }
38 
39  return result;
40  }
41  }
42 
44  std::ostream &printStatistics(std::ostream &stream) const override {
45  stream << "Number of equivalence queries: " << this->numEqQueries() << "\n";
46  stream << "Number of equivalence queries (with cache): " << this->oracle->numEqQueries() << "\n";
47 
48  return stream;
49  }
50  };
51 }
Interface of the equivalence oracle.
Definition: equivalence_oracle_by_test.hh:20
std::optional< TimedWord > findCounterExample(const TimedAutomaton &hypothesis) override
Make an equivalence query.
Definition: equivalence_oracle_by_test.hh:29
Wrapper of an equivalence oracle to cache the queries.
Definition: equivalence_oracle_memo.hh:18
std::ostream & printStatistics(std::ostream &stream) const override
Print the statistics.
Definition: equivalence_oracle_memo.hh:44
std::optional< TimedWord > findCounterExample(const TimedAutomaton &hypothesis) override
Make an equivalence query.
Definition: equivalence_oracle_memo.hh:28
Interface of the equivalence oracle.
Definition: equivalence_oracle.hh:17
std::size_t numEqQueries() const
Return the number of the executed equivalence queries.
Definition: equivalence_oracle.hh:29
This file implements functions on the equivalence relation defined by the distinguishing suffixes.
Definition: experiment_runner.hh:23
A timed automaton.
Definition: timed_automaton.hh:213