package bigstep; import common.interpreters.MutableStore; import common.interpreters.Store; import expressions.Expression; /** * Base interface for {@link bigstep.BigStepProofRule}s to interact with the * {@link bigstep.BigStepProofModel}s when applying a rule to a specified node * or updating a node after a rule application. * * @author Benedikt Meurer * @version $Id$ * * @see bigstep.DefaultBigStepProofNode * @see bigstep.BigStepProofRule */ public interface BigStepProofContext { /** * Adds a new {@link BigStepProofNode} for the specified <code>expression</code> * as child node for the given <code>node</code>. * * The method takes care of registering the required redo and undo actions for * the {@link BigStepProofModel} associated with this proof context. * * This method acts as a convenience wrapper for the extended * {@link #addProofNode(BigStepProofNode, Expression, MutableStore)} method, * and tries to automatically determine the appropriate store. * * @param node the parent node for the new child node. * @param expression the {@link Expression} for which to create a new big step * proof node below the <code>node</code>. * * @throws NullPointerException if either the <code>node</code> or the * <code>expression</code> is <code>null</code>. * * @see #addProofNode(BigStepProofNode, Expression, MutableStore) */ public void addProofNode(BigStepProofNode node, Expression expression); /** * Adds a new {@link BigStepProofNode} for the specified <code>expression</code> * and <code>store</code> as child node for the given <code>node</code>. * * The method takes care of registering the required redo and undo actions for * the {@link BigStepProofModel} associated with this proof context. * * @param node the parent node for the new child node. * @param expression the {@link Expression} for which to create a new big step * proof node below the <code>node</code>. * @param store the {@link Store} for the new big step proof node. * * @throws NullPointerException if either the <code>node</code>, the <code>store</code> * or the <code>expression</code> is <code>null</code>. * * @see #addProofNode(BigStepProofNode, Expression) * @see Store */ public void addProofNode(BigStepProofNode node, Expression expression, Store store); /** * Returns <code>true</code> if the {@link BigStepProofModel} associated with * this context has memory operations enabled, <code>false</code> otherwise. * * Several rules - like <b>(APP)</b> - behave differently if memory operations * are enabled, so you may need to test this condition. * * @return <code>true</code> if memory operations are enabled. */ public boolean isMemoryEnabled(); /** * Changes the result of the specified <code>node</code> to the given <code>result</code>. * * The method takes care of registering the required redo and undo actions for * the {@link BigStepProofModel} associated with this proof context. * * @param node the node, whose result to change to the <code>result</code>. * @param result the new result for the specified <code>node</code>. * * @throws NullPointerException if either <code>node</code> is <code>null</code>. */ public void setProofNodeResult(BigStepProofNode node, BigStepProofResult result); /** * This method is a convenience wrapper for the * {@link #setProofNodeResult(BigStepProofNode, Expression, MutableStore)} method, * which simply passes the {@link Store} from the specified <code>node</code> (determined * using the {@link BigStepProofNode#getStore()} method) as store for the * {@link BigStepProofResult}, together with the <code>value</code>. * * @param node the node, whose result to change to <code>value</code>. * @param value the new value for the specified <code>node</code>. * * @throws NullPointerException if <code>node</code> is <code>null</code>. * * @see BigStepProofNode#getStore() */ public void setProofNodeResult(BigStepProofNode node, Expression value); /** * Changes the result of the specified <code>node</code> to a new big step result * with the given <code>value</code> and <code>store</code>. This is a convenience * wrapper for {@link #setProofNodeResult(BigStepProofNode, BigStepProofResult)}. * * The method takes care of registering the required redo and undo actions for * the {@link BigStepProofModel} associated with this proof context. * * @param node the node, whose result to change to <code>value</code> and * <code>store</code>. * @param value the new value for the specified <code>node</code>. * @param store the resulting store. * * @throws NullPointerException if the <code>node</code> or <code>store</code> * is <code>null</code> */ public void setProofNodeResult(BigStepProofNode node, Expression value, Store store); /** * Changes the big step proof rule of the specified <code>node</code> to the * given <code>rule</code>. This affects the proof steps of the <code>node</code> * (see the {@link common.ProofNode#getSteps()} method for details. * * The method takes care of registering the required redo and undo actions for * the {@link BigStepProofModel} associated with this proof context. * * @param node the node, whose associated proof step to change to a step for * the specified <code>rule</code>. * @param rule the new rule to use for the proof step for <code>node</code>. */ public void setProofNodeRule(BigStepProofNode node, BigStepProofRule rule); }