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.