o_1 = iota(Object, lambda o: id(o, "letter-Y"))
o_2 = iota(Object, lambda o: id(o, "letter-E"))
o_3 = iota(Object, lambda o: id(o, "letter-S"))
m_1 = iota(Motion, lambda m: type(m, "translate") and post(m, s_left_border(o_1, o_2)) and agent(m, o_1))
m_2 = iota(Motion, lambda m: type(m, "translate") and post(m, s_right_border(o_3, o_2)) and agent(m, o_3))
t_before (m_1, m_2)
o_1 = iota(Object, lambda o: id(o, "letter-Y")): True
id: True
o_2 = iota(Object, lambda o: id(o, "letter-E")): True
id: True
o_3 = iota(Object, lambda o: id(o, "letter-S")): True
id: True
m_1 = iota(Motion, lambda m: type(m, "translate") and post(m, s_left_border(o_1, o_2)) and agent(m, o_1)): False
type: True
post: False
s_left_border: True
agent: True
m_2 = iota(Motion, lambda m: type(m, "translate") and post(m, s_right_border(o_3, o_2)) and agent(m, o_3)): True
type: True
post: True
s_right_border: True
agent: True
t_before(m_1, m_2): False
t_before: False
In this initial animation, the letter Y slides too much to the left. Although it did touch the left side of the letter E at one point, it did not stop there. Therefore m_1 is false. t_before(m_1, m_2) is false because m_1 is false.
o_1 = iota(Object, lambda o: id(o, "letter-Y")): True
id: True
o_2 = iota(Object, lambda o: id(o, "letter-E")): True
id: True
o_3 = iota(Object, lambda o: id(o, "letter-S")): True
id: True
m_1 = iota(Motion, lambda m: type(m, "translate") and post(m, s_left_border(o_1, o_2)) and agent(m, o_1)): True
type: True
post: True
s_left_border: True
agent: True
m_2 = iota(Motion, lambda m: type(m, "translate") and post(m, s_right_border(o_3, o_2)) and agent(m, o_3)): True
type: True
post: True
s_right_border: True
agent: True
t_before(m_1, m_2): False
t_before: False
In the first correction of the initial animation, the letter Y now slides and stops at touching the left side of the letter E. However, since m_1 and m_2 are not sequential, t_before(m_1, m_2) is still false.
o_1 = iota(Object, lambda o: id(o, "letter-Y")): True
id: True
o_2 = iota(Object, lambda o: id(o, "letter-E")): True
id: True
o_3 = iota(Object, lambda o: id(o, "letter-S")): True
id: True
m_1 = iota(Motion, lambda m: type(m, "translate") and post(m, s_left_border(o_1, o_2)) and agent(m, o_1)): True
type: True
post: True
s_left_border: True
agent: True
m_2 = iota(Motion, lambda m: type(m, "translate") and post(m, s_right_border(o_3, o_2)) and agent(m, o_3)): True
type: True
post: True
s_right_border: True
agent: True
t_before(m_1, m_2): True
t_before: True
In this last iteration, the timing of m_1 and m_2 has been corrected, so t_before(m_1, m_2) is now true. All the predicates are now true, so the animation correctly matches the prompt.