Download presentation
Presentation is loading. Please wait.
1
cs7120 (Prasad)L22-MetaPgm1 Meta-Programming t.k.prasad@wright.edu http://www.knoesis.org/tkprasad/
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. 2 + 3 => 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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.