content: package aima.core.logic.fol.inference.proof;
  
  import java.util.ArrayList;
  import java.util.Collections;
  import java.util.List;
  import java.util.Map;
  
  import aima.core.logic.fol.kb.data.Chain;
  import aima.core.logic.fol.parsing.ast.Term;
  import aima.core.logic.fol.parsing.ast.Variable;
  
  /**
   * @author Ciaran O'Reilly
   * 
   */
  public class ProofStepChainReduction extends AbstractProofStep {
  	private List<ProofStep> predecessors = new ArrayList<ProofStep>();
  	private Chain reduction = null;
  	private Chain nearParent, farParent = null;
  	private Map<Variable, Term> subst = null;
  
  	public ProofStepChainReduction(Chain reduction, Chain nearParent,
  			Chain farParent, Map<Variable, Term> subst) {
  		this.reduction = reduction;
  		this.nearParent = nearParent;
  		this.farParent = farParent;
  		this.subst = subst;
  		this.predecessors.add(farParent.getProofStep());
  		this.predecessors.add(nearParent.getProofStep());
  	}
  
  	//
  	// START-ProofStep
  	@Override
  	public List<ProofStep> getPredecessorSteps() {
  		return Collections.unmodifiableList(predecessors);
  	}
  
  	@Override
  	public String getProof() {
  		return reduction.toString();
  	}
  
  	@Override
  	public String getJustification() {
  		return "Reduction: " + nearParent.getProofStep().getStepNumber() + ","
  				+ farParent.getProofStep().getStepNumber() + " " + subst;
  	}
  	// END-ProofStep
  	//
  }
  