o_1 = iota(Object, lambda o: id(o, "letter-w-1"))
o_2 = iota(Object, lambda o: id(o, "letter-w-2"))
o_3 = iota(Object, lambda o: id(o, "letter-o"))
o_4 = iota(Object, lambda o: color(o, "pink") and shape(o, "circle"))
m_1 = iota(Motion, lambda m: type(m, "rotate") and magnitude(m, 180.0) and origin(m, get_pos(o_4)) and agent(m, o_1))
m_2 = iota(Motion, lambda m: type(m, "rotate") and magnitude(m, 180.0) and origin(m, get_pos(o_4)) and agent(m, o_2))
m_3 = iota(Motion, lambda m: type(m, "translate") and direction(m, [0.0, -1.0]) and post(m, s_bottom_border(o_3, o_2)) and agent(m, o_3))
t_before(m_1, m_2)
t_before(m_2, m_3)
o_1 = iota(Object, lambda o: id(o, "letter-w-1")): True
id: True
o_2 = iota(Object, lambda o: id(o, "letter-w-2")): True
id: True
o_3 = iota(Object, lambda o: id(o, "letter-o")): True
id: True
o_4 = iota(Object, lambda o: color(o, "pink") and shape(o, "circle")): True
color: True
shape: True
m_1 = iota(Motion, lambda m: type(m, "rotate") and magnitude(m, 180.0) and origin(m, get_pos(o_4)) and agent(m, o_1)): True
type: True
magnitude: True
origin: True
agent: True
m_2 = iota(Motion, lambda m: type(m, "rotate") and magnitude(m, 180.0) and origin(m, get_pos(o_4)) and agent(m, o_2)): True
type: True
magnitude: True
origin: True
agent: True
m_3 = iota(Motion, lambda m: type(m, "translate") and direction(m, [0.0, -1.0]) and post(m, s_bottom_border(o_3, o_2)) and agent(m, o_3)): False
type: True
direction: False
post: False
s_bottom_border: True
agent: True
t_before(m_1, m_2): True
t_before: True
t_before(m_2, m_3): False
t_before: False
In this initial animation, the rotations of the letter Ws are correct. However, the letter O does not move at all to align its bottom with the rotated letter Ws. Therefore, m_3 is false.
o_1 = iota(Object, lambda o: id(o, "letter-w-1")): True
id: True
o_2 = iota(Object, lambda o: id(o, "letter-w-2")): True
id: True
o_3 = iota(Object, lambda o: id(o, "letter-o")): True
id: True
o_4 = iota(Object, lambda o: color(o, "pink") and shape(o, "circle")): True
color: True
shape: True
m_1 = iota(Motion, lambda m: type(m, "rotate") and magnitude(m, 180.0) and origin(m, get_pos(o_4)) and agent(m, o_1)): True
type: True
magnitude: True
origin: True
agent: True
m_2 = iota(Motion, lambda m: type(m, "rotate") and magnitude(m, 180.0) and origin(m, get_pos(o_4)) and agent(m, o_2)): True
type: True
magnitude: True
origin: True
agent: True
m_3 = iota(Motion, lambda m: type(m, "translate") and direction(m, [0.0, -1.0]) and post(m, s_bottom_border(o_3, o_2)) and agent(m, o_3)): False
type: True
direction: True
post: False
s_bottom_border: True
agent: True
t_before(m_1, m_2): True
t_before: True
t_before(m_2, m_3): False
t_before: False
In the first correction attempt, the letter O now translates down, but it does not move enough to align its bottom with the rotated letter W.
o_1 = iota(Object, lambda o: id(o, "letter-w-1")): True
id: True
o_2 = iota(Object, lambda o: id(o, "letter-w-2")): True
id: True
o_3 = iota(Object, lambda o: id(o, "letter-o")): True
id: True
o_4 = iota(Object, lambda o: color(o, "pink") and shape(o, "circle")): True
color: True
shape: True
m_1 = iota(Motion, lambda m: type(m, "rotate") and magnitude(m, 180.0) and origin(m, get_pos(o_4)) and agent(m, o_1)): True
type: True
magnitude: True
origin: True
agent: True
m_2 = iota(Motion, lambda m: type(m, "rotate") and magnitude(m, 180.0) and origin(m, get_pos(o_4)) and agent(m, o_2)): True
type: True
magnitude: True
origin: True
agent: True
m_3 = iota(Motion, lambda m: type(m, "translate") and direction(m, [0.0, -1.0]) and post(m, s_bottom_border(o_3, o_2)) and agent(m, o_3)): True
type: True
direction: True
post: True
s_bottom_border: True
agent: True
t_before(m_1, m_2): True
t_before: True
t_before(m_2, m_3): True
t_before: True
In this correction iteration, the letter O now moves down to align its bottom with the rotated letter Ws. The animation is now fully correct.