1:-include(library('ec_planner/ec_test_incl')).    2:-expects_dialect(pfc).    3 %  loading(always,'examples/Mueller2006/Chapter4/BankAccountServiceFee.e').
    4%;
    5%; Copyright (c) 2005 IBM Corporation and others.
    6%; All rights reserved. This program and the accompanying materials
    7%; are made available under the terms of the Common Public License v1.0
    8%; which accompanies this distribution, and is available at
    9%; http://www.eclipse.org/legal/cpl-v10.html
   10%;
   11%; Contributors:
   12%; IBM - Initial implementation
   13%;
   14%; @book{Mueller:2006,
   15%;   author = "Erik T. Mueller",
   16%;   year = "2006",
   17%;   title = "Commonsense Reasoning",
   18%;   address = "San Francisco",
   19%;   publisher = "Morgan Kaufmann/Elsevier",
   20%; }
   21%;
   22
   23% option modeldiff on
   24:- set_ec_option(modeldiff, on).   25
   26% load foundations/Root.e
   27
   28% load foundations/EC.e
   29
   30% sort account
   31==> sort(account).
   32
   33% sort value: integer
   34==> subsort(value,integer).
   35
   36% account Account1, Account2
   37==> t(account,account1).
   38==> t(account,account2).
   39
   40% predicate EndOfMonth(time)
   41 %  predicate(endOfMonth(time)).
   42==> mpred_prop(endOfMonth(time),predicate).
   43==> meta_argtypes(endOfMonth(time)).
   44
   45% function ServiceFee(account): value
   46 %  functional_predicate(serviceFee(account,value)).
   47==> mpred_prop(serviceFee(account,value),functional_predicate).
   48==> meta_argtypes(serviceFee(account,value)).
   49resultIsa(serviceFee,value).
   50
   51% function MinimumBalance(account): value
   52 %  functional_predicate(minimumBalance(account,value)).
   53==> mpred_prop(minimumBalance(account,value),functional_predicate).
   54==> meta_argtypes(minimumBalance(account,value)).
   55resultIsa(minimumBalance,value).
   56
   57% fluent ServiceFeeCharged(account)
   58 %  fluent(serviceFeeCharged(account)).
   59==> mpred_prop(serviceFeeCharged(account),fluent).
   60==> meta_argtypes(serviceFeeCharged(account)).
   61
   62% fluent Balance(account,value)
   63 %  fluent(balance(account,value)).
   64==> mpred_prop(balance(account,value),fluent).
   65==> meta_argtypes(balance(account,value)).
   66
   67% event Transfer(account,account,value)
   68 %  event(transfer(account,account,value)).
   69==> mpred_prop(transfer(account,account,value),event).
   70==> meta_argtypes(transfer(account,account,value)).
   71
   72% event MonthlyReset(account)
   73 %  event(monthlyReset(account)).
   74==> mpred_prop(monthlyReset(account),event).
   75==> meta_argtypes(monthlyReset(account)).
   76
   77% event ChargeServiceFee(account)
   78 %  event(chargeServiceFee(account)).
   79==> mpred_prop(chargeServiceFee(account),event).
   80==> meta_argtypes(chargeServiceFee(account)).
   81
   82
   83% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:40
   84%; Sigma
   85% [account1,account2,value1,value2,value3,value4,time]
   86% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:43
   87% HoldsAt(Balance(account1,value1),time) &
   88% HoldsAt(Balance(account2,value2),time) &
   89% value3>0 &
   90% value1>=value3 &
   91% value4=(value2+value3) ->
   92% Initiates(Transfer(account1,account2,value3),Balance(account2,value4),time).
   93% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:48
   94axiom(initiates(transfer(Account1, Account2, Value3), balance(Account2, Value4), Time),
   95   
   96    [ holds_at(balance(Account1, Value1), Time),
   97      holds_at(balance(Account2, Value2), Time),
   98      comparison(Value3, 0, >),
   99      Value1>=Value3,
  100      equals(Value4, Value2+Value3)
  101    ]).
  102
  103
  104% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:50
  105% [account1,account2,value1,value2,value3,time]
  106% HoldsAt(Balance(account1,value1),time) &
  107% HoldsAt(Balance(account2,value2),time) &
  108% value3>0 &
  109% value1>=value3 ->
  110% Terminates(Transfer(account1,account2,value3),Balance(account2,value2),time).
  111% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:55
  112axiom(terminates(transfer(Account1, Account2, Value3), balance(Account2, Value2), Time),
  113   
  114    [ holds_at(balance(Account1, Value1), Time),
  115      holds_at(balance(Account2, Value2), Time),
  116      comparison(Value3, 0, >),
  117      Value1>=Value3
  118    ]).
  119
  120
  121% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:57
  122% [account1,account2,value1,value2,value3,value4,time]
  123% HoldsAt(Balance(account1,value1),time) &
  124% HoldsAt(Balance(account2,value2),time) &
  125% value3>0 &
  126% value1>=value3 &
  127% value4=(value1-value3) ->
  128% Initiates(Transfer(account1,account2,value3),Balance(account1,value4),time).
  129% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:63
  130axiom(initiates(transfer(Account1, Account2, Value3), balance(Account1, Value4), Time),
  131   
  132    [ holds_at(balance(Account1, Value1), Time),
  133      holds_at(balance(Account2, Value2), Time),
  134      comparison(Value3, 0, >),
  135      Value1>=Value3,
  136      equals(Value4, Value1-Value3)
  137    ]).
  138
  139
  140% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:65
  141% [account1,account2,value1,value2,value3,time]
  142% HoldsAt(Balance(account1,value1),time) &
  143% HoldsAt(Balance(account2,value2),time) &
  144% value3>0 &
  145% value1>=value3 ->
  146% Terminates(Transfer(account1,account2,value3),Balance(account1,value1),time).
  147% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:70
  148axiom(terminates(transfer(Account1, Account2, Value3), balance(Account1, Value1), Time),
  149   
  150    [ holds_at(balance(Account1, Value1), Time),
  151      holds_at(balance(Account2, Value2), Time),
  152      comparison(Value3, 0, >),
  153      Value1>=Value3
  154    ]).
  155
  156
  157% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:72
  158% [account,time]
  159% Initiates(ChargeServiceFee(account),ServiceFeeCharged(account),time).
  160% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:73
  161axiom(initiates(chargeServiceFee(Account), serviceFeeCharged(Account), Time),
  162    []).
  163
  164
  165% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:75
  166% [account,time]
  167% Terminates(MonthlyReset(account),ServiceFeeCharged(account),time).
  168% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:76
  169axiom(terminates(monthlyReset(Account), serviceFeeCharged(Account), Time),
  170    []).
  171
  172
  173% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:78
  174% [account,value1,value2,time]
  175% HoldsAt(Balance(account,value1),time) &
  176% value2 = (value1-ServiceFee(account)) ->
  177% Initiates(ChargeServiceFee(account),
  178%           Balance(account,value2),
  179%           time).
  180% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:83
  181axiom(initiates(chargeServiceFee(Account), balance(Account, Value2), Time),
  182   
  183    [ holds_at(balance(Account, Value1), Time),
  184      equals(Value2, Value1-serviceFee(Account))
  185    ]).
  186
  187
  188% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:85
  189% [account,value,time]
  190% HoldsAt(Balance(account,value),time) ->
  191% Terminates(ChargeServiceFee(account),Balance(account,value),time).
  192% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:87
  193axiom(terminates(chargeServiceFee(Account), balance(Account, Value), Time),
  194    [holds_at(balance(Account, Value), Time)]).
  195
  196
  197% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:89
  198%; Delta
  199% [account,value,time]
  200% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:92
  201% HoldsAt(Balance(account,value),time) &
  202% value<MinimumBalance(account) &
  203% !HoldsAt(ServiceFeeCharged(account),time) ->
  204% Happens(ChargeServiceFee(account),time).
  205% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:95
  206axiom(happens(chargeServiceFee(Account), Time),
  207   
  208    [ holds_at(balance(Account, Value), Time),
  209      comparison(Value, minimumBalance(Account), <),
  210      not(holds_at(serviceFeeCharged(Account), Time))
  211    ]).
  212
  213
  214% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:97
  215% [account,time]
  216% EndOfMonth(time) ->
  217% Happens(MonthlyReset(account),time).
  218% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:99
  219axiom(happens(monthlyReset(Account), Time),
  220    [endOfMonth(Time)]).
  221
  222
  223% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:101
  224% Happens(Transfer(Account1,Account2,1),0).
  225axiom(happens(transfer(account1, account2, 1), t),
  226    [is_time(0)]).
  227
  228
  229% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:102
  230% Happens(Transfer(Account1,Account2,1),0).
  231axiom(happens(transfer(account1, account2, 1), t),
  232    [is_time(0)]).
  233
  234
  235% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:104
  236%; Psi
  237% [account,value1,value2,time]
  238% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:107
  239% HoldsAt(Balance(account,value1),time) &
  240% HoldsAt(Balance(account,value2),time) ->
  241% value1=value2.
  242% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:109
  243axiom(Value1=Value2,
  244   
  245    [ holds_at(balance(Account, Value1), Time),
  246      holds_at(balance(Account, Value2), Time)
  247    ]).
  248
  249
  250% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:111
  251%; Gamma
  252
  253
  254% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:113
  255% !HoldsAt(ServiceFeeCharged(Account1),0).
  256 %  not(initially(serviceFeeCharged(account1))).
  257axiom(not(initially(serviceFeeCharged(account1))),
  258    []).
  259
  260
  261% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:114
  262% !HoldsAt(ServiceFeeCharged(Account2),0).
  263 %  not(initially(serviceFeeCharged(account2))).
  264axiom(not(initially(serviceFeeCharged(account2))),
  265    []).
  266
  267
  268% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:115
  269% HoldsAt(Balance(Account1,3),0).
  270axiom(initially(balance(account1, 3)),
  271    []).
  272
  273
  274% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:116
  275% HoldsAt(Balance(Account2,1),0).
  276axiom(initially(balance(account2, 1)),
  277    []).
  278
  279
  280% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:117
  281% MinimumBalance(Account1)=3.
  282minimumBalance(account1,3).
  283
  284
  285% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:118
  286% MinimumBalance(Account2)=1.
  287minimumBalance(account2,1).
  288
  289
  290% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:119
  291% ServiceFee(Account1)=1.
  292serviceFee(account1,1).
  293
  294
  295% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:120
  296% ServiceFee(Account2)=1.
  297serviceFee(account2,1).
  298
  299
  300% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:121
  301% [time]
  302 % !EndOfMonth(time).
  303 %  not(endOfMonth(Time)).
  304axiom(not(endOfMonth(EndOfMonth_Ret)),
  305    []).
  306
  307% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:123
  308% completion Happens
  309% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:124
  310==> completion(happens).
  311
  312% range time 0 3
  313% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:126
  314==> range(time,0,3).
  315
  316% range value 1 3
  317% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:127
  318==> range(value,1,3).
  319
  320% range offset 1 1
  321% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/examples/Mueller2006/Chapter4/BankAccountServiceFee.e:128
  322==> range(offset,1,1).
  323%; End of file.