/*
* SPDX-FileCopyrightText: 2021-2023 The Refinery Authors
*
* SPDX-License-Identifier: EPL-2.0
*/
package tools.refinery.store.reasoning;
import tools.refinery.store.adapter.ModelAdapterBuilder;
import tools.refinery.store.dse.transition.objectives.Objective;
import tools.refinery.store.model.ModelStore;
import tools.refinery.logic.dnf.Dnf;
import tools.refinery.logic.dnf.FunctionalQuery;
import tools.refinery.logic.dnf.Query;
import tools.refinery.logic.dnf.RelationalQuery;
import tools.refinery.store.reasoning.literal.Concreteness;
import tools.refinery.store.reasoning.literal.Modality;
import tools.refinery.store.reasoning.refinement.PartialModelInitializer;
import tools.refinery.store.reasoning.refinement.StorageRefiner;
import tools.refinery.store.reasoning.translator.AnyPartialSymbolTranslator;
import tools.refinery.store.representation.Symbol;
import java.util.Collection;
import java.util.List;
@SuppressWarnings("UnusedReturnValue")
public interface ReasoningBuilder extends ModelAdapterBuilder {
ReasoningBuilder requiredInterpretations(Collection requiredInterpretations);
default ReasoningBuilder requiredInterpretations(Concreteness... requiredInterpretations) {
return requiredInterpretations(List.of(requiredInterpretations));
}
ReasoningBuilder partialSymbol(AnyPartialSymbolTranslator translator);
ReasoningBuilder storageRefiner(Symbol symbol, StorageRefiner.Factory refiner);
ReasoningBuilder initializer(PartialModelInitializer initializer);
ReasoningBuilder objective(Objective objective);
default ReasoningBuilder objectives(Objective... objectives) {
return objectives(List.of(objectives));
}
default ReasoningBuilder objectives(Collection objectives) {
objectives.forEach(this::objective);
return this;
}
Query lift(Modality modality, Concreteness concreteness, Query query);
RelationalQuery lift(Modality modality, Concreteness concreteness, RelationalQuery query);
FunctionalQuery lift(Modality modality, Concreteness concreteness, FunctionalQuery query);
Dnf lift(Modality modality, Concreteness concreteness, Dnf dnf);
@Override
ReasoningStoreAdapter build(ModelStore store);
}