sig
  type state
  type move
  val apply :
    Solver.PUZZLE.state -> Solver.PUZZLE.move -> Solver.PUZZLE.state
  val moves : Solver.PUZZLE.state -> Solver.PUZZLE.move list
  val is_goal : Solver.PUZZLE.state -> bool
  val equal : Solver.PUZZLE.state -> Solver.PUZZLE.state -> bool
  val goodness : Solver.PUZZLE.state Util.comparator
end