Presentation is loading. Please wait.

Presentation is loading. Please wait.

Cs7120 (Prasad)L22-MetaPgm1 Meta-Programming

Similar presentations


Presentation on theme: "Cs7120 (Prasad)L22-MetaPgm1 Meta-Programming"— Presentation transcript:

1 cs7120 (Prasad)L22-MetaPgm1 Meta-Programming

2 Meta-Programs : Program manipulating Programs Extend Prolog –introduce new search strategy or modify existing search strategy –add expressive logical connective –extend/modify syntax/semantics Enable Debugger Support Theorem Provers and Rule-based Systems cs7120 (Prasad)L22-MetaPgm2

3 Basic Meta-Interpreter prove( true ) :- !. prove( (G1, G2) ) :- !, prove(G1), prove(G2). prove( G ) :- system(G), !, G. prove( G ) :- clause(G,B), prove(B). System-predicate holds of built-ins. cs7120 (Prasad)L22-MetaPgm3

4 Upgrading the Meta-Interpreter Adding an or-operator prove( (G1 ; G2) ) :- prove(G1). prove( (G1 ; G2) ) :- prove(G2). Changing the order of evaluation from right to left prove( (G1, G2) ) :- !, prove(G2), prove(G1). cs7120 (Prasad)L22-MetaPgm4

5 Tracing Basic Meta-Interpreter tracep( Goal ) :- tracep(Goal, 0). tracep( true, Dpth ) :- !. tracep((G1, G2),Dpth ):-!, tracep(G1, Dpth), tracep(G2, Dpth). cs7120 (Prasad)L22-MetaPgm5

6 (cont’d) tracep( G, D ) :- display(’Call:’, G, D), clause(G,B), D1 is D+1, tracep(B, D1), display(’Exit:’, G, D), display_redo(G, D). tracep( G, D ) :- display(’Fail:’, G, D), fail. cs7120 (Prasad)L22-MetaPgm6

7 (cont’d) display( Msg, G, D ) :- tab(D), write(Msg), write(G), nl. display_redo( G, D ) :- true ; display(’Redo:’, G, D), fail. cs7120 (Prasad)L22-MetaPgm7

8 (Trace Output) 4 ?- tracep(member(5,[1,5,3])). Call:member(5, [1, 5, 3]) Call:member(5, [5, 3]) Exit:member(5, [5, 3]) Exit:member(5, [1, 5, 3]) true ; Redo:member(5, [1, 5, 3]) Redo:member(5, [5, 3]) Call:member(5, [3]) Call:member(5, []) Fail:member(5, []) Fail:member(5, [3]) Fail:member(5, [5, 3]) Fail:member(5, [1, 5, 3]) false. cs7120 (Prasad)L22-MetaPgm8

9 Other AI Applications Forward chaining or Bottom-up computation From facts to all conclusions Heuristic search (incl. breadth-first search) Diagnosis; Explanation generation Determine the set of facts, which when assumed, proves the goal Abductive reasoning cs7120 (Prasad)L22-MetaPgm9

10 Meta-level Definition not(A) :- call(A), !, fail. not(A). Meta-variables range over terms encoding a goal. ?-setof(X, G, L). X and L are object variables, while G is meta-variable. cs7120 (Prasad)L22-MetaPgm10

11 Program Manipulation Example Write a meta-program to collect all variables in a formula A. constant(A) :- atom(A); integer(A) ; float(A). collect_var(A,Q-Q) :- constant(A). collect_var(A,[A|Q]-Q) :- var(A). cs7120 (Prasad)L22-MetaPgm11

12 (cont’d) collect_var(A,Q) :- A =.. [P|As], collect_vars(As,Q). collect_vars([],Q-Q) :- !. collect_vars([A|As], Q-Qt) :- collect_var(A, Q-Qs), collect_vars(As, Qs-Qt). ?-collect_var(p(X,Y), L). L= [X,Y| _1]-_1 Difference lists for efficient append cs7120 (Prasad)L22-MetaPgm12

13 Theorem Proving Applications and others Proving equivalence of boolean expressions, arithmetic expressions, etc Normalization of expressions Refutation theorem proving Goal reordering based on binding information for efficient execution of query Pretty Printing cs7120 (Prasad)L22-MetaPgm13

14 Equational Reasoning: Example Prove two terms are equivalent given that the operators satisfy certain equality constraints. Associativity: (a + b) + c = a + (b + c) (a * b) * c = a * (b * c) Commutativity: (a + b) =(b + a) (a * b) =(b * a) cs7120 (Prasad)L22-MetaPgm14

15 (cont’d) Identity: (a + 0) = a = (0 + a) (a * 1) = a = (1 * a) Zero: (a * 0) = 0 = (0 * a) Distributive Law: (a + b) * c =(a * c + b * c) cs7120 (Prasad)L22-MetaPgm15

16 Digression : Normal Form Equality constraints induce an equivalence relation on terms (e.g., arithmetic expressions) An equivalence relation partitions the set of terms into equivalence classes A normal form of a term is the representative of the equivalence class to which the term belongs. cs7120 (Prasad)L22-MetaPgm16

17 Normalization Procedure Associative operation : Ignore nestings –collapse term trees to lists Commutative operation : Ignore order –sort Zeros and Identities –simplify + delete elements Distributivity –sum of products form or product of sums form cs7120 (Prasad)L22-MetaPgm17

18 Application Evaluation of a variable-free/constant arithmetic expression is normalization => 5 (1 + (1 + 2) + 1) => 5 Equality constraints given by axioms are used as rewrite rules for normalization. –Definition of primitive operations –Relationship among operations cs7120 (Prasad)L22-MetaPgm18

19 An Interpreter for Object-Oriented Programs Class Definition object(Object, Methods) E.g., object(rectangle(Len,Wid), [(area(A) :- A is Len * Wid)] ). cs7120 (Prasad)L22-MetaPgm19 class-name + instance variables messagemethod

20 (cont’d) object/instance rectangle(5,10) passing a message send(Object-instance, Message) E.g., send(rectangle(5,10),area(A)). specifying class-subclass hierarchy E.g., isa(square(SD),rectangle(SD,SD)). cs7120 (Prasad)L22-MetaPgm20

21 Interpreter Code send( Object, Message) :- get_methods( Object, Methods), process( Message, Methods). % Find Object's methods % Execute corresponding method get_methods( Object, Methods) :- object( Object, Methods). % Private methods get_methods( Object, Methods) :- isa( Object, Super), get_methods( Super, Methods). % Inherited methods cs7120 (Prasad)L22-MetaPgm21

22 (cont’d) process( Msg, [Msg | _]). % Use a fact process( Msg, [ (Msg :- Body) | _]) :- call( Body). % Use a rule process( Msg, [_ | Methods]) :- process( Msg, Methods). cs7120 (Prasad)L22-MetaPgm22

23 ?- trace, send(square(4), area(A)). Call: (7) send(square(4), area(_G414)) ? creep Call: (8) get_methods(square(4), _G551) ? creep Call: (9) object(square(4), _G551) ? creep Fail: (9) object(square(4), _G551) ? creep Redo: (8) get_methods(square(4), _G551) ? creep Call: (9) isa(square(4), _G551) ? creep Exit: (9) isa(square(4), rectangle(4, 4)) ? creep Call: (9) get_methods(rectangle(4, 4), _G554) ? creep Call: (10) object(rectangle(4, 4), _G554) ? creep Exit: (10) object(rectangle(4, 4), [ (area(_G555):-_G555 is 4*4)]) ? creep Exit: (9) get_methods(rectangle(4, 4), [ (area(_G555):-_G555 is 4*4)]) ? creep Exit: (8) get_methods(square(4), [ (area(_G555):-_G555 is 4*4)]) ? creep Call: (8) process(area(_G414), [ (area(_G555):-_G555 is 4*4)]) ? creep Call: (9) _G414 is 4*4 ? creep Exit: (9) 16 is 4*4 ? creep Exit: (8) process(area(16), [ (area(16):-16 is 4*4)]) ? creep Exit: (7) send(square(4), area(16)) ? creep A = 16. cs7120 (Prasad)L22-MetaPgm23


Download ppt "Cs7120 (Prasad)L22-MetaPgm1 Meta-Programming"

Similar presentations


Ads by Google