package org.geogebra.common.kernel.prover; import org.geogebra.common.kernel.algos.SymbolicParameters; import org.geogebra.common.kernel.algos.SymbolicParametersAlgo; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.prover.polynomial.PPolynomial; import org.geogebra.common.util.Prover; import org.geogebra.common.util.Prover.ProofResult; import org.geogebra.common.util.debug.Log; /** * A prover which uses pure symbolic method to prove geometric theorems. * * @author Simon Weitzhofer * @author Zoltan Kovacs * */ public class ProverPureSymbolicMethod { /** * Proves the statement by using pure symbolic method * * @param prover * the prover to be used * @return if the proof was successful */ public static ProofResult prove(Prover prover) { GeoElement statement = prover.getStatement(); if (statement instanceof SymbolicParametersAlgo) { SymbolicParametersAlgo statementSymbolic = (SymbolicParametersAlgo) statement; SymbolicParameters parameters = statementSymbolic .getSymbolicParameters(); try { parameters.getFreeVariables(); // TODO: write here Recio's prover // FIXME: No, something else is required here! } catch (NoSymbolicParametersException e) { return ProofResult.UNKNOWN; } } else if (statement .getParentAlgorithm() instanceof SymbolicParametersAlgo) { SymbolicParametersAlgo statementSymbolic = (SymbolicParametersAlgo) statement .getParentAlgorithm(); try { PPolynomial[] poly = statementSymbolic.getPolynomials(); for (PPolynomial polynomial : poly) { Log.debug(polynomial); if (!polynomial.isZero()) { return ProofResult.FALSE; } } return ProofResult.TRUE; // TODO: write here Recio's prover // FIXME: No, something else is required here! } catch (NoSymbolicParametersException e) { return ProofResult.UNKNOWN; } } return ProofResult.UNKNOWN; } }