Skip to content

Commit

Permalink
Transformers: Remove Logic from SimpleChainSummarizer
Browse files Browse the repository at this point in the history
The reference to logic is now stored in the graph, thus, the transformer
does not need to remember the reference anymore.
  • Loading branch information
Martin Blicha committed Jan 11, 2023
1 parent da31e06 commit 61aae2d
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 21 deletions.
2 changes: 1 addition & 1 deletion src/ChcInterpreter.cc
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ void ChcInterpreterContext::interpretCheckSat() {
}

TransformationPipeline::pipeline_t transformations;
transformations.push_back(std::make_unique<SimpleChainSummarizer>(logic));
transformations.push_back(std::make_unique<SimpleChainSummarizer>());
transformations.push_back(std::make_unique<RemoveUnreachableNodes>());
transformations.push_back(std::make_unique<SimpleNodeEliminator>());
auto [newGraph, translator] = TransformationPipeline(std::move(transformations)).transform(std::move(hypergraph));
Expand Down
8 changes: 4 additions & 4 deletions src/transformers/SimpleChainSummarizer.cc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022, Martin Blicha <[email protected]>
* Copyright (c) 2022-2023, Martin Blicha <[email protected]>
*
* SPDX-License-Identifier: MIT
*/
Expand All @@ -9,7 +9,7 @@
#include "CommonUtils.h"

Transformer::TransformationResult SimpleChainSummarizer::transform(std::unique_ptr<ChcDirectedHyperGraph> graph) {
auto translator = std::make_unique<SimpleChainBackTranslator>(logic, graph->predicateRepresentation());
auto translator = std::make_unique<BackTranslator>(graph->getLogic(), graph->predicateRepresentation());
while(true) {
AdjacencyListsGraphRepresentation adjacencyList = AdjacencyListsGraphRepresentation::from(*graph);
auto isTrivial = [&](SymRef sym) {
Expand Down Expand Up @@ -55,7 +55,7 @@ Transformer::TransformationResult SimpleChainSummarizer::transform(std::unique_p
return {std::move(graph), std::move(translator)};
}

InvalidityWitness SimpleChainSummarizer::SimpleChainBackTranslator::translate(InvalidityWitness witness) {
InvalidityWitness SimpleChainSummarizer::BackTranslator::translate(InvalidityWitness witness) {
if (summarizedChains.empty()) { return witness; }

for (auto const & [chain, replacingEdge] : summarizedChains) {
Expand All @@ -73,7 +73,7 @@ InvalidityWitness SimpleChainSummarizer::SimpleChainBackTranslator::translate(In
return witness;
}

ValidityWitness SimpleChainSummarizer::SimpleChainBackTranslator::translate(ValidityWitness witness) {
ValidityWitness SimpleChainSummarizer::BackTranslator::translate(ValidityWitness witness) {
if (summarizedChains.empty()) { return witness; }
auto definitions = witness.getDefinitions();
// TODO: assert that we have true and false already
Expand Down
11 changes: 4 additions & 7 deletions src/transformers/SimpleChainSummarizer.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022, Martin Blicha <[email protected]>
* Copyright (c) 2022-2023, Martin Blicha <[email protected]>
*
* SPDX-License-Identifier: MIT
*/
Expand All @@ -13,11 +13,11 @@ class SimpleChainSummarizer : public Transformer {
public:
TransformationResult transform(std::unique_ptr<ChcDirectedHyperGraph> graph) override;

SimpleChainSummarizer(Logic & logic) : logic(logic) {}
SimpleChainSummarizer() = default;

class SimpleChainBackTranslator : public WitnessBackTranslator {
class BackTranslator : public WitnessBackTranslator {
public:
SimpleChainBackTranslator(Logic & logic, NonlinearCanonicalPredicateRepresentation predicateRepresentation)
BackTranslator(Logic & logic, NonlinearCanonicalPredicateRepresentation predicateRepresentation)
: logic(logic), predicateRepresentation(std::move(predicateRepresentation)) {}

InvalidityWitness translate(InvalidityWitness witness) override;
Expand All @@ -33,9 +33,6 @@ class SimpleChainSummarizer : public Transformer {
Logic & logic;
NonlinearCanonicalPredicateRepresentation predicateRepresentation;
};
private:
Logic & logic;

};


Expand Down
18 changes: 9 additions & 9 deletions test/test_Transformers.cc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022, Martin Blicha <[email protected]>
* Copyright (c) 2022-2023, Martin Blicha <[email protected]>
*
* SPDX-License-Identifier: MIT
*/
Expand Down Expand Up @@ -67,7 +67,7 @@ TEST_F(Transformer_test, test_SingleChain_NoLoop) {
);
auto hyperGraph = systemToGraph(system);
auto originalGraph = *hyperGraph;
auto [summarizedGraph, translator] = SimpleChainSummarizer(logic).transform(std::move(hyperGraph));
auto [summarizedGraph, translator] = SimpleChainSummarizer().transform(std::move(hyperGraph));
ValidityWitness witness{};
auto translatedWitness = translator->translate(witness);
Validator validator(logic);
Expand Down Expand Up @@ -101,7 +101,7 @@ TEST_F(Transformer_test, test_TwoChains_WithLoop) {
);
auto hypergraph = systemToGraph(system);
auto originalGraph = *hypergraph;
auto [newGraph, translator] = SimpleChainSummarizer(logic).transform(std::move(hypergraph));
auto [newGraph, translator] = SimpleChainSummarizer().transform(std::move(hypergraph));
VersionManager manager{logic};
PTRef predicate = manager.sourceFormulaToBase(newGraph->getStateVersion(s2));
PTRef var = logic.getPterm(predicate)[0];
Expand Down Expand Up @@ -139,7 +139,7 @@ TEST_F(Transformer_test, test_OutputFromEngine) {
);
auto hypergraph = systemToGraph(system);
auto originalGraph = *hypergraph;
auto [newGraph, translator] = SimpleChainSummarizer(logic).transform(std::move(hypergraph));
auto [newGraph, translator] = SimpleChainSummarizer().transform(std::move(hypergraph));
hypergraph = std::move(newGraph);
auto res = Spacer(logic, options).solve(*hypergraph);
ASSERT_EQ(res.getAnswer(), VerificationAnswer::SAFE);
Expand All @@ -161,7 +161,7 @@ TEST_F(Transformer_test, test_ChainSummarizer_TwoStepChain_Unsafe) {
);
auto hyperGraph = systemToGraph(system);
auto originalGraph = *hyperGraph;
auto [summarizedGraph, translator] = SimpleChainSummarizer(logic).transform(std::move(hyperGraph));
auto [summarizedGraph, translator] = SimpleChainSummarizer().transform(std::move(hyperGraph));
Options options;
options.addOption(Options::COMPUTE_WITNESS, "true");
auto res = Spacer(logic, options).solve(*summarizedGraph);
Expand Down Expand Up @@ -190,7 +190,7 @@ TEST_F(Transformer_test, test_ChainSummarizer_ThreeStepChain_Unsafe) {
);
auto hyperGraph = systemToGraph(system);
auto originalGraph = *hyperGraph;
auto [summarizedGraph, translator] = SimpleChainSummarizer(logic).transform(std::move(hyperGraph));
auto [summarizedGraph, translator] = SimpleChainSummarizer().transform(std::move(hyperGraph));
Options options;
options.addOption(Options::COMPUTE_WITNESS, "true");
auto res = Spacer(logic, options).solve(*summarizedGraph);
Expand Down Expand Up @@ -229,7 +229,7 @@ TEST_F(Transformer_test, test_ChainSummarizer_TwoChains_Unsafe) {
);
auto hyperGraph = systemToGraph(system);
auto originalGraph = *hyperGraph;
auto [summarizedGraph, translator] = SimpleChainSummarizer(logic).transform(std::move(hyperGraph));
auto [summarizedGraph, translator] = SimpleChainSummarizer().transform(std::move(hyperGraph));
Options options;
options.addOption(Options::COMPUTE_WITNESS, "true");
auto res = Spacer(logic, options).solve(*summarizedGraph);
Expand Down Expand Up @@ -259,7 +259,7 @@ TEST_F(Transformer_test, test_ChainSummarizer_SameChainTwice_SafeFact_Unsafe) {
);
auto hyperGraph = systemToGraph(system);
auto originalGraph = *hyperGraph;
auto [summarizedGraph, translator] = SimpleChainSummarizer(logic).transform(std::move(hyperGraph));
auto [summarizedGraph, translator] = SimpleChainSummarizer().transform(std::move(hyperGraph));
Options options;
options.addOption(Options::COMPUTE_WITNESS, "true");
auto res = Spacer(logic, options).solve(*summarizedGraph);
Expand Down Expand Up @@ -289,7 +289,7 @@ TEST_F(Transformer_test, test_ChainSummarizer_SameChainTwice_DifferentFact_Unsaf
);
auto hyperGraph = systemToGraph(system);
auto originalGraph = *hyperGraph;
auto [summarizedGraph, translator] = SimpleChainSummarizer(logic).transform(std::move(hyperGraph));
auto [summarizedGraph, translator] = SimpleChainSummarizer().transform(std::move(hyperGraph));
Options options;
options.addOption(Options::COMPUTE_WITNESS, "true");
auto res = Spacer(logic, options).solve(*summarizedGraph);
Expand Down

0 comments on commit 61aae2d

Please sign in to comment.