1 / 23

Meta-Programming

Meta-Programming. t.k.prasad@wright.edu http://www.knoesis.org/tkprasad/. 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

yael
Download Presentation

Meta-Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Meta-Programming t.k.prasad@wright.edu http://www.knoesis.org/tkprasad/ L11MetaPgm

  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 L11MetaPgm

  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. L11MetaPgm

  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). L11MetaPgm

  5. Tracing Basic Meta-Interpreter tracep( Goal ) :- tracep(Goal, 0). tracep( true, Dpth ) :- !. tracep((G1, G2),Dpth ):-!, tracep(G1, Dpth), tracep(G2, Dpth). L11MetaPgm

  6. (cont’d) tracep( G, D ) :- display(’Call:’, G,D), clause(G,B), D1isD+1, tracep(B, D1), display(’Exit:’, G,D), display_redo(G,D). tracep( G, D ) :- display(’Fail:’, G,D), fail. L11MetaPgm

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

  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. L11MetaPgm

  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 L11MetaPgm

  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. L11MetaPgm

  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). L11MetaPgm

  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 L11MetaPgm

  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 L11MetaPgm

  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) L11MetaPgm

  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) L11MetaPgm

  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. L11MetaPgm

  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 L11MetaPgm

  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 L11MetaPgm

  19. An Interpreter for Object-Oriented Programs • Class Definition object(Object, Methods) E.g., object(rectangle(Len,Wid),[(area(A) :- A is Len * Wid)] ). class-name + instance variables message method L11MetaPgm

  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)). L11MetaPgm

  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 L11MetaPgm

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

  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 . L11MetaPgm

More Related