A WAM Implementation for the Meta-logic Programming Language Log - - PDF document

a wam implementation for the meta logic programming
SMART_READER_LITE
LIVE PREVIEW

A WAM Implementation for the Meta-logic Programming Language Log - - PDF document

A WAM Implementation for the Meta-logic Programming Language Log _______________ University of Houston Department of Computer Science ________________ Iliano Cervesato July 24th, 1992 Iliano Cervesato Slide No. 1 Overview


slide-1
SLIDE 1

Slide No. 1 Iliano Cervesato

A WAM Implementation for the Meta-logic Programming Language ’Log

_______________ University of Houston Department of Computer Science ________________ Iliano Cervesato July 24th, 1992

slide-2
SLIDE 2

Slide No. 1 Iliano Cervesato

Overview

  • Meta-programming in ’Log
  • The WAM
  • A WAM implementation of ’Log
slide-3
SLIDE 3

Slide No. 2 Iliano Cervesato

Meta-programs

... are programs that treat other programs as data.

They are used in:

  • Theorem Proving
  • AI (Knowledge Based Systems, ...)
  • Integrated Programming Environments
  • ...

Meta-programming in Logic Programming:

  • 1982: Bowen & Kowalski’s paper
  • 1985: MetaProlog (Bowen et al.)
  • 1986: λProlog (Miller et al.)
  • 1989: Reflective Prolog (Costantini, Lanzarone)
  • 1990: Gödel (Hill, Lloyd)
  • 1991: ... ’Log
slide-4
SLIDE 4

Slide No. 3 Iliano Cervesato

’Log

... a logic meta-programming language

New features:

  • names
  • structural representations
  • constraints

Objectives:

  • treat any syntactic entity of the language at the

meta-level

  • efficient implementation in time and space;
  • sound and complete logical semantics
  • ffer the users simple, powerful and easy-to-use

meta-programming facilities

slide-5
SLIDE 5

Slide No. 4 Iliano Cervesato

Names

are atomic ground terms associated with each syntactic entities of ’Log

Examples:

  • characters: ch(a)

ch(Z)

  • symbols:

sy(foo) sy(Alpha)

  • terms:

tr(f(a,g(X),X)) tr(Alpha)

  • clauses:

cl(append([A|L1],L2,[A|L3]) :- append(L1,L2,L3))

  • programs: pg(

append([],L,L). append([A|L1],L2,[A|L3]) :- append(L1,L2,L3). ) NB:

  • sy(foo) and sy(Alpha) do not unify
  • X and tr(X) do unify
slide-6
SLIDE 6

Slide No. 5 Iliano Cervesato

Structural representations

represent an object as the list of the names

  • f its components

Examples:

  • symbols:

[ch(f),ch(o),ch(o)] [ch(A),ch(l),ch(p),ch(h),ch(a)]

  • terms:

[sy(f),sy(a),[sy(g),sy(X)],sy(X)]

sy(Alpha)

  • clauses:

[tr(append([A|L1],L2,[A|L3])), tr(append(L1,L2,L3))]

  • programs: [cl(append([],L,L)),

cl(append([A|L1],L2,[A|L3]) :- append(L1,L2,L3))] NB:

  • [sy(f),X] is not a structural representation: only

some of its ground instances are

  • [sy(f),X] is an incomplete structural representation
slide-7
SLIDE 7

Slide No. 6 Iliano Cervesato

Constraints

’Log provides 4 operators to relate names and structural representations Examples:

  • symbols:

sy(foo) <=s=> [ch(f),ch(o),ch(o)]

  • terms:

tr(f(a,g(X),X)) <=t=>

[sy(f),sy(a),[sy(g),sy(X)],sy(X)]

  • clauses:

cl(...) <=c=> ...

  • programs: pg(...) <=p=> ...

χ <=x=> υ expresses constraints for the variable appear- ing in χ and υ ?- tr(f(g(a),b,C)) <=t=> [sy(f),A,sy(b),sy(C)]. A → [sy(g),sy(a)]. ?- N <=t=> [sy(f),[sy(g),sy(a)],sy(b),sy(C)]. N → tr(f(g(a),b,C)). ?- N <=t=> [sy(f),A,sy(b),sy(C)], A=[sy(g),sy(a)]. A → [sy(g),sy(a)], N → tr(f(g(a),b,C)). ?- N <=t=> [sy(f),A,B,sy(C)], A=[sy(g),sy(a)]. A → [sy(g),sy(a)], N <=t=> [sy(f),[sy(g),sy(a)],B,sy(C)].

slide-8
SLIDE 8

Slide No. 7 Iliano Cervesato

Warren Abstract Machine

The WAM is an architecture for compiling and execut- ing Prolog code.

  • the object code is an assembly language
  • the executer operates like a traditional line-code as-

sembler

  • some common instructions are:

get_variable X5, A1 unify_constant foo set_value X4, A0 put_list X3 allocate 4 call append, try_me_else app_2, 3 Compiler Executer

  • bject

program

  • bject

query program a n s w e r q u e r y

W A M

slide-9
SLIDE 9

Slide No. 8 Iliano Cervesato

Run-time support

HEAP STACK TRAIL PDL CODE A0 A1 A2 Xn . . . . . . CP E B TR H S MODE P

Registers:

slide-10
SLIDE 10

Slide No. 9 Iliano Cervesato

Compilation of a clause

Example: append([A|L1],L2,[A|L3]) :- append(L1,L2,L3). append:allocate get_list A0 unify_variable X3 unify_variable X4 get_list A2 unify_value X3 unify_variable X5 put_value X4, A0 put_value X5, A2 call append deallocate

h :- b1,...,bn. h: allocate N <get code for h> <put code for b1> call b1 ... <put code for bn> call bn deallocate

get code put code

slide-11
SLIDE 11

Slide No. 10 Iliano Cervesato

WAM for ’Log

Novel aspects:

  • heap representation of names
  • constraint handling
slide-12
SLIDE 12

Slide No. 11 Iliano Cervesato

Name representation

Names are represented as marked structural representa- tions.

Clause C = h:-b1,..,bn. CLN @C LIS @h ... TRN @C @bn <bn> CON [] @bn-1 TRN <bn-1> LIS @bn ... ... TRN <b1> LIS @b2 @b1 TRN <h> LIS @b1 @h LIS @h TRN @bn <bn> CON [] @bn-1 TRN <bn-1> LIS @bn ... ... TRN <b1> LIS @b2 @b1 TRN <h> LIS @b1 @h Name Structural representation CLN @C

slide-13
SLIDE 13

Slide No. 12 Iliano Cervesato

Name representation (Cont’d)

Characters and usually symbols are represented atomi- cally The atomic representation of symbol names complicates the unification algorithm

symbol s = c1...cn SIN s Name

slide-14
SLIDE 14

Slide No. 13 Iliano Cervesato

Constraints

Compilation of ν <=x=> σ:

  • put the structural representation σ in A1
  • create an x-name cell in A0
  • get the name ν from A0
  • process the constraint

ν <=x=> σ

Heap representation

  • f σ

x A0 A1

slide-15
SLIDE 15

Slide No. 14 Iliano Cervesato

Handling constraints

Problems:

  • constraints resolution is usually delayed
  • active constraints must be kept track of
  • unification can solve or invalidate an active con-

straint

  • active constraints must be checked periodically for

validity and satisfaction

  • backtracking must undo constraint passivation

Solutions:

  • keep track of all the constraints in a LIFO queue
  • mark the solved constraints
  • check an active constraints when changes occur
  • use chronological marking for backtracking

constraint stack solving time time-stamp ν <=x=> σ Heap repr.

  • f ν
slide-16
SLIDE 16

Slide No. 15 Iliano Cervesato

Run-time support for constraint

HEAP STACK TRAIL CTR CODE A0 A1 A2 Xn . . . . . . CP E B TR H S PC P PDL MODE

Registers:

slide-17
SLIDE 17

Slide No. 16 Iliano Cervesato

Conclusions

  • The WAM-based compilation and execution of

’Log have been analysed

  • The WAM design has been modified to accomo-

date the new features of ’Log

  • A programming environment for ’Log has been
  • produced. It contains:

— a compiler — an executer — a WAM-based debugger — miscellaneous tools

  • The effiency of the system is satisfactory
slide-18
SLIDE 18

Slide No. 17 Iliano Cervesato

Further works

In the resulting system:

  • use the system for testing the features of ’Log
  • improve the efficiency
  • hard-wire higher level meta-programming facilities

With ’Log:

  • test several syntaxes
  • add reflection
  • hide <=x=>
  • develop higher-level languages on top of it