(define (problem my_problem)
(:domain roboarm)
(:objects
    ur_manipulator_gripper - arm 
    printer - printer
    world - zone
    box1 box2 box3 box4 box5 box6 - part
    asm0 asm1 asm2 asm3 asm4 asm5 asm6 - assembly
)

(:init 
    not(part_at box1 world)
    not(part_at box2 world)
    not(part_at box3 world)
    not(part_at box4 world)
    not(part_at box5 world)
    not(part_at box6 world)
    (part_of box1 asm1) 
    (part_of box2 asm2)
    (part_of box3 asm3)
    (part_of box4 asm4)
    (part_of box5 asm5)
    (part_of box6 asm6)
    (assembly_order asm0 asm1)
    (assembly_order asm1 asm2)
    (assembly_order asm2 asm3)
    (assembly_order asm3 asm4)
    (assembly_order asm4 asm5)
    (assembly_order asm5 asm6)

    (printer_available printer)
    (arm_available ur_manipulator_gripper)
    (assembly_at asm0 world)
    (assembled asm0)
)

(:goal (and 
  (assembled asm6) 
))
)

; нужно указать желаемое конечное состояние
; (эффект в конце действия)
; в нашем случае, допустим, будет asm6
; чтобы включить принтер в процесс, у нас должны  спавниться детали

; будет что-то типа (not part_at box1 workzone)

; и action print
; начальные условия: not part_at box workzone
; принтер доступен
; в ходе дела парт печатается, принтер не доступен
; в конце - принтер доступен, деталь в зоне

; нужно в генераторе добавить поддержку условий at start и at end 
; но пока что это можно прописать текстом


; предикаты - 
; рука доступна - рука
; сборка в зоне - сборка зона
; деталь часть сборки - деталь сборка
; собрана - сборка
; сборочный порядок - предсборка следсборка

; +
; деталь в зоне - деталь зона
; принтер доступен - принтер

