Meta-Programming

23
cs774 (Prasad) L11MetaPgm 1 Meta-Programming [email protected] http://www.knoesis.org/ tkprasad/

description

Meta-Programming. [email protected] 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 - PowerPoint PPT Presentation

Transcript of Meta-Programming

Page 1: Meta-Programming

cs774 (Prasad) L11MetaPgm 1

Meta-Programming

[email protected]://www.knoesis.org/tkprasad/

Page 2: Meta-Programming

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

cs774 (Prasad) L11MetaPgm 2

Page 3: Meta-Programming

Basic Meta-Interpreterprove( 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.

cs774 (Prasad) L11MetaPgm 3

Page 4: Meta-Programming

Upgrading the Meta-Interpreter• Adding an or-operatorprove( (G1 ; G2) ) :- prove(G1).

prove( (G1 ; G2) ) :- prove(G2).

• Changing the order of evaluation from right to leftprove( (G1, G2) ) :- !,prove(G2), prove(G1).

cs774 (Prasad) L11MetaPgm 4

Page 5: Meta-Programming

Tracing Basic Meta-Interpretertracep( Goal ) :-tracep(Goal, 0).

tracep( true, Dpth ) :- !.tracep((G1, G2),Dpth ):-!,tracep(G1, Dpth), tracep(G2, Dpth).

cs774 (Prasad) L11MetaPgm 5

Page 6: Meta-Programming

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

cs774 (Prasad) L11MetaPgm 6

Page 7: Meta-Programming

(cont’d)display( Msg, G, D ) :-

tab(D), write(Msg),write(G), nl.

display_redo( G, D ) :-true ;

display(’Redo:’, G, D), fail.

cs774 (Prasad) L11MetaPgm 7

Page 8: Meta-Programming

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

cs774 (Prasad) L11MetaPgm 8

Page 9: Meta-Programming

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

cs774 (Prasad) L11MetaPgm 9

Page 10: Meta-Programming

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.

cs774 (Prasad) L11MetaPgm 10

Page 11: Meta-Programming

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

cs774 (Prasad) L11MetaPgm 11

Page 12: Meta-Programming

(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 appendcs774 (Prasad) L11MetaPgm 12

Page 13: Meta-Programming

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

cs774 (Prasad) L11MetaPgm 13

Page 14: Meta-Programming

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)

cs774 (Prasad) L11MetaPgm 14

Page 15: Meta-Programming

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

cs774 (Prasad) L11MetaPgm 15

Page 16: Meta-Programming

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.

cs774 (Prasad) L11MetaPgm 16

Page 17: Meta-Programming

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

cs774 (Prasad) L11MetaPgm 17

Page 18: Meta-Programming

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

cs774 (Prasad) L11MetaPgm 18

Page 19: Meta-Programming

An Interpreter for Object-Oriented Programs

• Class Definitionobject(Object, Methods)

E.g., object(rectangle(Len,Wid), [(area(A) :- A is Len * Wid)] ).

cs774 (Prasad) L11MetaPgm 19

class-name + instance variables

message method

Page 20: Meta-Programming

(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 hierarchyE.g.,isa(square(sd),rectangle(sd,sd)).cs774 (Prasad) L11MetaPgm 20

Page 21: Meta-Programming

Interpreter Codesend( 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

cs774 (Prasad) L11MetaPgm 21

Page 22: Meta-Programming

(cont’d)

process( Msg, [Msg | _]). % Use a fact

process( Msg, [ (Msg :- Body) | _]) :- call( Body).

% Use a rule

process( Msg, [_ | Methods]) :- process( Msg, Methods).

cs774 (Prasad) L11MetaPgm 22

Page 23: Meta-Programming

?- 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)) ? creepA = 16 .

cs774 (Prasad) L11MetaPgm 23