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]

http://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 left

prove( (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 Definition

object(Object, Methods)

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

).

cs774 (Prasad) L11MetaPgm 19

class-name +

instance variablesmessage 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 hierarchy

E.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)) ? creep

A = 16 .

cs774 (Prasad) L11MetaPgm 23