Learning higher-order logic programs Andrew Cropper, Rolf Morel, and - - PowerPoint PPT Presentation

learning higher order logic programs
SMART_READER_LITE
LIVE PREVIEW

Learning higher-order logic programs Andrew Cropper, Rolf Morel, and - - PowerPoint PPT Presentation

Learning higher-order logic programs Andrew Cropper, Rolf Morel, and Stephen Muggleton input output ecv cat fqi dog iqqug ? input output ecv cat fqi dog iqqug goose f(A,B):- empty(A), empty(B). f(A,B):- head(A,C),


slide-1
SLIDE 1

Learning higher-order logic programs

Andrew Cropper, Rolf Morel, and Stephen Muggleton

slide-2
SLIDE 2

input output ecv cat fqi dog iqqug ?

slide-3
SLIDE 3

input output ecv cat fqi dog iqqug goose

slide-4
SLIDE 4

f(A,B):- empty(A), empty(B). f(A,B):- head(A,C), char_to_int(C,D), prec(D,E), int_to_char(E,F), head(B,F), tail(A,G), tail(B,H), f(G,H).

slide-5
SLIDE 5

f(A,B):- empty(A), empty(B). f(A,B):- head(A,C), f1(C,F), head(B,F), tail(A,G), tail(B,H), f(G,H). f1(A,B):- char_to_int(A,C), prec(C,D), int_to_char(D,B).

slide-6
SLIDE 6

Idea Learn higher-order programs

slide-7
SLIDE 7

f(A,B):- map(A,B,f1). f1(A,B):- char_to_int(A,C), prec(C,D), int_to_char(D,B).

slide-8
SLIDE 8

map([],[],_F). map([A|As],[B|Bs],F):- call(F,A,B), map(As,Bs,F).

slide-9
SLIDE 9

Why? Increase branching but reduce depth

slide-10
SLIDE 10

How? Extend Metagol

slide-11
SLIDE 11

learn(Pos,Neg,Prog):- prove(Pos,[],Prog), \+ prove(Neg,Prog,Prog).

slide-12
SLIDE 12

prove([],Prog,Prog). prove([Atom|Atoms],Prog1,Prog2):- prove_aux(Atom,Prog1,Prog3), prove(Atoms,Prog3,Prog2).

slide-13
SLIDE 13

prove_aux(Atom,Prog,Prog):- call(Atom).

slide-14
SLIDE 14

P(A,B) ← Q(A,C), R(C,B)

slide-15
SLIDE 15

metarule( chain, % name [P,Q,R], % subs [P,A,B], % head [[Q,A,C],[R,C,B]] % body ). P(A,B) ← Q(A,C), R(C,B)

slide-16
SLIDE 16

prove_aux(Atom,Prog1,Prog2):- metarule(Name,Subs,Atom,Body), bind(Subs), Prog3 = [sub(Name,Subs)|Prog1], prove(Body,Prog3,Prog2).

slide-17
SLIDE 17

% background knowledge succ/2 int_to_char/2 map/3 % positive example f([1,2,3],[c,d,e]) % metarules P(A,B) ← Q(A,C),R(C,B) P(A,B) ← Q(A,B,R)

slide-18
SLIDE 18

← f([1,2,3],[c,d,e])

slide-19
SLIDE 19

← f([1,2,3],[c,d,e]) P(A,B) ← Q(A,B,R)

slide-20
SLIDE 20

← f([1,2,3],[c,d,e]) P(A,B) ← Q(A,B,R) ← Q([1,2,3],[c,d,e],R)

slide-21
SLIDE 21

← Q([1,2,3],[c,d,e],R)

slide-22
SLIDE 22

← Q([1,2,3],[c,d,e],R) % proof fails map([1,2,3],[c,d,e],succ) map([1,2,3],[c,d,e],int_to_char)

slide-23
SLIDE 23

f(A,B):-f1(A,C),f3(C,B) f1(A,B):-f2(A,C),f2(C,B). f2(A,B):-map(A,B,succ). f3(A,B):-map(A,B,int_to_char).

slide-24
SLIDE 24

f(A,B):- map(A,C,succ). map(C,D,succ). map(D,B,int_to_char).

slide-25
SLIDE 25

Higher-order definitions

ibk( [map,[],[],_F], % head [] % body ).

slide-26
SLIDE 26

Higher-order definitions

ibk( [map,[A|As],[B|Bs],F], % head [[F,A,B],[map,As,Bs,F]] % body ).

slide-27
SLIDE 27

MetagolHO

prove_aux(Atom,Prog1,Prog2):- ibk(Atom,Body), prove(Body,Prog1,Prog2).

slide-28
SLIDE 28

% background succ/2, int_to_char/2 % ibk map/3 % example f([1,2,3],[c,d,e]) % metarule P(A,B) ← Q(A,C),R(C,B) P(A,B) ← Q(A,B,R)

slide-29
SLIDE 29

← f([1,2,3],[c,d,e])

slide-30
SLIDE 30

← f([1,2,3],[c,d,e]) P(A,B) ← Q(A,B,R)

slide-31
SLIDE 31

← f([1,2,3],[c,d,e]) P(A,B) ← Q(A,B,R) ← Q([1,2,3],[c,d,e],R)

slide-32
SLIDE 32

← Q([1,2,3],[c,d,e],R)

slide-33
SLIDE 33

← Q([1,2,3],[c,d,e],R)

map([A|As],[B|Bs],R) ← …

slide-34
SLIDE 34

← Q([1,2,3],[c,d,e],R)

map([A|As],[B|Bs],R) ← …

←R(1,c), R(2,d), R(3,e)

slide-35
SLIDE 35

←R(1,c), R(2,d), R(3,e)

slide-36
SLIDE 36

←R(1,c), R(2,d), R(3,e) S(A,B) ← T(A,C),U(C,B)

slide-37
SLIDE 37

←R(1,c), R(2,d), R(3,e) S(A,B) ← T(A,C),U(C,B) ←T(1,C),U(C,c),R(2,d),R(3,e)

slide-38
SLIDE 38

f(A,B):-map(A,B,f1). f1(A,B):-succ(A,C),f2(C,B). f2(A,B):-succ(A,C),int_to_char(C,B).

slide-39
SLIDE 39

f(A,B):- map(A,B,f1). f1(A,B):- succ(A,C), succ(A,D), int_to_char(D,B).

slide-40
SLIDE 40

input output ecv cat fqi dog iqqug ?

slide-41
SLIDE 41

f(A,B):-f1(A,B),f5(A,B). f1(A,B):-head(A,C),f2(C,B). f2(A,B):-head(B,C),f3(A,C). f3(A,B):-char_to_int(A,C),f4(C,B). f4(A,B):-prec(A,C),int_to_char(C,B), f5(A,B):-tail(A,C),f6(C,B). f6(A,B):-tail(B,C),f(A,C).

Metagol

slide-42
SLIDE 42

f(A,B):-map(A,B,f1). f1(A,B):-char_to_int(A,C),f2(C,B). f2(A,B):-prec(A,C),int_to_char(C,B).

MetagolHO

slide-43
SLIDE 43

Does it help in practice?

  • Q. Can learning higher-order programs improve

performance?

slide-44
SLIDE 44

Robot waiter

slide-45
SLIDE 45

Robot waiter

slide-46
SLIDE 46

Input Output [alice,bob,charlie] [alic,bo,charli] [inductive,logic,programming] [inductiv,logi,programmin] [ferrara,orleans,london,kyoto] [ferrar,orlean,londo,kyot]

Droplasts

slide-47
SLIDE 47

Droplasts

slide-48
SLIDE 48

f(A,B):-map(A,B,f1). f1(A,B):-f2(A,C),f3(C,B). f2(A,B):-f3(A,C),tail(C,B). f3(A,B):-reduceback(A,B,concat).

slide-49
SLIDE 49

f(A,B):-map(A,B,f1). f1(A,B):-f2(A,C),tail(C,D),f2(D,B). f2(A,B):-reduceback(A,B,concat).

slide-50
SLIDE 50

Input Output [alice,bob,charlie] [alic,bo] [inductive,logic,programming] [inductiv,logi] [ferrara,orleans,london,kyoto] [ferrar,orlean,londo]

Double droplasts

slide-51
SLIDE 51

f(A,B):-f1(A,C),f2(C,B). f1(A,B):-map(A,B,f2). f2(A,B):-f3(A,C),f4(C,B). f3(A,B):-f4(A,C),tail(C,B). f4(A,B):-reduceback(A,B,concat).

slide-52
SLIDE 52

f(A,B):-map(A,C,f1),f1(C,B). f1(A,B):-f2(A,C),tail(C,D),f2(D,B). f2(A,B):-reduceback(A,B,concat).

slide-53
SLIDE 53

Limitations Inefficient search Which metarules? Which higher-order definitions?

slide-54
SLIDE 54

Conclusion Learning higher-order programs can help