Presentation is loading. Please wait.

Presentation is loading. Please wait.

PROLOG SYNTAX AND MEANING Ivan Bratko University of Ljubljana Faculty of Computer and Info. Sc. Ljubljana, Slovenia.

Similar presentations


Presentation on theme: "PROLOG SYNTAX AND MEANING Ivan Bratko University of Ljubljana Faculty of Computer and Info. Sc. Ljubljana, Slovenia."— Presentation transcript:

1 PROLOG SYNTAX AND MEANING Ivan Bratko University of Ljubljana Faculty of Computer and Info. Sc. Ljubljana, Slovenia

2 DATA OBJECTS data objects simple objects structures constants variables atoms numbers

3 SYNTAX FOR DATA OBJECS Type of object always recognisable from its syntactic form

4 THREE SYNTACIC FORMS FOR ATOMS (1) Strings of letters, digits, and “_”, starting with lowercase letter: x x15 x_15 aBC_CBa7 alpha_beta_algorithm taxi_35 peter missJones miss_Jones2

5 ATOMS, CTD. (2) Strings of special characters ---> <<. + ++ !...::. ::= []

6 ATOMS, CTD. (3) Strings in single quotes ‘X_35’ ‘Peter’ ‘Britney Spears’

7 SYNTAX FOR NUMBERS Integers 1 1313 0 -55 Real numbers (floating point) 3.14 -0.0045 1.34E-21 1.34e-21

8 SYNTAX FOR VARIABLES Strings of letters, digits, and underscores, starting with uppercase letter X Results Object2B Participant_list _x35 _335 Lexical scope of variable names is one clause Underscore stands for an anonymous variable Each appearance of underscore: another anon. var.

9 ANONYMOUS VARIABLES visible_block( B) :- see( B, _, _). Equivalent to: visible_block( B) :- see( B, X, Y).

10 STRUCTURES Structures are objects that have several components For example: dates are structured objects with three components Date 17 June 2006 can be represented by term: date( 17, june, 2006) functor arguments An argument can be any object, also a structure

11 FUNCTORS Functor name chosen by user Syntax for functors: atoms Functor defined by name and arity

12 TREE REPRESENTATION OF STRUCTURES Often, structures are pictured as trees date( 17, june, 2006) date 17 june 2006

13 Therefore all structured objects in Prolog can be viewed as trees This is the only way of building structured objects in Prolog

14 SOME GEOMETRIC OBJECTS P2 = (2,3) (6,4) S T (4,2) P1=(1,1) (7,1) P1 = point( 1, 1) P2 = point( 2, 3) S = seg( P1, P2) = seg( point(1,1), point(2,3)) T = triangle( point(4,2), point(5,4), point(7,1))

15 LINE SEGMENT S = seg( point(1,1), point(2,3)) S = seg point point 1 1 2 3

16 ARITHMETIC EXPRESSIONS ARE ALSO STRUCTURES For example: (a + b) * (c - 5) Written as term with functors: *( +( a, b), -( c, 5)) * + - a b c 5

17 MATCHING Matching is operation on terms (structures) Given two terms, they match if: (1) They are identical, or (2) They can be made identical by properly instantiating the variables in both terms

18 EXAMPLE OF MATCHING Matching two dates: date( D1, M1, 2006) = date( D2, june, Y2) This causes the variables to be instantianted as: D1 = D2 M1 = june Y2 = 2006 This is the most general instantiation A less general instantiation would be: D1=D2=17,...

19 MOST GENERAL INSTANTIATION In Prolog, matching always results in most general instantiation This commits the variables to the least possible extent, leaving flexibility for further instantiation if required For example: ?- date( D1, M1, 2006) = date( D2, june, Y2), date( D1, M1, 2006) = date( 17, M3, Y3). D1 = 17, D2 = 17, M1 = june, M3 = june, Y2 = 2006, Y3 = 2006

20 MATCHING Matching succeeds or fails; if succeeds then it results in the most general instantiation To decide whether terms S and T match: (1) If S and T are constants then they match only if they are identical (2) If S is a variable then matching succeeds, S is instantiated to T; analogously if T is a variable (3) If S and T are structures then they match only if (a) they both have the same principal functor, and (b) all their corresponding arguments match

21 MATCHING ≈ UNIFICATION Unification known in predicate logic Unification = Matching + Occurs check What happens when we ask Prolog: ?- X = f(X). Matching succeeds, unification fails

22 COMPUTATION WITH MATCHING % Definition of vertical and horizontal segments vertical( seg( point( X1,Y1), point( X1, Y2))). horizontal( seg( point( X1,Y1), point( X2, Y1))). ?- vertical( seg( point( 1,1), point( 1, 3))). yes ?- vertical( seg( point( 1,1), point( 2, Y))). no ?- vertical( seg( point( 2,3), P)). P = point( 2, _173).

23 AN INTERESTING SEGMENT Is there a segment that is both vertical and horizontal? ?- vertical( S), horizontal( S). S = seg( point( X,Y), point(X,Y)) Note, Prolog may display this with new variables names as for example: S = seg( point( _13,_14), point( _13, _14))

24 DECLARATIVE MEANING Given a program P and a goal G, G is true ( i.e. logically follows from P) if and only if: (1) There is a clause C in P such that (2) there is a clause instance I of C such that (a) the head of I is identical to G, and (b) all the goals in the body of I are true An instance of a clause C is obtained by renaming each variable in C and possibly substituting the variable by some term. E.g. an instance of p(X,Y) :- q(Y,Z) is p(U,a) :- q(a,V).

25 DECLARATIVE vs PROCEDURAL MEANING OF PROLOG PROGRAMS Consider: P :- Q, R. Declarative readings of this: P is true if Q and R are true. From Q and R follows P. Procedural readings: To solve problem P, first solve subproblem Q and then R. To satisfy P, first satisfy Q and then R.

26 PROCEDURAL MEANING Specifies how Prolog answers questions Procedural meaning is an algorithm to execute a list of goals given a Prolog program: program success/failure indication goal list execute instantiation of variables

27 procedure execute( Program, GoalList, Success) execute = declarative meaning + procedural elements G is true ( i.e. logically follows from P) if and only if: (1) there is a clause C in P such that (2) there is a clause instance I of C such that (a) the head of I is identical to G, and (b) all the goals in the body of I are true Search program from top to bottom to find such clause Match G and head of C Execute goals in order as they appear in program

28 EXAMPLE QUALITATIVE CIRCUIT ANALYSIS Electric circuits made of resistors and diodes through sequential and parallel connections Circuit = par( res, seq( res, diode)) Current Voltage

29 RELATION CIRC circ( Circuit, Voltage, Current) Current Circuit + - Voltage

30 % Qualitative definition of electric circuits % Currents and voltages have qualitative values: zero, pos or neg % All circuits have two terminals % A circuit may consist of a simple element, % or it can be composed from two circuits through parallel or sequential % connection % circ( Circuit, Voltage, Current) % The behaviour of resistor: "qualitative" Ohm's law circ( res, pos, pos). % Both voltage and current positive circ( res, zero, zero). circ( res, neg, neg).

31 % The behaviour of diode circ( diode, zero, pos). % Open diode: zero voltage, any pos. current circ( diode, zero, zero). circ( diode, neg, zero). % Closed diode, zero current, any neg. voltage % Reversed diode circ( revdiode, zero, neg). % Open: zero voltage, any neg. current circ( revdiode, zero, zero). circ( revdiode, pos, zero).

32 % Sequential composition of circuits circ( seq( Circuit1, Circuit2), Volt, Curr) :- circ( Circuit1, Volt1, Curr), circ( Circuit2, Volt2, Curr), % The same current qsum( Volt1, Volt2, Volt). % Add voltages % Parallel composition of circuits circ( par( Circuit1, Circuit2), Volt, Curr) :- circ( Circuit1, Volt, Curr1), circ( Circuit2, Volt, Curr2), % The same voltage qsum( Curr1, Curr2, Curr). % Add currents

33 % qsum( Q1, Q2, Q3): % Q3 = Q1 + Q2, qualitative sum over domain [pos,zero,neg] qsum( pos, pos, pos). qsum( pos, zero, pos). qsum( pos, neg, pos). qsum( pos, neg, zero). qsum( pos, neg, neg). qsum( zero, pos, pos). qsum( zero, zero, zero). qsum( zero, neg, neg). qsum( neg, pos, pos). qsum( neg, pos, zero). qsum( neg, pos, neg). qsum( neg, zero, neg). qsum( neg, neg, neg).

34 SOME QUERIES ?- circ( par( seq( res, res), res), V, C). C = pos,V = pos ? ; C = zero,V = zero ? ; C = neg,V = neg ? ; % Construct a circuit ?- circ( C, pos, pos), circ( C, zero, zero), circ( C, neg, neg).

35 ?- circ( C, pos,pos), circ(C, neg, zero). C = seq(res,diode) ? ; C = seq(res,seq(res,diode)) ? ; C = seq(res,seq(res,seq(res,diode))) ? ; C = seq(res,seq(res,seq(res,seq(res,diode)))) ? ; % How about some parallel compositions?


Download ppt "PROLOG SYNTAX AND MEANING Ivan Bratko University of Ljubljana Faculty of Computer and Info. Sc. Ljubljana, Slovenia."

Similar presentations


Ads by Google