/**
  What a problem is.
 */

import java.util.Set;


public interface 
Problem

  /**
    A problem-instance state.
   */

  abstract class State { }


  /**
     Determine a problem's initial states.

     @reutrn The set of initial states.
   */

  public Set<State> initialStates()


  /**
     Determine if a state is a goal state.

     @param s The state of interest.

     @return true iff <code>s</code> is a goal state.
   */

  public Boolean isGoalState(State s)


  /**
     Determine the set of possible next states from a given state.

     @param s The state of interest.

     @return The set of possible next state from <code>s</code>.
   */

  public Set<State> moveResults(State s)


  /**
     Determine a transition's cost.

     @param from The transition's start state.

     @param to The transition's end state.

     @return The transition cost between <code>from</code> and <code>to</code>.
   */

  public double transitionCost(State from, State to)


// $Log: Problem.java,v $
// Revision 1.1  2011/09/17 17:58:15  rclayton
// Initial revision
//

syntax highlighted by Code2HTML, v. 0.9.1