RobustCVCTheoremProverFactory.java

package dev.civl.sarl.prove.cvc;

import java.nio.file.Path;

import dev.civl.sarl.IF.config.ProverInfo;
import dev.civl.sarl.IF.config.ProverInfo.ProverKind;
import dev.civl.sarl.IF.expr.BooleanExpression;
import dev.civl.sarl.preuniverse.IF.PreUniverse;
import dev.civl.sarl.prove.IF.ProverFunctionInterpretation;
import dev.civl.sarl.prove.IF.TheoremProver;
import dev.civl.sarl.prove.IF.TheoremProverFactory;

/**
 * Factory for producing new instances of {@link RobustCVCTheoremProver}.
 * 
 * @author siegel
 *
 */
public class RobustCVCTheoremProverFactory implements TheoremProverFactory {

	/**
	 * The symbolic universe used for managing symbolic expressions. Initialized by
	 * constructor and never changes.
	 */
	private PreUniverse universe;

	/**
	 * Information object for underlying prover, which must have {@link ProverKind}
	 * either {@link ProverKind#CVC3} or {@link ProverKind#CVC4}
	 */
	private ProverInfo prover;

	private Path workingDirectory;

	/**
	 * Constructs new CVC theorem prover factory with the given symbolic universe.
	 * 
	 * @param universe symbolic universe used to manage symbolic expressions
	 * @param prover   information object for underlying prover, which must have
	 *                 {@link ProverKind} either {@link ProverKind#CVC3} or
	 *                 {@link ProverKind#CVC4}
	 */
	public RobustCVCTheoremProverFactory(PreUniverse universe, ProverInfo prover, Path workingDirectory) {
		this.universe = universe;
		this.prover = prover;
		this.workingDirectory = workingDirectory;
	}

	@Override
	public TheoremProver newProver(BooleanExpression context) {
		return new RobustCVCTheoremProver(universe, context, prover, new ProverFunctionInterpretation[0]);
	}

	@Override
	public TheoremProver newProver(BooleanExpression context, ProverFunctionInterpretation[] logicFunctions) {
		return new RobustCVCTheoremProver(universe, context, prover, logicFunctions);
	}

	@Override
	public Path workingDirectory() {
		return workingDirectory;
	}
}