
:- expects_dialect(lps).


 
maxTime(9).
actions transfer(From, To, Amount).
fluents balance(Person, Amount).

initially balance(bob, 0), balance(fariba, 100).
observe transfer(fariba, bob, 10) from 1 to 2.

if transfer(fariba, bob, X) from  T1 to T2  
then transfer(bob, fariba, 10) from T2 to T3.

if transfer(bob, fariba, X) from  T1 to T2  
then   transfer(fariba, bob, 20) from  T2 to T3.


transfer(From, To, Amount) initiates balance(To, New) 
if     balance(To, Old),  New is Old + Amount.

transfer(From, To, Amount) terminates balance(To, Old).

transfer(From, To, Amount) initiates balance(From, New) 
if     balance(From, Old),  New is Old - Amount.

transfer(From, To, Amount) terminates balance(From, Old).

false transfer(From, To, Amount), balance(From, Old),  Old < Amount.

false transfer(From, To1, Amount1), 
transfer(From, To2, Amount2),  To1 \=To2.

false transfer(From1, To, Amount1), 
transfer(From2, To, Amount2),  From1 \= From2.