    Soar problem space specification for Monkey and Bananas, detailed version
	
    altmann@cs.cmu.edu, 3-16-90
    Gregg Yost (gry@cs.cmu.edu), modified 14 Jun 1991
    -------------------------------------------------
    
    space: mab - applies task-operator do-mab

    objects on space:    (^place bananas place1 place2)
        
    objects on state:
        (^at <place>) -  initially place1, changed by move
        (^box-at <place>) - initially place2, changed by move-box
        (^on-box true/false) - initially false, changed by climb
        (^reached bananas) - output of reach
        (^tried reaching) - output of reach, for search control
        (^tried climbing-on/off) - output of climb, for search control
        (^box-by-monkey true) - output of state elaboration

    state elaborations:
        (^box-by-monkey true) - when (^at <place> ^box-at <place>)

    operators:
        move (^to <place>)
            . contingent:   (- ^at <place> ^on-box false)
            . inputs:       (problem-space ^place <place>)
            . outputs:      (^at <place>)
              
        move-box (^to <place>)
            . contingent:   (- ^at <place> ^on-box false ^box-by-monkey true)
            . inputs:       (problem-space <place>)
            . outputs:
                (^at <place>) - replaces old value
                (^box-at <place>) - replaces old value
        
        reach
            . contingent:   (^at bananas)
            . outputs:
                (^reached bananas)          if (^on-box true)
                (^tried reaching)           if (^on-box false)
            
        climb 
            (^dir on)
              . contingent:   (^box-by-monkey true ^on-box false)
              . outputs:      (^on-box true ^tried climbing-on)

            (^dir off)
              . contingent:   (^on-box true)
              . outputs:      (^on-box false ^tried climbing-off)

    goal-test-group:
        success:        (^reached bananas)

    return results:  none

    search control:

        random monkey:  all ops indifferent.

        smarter monkey, direct search control:
             (move-to ^to <place>) best, when (^box-at <place>)
             (move-box ^to bananas) best
             (climb ^dir on) best, when (^at bananas)
             (climb ^dir off) worst
