254
Forward Chaining in HALO An Implementation Strategy for History-based Logic Pointcuts @International Conference On Dynamic Languages 2007, Lugano, August 27th, 2007 Charlotte Herzeel, Kris Gybels, Pascal Costanza, Coen De Roover and Theo D’hondt Programming Technology Laboratory Vrije Universiteit Brussel

Forward Chaining in HALO

  • Upload
    esug

  • View
    320

  • Download
    4

Embed Size (px)

DESCRIPTION

Forward Chaining in HALO An Implementation Strategy for History-based Logic Pointcuts. Charlotte Herzeel, Kris Gybels, Pascal Costanza, Coen De Roover and Theo D’hondt. ESUG 2007, Lugano

Citation preview

Page 1: Forward Chaining in HALO

Forward Chaining in HALOAn Implementation Strategy for History-based Logic Pointcuts

@International Conference On Dynamic Languages 2007,Lugano, August 27th, 2007

Charlotte Herzeel, Kris Gybels, Pascal Costanza, Coen De Roover and Theo D’hondtProgramming Technology LaboratoryVrije Universiteit Brussel

Page 2: Forward Chaining in HALO

Overview• Introduction

• Logic Meta Programming & Aspect-Oriented Programming

• Running example - going shopping

• History-based Aspects using LOgic:

• Aspect-Oriented Programming for Lisp

• meta model = the program execution

• hybrid language (temporal logic programming/CLOS)

• Implementing HALO

• HALO weaver Architecture

• Query Engine based on RETE

• Reducing Memory Overhead

Page 3: Forward Chaining in HALO

Scattering & tangling

Page 4: Forward Chaining in HALO

Scattering & tanglingTyranny of the dominant decomposition

Page 5: Forward Chaining in HALO

Scattering & tanglingTyranny of the dominant decomposition

tangling & scattering-- maintainability-- reusability-- readability

!

Page 6: Forward Chaining in HALO

Scattering & tanglingTyranny of the dominant decomposition

BankClient

Account

withdraw(AccountNr, Integer)credit(AccountNr, Integer)view(AccountNr)

1 *

*

*

register(Client)createAccount(Client)shareAccount(Client, Account)login(Client)logout(Client)

withdraw(Client, Integer)credit(Client, Integer)transfer(Client, Account)view(Client)

tangling & scattering-- maintainability-- reusability-- readability

!

Page 7: Forward Chaining in HALO

Scattering & tanglingTyranny of the dominant decomposition

BankClient

Account

withdraw(AccountNr, Integer)credit(AccountNr, Integer)view(AccountNr)

1 *

*

*

register(Client)createAccount(Client)shareAccount(Client, Account)login(Client)logout(Client)

withdraw(Client, Integer)credit(Client, Integer)transfer(Client, Account)view(Client)

tangling & scattering-- maintainability-- reusability-- readability

!

Page 8: Forward Chaining in HALO

Scattering & tanglingTyranny of the dominant decomposition

BankClient

Account

withdraw(AccountNr, Integer)credit(AccountNr, Integer)view(AccountNr)

1 *

*

*

register(Client)createAccount(Client)shareAccount(Client, Account)login(Client)logout(Client)

withdraw(Client, Integer)credit(Client, Integer)transfer(Client, Account)view(Client)

log sensitive operations = crosscutting concern

tangling & scattering-- maintainability-- reusability-- readability

!

Page 9: Forward Chaining in HALO

CLOS: before, after, around

Scattering & tanglingTyranny of the dominant decomposition

BankClient

Account

withdraw(AccountNr, Integer)credit(AccountNr, Integer)view(AccountNr)

1 *

*

*

register(Client)createAccount(Client)shareAccount(Client, Account)login(Client)logout(Client)

withdraw(Client, Integer)credit(Client, Integer)transfer(Client, Account)view(Client)

log sensitive operations = crosscutting concern

tangling & scattering-- maintainability-- reusability-- readability

!

Page 10: Forward Chaining in HALO

CLOS: before, after, around

Scattering & tanglingTyranny of the dominant decomposition

BankClient

Account

withdraw(AccountNr, Integer)credit(AccountNr, Integer)view(AccountNr)

1 *

*

*

register(Client)createAccount(Client)shareAccount(Client, Account)login(Client)logout(Client)

withdraw(Client, Integer)credit(Client, Integer)transfer(Client, Account)view(Client)

log sensitive operations = crosscutting concern

tangling & scattering-- maintainability-- reusability-- readability

!

(defmethod shareAccount :around ((c client), (a account)) (log “sharing account ~s ~s” c a)(call-next-method))

(defmethod withdraw :around ((c client), (i integer)) ...)

(defmethod credit :around ((c client), (i integer)) ...)

Page 11: Forward Chaining in HALO

CLOS: before, after, around

Scattering & tanglingTyranny of the dominant decomposition

BankClient

Account

withdraw(AccountNr, Integer)credit(AccountNr, Integer)view(AccountNr)

1 *

*

*

register(Client)createAccount(Client)shareAccount(Client, Account)login(Client)logout(Client)

withdraw(Client, Integer)credit(Client, Integer)transfer(Client, Account)view(Client)

log sensitive operations = crosscutting concern

tangling & scattering-- maintainability-- reusability-- readability

!

Page 12: Forward Chaining in HALO

CLOS: before, after, around

Scattering & tanglingTyranny of the dominant decomposition

BankClient

Account

withdraw(AccountNr, Integer)credit(AccountNr, Integer)view(AccountNr)

1 *

*

*

register(Client)createAccount(Client)shareAccount(Client, Account)login(Client)logout(Client)

withdraw(Client, Integer)credit(Client, Integer)transfer(Client, Account)view(Client)

log sensitive operations = crosscutting concern

tangling & scattering-- maintainability-- reusability-- readability

!Aspect-Oriented Programming

Page 13: Forward Chaining in HALO

CLOS: before, after, around

Aspect

Scattering & tanglingTyranny of the dominant decomposition

BankClient

Account

withdraw(AccountNr, Integer)credit(AccountNr, Integer)view(AccountNr)

1 *

*

*

register(Client)createAccount(Client)shareAccount(Client, Account)login(Client)logout(Client)

withdraw(Client, Integer)credit(Client, Integer)transfer(Client, Account)view(Client)

log sensitive operations = crosscutting concern

tangling & scattering-- maintainability-- reusability-- readability

!Aspect-Oriented Programming

Page 14: Forward Chaining in HALO

CLOS: before, after, around

Aspect

Scattering & tanglingTyranny of the dominant decomposition

BankClient

Account

withdraw(AccountNr, Integer)credit(AccountNr, Integer)view(AccountNr)

1 *

*

*

register(Client)createAccount(Client)shareAccount(Client, Account)login(Client)logout(Client)

withdraw(Client, Integer)credit(Client, Integer)transfer(Client, Account)view(Client)

log sensitive operations = crosscutting concern

tangling & scattering-- maintainability-- reusability-- readability

!Aspect-Oriented Programming

“at each sensitive method call,

Page 15: Forward Chaining in HALO

CLOS: before, after, around

Aspect

Scattering & tanglingTyranny of the dominant decomposition

BankClient

Account

withdraw(AccountNr, Integer)credit(AccountNr, Integer)view(AccountNr)

1 *

*

*

register(Client)createAccount(Client)shareAccount(Client, Account)login(Client)logout(Client)

withdraw(Client, Integer)credit(Client, Integer)transfer(Client, Account)view(Client)

log sensitive operations = crosscutting concern

tangling & scattering-- maintainability-- reusability-- readability

!Aspect-Oriented Programming

make a log entry”

“at each sensitive method call,

Page 16: Forward Chaining in HALO

CLOS: before, after, around

Aspect

Scattering & tanglingTyranny of the dominant decomposition

BankClient

Account

withdraw(AccountNr, Integer)credit(AccountNr, Integer)view(AccountNr)

1 *

*

*

register(Client)createAccount(Client)shareAccount(Client, Account)login(Client)logout(Client)

withdraw(Client, Integer)credit(Client, Integer)transfer(Client, Account)view(Client)

log sensitive operations = crosscutting concern

tangling & scattering-- maintainability-- reusability-- readability

!Aspect-Oriented Programming

pointcut

make a log entry”

“at each sensitive method call,

Page 17: Forward Chaining in HALO

CLOS: before, after, around

Aspect

Scattering & tanglingTyranny of the dominant decomposition

BankClient

Account

withdraw(AccountNr, Integer)credit(AccountNr, Integer)view(AccountNr)

1 *

*

*

register(Client)createAccount(Client)shareAccount(Client, Account)login(Client)logout(Client)

withdraw(Client, Integer)credit(Client, Integer)transfer(Client, Account)view(Client)

log sensitive operations = crosscutting concern

tangling & scattering-- maintainability-- reusability-- readability

!Aspect-Oriented Programming

pointcut

make a log entry”advice

“at each sensitive method call,

Page 18: Forward Chaining in HALO

CLOS: before, after, around

Aspect

Scattering & tanglingTyranny of the dominant decomposition

BankClient

Account

withdraw(AccountNr, Integer)credit(AccountNr, Integer)view(AccountNr)

1 *

*

*

register(Client)createAccount(Client)shareAccount(Client, Account)login(Client)logout(Client)

withdraw(Client, Integer)credit(Client, Integer)transfer(Client, Account)view(Client)

log sensitive operations = crosscutting concern

tangling & scattering-- maintainability-- reusability-- readability

!Aspect-Oriented Programming

pointcut

make a log entry”advice

“at each sensitive method call,

(defmethod shareAccount :around ((c client), (a account)) (log “sharing account ~s ~s” c a)(call-next-method))

(defmethod withdraw :around ((c client), (i integer)) ...)

(defmethod credit :around ((c client), (i integer)) ...)

Page 19: Forward Chaining in HALO

CLOS: before, after, around

Aspect

Scattering & tanglingTyranny of the dominant decomposition

BankClient

Account

withdraw(AccountNr, Integer)credit(AccountNr, Integer)view(AccountNr)

1 *

*

*

register(Client)createAccount(Client)shareAccount(Client, Account)login(Client)logout(Client)

withdraw(Client, Integer)credit(Client, Integer)transfer(Client, Account)view(Client)

log sensitive operations = crosscutting concern

tangling & scattering-- maintainability-- reusability-- readability

!Aspect-Oriented Programming

pointcut

make a log entry”advice

“at each sensitive method call,

Page 20: Forward Chaining in HALO

CLOS: before, after, around

Aspect

Scattering & tanglingTyranny of the dominant decomposition

BankClient

Account

withdraw(AccountNr, Integer)credit(AccountNr, Integer)view(AccountNr)

1 *

*

*

register(Client)createAccount(Client)shareAccount(Client, Account)login(Client)logout(Client)

withdraw(Client, Integer)credit(Client, Integer)transfer(Client, Account)view(Client)

log sensitive operations = crosscutting concern

tangling & scattering-- maintainability-- reusability-- readability

! ?macros

Aspect-Oriented Programming

pointcut

make a log entry”advice

“at each sensitive method call,

Page 21: Forward Chaining in HALO

CLOS: before, after, around

Aspect

Scattering & tanglingTyranny of the dominant decomposition

BankClient

Account

withdraw(AccountNr, Integer)credit(AccountNr, Integer)view(AccountNr)

1 *

*

*

register(Client)createAccount(Client)shareAccount(Client, Account)login(Client)logout(Client)

withdraw(Client, Integer)credit(Client, Integer)transfer(Client, Account)view(Client)

log sensitive operations = crosscutting concern

tangling & scattering-- maintainability-- reusability-- readability

! -- current join point only?macros

Aspect-Oriented Programming

pointcut

make a log entry”advice

“at each sensitive method call,

Page 22: Forward Chaining in HALO

CLOS: before, after, around

Aspect

Scattering & tanglingTyranny of the dominant decomposition

BankClient

Account

withdraw(AccountNr, Integer)credit(AccountNr, Integer)view(AccountNr)

1 *

*

*

register(Client)createAccount(Client)shareAccount(Client, Account)login(Client)logout(Client)

withdraw(Client, Integer)credit(Client, Integer)transfer(Client, Account)view(Client)

log sensitive operations = crosscutting concern

tangling & scattering-- maintainability-- reusability-- readability

! -- current join point only?macros

! history of join points

Aspect-Oriented Programming

pointcut

make a log entry”advice

“at each sensitive method call,

Page 23: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

base)

Page 24: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(base base)

Page 25: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(base base)(meta base))

Page 26: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(base base)(meta base))

meta language object language meta modelMP

Page 27: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

Page 28: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

SOUL for DMP:Base code to facts -> Image queryingSymbiosis (quasiquoting)Rule abstraction (Libraries)Generating codeDetecting/Verifying coding patterns

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

Page 29: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(defclass account () ((balance)))(defclass client () ((id)))(defmethod withdraw ((a account) nr) (setf (balance a) (- (balance a) nr)))(defmethod credit ((a account) nr) ...)

SOUL for DMP:Base code to facts -> Image queryingSymbiosis (quasiquoting)Rule abstraction (Libraries)Generating codeDetecting/Verifying coding patterns

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

Page 30: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(defclass account () ((balance)))(defclass client () ((id)))(defmethod withdraw ((a account) nr) (setf (balance a) (- (balance a) nr)))(defmethod credit ((a account) nr) ...)

SOUL for DMP:Base code to facts -> Image queryingSymbiosis (quasiquoting)Rule abstraction (Libraries)Generating codeDetecting/Verifying coding patterns

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

Page 31: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(defclass account () ((balance)))(defclass client () ((id)))(defmethod withdraw ((a account) nr) (setf (balance a) (- (balance a) nr)))(defmethod credit ((a account) nr) ...)

class(‘account , <account>)classImplementsMethodNamed(<account> ,‘withdraw, <withdraw>)method(<account>, <withdraw>)methodName(<withdraw>, ‘withdraw)methodArguments(<withdraw>, ())methodStatements(<withdraw>, ((setf (balance a) (- (balance a) nr))))...

SOUL for DMP:Base code to facts -> Image queryingSymbiosis (quasiquoting)Rule abstraction (Libraries)Generating codeDetecting/Verifying coding patterns

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

Page 32: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(defclass account () ((balance)))(defclass client () ((id)))(defmethod withdraw ((a account) nr) (setf (balance a) (- (balance a) nr)))(defmethod credit ((a account) nr) ...)

class(‘account , <account>)classImplementsMethodNamed(<account> ,‘withdraw, <withdraw>)method(<account>, <withdraw>)methodName(<withdraw>, ‘withdraw)methodArguments(<withdraw>, ())methodStatements(<withdraw>, ((setf (balance a) (- (balance a) nr))))...

abstractClassHeuristic() if forall(abstractClass(?C),baseClass(?C)), forall(baseClass(?C),abstractClass(?C)).

SOUL for DMP:Base code to facts -> Image queryingSymbiosis (quasiquoting)Rule abstraction (Libraries)Generating codeDetecting/Verifying coding patterns

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

Page 33: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(defclass account () ((balance)))(defclass client () ((id)))(defmethod withdraw ((a account) nr) (setf (balance a) (- (balance a) nr)))(defmethod credit ((a account) nr) ...)

class(‘account , <account>)classImplementsMethodNamed(<account> ,‘withdraw, <withdraw>)method(<account>, <withdraw>)methodName(<withdraw>, ‘withdraw)methodArguments(<withdraw>, ())methodStatements(<withdraw>, ((setf (balance a) (- (balance a) nr))))...

abstractClassHeuristic() if forall(abstractClass(?C),baseClass(?C)), forall(baseClass(?C),abstractClass(?C)).

SOUL for DMP:Base code to facts -> Image queryingSymbiosis (quasiquoting)Rule abstraction (Libraries)Generating codeDetecting/Verifying coding patterns

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

compute

Page 34: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

Page 35: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

CARMA: AOP with a SOULmodularizing scattered & tangled codeJoin point type predicatesLink to shadowsSymbiosisLoose coupling aspect/basePattern-based pointcuts

Page 36: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

(defclass account () ...)(defmethod withdraw ((a account) nr) (setf (balance a) (- (balance a) nr)))(defmethod credit ((a account) nr) ...)(withdraw *account* 3)(print (get-value *account* ‘balance))

CARMA: AOP with a SOULmodularizing scattered & tangled codeJoin point type predicatesLink to shadowsSymbiosisLoose coupling aspect/basePattern-based pointcuts

Page 37: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

(defclass account () ...)(defmethod withdraw ((a account) nr) (setf (balance a) (- (balance a) nr)))(defmethod credit ((a account) nr) ...)(withdraw *account* 3)(print (get-value *account* ‘balance))

CARMA: AOP with a SOULmodularizing scattered & tangled codeJoin point type predicatesLink to shadowsSymbiosisLoose coupling aspect/basePattern-based pointcuts

Page 38: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

class(‘account , <account>)classImplementsMethodNamed(<account> ,‘withdraw, <withdraw>)send(<jp>, withdraw, [<account>])assignment(<jp>, balance, 10, 7)reference(<jp2>, balance, 7)

1.

2.

(defclass account () ...)(defmethod withdraw ((a account) nr) (setf (balance a) (- (balance a) nr)))(defmethod credit ((a account) nr) ...)(withdraw *account* 3)(print (get-value *account* ‘balance))

CARMA: AOP with a SOULmodularizing scattered & tangled codeJoin point type predicatesLink to shadowsSymbiosisLoose coupling aspect/basePattern-based pointcuts

Page 39: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

class(‘account , <account>)classImplementsMethodNamed(<account> ,‘withdraw, <withdraw>)send(<jp>, withdraw, [<account>])assignment(<jp>, balance, 10, 7)reference(<jp2>, balance, 7)

1.

2.

(defclass account () ...)(defmethod withdraw ((a account) nr) (setf (balance a) (- (balance a) nr)))(defmethod credit ((a account) nr) ...)(withdraw *account* 3)(print (get-value *account* ‘balance))

CARMA: AOP with a SOULmodularizing scattered & tangled codeJoin point type predicatesLink to shadowsSymbiosisLoose coupling aspect/basePattern-based pointcuts

carma pointcut

Page 40: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

rule abstraction,unification,recursion

class(‘account , <account>)classImplementsMethodNamed(<account> ,‘withdraw, <withdraw>)send(<jp>, withdraw, [<account>])assignment(<jp>, balance, 10, 7)reference(<jp2>, balance, 7)

1.

2.

(defclass account () ...)(defmethod withdraw ((a account) nr) (setf (balance a) (- (balance a) nr)))(defmethod credit ((a account) nr) ...)(withdraw *account* 3)(print (get-value *account* ‘balance))

CARMA: AOP with a SOULmodularizing scattered & tangled codeJoin point type predicatesLink to shadowsSymbiosisLoose coupling aspect/basePattern-based pointcuts

carma pointcut

Page 41: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

rule abstraction,unification,recursion

class(‘account , <account>)classImplementsMethodNamed(<account> ,‘withdraw, <withdraw>)send(<jp>, withdraw, [<account>])assignment(<jp>, balance, 10, 7)reference(<jp2>, balance, 7)

1.

2.

(defclass account () ...)(defmethod withdraw ((a account) nr) (setf (balance a) (- (balance a) nr)))(defmethod credit ((a account) nr) ...)(withdraw *account* 3)(print (get-value *account* ‘balance))

reusability,reasoning

CARMA: AOP with a SOULmodularizing scattered & tangled codeJoin point type predicatesLink to shadowsSymbiosisLoose coupling aspect/basePattern-based pointcuts

carma pointcut

Page 42: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

rule abstraction,unification,recursion

class(‘account , <account>)classImplementsMethodNamed(<account> ,‘withdraw, <withdraw>)send(<jp>, withdraw, [<account>])assignment(<jp>, balance, 10, 7)reference(<jp2>, balance, 7)

1.

2.

(defclass account () ...)(defmethod withdraw ((a account) nr) (setf (balance a) (- (balance a) nr)))(defmethod credit ((a account) nr) ...)(withdraw *account* 3)(print (get-value *account* ‘balance))

reusability,reasoning

Page 43: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

rule abstraction,unification,recursion

class(‘account , <account>)classImplementsMethodNamed(<account> ,‘withdraw, <withdraw>)send(<jp>, withdraw, [<account>])assignment(<jp>, balance, 10, 7)reference(<jp2>, balance, 7)

1.

2.

(defclass account () ...)(defmethod withdraw ((a account) nr) (setf (balance a) (- (balance a) nr)))(defmethod credit ((a account) nr) ...)(withdraw *account* 3)(print (get-value *account* ‘balance))

reusability,reasoning

HALO: AOP with a memoryTemporal/Stateful pointcuts

Page 44: Forward Chaining in HALO

Declarative Meta Programming & Aspect-Oriented Programming

(base base)(meta base))

meta language object language

pointcut language

meta model

base language

MP

AOP jp model

rule abstraction,unification,recursion

class(‘account , <account>)classImplementsMethodNamed(<account> ,‘withdraw, <withdraw>)send(<jp>, withdraw, [<account>])assignment(<jp>, balance, 10, 7)reference(<jp2>, balance, 7)

1.

2.

(defclass account () ...)(defmethod withdraw ((a account) nr) (setf (balance a) (- (balance a) nr)))(defmethod credit ((a account) nr) ...)(withdraw *account* 3)(print (get-value *account* ‘balance))

reusability,reasoning

HALO: AOP with a memoryTemporal/Stateful pointcuts

record

Page 45: Forward Chaining in HALO

VISAMasterCardMasterCard

BoutiqueClothing

Running example

Page 46: Forward Chaining in HALO

VISAMasterCardMasterCard

BoutiqueClothing

Running example

Page 47: Forward Chaining in HALO

VISAMasterCardMasterCard

BoutiqueClothing

Running example

Page 48: Forward Chaining in HALO

VISAMasterCardMasterCard

BoutiqueClothing

Running example

Page 49: Forward Chaining in HALO

VISAMasterCardMasterCard

BoutiqueClothing

-10%

Running example

Page 50: Forward Chaining in HALO

VISAMasterCardMasterCard

BoutiqueClothing

-10%

Running example

Page 51: Forward Chaining in HALO

VISAMasterCardMasterCard

BoutiqueClothing

-10%

Running example

Page 52: Forward Chaining in HALO

VISAMasterCardMasterCard

BoutiqueClothing

-10%

Running example

Page 53: Forward Chaining in HALO

VISAMasterCardMasterCard

BoutiqueClothing

Running example

Page 54: Forward Chaining in HALO

VISAMasterCardMasterCard

BoutiqueClothing

Running example

Page 55: Forward Chaining in HALO

VISAMasterCardMasterCard

BoutiqueClothing

Running example

Page 56: Forward Chaining in HALO

VISAMasterCardMasterCard

$

BoutiqueClothing

Running example

Page 57: Forward Chaining in HALO

VISAMasterCardMasterCard

$

BoutiqueClothing

Running example

Page 58: Forward Chaining in HALO

VISAMasterCardMasterCard

$

BoutiqueClothing

Running example

1*

Shop Article

Basketlogin(shop,name,pwd)

buy(shop,name,pwd)

checkout()

current-rate(article)set-rate(article, rate)

1

1

1

*

*

* * 1

Basket

User

Promotions

Page 59: Forward Chaining in HALO

VISAMasterCardMasterCard

$

BoutiqueClothing

Running example

1*

Shop Article

Basketlogin(shop,name,pwd)

buy(shop,name,pwd)

checkout()

current-rate(article)set-rate(article, rate)

1

1

1

*

*

* * 1

Basket

User

Promotions

Page 60: Forward Chaining in HALO

VISAMasterCardMasterCard

$

BoutiqueClothing

Running example

1*

Shop Article

Basketlogin(shop,name,pwd)

buy(shop,name,pwd)

checkout()

current-rate(article)set-rate(article, rate)

1

1

1

*

*

* * 1

Basket

User

Promotions

Page 61: Forward Chaining in HALO

VISAMasterCardMasterCard

$

BoutiqueClothing

Running example

1*

Shop Article

Basketlogin(shop,name,pwd)

buy(shop,name,pwd)

checkout()

current-rate(article)set-rate(article, rate)

1

1

1

*

*

* * 1

Basket

User

Promotions

Stateful!!

Page 62: Forward Chaining in HALO

Mental Model

fact generator

query engine

jp ctr

(defclass user () ((name))(defmethod checkout ((u user)) ...)(defmethod buy ((u user) (a article)) ...)

base

most-recent, all-past, since, cflow

temporal relations

(at ((gf-call checkout ?u) (most-recent (buy ?u ?a))) (log “user ̃s bought ̃s”?u ?a))

aspect

(defrule (buy ?u) (gf-call buy ?u ?a))

rules

TN: (gf-call checkout <user>)TN-1: (gf-call buy <user> <cd>)

jp facts

Page 63: Forward Chaining in HALO

Join Point Model

(make-instance‘user) (create‘user <kris>)

(checkout <kris>) (gf-call checkout <kris>)

(end-gf-call checkout <kris> nil)

(get-value <kris>‘name) (slot-get <kris>‘name “kris”)

(setf (get-value <kris>‘name) “kris”)

(slot-set <kris>‘name“”“kris”)

CLOS Join Point Facts

Page 64: Forward Chaining in HALO

Join Point Model

(make-instance‘user) (create‘user <kris>)

(checkout <kris>) (gf-call checkout <kris>)

(end-gf-call checkout <kris> nil)

(get-value <kris>‘name) (slot-get <kris>‘name “kris”)

(setf (get-value <kris>‘name) “kris”)

(slot-set <kris>‘name“”“kris”)

CLOS Join Point Facts

?obj

Join Point Type Predicates

?obj ?name ?val

?oval?obj ?name ?val

?obj?gf-name

?gf-name ?obj ?res

Page 65: Forward Chaining in HALO

Join Point Model

(make-instance‘user) (create‘user <kris>)

(checkout <kris>) (gf-call checkout <kris>)

(end-gf-call checkout <kris> nil)

(get-value <kris>‘name) (slot-get <kris>‘name “kris”)

(setf (get-value <kris>‘name) “kris”)

(slot-set <kris>‘name“”“kris”)

CLOS Join Point Facts

?obj

Join Point Type Predicates

?obj ?name ?val

?oval?obj ?name ?val

?obj?gf-name

?gf-name ?obj ?res

Extensible ...

(defrule (promotion “25-12-2008”))

Page 66: Forward Chaining in HALO

Join Point Model

(make-instance‘user) (create‘user <kris>)

(checkout <kris>) (gf-call checkout <kris>)

(end-gf-call checkout <kris> nil)

(get-value <kris>‘name) (slot-get <kris>‘name “kris”)

(setf (get-value <kris>‘name) “kris”)

(slot-set <kris>‘name“”“kris”)

CLOS Join Point Facts

Hybrid Pointcuts

?obj

Join Point Type Predicates

?obj ?name ?val

?oval?obj ?name ?val

?obj?gf-name

?gf-name ?obj ?res

(escape ?name (password ?user))

Extensible ...

(defrule (promotion “25-12-2008”))

(defrule (date ?date) (escape ?date (get-current-time)))

Page 67: Forward Chaining in HALO

Join Point Model

(make-instance‘user) (create‘user <kris>)

(checkout <kris>) (gf-call checkout <kris>)

(end-gf-call checkout <kris> nil)

(get-value <kris>‘name) (slot-get <kris>‘name “kris”)

(setf (get-value <kris>‘name) “kris”)

(slot-set <kris>‘name“”“kris”)

CLOS Join Point Facts

Hybrid Pointcuts

?obj

Join Point Type Predicates

?obj ?name ?val

?oval?obj ?name ?val

?obj?gf-name

?gf-name ?obj ?res

(escape ?name (password ?user))

Extensible ...

(defrule (promotion “25-12-2008”))

(defrule (date ?date) (escape ?date (get-current-time)))

Page 68: Forward Chaining in HALO

Join Point Model

(make-instance‘user) (create‘user <kris>)

(checkout <kris>) (gf-call checkout <kris>)

(end-gf-call checkout <kris> nil)

(get-value <kris>‘name) (slot-get <kris>‘name “kris”)

(setf (get-value <kris>‘name) “kris”)

(slot-set <kris>‘name“”“kris”)

CLOS Join Point Facts

Hybrid Pointcuts

?obj

Join Point Type Predicates

?obj ?name ?val

?oval?obj ?name ?val

?obj?gf-name

?gf-name ?obj ?res

(escape ?name (password ?user))

Extensible ...

(defrule (promotion “25-12-2008”))

(defrule (date ?date) (escape ?date (get-current-time)))

Ad-hoccontext-exposure

Page 69: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

Page 70: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

T customer

Page 71: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

T customer

1.

Page 72: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

T customer

login

1.

Page 73: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

T customer

login

2.1.

Page 74: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

T customer

login buy

2.1.

Page 75: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

T customer

login buy

2.3.

1.

Page 76: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

T customer

logoutlogin buy

2.3.

1.

Page 77: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

T customer

logoutlogin buy

2.3.4.

1.

Page 78: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

T customer

loginlogoutlogin buy

2.3.4.

1.

Page 79: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

T customer

loginlogoutlogin buy

2.3.4.

1.

5.

Page 80: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

T customer

login buylogoutlogin buy

2.3.4.

1.

5.

Page 81: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

T customer

login buylogoutlogin buy

2.3.4.

1.

5.6.

Page 82: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

T customer

login buy buylogoutlogin buy

2.3.4.

1.

5.6.

Page 83: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

T customer

login buy buylogoutlogin buy

2.3.4.

1.

5.6.7.

Page 84: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

T customer

login buy checkoutbuylogoutlogin buy

2.3.4.

1.

5.6.7.

Page 85: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

((gf-call checkout ?args) (most-recent (gf-call buy ?args2)))

T customer

login buy checkoutbuylogoutlogin buy

2.3.4.

1.

5.6.7.

Page 86: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

((gf-call checkout ?args) (most-recent (gf-call buy ?args2)))

T customer

login buy checkoutbuylogoutlogin buy

2.3.4.

1.

5.6.7.

Page 87: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

((gf-call checkout ?args) (most-recent (gf-call buy ?args2)))

T customer

login buy checkoutbuylogoutlogin buy

2.3.4.

1.

5.6.7.

Page 88: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

((gf-call checkout ?args) (most-recent (gf-call buy ?args2)))

T customer

login buy buy checkoutbuy logoutlogin

T customer

login buy checkoutbuylogoutlogin buy

2.3.4.

1.

5.6.7.

Page 89: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

((gf-call checkout ?args) (all-past (gf-call buy ?args2)))

((gf-call checkout ?args) (most-recent (gf-call buy ?args2)))

T customer

login buy buy checkoutbuy logoutlogin

T customer

login buy checkoutbuylogoutlogin buy

2.3.4.

1.

5.6.7.

Page 90: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

((gf-call checkout ?args) (all-past (gf-call buy ?args2)))

((gf-call checkout ?args) (most-recent (gf-call buy ?args2)))

T customer

login buy buy checkoutbuy logoutlogin

T customer

login buy checkoutbuylogoutlogin buy

2.3.4.

1.

5.6.7.

Page 91: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

((gf-call checkout ?args) (all-past (gf-call buy ?args2)))

((gf-call checkout ?args) (most-recent (gf-call buy ?args2)))

T customer

login buy buy checkoutbuy logoutlogin

T customer

login buy checkoutbuylogoutlogin buy

2.3.4.

1.

5.6.7.

Page 92: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

((gf-call checkout ?args) (all-past (gf-call buy ?args2)))

((gf-call checkout ?args) (most-recent (gf-call buy ?args2)))

T customer

login buy buy checkoutbuy logoutlogin

T customer

login buy checkoutbuylogoutlogin buy

2.3.4.

1.

5.6.7.

Page 93: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

((gf-call checkout ?args) (all-past (gf-call buy ?args2)))

((gf-call checkout ?args) (most-recent (gf-call buy ?args2)))

T customer

login buy buy checkoutbuy logoutlogin

T customer

login buy checkoutbuylogoutlogin buy

2.3.4.

1.

5.6.7.

Page 94: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

((gf-call checkout ?args) (all-past (gf-call buy ?args2)))

((gf-call checkout ?args) (most-recent (gf-call buy ?args2)))

T customer

login buy buy checkoutbuy logoutlogin

T customer

login buy checkoutbuylogoutlogin buy

T customer

login buy buy checkoutbuy logoutlogin

2.3.4.

1.

5.6.7.

Page 95: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

((gf-call checkout ?args) (all-past (gf-call buy ?args2)))

((gf-call checkout ?args) (most-recent (gf-call buy ?args2)))

T customer

login buy buy checkoutbuy logoutlogin

T customer

login buy checkoutbuylogoutlogin buy

T customer

login buy buy checkoutbuy logoutlogin

((gf-call checkout ?args) (since (most-recent (gf-call login ?args2)) (all-past (gf-call buy ?args3)

2.3.4.

1.

5.6.7.

Page 96: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

((gf-call checkout ?args) (all-past (gf-call buy ?args2)))

((gf-call checkout ?args) (most-recent (gf-call buy ?args2)))

T customer

login buy buy checkoutbuy logoutlogin

T customer

login buy checkoutbuylogoutlogin buy

T customer

login buy buy checkoutbuy logoutlogin

((gf-call checkout ?args) (since (most-recent (gf-call login ?args2)) (all-past (gf-call buy ?args3)

2.3.4.

1.

5.6.7.

Page 97: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

((gf-call checkout ?args) (all-past (gf-call buy ?args2)))

((gf-call checkout ?args) (most-recent (gf-call buy ?args2)))

T customer

login buy buy checkoutbuy logoutlogin

T customer

login buy checkoutbuylogoutlogin buy

T customer

login buy buy checkoutbuy logoutlogin

((gf-call checkout ?args) (since (most-recent (gf-call login ?args2)) (all-past (gf-call buy ?args3)

2.3.4.

1.

5.6.7.

Page 98: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

((gf-call checkout ?args) (all-past (gf-call buy ?args2)))

((gf-call checkout ?args) (most-recent (gf-call buy ?args2)))

T customer

login buy buy checkoutbuy logoutlogin

T customer

login buy checkoutbuylogoutlogin buy

T customer

login buy buy checkoutbuy logoutlogin

((gf-call checkout ?args) (since (most-recent (gf-call login ?args2)) (all-past (gf-call buy ?args3)

2.3.4.

1.

5.6.7.

Page 99: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

((gf-call checkout ?args) (all-past (gf-call buy ?args2)))

((gf-call checkout ?args) (most-recent (gf-call buy ?args2)))

T customer

login buy buy checkoutbuy logoutlogin

T customer

login buy checkoutbuylogoutlogin buy

T customer

login buy buy checkoutbuy logoutlogin

((gf-call checkout ?args) (since (most-recent (gf-call login ?args2)) (all-past (gf-call buy ?args3)

2.3.4.

1.

5.6.7.

Page 100: Forward Chaining in HALO

Temporal Matching(login <shop> <kris>“kris”“kros”)(buy <kris> <jacket>)(logout <kris>)(login <shop> <kris>“kris”“kros”)(buy <kris> <t-shirt>)(buy <kris> <socks>)(checkout <kris>)

((gf-call checkout ?args) (all-past (gf-call buy ?args2)))

((gf-call checkout ?args) (most-recent (gf-call buy ?args2)))

T customer

login buy buy checkoutbuy logoutlogin

T customer

login buy checkoutbuylogoutlogin buy

T customer

login buy buy checkoutbuy logoutlogin

((gf-call checkout ?args) (since (most-recent (gf-call login ?args2)) (all-past (gf-call buy ?args3)

Stateful context-exposure

2.3.4.

1.

5.6.7.

Page 101: Forward Chaining in HALO

Stateful context-exposure

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

Page 102: Forward Chaining in HALO

Stateful context-exposure

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

T <kris>

Page 103: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

T <kris>

Page 104: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

1.

T <kris>

Page 105: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.1.

T <kris>

Page 106: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.

1.

T <kris>

Page 107: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.

1.

T <kris>

login

Page 108: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

T <kris>

login

Page 109: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

T <kris>

login buy

Page 110: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.

T <kris>

login buy

Page 111: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

login buy

Page 112: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

Page 113: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

Page 114: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

Page 115: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

Page 116: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

Page 117: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

Page 118: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(defrule (rate-for ?rate ?article) (escape ?promo (singleton-instance‘promotions) (escape ?rate (discount-rate-for ?promo ?article)))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

Page 119: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

Page 120: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

Page 121: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

Page 122: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

“<kris> gets a 0.05% discount on <cd>”

Page 123: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

“<kris> gets a 0.05% discount on <cd>”

Page 124: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

“<kris> gets a 0.05% discount on <cd>”

“<kris> gets a 0.05% discount on <cd>”

Page 125: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

“<kris> gets a 0.05% discount on <cd>”

“<kris> gets a 0.05% discount on <cd>”

Page 126: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(at ((gf-call buy ?user ?article) (rate-for ?rate ?article) (most-recent (gf-call login ?user _ _ _))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

“<kris> gets a 0.05% discount on <cd>”

“<kris> gets a 0.05% discount on <cd>”

Page 127: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(at ((gf-call buy ?user ?article) (rate-for ?rate ?article) (most-recent (gf-call login ?user _ _ _))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

“<kris> gets a 0.05% discount on <cd>”

“<kris> gets a 0.05% discount on <cd>”

Page 128: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(at ((gf-call buy ?user ?article) (rate-for ?rate ?article) (most-recent (gf-call login ?user _ _ _))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

“<kris> gets a 0.05% discount on <cd>”

“<kris> gets a 0.05% discount on <cd>”

Page 129: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(at ((gf-call buy ?user ?article) (rate-for ?rate ?article) (most-recent (gf-call login ?user _ _ _))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

“<kris> gets a 0.05% discount on <cd>”

“<kris> gets a 0.05% discount on <cd>”

“<kris> gets a 0.05% discount on <cd>”

Page 130: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(at ((gf-call buy ?user ?article) (rate-for ?rate ?article) (most-recent (gf-call login ?user _ _ _))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

“<kris> gets a 0.05% discount on <cd>”

“<kris> gets a 0.05% discount on <cd>”

“<kris> gets a 0.05% discount on <cd>”

Page 131: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(at ((gf-call buy ?user ?article) (rate-for ?rate ?article) (most-recent (gf-call login ?user _ _ _))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

“<kris> gets a 0.05% discount on <cd>”

“<kris> gets a 0.05% discount on <cd>”

“<kris> gets a 0.05% discount on <cd>”

“<kris> gets a 0.00% discount on <cd>”

Page 132: Forward Chaining in HALO

Stateful context-exposure

(at ((gf-call buy ?user ?article) (most-recent (gf-call login ?user _ _ _) (rate-for ?rate ?article))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(at ((gf-call buy ?user ?article) (rate-for ?rate ?article) (most-recent (gf-call login ?user _ _ _))) (format t “̃s gets a ̃s % discount on ̃s”?user ?rate ?article))

(let ((promo (singleton-instance ‘promotions))) (setf (rate-for promo) <cd> 0.05) (login <kris> <shop> “kris””kros”) (buy <kris> <cd>) (setf (rate-for promo) <cd> 0.00) (buy <kris> <cd>)))

2.3.4.

1.

5.6.

T <kris>

buylogin buy

“<kris> gets a 0.05% discount on <cd>”

“<kris> gets a 0.05% discount on <cd>”

“<kris> gets a 0.05% discount on <cd>”

“<kris> gets a 0.00% discount on <cd>”

Stateful context-exposure

Page 133: Forward Chaining in HALO

Weaver Implementation

fact generator

query engine

jp ctr

(defclass user () ((name))(defmethod checkout ((u user)) ...)(defmethod buy ((u user) (a article)) ...)

base

most-recent, all-past, since, cflow

temporal relations

(at ((gf-call checkout ?u) (most-recent (buy ?u ?a))) (log “user ̃s bought ̃s”?u ?a))

aspect

(defrule (buy ?u) (gf-call buy ?u ?a))

rules

TN: (gf-call checkout <user>)TN-1: (gf-call buy <user> <cd>)

fact base

Page 134: Forward Chaining in HALO

Weaver Implementation

fact generator

query engine

jp ctr

(defclass user () ((name))(defmethod checkout ((u user)) ...)(defmethod buy ((u user) (a article)) ...)

base

most-recent, all-past, since, cflow

temporal relations

(at ((gf-call checkout ?u) (most-recent (buy ?u ?a))) (log “user ̃s bought ̃s”?u ?a))

aspect

(defrule (buy ?u) (gf-call buy ?u ?a))

rules

TN: (gf-call checkout <user>)TN-1: (gf-call buy <user> <cd>)

fact base

Page 135: Forward Chaining in HALO

Weaver Implementation

fact generator

query engine

jp ctr

(defclass user () ((name))(defmethod checkout ((u user)) ...)(defmethod buy ((u user) (a article)) ...)

base

most-recent, all-past, since, cflow

temporal relations

(at ((gf-call checkout ?u) (most-recent (buy ?u ?a))) (log “user ̃s bought ̃s”?u ?a))

aspect

(defrule (buy ?u) (gf-call buy ?u ?a))

rules

TN: (gf-call checkout <user>)TN-1: (gf-call buy <user> <cd>)

fact base

* by wrapping class & generic function protocols in CLOS MOP* explicit meta class tagging

Page 136: Forward Chaining in HALO

Weaver Implementation

fact generator

query engine

jp ctr

(defclass user () ((name))(defmethod checkout ((u user)) ...)(defmethod buy ((u user) (a article)) ...)

base

most-recent, all-past, since, cflow

temporal relations

(at ((gf-call checkout ?u) (most-recent (buy ?u ?a))) (log “user ̃s bought ̃s”?u ?a))

aspect

(defrule (buy ?u) (gf-call buy ?u ?a))

rules

TN: (gf-call checkout <user>)TN-1: (gf-call buy <user> <cd>)

fact base

Page 137: Forward Chaining in HALO

Weaver Implementation

fact generator

query engine

jp ctr

(defclass user () ((name))(defmethod checkout ((u user)) ...)(defmethod buy ((u user) (a article)) ...)

base

most-recent, all-past, since, cflow

temporal relations

(at ((gf-call checkout ?u) (most-recent (buy ?u ?a))) (log “user ̃s bought ̃s”?u ?a))

aspect

(defrule (buy ?u) (gf-call buy ?u ?a))

rules

TN: (gf-call checkout <user>)TN-1: (gf-call buy <user> <cd>)

fact base

Page 138: Forward Chaining in HALO

Weaver Implementation

fact generator

query engine

jp ctr

(defclass user () ((name))(defmethod checkout ((u user)) ...)(defmethod buy ((u user) (a article)) ...)

base

most-recent, all-past, since, cflow

temporal relations

(at ((gf-call checkout ?u) (most-recent (buy ?u ?a))) (log “user ̃s bought ̃s”?u ?a))

aspect

(defrule (buy ?u) (gf-call buy ?u ?a))

rules

TN: (gf-call checkout <user>)TN-1: (gf-call buy <user> <cd>)

fact base

* extension of RETE forward chaining, supporting temporal operators + hybrid pointcuts * copy semantics through static analysis

Page 139: Forward Chaining in HALO

Weaver Implementation

fact generator

query engine

jp ctr

(defclass user () ((name))(defmethod checkout ((u user)) ...)(defmethod buy ((u user) (a article)) ...)

base

most-recent, all-past, since, cflow

temporal relations

(at ((gf-call checkout ?u) (most-recent (buy ?u ?a))) (log “user ̃s bought ̃s”?u ?a))

aspect

(defrule (buy ?u) (gf-call buy ?u ?a))

rules

TN: (gf-call checkout <user>)TN-1: (gf-call buy <user> <cd>)

fact base

Page 140: Forward Chaining in HALO

Weaver Implementation

fact generator

query engine

jp ctr

(defclass user () ((name))(defmethod checkout ((u user)) ...)(defmethod buy ((u user) (a article)) ...)

base

most-recent, all-past, since, cflow

temporal relations

(at ((gf-call checkout ?u) (most-recent (buy ?u ?a))) (log “user ̃s bought ̃s”?u ?a))

aspect

(defrule (buy ?u) (gf-call buy ?u ?a))

rules

TN: (gf-call checkout <user>)TN-1: (gf-call buy <user> <cd>)

fact base

Page 141: Forward Chaining in HALO

Weaver Implementation

fact generator

query engine

jp ctr

(defclass user () ((name))(defmethod checkout ((u user)) ...)(defmethod buy ((u user) (a article)) ...)

base

most-recent, all-past, since, cflow

temporal relations

(at ((gf-call checkout ?u) (most-recent (buy ?u ?a))) (log “user ̃s bought ̃s”?u ?a))

aspect

(defrule (buy ?u) (gf-call buy ?u ?a))

rules

TN: (gf-call checkout <user>)TN-1: (gf-call buy <user> <cd>)

fact base

* reducing the join point history dynamically* gbc in RETE based on semantics of temporal operators * results presented @ RV 2007

Page 142: Forward Chaining in HALO

Backward Chaining vs Rete Forward Chaining

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

Page 143: Forward Chaining in HALO

Backward Chaining vs Rete Forward Chaining

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)query engine

Page 144: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

Page 145: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

Page 146: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

Page 147: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

Page 148: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

Page 149: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

Page 150: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

Page 151: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

Page 152: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

Page 153: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

Page 154: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

Page 155: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

Page 156: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

Page 157: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

Page 158: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

’’On every checkout, give a discount based on the rate at login time’’

Page 159: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

’’On every checkout, give a discount based on the rate at login time’’

Page 160: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

1.

’’On every checkout, give a discount based on the rate at login time’’

Page 161: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)1.

’’On every checkout, give a discount based on the rate at login time’’

Page 162: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)1.

’’On every checkout, give a discount based on the rate at login time’’

Page 163: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)1.

’’On every checkout, give a discount based on the rate at login time’’

Page 164: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)1.

’’On every checkout, give a discount based on the rate at login time’’

Page 165: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)1.

’’On every checkout, give a discount based on the rate at login time’’

Page 166: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)1.

’’On every checkout, give a discount based on the rate at login time’’

Page 167: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)1.

’’On every checkout, give a discount based on the rate at login time’’

Page 168: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)1.2.

’’On every checkout, give a discount based on the rate at login time’’

Page 169: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)

1.2.

’’On every checkout, give a discount based on the rate at login time’’

Page 170: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)

1.2.

’’On every checkout, give a discount based on the rate at login time’’

Page 171: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)

1.2.

’’On every checkout, give a discount based on the rate at login time’’

Page 172: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)

1.2.

’’On every checkout, give a discount based on the rate at login time’’

Page 173: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)

1.2.

’’On every checkout, give a discount based on the rate at login time’’

Page 174: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)

1.2.

’’On every checkout, give a discount based on the rate at login time’’

Page 175: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)

1.2.

’’On every checkout, give a discount based on the rate at login time’’

Page 176: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)

1.2.3.

’’On every checkout, give a discount based on the rate at login time’’

Page 177: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

1.2.3.

’’On every checkout, give a discount based on the rate at login time’’

Page 178: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

1.2.3.4.

’’On every checkout, give a discount based on the rate at login time’’

Page 179: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

1.2.3.4. (4 gf-call‘set-rate <shop> 0.00)

’’On every checkout, give a discount based on the rate at login time’’

Page 180: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

’’On every checkout, give a discount based on the rate at login time’’

Page 181: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

’’On every checkout, give a discount based on the rate at login time’’

Page 182: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

’’On every checkout, give a discount based on the rate at login time’’

Page 183: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

’’On every checkout, give a discount based on the rate at login time’’

Page 184: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

’’On every checkout, give a discount based on the rate at login time’’

Page 185: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

’’On every checkout, give a discount based on the rate at login time’’

Page 186: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

’’On every checkout, give a discount based on the rate at login time’’

Page 187: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

’’On every checkout, give a discount based on the rate at login time’’

Page 188: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

(5 gf-call‘checkout <kris>)

’’On every checkout, give a discount based on the rate at login time’’

Page 189: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

(5 gf-call‘checkout <kris>)

’’On every checkout, give a discount based on the rate at login time’’

Page 190: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

(5 gf-call‘checkout <kris>)

’’On every checkout, give a discount based on the rate at login time’’

Page 191: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

(5 gf-call‘checkout <kris>)

’’On every checkout, give a discount based on the rate at login time’’

Page 192: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

(5 gf-call‘checkout <kris>)

’’On every checkout, give a discount based on the rate at login time’’

Page 193: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

(5 gf-call‘checkout <kris>)

(2 gf-call‘login <kris> <shop>)

’’On every checkout, give a discount based on the rate at login time’’

Page 194: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

(5 gf-call‘checkout <kris>)

(2 gf-call‘login <kris> <shop>)

’’On every checkout, give a discount based on the rate at login time’’

Page 195: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

(5 gf-call‘checkout <kris>)

(2 gf-call‘login <kris> <shop>)

’’On every checkout, give a discount based on the rate at login time’’

Page 196: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

(5 gf-call‘checkout <kris>)

(2 gf-call‘login <kris> <shop>) (escape 0.00 (current-rate <shop>)))

’’On every checkout, give a discount based on the rate at login time’’

Page 197: Forward Chaining in HALO

) Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

(5 gf-call‘checkout <kris>)

(2 gf-call‘login <kris> <shop>) (escape 0.00 (current-rate <shop>)))

’’On every checkout, give a discount based on the rate at login time’’

Page 198: Forward Chaining in HALO

)

) Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(4 gf-call‘set-rate <shop> 0.00)

(5 gf-call‘checkout <kris>)

(2 gf-call‘login <kris> <shop>) (escape 0.00 (current-rate <shop>)))

’’On every checkout, give a discount based on the rate at login time’’

Page 199: Forward Chaining in HALO

)

) Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(discount <kris> 0.00))

(4 gf-call‘set-rate <shop> 0.00)

(5 gf-call‘checkout <kris>)

(2 gf-call‘login <kris> <shop>) (escape 0.00 (current-rate <shop>)))

’’On every checkout, give a discount based on the rate at login time’’

Page 200: Forward Chaining in HALO

)

) Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)

1.2.3.4.5.

(discount <kris> 0.00))

(4 gf-call‘set-rate <shop> 0.00)

(5 gf-call‘checkout <kris>)

(2 gf-call‘login <kris> <shop>) (escape 0.00 (current-rate <shop>)))

’’On every checkout, give a discount based on the rate at login time’’

Page 201: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

’’On every checkout, give a discount based on the rate at login time’’

Page 202: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

Page 203: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

Page 204: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

Page 205: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

Page 206: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

Page 207: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

Page 208: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

Page 209: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

Page 210: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

Page 211: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

Page 212: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

Page 213: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

Page 214: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

Page 215: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.

Page 216: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1. (1 gf-call‘set-rate <shop> 0.05)

Page 217: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1. (1 gf-call‘set-rate <shop> 0.05)

Page 218: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1. (1 gf-call‘set-rate <shop> 0.05)

Page 219: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1. (1 gf-call‘set-rate <shop> 0.05)

Page 220: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1. (1 gf-call‘set-rate <shop> 0.05)

Page 221: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1. (1 gf-call‘set-rate <shop> 0.05)

Page 222: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1. (1 gf-call‘set-rate <shop> 0.05)

Page 223: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.

(1 gf-call‘set-rate <shop> 0.05)

Page 224: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)

Page 225: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)

Page 226: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)

Page 227: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)

Page 228: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)

Page 229: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)

(2 gf-call‘login <kris> <shop>)

Page 230: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)

(2 gf-call‘login <kris> <shop>) (escape 0.05 (current-rate <shop>)))

Page 231: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)

(2 gf-call‘login <kris> <shop>) (escape 0.05 (current-rate <shop>)))

Page 232: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.3.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)

(2 gf-call‘login <kris> <shop>) (escape 0.05 (current-rate <shop>)))

Page 233: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.3.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(2 gf-call‘login <kris> <shop>) (escape 0.05 (current-rate <shop>)))

Page 234: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.3.4.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(2 gf-call‘login <kris> <shop>) (escape 0.05 (current-rate <shop>)))

Page 235: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.3.4.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)(4 gf-call‘set-rate <shop> 0.00)

(2 gf-call‘login <kris> <shop>) (escape 0.05 (current-rate <shop>)))

Page 236: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.3.4.5.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)(4 gf-call‘set-rate <shop> 0.00)

(2 gf-call‘login <kris> <shop>) (escape 0.05 (current-rate <shop>)))

Page 237: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.3.4.5.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)(4 gf-call‘set-rate <shop> 0.00)

(2 gf-call‘login <kris> <shop>) (escape 0.05 (current-rate <shop>)))

Page 238: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.3.4.5.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)(4 gf-call‘set-rate <shop> 0.00)

(2 gf-call‘login <kris> <shop>) (escape 0.05 (current-rate <shop>)))

(5 gf-call‘checkout <kris>)

Page 239: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.3.4.5.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)(4 gf-call‘set-rate <shop> 0.00)

(2 gf-call‘login <kris> <shop>) (escape 0.05 (current-rate <shop>)))

(5 gf-call‘checkout <kris>)

Page 240: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining

’’On every checkout, give a discount based on the rate at login time’’

1.2.3.4.5.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)(4 gf-call‘set-rate <shop> 0.00)

(2 gf-call‘login <kris> <shop>) (escape 0.05 (current-rate <shop>)))

(5 gf-call‘checkout <kris>)

(discount <kris> 0.05))

Page 241: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining Stateful

’’On every checkout, give a discount based on the rate at login time’’

1.2.3.4.5.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)(4 gf-call‘set-rate <shop> 0.00)

(2 gf-call‘login <kris> <shop>) (escape 0.05 (current-rate <shop>)))

(5 gf-call‘checkout <kris>)

(discount <kris> 0.05))

Page 242: Forward Chaining in HALO

Backward Chaining

Backward Chaining vs Rete Forward Chaining

(gf-call checkout (?user))

(gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))

and

most-recent

?(discount ?user ?rate)

!

query engine

(set-rate *shop* 0.05)(login *kris* *shop*)(buy *kris* *cd*)(set-rate *shop* 0.00)(checkout *kris*)

ReteForward Chaining Stateful

’’On every checkout, give a discount based on the rate at login time’’

1.2.3.4.5.

(1 gf-call‘set-rate <shop> 0.05)(2 gf-call‘login <kris> <shop>)(3 gf-call‘buy <kris> <cd>)

(5 gf-call‘checkout <kris>)(4 gf-call‘set-rate <shop> 0.00)

(2 gf-call‘login <kris> <shop>) (escape 0.05 (current-rate <shop>)))

(5 gf-call‘checkout <kris>)

(discount <kris> 0.05))

Temporal ExtensionsEscape Extension

Page 243: Forward Chaining in HALO

Reducing Memory Overhead

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

(gf-call checkout (?user))

(gf-call login ?user ?shop)

(escape ?rate (current-rate ?shop))

most-recent

?(discount ?user ?rate)

escape

T1 ?user

T2 ?user ?shop

T2 ?rate ?user ?shop

T1 ?rate ?user ?shop

(login *kris* *shop*)(buy *kris* *cd*)(checkout *kris*)(login *kris* *shop*)(buy *kris* *dvd*)(checkout *kris*)

Code

Page 244: Forward Chaining in HALO

Reducing Memory Overhead

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

(gf-call checkout (?user))

(gf-call login ?user ?shop)

(escape ?rate (current-rate ?shop))

most-recent

?(discount ?user ?rate)

escape

T1 ?user

T2 ?user ?shop

T2 ?rate ?user ?shop

T1 ?rate ?user ?shop

(login *kris* *shop*)(buy *kris* *cd*)(checkout *kris*)(login *kris* *shop*)(buy *kris* *dvd*)(checkout *kris*)

1 <kris> <shop>

3 <kris>

4 <kris> <shop>0.053 <kris> <shop>0.05

6 <kris> <shop>0.05

4 <kris> <shop>

1 <kris> <shop>0.05

6 <kris>

Code

Page 245: Forward Chaining in HALO

Reducing Memory Overhead

(at ((gf-call checkout (?user)) (most-recent (gf-call login ?user ?shop) (escape ?rate (current-rate ?shop))))(discount ?user ?rate))

(gf-call checkout (?user))

(gf-call login ?user ?shop)

(escape ?rate (current-rate ?shop))

most-recent

?(discount ?user ?rate)

escape

T1 ?user

T2 ?user ?shop

T2 ?rate ?user ?shop

T1 ?rate ?user ?shop

(login *kris* *shop*)(buy *kris* *cd*)(checkout *kris*)(login *kris* *shop*)(buy *kris* *dvd*)(checkout *kris*)

1 <kris> <shop>

3 <kris>

4 <kris> <shop>0.053 <kris> <shop>0.05

6 <kris> <shop>0.05

4 <kris> <shop>

1 <kris> <shop>0.05

6 <kris>

Code LT

[1,1]

[4,4]

LT

[1,4]

[4,..]

LT

[3,3]

[6,6]

LT

[3,3]

[6,6]

Page 246: Forward Chaining in HALO

DEMO

Page 247: Forward Chaining in HALO

0 2,000 4,000 6,000 8,000

S3 copy

S3 non copy

S2 copy

S2 non copy

S1 copy

S1 non copy

nr of memorytable entriesstill allocated

total nr ofmemory tableentries evermade

nr ofgenerated joinpoint facts

Reducing Memory Overhead (2)

Escaping with future variables in HALOCharlotte Herzeel, Kris Gybels, Pascal CostanzaIn "Proc. of the Runtime Verification Workshop", 2007

Modularizing crosscuts in an e-commerce application in Lisp using HALOCharlotte Herzeel, Kris Gybels, Pascal Costanza, Theo D’HondtIn "Proc. of the International Lisp Conference", 2007

Page 248: Forward Chaining in HALO

0 2,000 4,000 6,000 8,000

S3 copy

S3 non copy

S2 copy

S2 non copy

S1 copy

S1 non copy

nr of memorytable entriesstill allocated

total nr ofmemory tableentries evermade

nr ofgenerated joinpoint facts

Reducing Memory Overhead (2)

It helps!

Escaping with future variables in HALOCharlotte Herzeel, Kris Gybels, Pascal CostanzaIn "Proc. of the Runtime Verification Workshop", 2007

Modularizing crosscuts in an e-commerce application in Lisp using HALOCharlotte Herzeel, Kris Gybels, Pascal Costanza, Theo D’HondtIn "Proc. of the International Lisp Conference", 2007

Page 249: Forward Chaining in HALO

Summary & Future Work• Summary:

• history-based AOP for CLOS ; stateful pointcuts

• temporal logic-based: abstraction & logic variables

• Rete forward chaining-based implementation

• memory reduction

• Future Work:

• language design:

• exploit logic-programming (i.e. unification & recursion)

• exploit temporal logic-programming (mixing temporal logic/advice code)

• before/after ... what about around? (roll-back mechanism)

• reducing memory overhead:

• shadow weaving

Page 250: Forward Chaining in HALO

Summary & Future Work• Summary:

• history-based AOP for CLOS ; stateful pointcuts

• temporal logic-based: abstraction & logic variables

• Rete forward chaining-based implementation

• memory reduction

• Future Work:

• language design:

• exploit logic-programming (i.e. unification & recursion)

• exploit temporal logic-programming (mixing temporal logic/advice code)

• before/after ... what about around? (roll-back mechanism)

• reducing memory overhead:

• shadow weaving

Thanks for listening!Questions?

Page 251: Forward Chaining in HALO

Summary & Future Work• Summary:

• history-based AOP for CLOS ; stateful pointcuts

• temporal logic-based: abstraction & logic variables

• Rete forward chaining-based implementation

• memory reduction

• Future Work:

• language design:

• exploit logic-programming (i.e. unification & recursion)

• exploit temporal logic-programming (mixing temporal logic/advice code)

• before/after ... what about around? (roll-back mechanism)

• reducing memory overhead:

• shadow weaving

Thanks for listening!Questions?

http://prog.vub.ac.be/HALO

Page 252: Forward Chaining in HALO

References

• Supporting Software Development Through Declaratively Codified Programming Patterns, Kim Mens, Isabel Michiels, Roel Wuyts In "Journal on Expert Systems with Applications, Elsevier Publications, pages 405-413, number 4, Volume 23, November", 2002

• Arranging language features for more robust pattern-based crosscutsKris Gybels, Johan Brichau, In "Proceedings of the Second International Conference on Aspect-Oriented Software Development", 2003

• Seamless Integration of Rule-Based Knowledge and Object-Oriented Functionality with Linguistic Symbiosis, Maja D'Hondt, Kris Gybels, Viviane Jonckers, In "Proceedings of the 19th Annual ACM Symposium on Applied Computing (SAC 2004), Special Track on Object-Oriented Programming, Languages and Systems. Nicosia, Cyprus. ACM. March 2004.", 2004

• Context-aware Aspects, Eric Tanter, Kris Gybels, Marcus Denker, Alexandre Bergel, Proceedings of the 5th International Symposium on Software Composition (SC 2006), LNCS 4089, pp.227-249, Springer-Verlag, March 2006, Vienna, Austria

• Expressive Pointcuts for Increased Modularity, Klaus Ostermann and Mira Mezini and Christoph Bockisch, Proceedings of the European Conference on Object-Oriented Programming (ECOOP)

• Modularizing Crosscuts in an E-commerce Application in Lisp using HALO , Charlotte Herzeel, Kris Gybels, Pascal Costanza, Theo D'Hondt , International Lisp Conference 2007

• Escaping with future variables in HALO , Charlotte Herzeel, Kris Gybels, Pascal Costanza, Proceedings of the Runtime Verification Workshop 2007

Page 253: Forward Chaining in HALO

<instance>

Text

Code

meta

base

titles

highlight

class

T customer

event

Text Text

!

Text

box

TitleAuthorIn "", ????

Page 254: Forward Chaining in HALO

<instance>

Text

Code

meta

base

titles

highlight

class

T customer

event

Text Text

!

Text

box

TitleAuthorIn "", ????