(define (domain Rover)
(:requirements :typing)
(:types rover waypoint store camera mode lander objective)

(:predicates (at ?x - rover ?y - waypoint)
             (at-lander ?x - lander ?y - waypoint)
             (can-traverse ?r - rover ?x - waypoint ?y - waypoint)
	     (equipped-for-soil-analysis ?r - rover)
             (equipped-for-rock-analysis ?r - rover)
             (equipped-for-imaging ?r - rover)
             (empty ?s - store)
             (have-rock-analysis ?r - rover ?w - waypoint)
             (have-soil-analysis ?r - rover ?w - waypoint)
             (full ?s - store)
	     (calibrated ?c - camera ?r - rover)
	     (supports ?c - camera ?m - mode)
             (available ?r - rover)
             (visible ?w - waypoint ?p - waypoint)
             (haveimage ?r - rover ?o - objective ?m - mode)
             (communicated-soil-data ?w - waypoint)
             (communicated-rock-data ?w - waypoint)
             (communicated-image-data ?o - objective ?m - mode)
	     (at-soil-sample ?w - waypoint)
	     (at-rock-sample ?w - waypoint)
             (visible-from ?o - objective ?w - waypoint)
	     (store-of ?s - store ?r - rover)
	     (calibrationtarget ?i - camera ?o - objective)
	     (onboard ?i - camera ?r - rover)
	     (channel-free ?l - lander)

)


(:action navigate
:parameters (?x - rover ?y - waypoint ?z - waypoint)
:precondition ()
:effect ()
)

(:action sample-soil
:parameters (?x - rover ?s - store ?p - waypoint)
:precondition ()
:effect ()
)

(:action sample-rock
:parameters (?x - rover ?s - store ?p - waypoint)
:precondition ()
:effect ()
)

(:action drop
:parameters (?x - rover ?y - store)
:precondition ()
:effect ()
)

(:action calibrate
 :parameters (?r - rover ?i - camera ?t - objective ?w - waypoint)
 :precondition ()
 :effect ()
)

(:action takeimage
 :parameters (?r - rover ?p - waypoint ?o - objective ?i - camera ?m - mode)
 :precondition ()
 :effect ()
)


(:action communicate-soil-data
 :parameters (?r - rover ?l - lander ?p - waypoint ?x - waypoint ?y - waypoint)
 :precondition ()
 :effect ()
)

(:action communicate-rock-data
 :parameters (?r - rover ?l - lander ?p - waypoint ?x - waypoint ?y - waypoint)
 :precondition ()
 :effect ()
)


(:action communicate-image-data
 :parameters (?r - rover ?l - lander ?o - objective ?m - mode ?x - waypoint ?y - waypoint)
 :precondition ()
 :effect ()
)

)
