Further information on conformant planning can be found here.
Consider the example depicted below. A stack of five numbers must
be sorted in ascendent order. A "binary sort" operation is available.
(define (domain conformant_sort)
(:types element_no)
(:functions
(element_value
?e - element_no) - element_no)
(:action sort
:parameters (?e1 - element_no
?e2 - element_no)
:precondition (not (= ?e1 ?e2))
:effect
(when (> (element_value ?e1) (element_value ?e2))
(and
(assign (element_value ?e1) (element_value ?e2))
(assign (element_value ?e2) (element_value ?e1)))))
)
The following problem describes the goal of sorting the stack starting
from a random configuration, without ever being able to observe the status
of the stack.
Notice that range types are instantiated in the problem using the NuPDDL
keyword :typedef.
(define (problem conformant_sort_pb)
(:domain
conformant_sort)
(:typedef
element_no - (range 1 5))
(:init
(forall (?e - element_no)
(unknown (element_value ?e))))
(:conformantgoal
(forall (?e1 - element_no)
(forall (?e2 - element_no)
(imply (> ?e1 ?e2)
(>= (element_value ?e1) (element_value ?e2)))))))
To solve the problem, run
MBP-solve -plan_output - <domain> <problem>
where <domain> and <problem> are the domain
and problem above.