; (c) 1993,1994 Copyright (c) University of Washington
; Written by Tony Barrett.
; Modified by Drew McDermott
; All rights reserved. Use of this software is permitted for non-commercial
; research purposes, and it may be copied only for that use. All copies must
; include this copyright message. This software is made available AS IS, and
; neither the authors nor the University of Washington make any warranty about
; the software or its performance.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Dan's fridge domain
(define (domain fridge-domain-typed)
(:requirements :strips :equality :typing)
(:types screw backplane compressor fridge)
(:predicates (screwed ?s)
(holds ?s ?b)
(in-place ?b)
(part-of ?b ?f)
(fridge-on ?f)
(covers ?b - object
?x - compressor)
(attached ?x - compressor)
(ok ?c))
(:action unfasten
:parameters (?x - screw ?y - backplane)
:precondition (and (screwed ?X) (holds ?x ?y) )
:effect (not (screwed ?X)))
(:action fasten
:parameters (?x - screw ?y - backplane)
:precondition (and (not (screwed ?X)) (holds ?x ?y))
:effect (screwed ?X))
(:action remove-backplane
:parameters (?x - backplane ?f - fridge
?a ?b ?c ?d - screw)
:precondition (and (not (= ?a ?b)) (not (= ?a ?c)) (not (= ?a ?d))
(not (= ?b ?c)) (not (= ?b ?d)) (not (= ?c ?d))
(in-place ?x) (part-of ?x ?f)
(not (fridge-on ?f))
(holds ?a ?x) (holds ?b ?x)
(holds ?c ?x) (holds ?d ?x)
(not (screwed ?a)) (not (screwed ?b))
(not (screwed ?c)) (not (screwed ?d)))
:effect (not (in-place ?X)))
(:action attach-backplane
:parameters (?x - backplane ?f - fridge
?a ?b ?c ?d - screw)
:precondition (and (not (= ?a ?b)) (not (= ?a ?c)) (not (= ?a ?d))
(not (= ?b ?c)) (not (= ?b ?d)) (not (= ?c ?d))
(not (in-place ?x))
(part-of ?x ?f) (not (fridge-on ?f))
(holds ?a ?x) (holds ?b ?x)
(holds ?c ?x) (holds ?d ?x)
(not (screwed ?a)) (not (screwed ?b))
(not (screwed ?c)) (not (screwed ?d)))
:effect (in-place ?X))
(:action start-fridge
:parameters (?f - fridge ?a ?b ?c ?d - screw ?x - backplane)
:precondition (and (not (= ?a ?b)) (not (= ?a ?c)) (not (= ?a ?d))
(not (= ?b ?c)) (not (= ?b ?d)) (not (= ?c ?d))
(in-place ?x) (part-of ?x ?f)
(holds ?a ?x)(holds ?b ?x)
(holds ?c ?x)(holds ?d ?x)
(screwed ?a) (screwed ?b)
(screwed ?c) (screwed ?d)
(not (fridge-on ?f)))
:effect (fridge-on ?f))
(:action stop-fridge
:parameters (?f - fridge)
:precondition (fridge-on ?f)
:effect
(not (fridge-on ?f)))
(:action change-compressor
:parameters (?x ?y - compressor ?a - backplane)
:precondition (and (not (= ?x ?y))
(not (in-place ?a))
(covers ?a ?x)
(attached ?x) (not (attached ?y)))
:effect (and (not (attached ?X)) (attached ?y)
(not (covers ?a ?x)) (covers ?a ?y))))
(define (problem fixa)
(:domain fridge-domain)
(:objects s1 s2 s3 s4 - screw
b1 - backplane
c1 c2 - compressor
f1 - fridge)
(:init (covers b1 c1) (part-of b1 f1)
(holds s1 b1) (holds s2 b1) (holds s3 b1)
(holds s4 b1)
(ok c1) (ok c2) (fridge-on f1)
(screwed s1) (screwed s2) (screwed s3) (screwed s4)
(in-place b1) (attached c1))
(:goal (and (attached c2) (ok c2)))
(:length (:serial 7 ) (:parallel 3)))
(define (problem fixb)
(:domain fridge-domain)
(:objects s1 s2 s3 s4 - screw
b1 - backplane
c1 c2 - compressor
f1 - fridge)
(:init (covers b1 c1) (part-of b1 f1)
(holds s1 b1) (holds s2 b1) (holds s3 b1)
(holds s4 b1)
(ok c1) (ok c2) (fridge-on f1)
(screwed s1) (screwed s2) (screwed s3) (screwed s4)
(in-place b1) (attached c1))
(:length (:serial 13 ) (:parallel 6))
(:goal (and (attached c2) (ok c2) (fridge-on f1))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; The same thing, without typing.
(define (domain fridge-domain-strips)
(:requirements :strips :equality)
(:predicates (screwed ?s)
(holds ?s ?b)
(in-place ?b)
(part-of ?b ?f)
(fridge-on ?f)
(fridge ?f)
(covers ?b ?x)
(attached ?x)
(ok ?c)
(screw ?s)
(backplane ?b)
(compressor ?c))
(:action unfasten
:parameters (?x ?y)
:precondition (AND
(screw ?x) (backplane ?y)
(screwed ?X) (holds ?x ?y) )
:effect (NOT (screwed ?X)))
(:action fasten
:parameters (?x ?y)
:precondition (AND
(screw ?x) (backplane ?y)
(NOT (screwed ?X)) (holds ?x ?y))
:effect (screwed ?X))
(:action remove-backplane
:parameters (?x ?f ?a ?b ?c ?d)
:precondition (AND
(backplane ?x)
(not (= ?a ?b)) (not (= ?a ?c)) (not (= ?a ?d))
(not (= ?b ?c)) (not (= ?b ?d)) (not (= ?c ?d))
(in-place ?x) (part-of ?x ?f) (NOT (fridge-on ?f))
(holds ?a ?x) (holds ?b ?x)
(holds ?c ?x) (holds ?d ?x)
(NOT (screwed ?a)) (NOT (screwed ?b))
(NOT (screwed ?c)) (NOT (screwed ?d)))
:effect (NOT (in-place ?X)))
(:action attach-backplane
:parameters (?x ?f ?a ?b ?c ?d)
:precondition (AND
(backplane ?x)
(not (= ?a ?b)) (not (= ?a ?c)) (not (= ?a ?d))
(not (= ?b ?c)) (not (= ?b ?d)) (not (= ?c ?d))
(NOT (in-place ?x))
(part-of ?x ?f) (NOT (fridge-on ?f))
(holds ?a ?x) (holds ?b ?x)
(holds ?c ?x) (holds ?d ?x)
(NOT (screwed ?a)) (NOT (screwed ?b))
(NOT (screwed ?c)) (NOT (screwed ?d)))
:effect (in-place ?X))
(:action start-fridge
:parameters (?f ?a ?b ?c ?d ?x)
:precondition (AND (not (= ?a ?b)) (not (= ?a ?c)) (not (= ?a ?d))
(not (= ?b ?c)) (not (= ?b ?d)) (not (= ?c ?d))
(backplane ?x) (in-place ?x) (part-of ?x ?f)
(holds ?a ?x)(holds ?b ?x)(holds ?c ?x)(holds ?d ?x)
(screwed ?a) (screwed ?b) (screwed ?c) (screwed ?d)
(NOT (fridge-on ?f)))
:effect (fridge-on ?f))
(:action stop-fridge
:parameters (?f)
:precondition (fridge-on ?f)
:effect
(NOT (fridge-on ?f)))
(:action change-compressor
:parameters (?x ?y ?a)
:precondition (AND (not (= ?x ?y)) (backplane ?a) (NOT (in-place ?a))
(covers ?a ?x)
(compressor ?x) (compressor ?y)
(attached ?x) (NOT (attached ?y)))
:effect (AND (NOT (attached ?X)) (attached ?y)
(NOT (covers ?a ?x)) (covers ?a ?y))))
(define (problem fixa-strips)
(:domain fridge-domain-strips)
(:objects s1 s2 s3 s4 b1 c1 c2 f1)
(:init (screw s1)
(screw s2) (screw s3) (screw s4)
(backplane b1)
(compressor c1) (compressor c2) (fridge f1)
(covers b1 c1) (part-of b1 f1)
(holds s1 b1) (holds s2 b1) (holds s3 b1)
(holds s4 b1)
(ok c1) (ok c2) (fridge-on f1)
(screwed s1) (screwed s2) (screwed s3) (screwed s4)
(in-place b1) (attached c1))
(:goal (AND (attached c2) (ok c2)))
(:length (:serial 7 ) (:parallel 3)))
(define (problem fixb-strips)
(:domain fridge-domain-strips)
(:objects s1 s2 s3 s4 b1 c1 c2 f1)
(:init (screw s1)
(screw s2) (screw s3) (screw s4)
(backplane b1)
(compressor c1) (compressor c2) (fridge f1)
(covers b1 c1) (part-of b1 f1)
(holds s1 b1) (holds s2 b1) (holds s3 b1)
(holds s4 b1)
(ok c1) (ok c2) (fridge-on f1)
(screwed s1) (screwed s2) (screwed s3) (screwed s4)
(in-place b1) (attached c1))
(:goal (AND (attached c2) (ok c2) (fridge-on f1)))
(:length (:serial 13 ) (:parallel 6))
)
(define (domain fridge-domain-rich)
(:requirements :adl)
(:types screw backplane compressor fridge)
(:predicates (screwed ?s)
(holds ?s ?b)
(in-place ?b)
(part-of ?b ?f)
(fridge-on ?f)
(covers ?b - object
?x - compressor)
(attached ?x - compressor)
(ok ?c))
(:action unfasten
:parameters (?x - screw ?y - backplane)
:precondition (and (screwed ?X) (holds ?x ?y) )
:effect (not (screwed ?X)))
(:action fasten
:parameters (?x - screw ?y - backplane)
:precondition (and (not (screwed ?X)) (holds ?x ?y))
:effect (screwed ?X))
(:action remove-backplane
:parameters (?x - backplane ?f - fridge)
:precondition (and (in-place ?x) (part-of ?x ?f)
(not (fridge-on ?f))
(forall (?s - screw)
(imply (holds ?s ?x)
(not (screwed ?s)))))
:effect (not (in-place ?X)))
(:action attach-backplane
:parameters (?x - backplane ?f - fridge)
:precondition (and (not (in-place ?x))
(part-of ?x ?f) (not (fridge-on ?f))
(forall (?s - screw)
(imply (holds ?s ?x)
(not (screwed ?s)))))
:effect (in-place ?X))
(:action start-fridge
:parameters (?f - fridge)
:precondition (exists (?x - backplane)
(and (in-place ?x)
(part-of ?x ?f)
(forall (?s - screw)
(imply (holds ?s ?x)
(screwed ?s)))
(not (fridge-on ?f))))
:effect (fridge-on ?f))
(:action stop-fridge
:parameters (?f - fridge)
:precondition (fridge-on ?f)
:effect
(not (fridge-on ?f)))
(:action change-compressor
:parameters (?y - compressor)
:vars (?x - compressor)
:precondition (and (attached ?x) (not (attached ?y))
(forall (?a - backplane)
(imply (covers ?a ?x)
(not (in-place ?a)))))
:effect (and (not (attached ?X)) (attached ?y)
(forall (?a - backplane)
(when (covers ?a ?x)
(and (not (covers ?a ?x))
(covers ?a ?y)))))))
(define (problem rich-fixb)
(:domain fridge-domain-rich)
(:situation fixb)
(:goal (and (attached c2) (ok c2) (fridge-on f1))))