Module type Solver.PUZZLE

module type PUZZLE = sig .. end
A PUZZLE describes the state space of a puzzle.

type state 
type move 
val apply : state -> move -> state
apply s m the state created by executing the move m in state s
val moves : state -> move list
Gives the list of all possible moves from a given state
val is_goal : state -> bool
returns true if the given state is a goal state
val equal : state -> state -> bool
returns true if two states are equal
val goodness : state Util.comparator
Compares two states based on how close to the goal they are. s1 is better than s2 if goodness s1 s2 = Gt.