o_1 = iota(Object, lambda o: color(o, "blue") and shape(o, "square"))
o_2 = iota(Object, lambda o: color(o, "black") and shape(o, "square"))
exists(Motion, lambda m_1: type(m_1, "rotate") and post(m_1, s_intersect(o_1, o_2)) and agent(m_1, o_1))
o_1 = iota(Object, lambda o: color(o, "blue") and shape(o, "square")): True
color: True
shape: True
o_2 = iota(Object, lambda o: color(o, "black") and shape(o, "square")): True
color: True
shape: True
exists(Motion, lambda m_1: type(m_1, "rotate") and post(m_1, s_intersect(o_1, o_2)) and agent(m_1, o_1)): True
type: True
post: True
s_intersect: True
agent: True
This page illustrates the example described in the Discussion section of the paper. In this animation produced from the original input text prompt, the blue square did end up intersecting with the black square, passing all verification checks. However, the blue square is not moved by the rotation motion but by an additional, unmentioned translation motion. This shows the ambiguity of the original input text prompt.
o_1 = iota(Object, lambda o: color(o, "blue") and shape(o, "square")): True
color: True
shape: True
o_2 = iota(Object, lambda o: color(o, "black") and shape(o, "square")): True
color: True
shape: True
exists(Motion, lambda m_1: type(m_1, "rotate") and post(m_1, s_intersect(o_1, o_2)) and agent(m_1, o_1)): True
type: True
post: True
s_intersect: True
agent: True
Revised input text prompt: "Rotate the blue square to intersect with the black square. Use rotation only."
The user here modified the input text prompt to specify that only rotation should be used to move the blue square to intersect with the black square. Now the animation moves the blue square by rotating it around the midpoint between the two squares, matching the original intention of the user.