/* * SPDX-FileCopyrightText: 2023 The Refinery Authors * * SPDX-License-Identifier: EPL-2.0 */ package tools.refinery.store.reasoning.literal; import tools.refinery.logic.Constraint; import tools.refinery.logic.literal.AbstractCallLiteral; import tools.refinery.logic.literal.AbstractCountLiteral; import tools.refinery.logic.literal.Literal; import tools.refinery.logic.substitution.Substitution; import tools.refinery.logic.term.DataVariable; import tools.refinery.logic.term.Variable; import tools.refinery.logic.term.uppercardinality.UpperCardinalities; import tools.refinery.logic.term.uppercardinality.UpperCardinality; import java.util.List; public class CountUpperBoundLiteral extends AbstractCountLiteral { public CountUpperBoundLiteral(DataVariable resultVariable, Constraint target, List arguments) { super(UpperCardinality.class, resultVariable, target, arguments); } @Override protected UpperCardinality zero() { return UpperCardinalities.ZERO; } @Override protected UpperCardinality one() { return UpperCardinalities.UNBOUNDED; } @Override protected Literal doSubstitute(Substitution substitution, List substitutedArguments) { return new CountUpperBoundLiteral(substitution.getTypeSafeSubstitute(getResultVariable()), getTarget(), substitutedArguments); } @Override public AbstractCallLiteral withArguments(Constraint newTarget, List newArguments) { return new CountUpperBoundLiteral(getResultVariable(), newTarget, newArguments); } @Override protected String operatorName() { return "@UpperBound(\"partial\") count"; } }