;; The given facts.
(on red green)
(not (on green blue))
(or (on yellow green) (on yellow blue))
(above green blue)
;; Blue is on SOME block, but made specific to this world.
(or (on blue red) (on blue green) (on blue yellow) (on blue black))

;; Closed World version of every block is on something (and not
;; itself).  Note that the support for red, blue and yellow was
;; explicitely constrained in the input statements but green is only
;; indirectly constraints and black is not constrained at all.
(or (on green red) (on green blue) (on green yellow) (on green black)
    (on green table))
(or (on black red) (on black blue) (on black yellow) (on black green)
    (on black table))


;; On properties
;; Above properties
;; This is what you have to provide, our answer involves adding 10 axioms.


;; These are here primarily to distinguish blocks from the table.
(block red)
(block green)
(block blue)
(block yellow)
(block black)
(not (block table))

;; Equality axioms, some general, some specific.
(all (?x) (= ?x ?x))
(all (?x ?y) (=> (not (= ?x ?y)) (not (= ?y ?x))))
(not (= table green))
(not (= table red))
(not (= table yellow))
(not (= table blue))
(not (= table black))
(not (= red green))
(not (= red blue))
(not (= red yellow))
(not (= red black))
(not (= green blue))
(not (= green yellow))
(not (= green black))
(not (= blue yellow))
(not (= blue black))
(not (= yellow black))
