%!PS-Adobe-2.0 %%Creator: dvips 5.515 Copyright 1986, 1993 Radical Eye Software %%Title: impltalk.dvi %%CreationDate: Mon Mar 13 10:13:57 1995 %%Pages: 30 %%PageOrder: Ascend %%BoundingBox: 0 0 596 842 %%EndComments %DVIPSCommandLine: dvips -o impltalk.ps impltalk.dvi %DVIPSSource: TeX output 1995.03.13:1013 %%BeginProcSet: tex.pro /TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N /X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /@rigin{isls{[ 0 -1 1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{Resolution hsize -72 div mul 0 TR}if Resolution VResolution vsize -72 div 1 add mul TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{ /nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{ /sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0] N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ 128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]} if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{ cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V {}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave transform round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail} B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{ 3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{ 3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end %%EndProcSet %%BeginProcSet: special.pro TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N /vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B /@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{ /CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{ 10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B /@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale true def end /@MacSetUp{userdict /md known{userdict /md get type /dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{} N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{itransform lineto} }{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{ itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{ closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N /txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp {pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray} N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict maxlength dict begin /magscale false def normalscale currentpoint TR /psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts /psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR /showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{ psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict begin /SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial {CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR }{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath }N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{ end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin} N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{ /SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X /startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet TeXDict begin 39158280 55380996 1000 300 300 (/tmp_mnt/home/ps-home/vanroy/public_html/impltalk.dvi) @start /Fa 10 58 df<03C00C301818300C300C700E60066006E007E007E007E007E007 E007E007E007E007E007E007E007E00760066006700E300C300C18180C3007E0101D7E9B 15>48 D<010007003F00C700070007000700070007000700070007000700070007000700 07000700070007000700070007000700070007000700FFF80D1C7C9B15>I<07C0183020 1C400C400EF00FF80FF807F8077007000F000E000E001C001C00380070006000C0018003 0006010C01180110023FFE7FFEFFFE101C7E9B15>I<07E01830201C201C781E780E781E 381E001C001C00180030006007C00030001C001C000E000F000F700FF80FF80FF80FF00E 401C201C183007C0101D7E9B15>I<000C00000C00001C00003C00003C00005C0000DC00 009C00011C00031C00021C00041C000C1C00081C00101C00301C00201C00401C00C01C00 FFFFC0001C00001C00001C00001C00001C00001C00001C0001FFC0121C7F9B15>I<300C 3FF83FF03FC020002000200020002000200023E02C303018301C200E000E000F000F000F 600FF00FF00FF00F800E401E401C2038187007C0101D7E9B15>I<00F0030C04040C0E18 1E301E300C700070006000E3E0E430E818F00CF00EE006E007E007E007E007E007600760 077006300E300C18180C3003E0101D7E9B15>I<4000007FFF807FFF007FFF0040020080 040080040080080000100000100000200000600000400000C00000C00001C00001800001 800003800003800003800003800007800007800007800007800007800007800003000011 1D7E9B15>I<03E00C301008200C200660066006700670067C0C3E183FB01FE007F007F8 18FC307E601E600FC007C003C003C003C00360026004300C1C1007E0101D7E9B15>I<03 C00C301818300C700C600EE006E006E007E007E007E007E0076007700F300F18170C2707 C700060006000E300C780C78187018203010C00F80101D7E9B15>I E end %%EndProlog %%BeginSetup %%Feature: *Resolution 300dpi TeXDict begin %%PaperSize: A4 %%EndSetup %%Page: 1 1 1 0 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/01.ps /md 129 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 28.079 810.927]def/mT[.24 0 0 -.24 28.079 810.927]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_150 f0_1 150 scf /f1_1/Times-Roman :mre /f1_75 f1_1 75 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 2)setjob gS 0 0 2242 3254 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 830 798 :M f0_150 sf -.099(Issues in)A 676 981 :M -.006(Implementing)A 584 1164 :M -.034(Constraint Logic)A 755 1347 :M -.011(Languages)A 881 2351 :M f1_75 sf -.044(Peter Van Roy)A 620 2438 :M -.004(DEC Paris Research Laboratory)A 810 2612 :M -.008(\203cole de Printemps)A 868 2699 :M -.043(Ch\211tillon/Seine)A 949 2786 :M -.029(May 1994)A endp initializepage (So; page: 2 of 2)setjob gS 0 0 2242 3254 rC endp end % md %%EndDocument endTexFig 1040 3278 a Fa(1)p eop %%Page: 2 2 2 1 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/02.ps /md 130 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 28.079 810.927]def/mT[.24 0 0 -.24 28.079 810.927]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Roman :mre /f1_75 f1_1 75 scf /f1_38 f1_1 38 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 2)setjob gS 0 0 2242 3254 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 812 280 :M f0_100 sf -.089(Overview)A 286 580 :M f1_75 sf -.031(\245 High-level issues)A 286 680 :M -.005( The simplification principle)A 286 780 :M -.006( How to implement a new logic language)A 286 880 :M ( The compiler intermediate form)S 286 980 :M -.021( Example of LIFE compilation)A 286 1080 :M ( Using types when compiling constraints)S 286 1247 :M -.012(\245 Prolog implementation issues)A 286 1347 :M -.013( The Prolog language and the WAM)A 286 1447 :M -.009( Evolution of Prolog performance)A 286 1547 :M -.003( The WAM as a constraint language)A 286 1647 :M -.023( How to compile unification)A 286 1747 :M -.018( Using types when compiling unification)A 286 1914 :M -.004(\245 Some general implementation techniques)A 286 2014 :M -.035( Backtracking)A 286 2114 :M -.01( Timestamping)A 286 2214 :M -.014( Suspensions and the CLP\(FD\) implementation)A 286 2381 :M -.016(\245 Conclusions and further work)A 286 2548 :M -.059(\245 Bibliography)A endp initializepage (So; page: 2 of 2)setjob gS 0 0 2242 3254 rC endp end % md %%EndDocument endTexFig 1040 3278 a Fa(2)p eop %%Page: 3 3 3 2 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/03.ps /md 130 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f0_75 f0_1 75 scf /f1_1/Times-Roman :mre /f1_75 f1_1 75 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 543 291 :M f0_100 sf -.008(The simplification principle)A 191 533 :M f1_75 sf -.003(\245 The heart of any efficient implementation of a constraint)A 191 612 :M -.019( language is the simplification principle:)A 434 808 :M f0_75 sf -.009(Simplify each occurrence of a constraint)A 434 883 :M -.017(as much as possible)A 191 1933 :M f1_75 sf (\245 This principle has continued to hold from the early days of)S 191 2012 :M -.009( Prolog implementation \(e.g., the DEC-10 compiler\) to the)A 191 2091 :M -.008( present. It holds for the WAM, for native code systems, and)A 191 2170 :M -.011( for systems that do global analysis.)A 191 2327 :M -.002(\245 All experimental evidence so far shows no contradiction with)A 191 2406 :M -.015( the hypothesis that the principle continues to hold until )A 191 2485 :M -.009( performance has reached that of imperative programming.)A 193 1371 :M -.003(\245 Examples of simplification:)A 479 1502 :M -.103(Static:)A 375 1589 :M -.105(Dynamic:)A 479 1676 :M -.113(Local:)A 446 1763 :M -.157(Global:)A 394.5 713.5 1406 206 rS 191 1071 :M -.005(\245 This is done at compile-time and run-time \(statically and )A 191 1150 :M -.012( dynamically\) and by looking at various-sized pieces of)A 191 1229 :M -.02( program \(locally and globally\).)A 714 1502 :M -.006(\322get_variable\323 in the WAM is a move)A 714 1589 :M -.023(Clause indexing)A 714 1676 :M -.01(WAM unification is done per functor)A 714 1763 :M -.019(The two-stream unification algorithm)A endp end % md %%EndDocument endTexFig 1040 3278 a Fa(3)p eop %%Page: 4 4 4 3 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/04.ps /md 134 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Italic :mre /f1_75 f1_1 75 scf /f2_1/Times-Roman :mre /f2_75 f2_1 75 scf /f3_1/Courier :mre /f3_75 f3_1 75 scf /f3_58 f3_1 58 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 271 291 :M f0_100 sf (The simplification principle in the WAM)S 114 554 :M f1_75 sf -.026(Simplify unification)A 249 702 :M f2_75 sf -.02(\245 Consider the unification )A 1038 702 :M f3_75 sf -.079(X=s\(a,T\))A f2_75 sf (.)S 249 852 :M -.025(\245 Since the second argument )A 1119 852 :M f3_75 sf (s\(a,T\))S f2_75 sf -.004( is known, the general)A 249 931 :M -.004( algorithm can be specialized for this case, resulting in:)A 489 1052 :M f3_58 sf ( get_structure A1, s/2)S 489 1115 :M ( unify_constant a)S 489 1178 :M -.028( unify_value A2)A 114 1381 :M f1_75 sf (Simplify backtracking)S 249 1529 :M f2_75 sf -.004(\245 Consider the predicate p with definition:)A 249 1864 :M (\245 If the first argument is an atom, then picking the right clause)S 249 1943 :M ( can be done with hashing instead of backtracking:)S 601 1648 :M f3_75 sf (p\(a\). )S 601 1723 :M (p\(b\).)S 489 2071 :M f3_58 sf -.018( switch_on_term V,C,fail,fail)A 489 2197 :M (C: switch_on_constant 2, T % Hash lookup)S 489 2323 :M -.028(A: get_constant a)A 489 2386 :M ( proceed)S 489 2512 :M -.028(B: get_constant b)A 489 2575 :M ( proceed)S 489 2701 :M -.024(T: entry a, A)A 489 2764 :M -.024( entry b, B)A 489 2890 :M (V: % Try both clauses with backtracking)S endp end % md %%EndDocument endTexFig 1040 3278 a Fa(4)p eop %%Page: 5 5 5 4 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/05.ps /md 133 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Roman :mre /f1_75 f1_1 75 scf /f2_1/Times-Italic :mre /f2_75 f2_1 75 scf /f3_1/Symbol :bsr 240/apple pd :esr /f3_67 f3_1 67 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 246 291 :M f0_100 sf (How to implement a new logic language)S 174 533 :M f1_75 sf -.074(\245 The )A f2_75 sf -.086(quickest)A 600 533 :M f1_75 sf ( way to implement a new logic language is to)S 174 612 :M ( write an interpreter in Prolog \(e.g., Concurrent Prolog, )S 174 691 :M -.022( Still-Life, Timed Gentzen, ...\).)A 174 856 :M -.024(\245 There are several ways to get an )A 1204 856 :M f2_75 sf -.031(efficient)A f1_75 sf -.039( implementation:)A 303 1012 :M (1. Extend the WAM. This technique has been the most)S 303 1091 :M -.006( popular \(e.g., CLP\(R\), CLP\(FD\), ...\). It is not the right way)A 303 1170 :M -.012( for languages very different from Prolog \(e.g., )A 1786 1170 :M f3_67 sf (l)S 1823 1170 :M f1_75 sf -.081(-Prolog\).)A 303 1350 :M (2. Compile the language into an existing implementation of)S 303 1429 :M ( Prolog \(e.g., QD-Janus\). Modern implementations of)S 303 1508 :M ( Prolog are fast and support advanced control constructs)S 303 1587 :M -.009( such as coroutining \(e.g., SICStus\) and first-class )A 303 1666 :M -.021( suspensions \(e.g., ECLiPSe\).)A 303 1818 :M -.014(3. If the above is difficult, then try to compile the language )A 303 1897 :M -.012( into a system that provides useful primitives. For example,)A 303 1976 :M -.129( )A f3_67 sf (l)S 415 1976 :M f1_75 sf -.003(-Prolog has been implemented with MALI, a memory)A 303 2055 :M -.003( management library tailored for logic programming.)A 174 2231 :M -.067(\245 To get the )A 542 2231 :M f2_75 sf -.18(fastest)A f1_75 sf ( )S 752 2231 :M f2_75 sf -.115(possible)A 998 2231 :M f1_75 sf -.02( implementation, it is necessary to)A 174 2310 :M ( compile directly to a lower-level language \(e.g., C or assembly\).)S endp end % md %%EndDocument endTexFig 1040 3278 a Fa(5)p eop %%Page: 6 6 6 5 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/06.ps /md 153 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /@a { np :M 0 rl :L 0 exch rl 0 rl :L fill }bd /@b { np :M 0 rl 0 exch rl :L 0 rl 0 exch rl fill }bd /arct where { pop }{ /arct { arcto pop pop pop pop }bd }ifelse /x1 Z /x2 Z /y1 Z /y2 Z /rad Z /@q { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct fill }bd /@s { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct :K stroke }bd /@i { np 0 360 arc fill }bd /@j { gS np :T scale 0 0 .5 0 360 arc fill gR }bd /@e { np 0 360 arc :K stroke }bd /@f { np $m currentmatrix pop :T scale 0 0 .5 0 360 arc :K $m setmatrix stroke }bd /@k { gS np :T 0 0 :M 0 0 5 2 roll arc fill gR }bd /@l { gS np :T 0 0 :M scale 0 0 .5 5 -2 roll arc fill gR }bd /@m { np arc stroke }bd /@n { np $m currentmatrix pop :T scale 0 0 .5 5 -2 roll arc $m setmatrix stroke }bd /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Roman :mre /f1_75 f1_1 75 scf /f1_67 f1_1 67 scf /f1_58 f1_1 58 scf /f1_50 f1_1 50 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 544 179 :M f0_100 sf -.019(Implementation trade-offs)A 173 404 :M f1_58 sf -.094(Approach)A 513 404 :M -.086(Portability)A 806 404 :M -.018(Execution)A 857 467 :M (speed)S 1459 404 :M -.067(Foreign)A 1444 467 :M -.049(language)A 1447 530 :M -.1(interface)A 1715 404 :M -.091(Dynamicity)A 1685 467 :M -.052(\(assert/retract\))A 147 1071 :M f1_75 sf -.01(Emulator)A 147 1150 :M -.069(in C or C++)A 147 1462 :M -.085(Generate)A 147 1541 :M -.086(C or C++)A 147 1266 :M -.085(Generate)A 147 1345 :M (Prolog)S 147 1677 :M (Assembly)S 147 1818 :M -.062(Machine)A 147 1897 :M -.069(code \(binary\))A 147 866 :M -.037(Interpreter)A 147 945 :M -.069(in C or C++)A 589 1071 :M f1_67 sf -.148(yes)A 589 1463 :M -.148(yes)A 589 1267 :M -.148(yes)A 601 1679 :M (no)S 601 1819 :M (no)S 589 863 :M -.148(yes)A 830 1071 :M -.041(average)A 859 1463 :M -.235(fast)A 956 1463 :M f1_50 sf -.272( )A f1_67 sf (\240)S 830 1267 :M -.041(average)A 1097 404 :M f1_58 sf (Compilation)S 1176 467 :M (speed)S 880 1679 :M f1_67 sf -.235(fast)A 880 1821 :M -.235(fast)A 884 863 :M -.18(slow)A 1193 1071 :M -.235(fast)A 1178 1463 :M -.18(slow)A 1109 1267 :M -.089(depends)A 1329 1267 :M f1_50 sf -.272( )A f1_67 sf (*)S 1193 1679 :M -.235(fast)A 1170 1821 :M -.235(fast)A 1267 1821 :M f1_50 sf -.272( )A f1_67 sf (\244)S 1193 863 :M -.235(fast)A 1514 1463 :M -.304(best)A 1505 1071 :M -.265(poor)A 1434 1267 :M -.089(depends)A 1654 1267 :M f1_50 sf -.272( )A f1_67 sf (*)S 1464 1679 :M -.041(average)A 1464 1819 :M -.041(average)A 1505 863 :M -.265(poor)A 1801 1071 :M -.148(yes)A 1814 1463 :M (no)S 1801 1267 :M -.148(yes)A 1814 1679 :M (no)S 1801 1819 :M -.148(yes)A 1801 863 :M -.148(yes)A 151 2104 :M -.002(\240 Using RISC-macro technique \(see next slide\))A 151 2196 :M -.012(\244 Compilation becomes more complex with modern \(superscalar\) RISC)A 245 2850 :M f1_75 sf -.013(\(3\) Best speed while maintaining excellent portability and)A 245 2929 :M -.038( interoperability)A 1980 1462 :M -.207(\(3\))A 247 2533 :M -.008(\(1\) Smallest development time to get a system that works)A 151 2423 :M -.025(\245 Three good trade-offs:)A 1980 1266 :M -.207(\(2\))A 113.5 319.5 2006 1912 rS 113 564 -1 1 2120 563 1 113 563 @a 113 1932 -1 1 2120 1931 1 113 1931 @a 147 660 :M -.037(Interpreter)A 147 739 :M -.009(in Prolog)A 589 656 :M f1_67 sf -.148(yes)A 884 658 :M -.18(slow)A 1193 656 :M -.235(fast)A 1505 656 :M -.265(poor)A 1801 656 :M -.148(yes)A 1980 658 :M f1_75 sf -.207(\(1\))A 151 2008 :M f1_67 sf -.006(* Depends on the underlying Prolog system)A 247 2654 :M f1_75 sf -.003(\(2\) Smallest development time to get a system that is fast)A 247 2733 :M -.038( enough to be useful)A endp end % md %%EndDocument endTexFig 1040 3278 a Fa(6)p eop %%Page: 7 7 7 6 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/07.ps /md 129 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Roman :mre /f1_75 f1_1 75 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 542 291 :M f0_100 sf (C as a portable assembler)S 211 533 :M f1_75 sf -.016(\245 Goals: speed, portability, and interoperability.)A 209 712 :M -.011(\245 Generating assembly is efficient but nonportable.)A 209 791 :M ( Generating emulated byte code is portable but inefficient.)S 209 870 :M -.015( Naive use of C as a target language is inefficient.)A 209 1033 :M (\245 A solution \(R. Meyer\): )S 209 1112 :M -.004( The RISC-macro technique using GNU C.)A 301 1258 :M -.011(1. Generate RISC code, where the RISC instructions are C)A 301 1337 :M -.001( macros. The macros are chosen so that the C compiler)A 301 1416 :M ( translates them into actual RISC instructions.)S 301 1558 :M -.012(2. Do not use the C call stack. Compile short branches as)A 301 1637 :M ( gotos and long branches as functions \(using a simple)S 301 1716 :M -.004( interpretive loop\). Control overhead < 5% and C)A 301 1795 :M -.012( procedure sizes are bounded.)A 301 1950 :M -.009(3. Assign registers to global variables \(a feature of GNU C\).)A 301 2102 :M -.01(4. Let the C compiler handle register allocation, peepholing,)A 301 2181 :M -.001( architecture-dependent issues and calls to C routines.)A 209 2343 :M -.014(\245 This technique is being used in the LIFE compiler development)A 209 2422 :M -.011( at DEC PRL. It is fast \(3 times faster than the first C code )A 209 2501 :M ( generation and within 30% of pure native\) and portable \(same )S 209 2580 :M -.022( code runs on MIPS, Alpha, and i486\).)A endp end % md %%EndDocument endTexFig 1040 3278 a Fa(7)p eop %%Page: 8 8 8 7 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/08.ps /md 129 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Roman :mre /f1_75 f1_1 75 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 433 291 :M f0_100 sf -.01(The compiler intermediate form)A 264 395 :M (for constraint language implementation)S 172 637 :M f1_75 sf -.008(\245 The intermediate form is the compiler\325s internal representation)A 172 716 :M -.055( of the program.)A 172 881 :M -.009(\245 A good intermediate form should be able to express correctness)A 172 960 :M -.002( independently of termination and efficiency.)A 172 1125 :M -.003(\245 Ideally, an intermediate form has 3 orthogonal components:)A 264 1277 :M -.014(1. Primitive constraints: the basic data manipulation )A 264 1356 :M ( instructions, which are executable and non-directional.)S 264 1435 :M -.007( They may include structural constraints \(e.g., unification)A 264 1514 :M -.01( of Herbrand terms\) and arithmetic constraints \(e.g., )A 264 1593 :M -.019( equalities and inequalities\).)A 264 1746 :M (2. Control flow: all modifications of control flow. This )S 264 1825 :M -.015( includes calls, jumps, closures and continuations.)A 264 1971 :M -.009(3. Type attributes: standard data types as well as modedness)A 264 2050 :M -.03( and aliasing information.)A 172 2214 :M (\245 This allows expressing purely declarative execution as well as)S 172 2293 :M -.013( efficient operational execution.)A 172 2439 :M -.003(\245 Compilation proceeds in two steps:)A 264 2587 :M (1. Add control and type information to the constraints.)S 264 2666 :M -.01( This can be done through programmer annotation, )A 264 2745 :M -.005( compiler transformations and global analysis.)A 264 2889 :M -.007(2. Translate the annotated constraints to the target language.)A endp end % md %%EndDocument endTexFig 1040 3278 a Fa(8)p eop %%Page: 9 9 9 8 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/09.ps /md 131 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Italic :mre /f1_75 f1_1 75 scf /f2_1/Times-Roman :mre /f2_75 f2_1 75 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 422 291 :M f0_100 sf (Examples of intermediate forms)S 226 829 :M f1_75 sf -.01(The Warren Abstract Machine \(WAM\) instruction set)A 207 2008 :M (The Aquarius Kernel Prolog language)S 303 1012 :M f2_75 sf (\245 The WAM instruction set can be divided into a)S 303 1091 :M -.009( constraint part \(get, put, unify instructions\) and a )A 303 1170 :M -.012( control part \(call, switch, choice points\). The)A 303 1249 :M -.013( instructions have execution order and type information)A 303 1328 :M -.007( wired in. Mapping from Prolog is straightforward and)A 303 1407 :M ( many important optimizations are designed in.)S 303 1577 :M (\245 Research issue: The constraints are too tightly bound with )S 303 1656 :M -.013( execution order and types to allow for significant further)A 303 1735 :M -.01( optimization. For example, the \322unify\323 instructions must )A 303 1814 :M -.006( be executed in a given order to unify a term\325s arguments.)A 303 2193 :M -.01(\245 Aquarius Kernel Prolog is a simplified representation)A 303 2272 :M -.014( of Prolog with all syntactic sugar removed. The three)A 303 2351 :M ( components are orthogonal \(e.g., type information is)S 303 2430 :M -.022( stored separately from the program\).)A 303 2589 :M -.002(\245 Research issue: The only constraints and control that are)A 303 2668 :M -.006( represented are Prolog\325s. Other constraints \(e.g., )A 303 2747 :M -.01( arithmetic\) and other control \(e.g., coroutining\) are not)A 303 2826 :M -.064( represented.)A 303 562 :M (\245 We present two examples of intermediate forms that )S 303 641 :M -.008( have been designed for efficient execution of Prolog.)A endp end % md %%EndDocument endTexFig 1040 3278 a Fa(9)p eop %%Page: 10 10 10 9 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/10.ps /showVM{vmstatus( VM-max: )print( )cvs print ( VM-used: )print( )cvs print pop(\n)print flush }def /showVM{}def /printVM{}def(Start dvips output)print showVM /TeXDict 350 dict def TeXDict begin /bdf{bind def}def /Inch{Resolution mul}bdf /Points{72 div Resolution mul}bdf /Dots{}bdf /Cm{2.54 div Resolution mul}bdf /dopage{72 Resolution div dup neg scale translate}bdf /USformat false def /@letter{ Resolution dup -10 mul dopage /USformat true def}bdf /@note{@letter}bdf /@legal{Resolution dup -13 mul dopage}bdf /A4format false def /@a4{Resolution dup -10.6929133858 mul dopage /A4format true def}bdf /@a4offset{21 2.54 div 72 mul 0 translate -1 1 scale Resolution dup -10.6929133858 mul dopage}bdf /@a3{ 72 72 translate Resolution dup -10.6929133858 mul dopage}bdf /@a3offset{21 2.54 div 72 mul 0 translate -1 1 scale 72 72 translate Resolution dup -10.6929133858 mul dopage}bdf /@a4upa3{29.7 21 div dup scale Resolution dup -10.6929133858 mul dopage}bdf /@aptex{Resolution dup -10.6929133858 mul dopage }bdf /@defaultFormat /@letter load def /@translate{translate}bdf /@scale{ scale}bdf /@rotate{rotate}bdf /@landscape{[0 1 -1 0 0 0]concat Resolution dup dopage}bdf /@manualfeed{statusdict /manualfeed true put}bdf /@copies{/#copies exch def}bdf /@letterhead{}bdf /LetterHead false def /filename()def /dateandtime()def /isTwoUp false def /isReverse false def /PageNumber 0 def /Odd-Page false def /TypeSetter false def /LetterTray 1 def statusdict begin product(PrintServer 20)eq product(PrintServer 40)eq or{currentdict /defaultpapertray known{/DefaultTray defaultpapertray def}if}if end /@FontMatrix[1 0 0 -1 0 0]def /@FontBBox[0 0 1 1]def /dmystr(ZZf@@)def /newname{dmystr cvn}bdf /df{/fontname exch def dmystr 2 fontname cvx(@@@)cvs putinterval newname 7 dict def newname load begin /FontType 3 def /FontMatrix @FontMatrix def /FontBBox @FontBBox def /BitMaps 256 array def /BuildChar{ CharBuilder}def /Encoding TeXEncoding def end fontname{/foo setfont}2 array copy cvx def fontname load 0 dmystr 5 string copy cvn cvx put printVM}bdf /dfe {newname newname load definefont setfont}bdf /ch-image{ch-data 0 get}bdf /ch-width{ch-data 1 get}bdf /ch-height{ch-data 2 get}bdf /ch-xoff{ch-data 3 get .1 add}bdf /ch-yoff{ch-data 4 get .1 sub}bdf /ch-tfmw{ch-data 5 get}bdf /CharBuilder{save 3 1 roll exch /BitMaps get exch get /ch-data exch def ch-data null ne{ch-tfmw 0 ch-xoff neg ch-yoff neg ch-width ch-xoff sub ch-height ch-yoff sub setcachedevice ch-width ch-height true[1 0 0 1 ch-xoff ch-yoff]{ch-image}imagemask}if restore}bdf /dc{/ch-code exch def dup 0 get length 1 lt{pop[<00>1 1 0 0 8.00]}if /ch-data exch def newname load /BitMaps get ch-code ch-data put}bdf /@onetick{newpath -0.3 Cm 0 moveto -1 Cm 0 rlineto 1.3 Cm -1.3 Cm rmoveto 0 1 Cm rlineto stroke}def /@drawpagemarks{gsave 1 Dots setlinewidth -1 Inch Yoffset translate @onetick gsave 21 Cm 0 translate 90 rotate @onetick grestore gsave 21 Cm 29.7 Cm translate 180 rotate @onetick grestore gsave 0 29.7 Cm translate -90 rotate @onetick grestore 0.5 Cm 30.5 Cm moveto /Helvetica findfont[30 0 0 -30 0 0]makefont setfont(File: )filename show( dvips run date: )show dateandtime show( Page: )show pagenumber ( )cvs show 18 Cm 30.5 Cm moveto 1 0 0 setrgbcolor 0.5 Cm 0 rlineto stroke 19 Cm 30.5 Cm moveto 0 1 0 setrgbcolor 0.5 Cm 0 rlineto stroke 20 Cm 30.5 Cm moveto 0 0 1 setrgbcolor 0.5 Cm 0 rlineto stroke grestore}def /bop{/pagenumber exch def(Printing page: )print pagenumber( ) cvs print showVM LetterHead{[0 0 0 0 0 0]currentmatrix statusdict begin product(PrintServer 20)eq product(PrintServer 40)eq or{currentdict /defaultpapertray known{pagenumber 1 eq{/DefaultTray defaultpapertray def LetterTray setpapertray}{DefaultTray setpapertray}ifelse}if}if end setmatrix} if pagenumber dup 2 div cvi 2 mul ne /Odd-Page exch def gsave /SaveImage save def isTwoUp{A4format{-90 rotate -29.7 2.54 add Cm -2.54 Cm translate 2.54 21 29.7 div mul Cm dup translate Odd-Page{29.7 2 div Cm 0 translate}if 21 29.7 div dup scale}if USformat{-90 rotate -11 1 add Inch -1 Inch translate 1 8.5 11 div mul Inch dup translate Odd-Page{11 2 div Inch 0 translate}if 8.5 11 div dup scale}if}if TypeSetter{pagenumber @drawpagemarks}if 0 0 moveto}bdf /eop{ showVM clear SaveImage restore isTwoUp not isReverse Odd-Page xor or{showpage} if grestore}bdf /eod{isTwoUp isReverse Odd-Page xor not and{showpage}if}bdf /@start{/Resolution exch def /TeXEncoding 256 array def 0 1 255{TeXEncoding exch 1 string dup 0 3 index put cvn put}for}bdf /p{show}bdf /RuleMatrix[1 0 0 -1 0 -1]def /BlackDots 8 string def /v{gsave currentpoint translate newpath 0 0 moveto dup 0 exch neg rlineto exch 0 rlineto 0 exch rlineto closepath fill grestore}bdf /v{gsave currentpoint translate false RuleMatrix{BlackDots} imagemask grestore}bdf /a{moveto}bdf /delta 0 def /tail{dup /delta exch def 0 rmoveto}bdf /b{exch p tail}bdf /c{p delta 4 sub tail}bdf /d{p delta 3 sub tail }bdf /e{p delta 2 sub tail}bdf /f{p delta 1 sub tail}bdf /g{p delta 0 rmoveto} bdf /h{p delta 1 add tail}bdf /i{p delta 2 add tail}bdf /j{p delta 3 add tail} bdf /k{p delta 4 add tail}bdf /l{p -4 0 rmoveto}bdf /m{p -3 0 rmoveto}bdf /n{ p -2 0 rmoveto}bdf /o{p -1 0 rmoveto}bdf /q{p 1 0 rmoveto}bdf /r{p 2 0 rmoveto }bdf /s{p 3 0 rmoveto}bdf /t{p 4 0 rmoveto}bdf /w{0 rmoveto}bdf /x{0 exch rmoveto}bdf /y{3 -1 roll p moveto}bdf /bos{/section save def}bdf /eos{clear section restore}bdf /SDict 200 dict def SDict begin /@SpecialDefaults{/hs 8.5 Inch def /vs 11 Inch def /ho 0 def /vo 0 def /hsc 1 def /vsc 1 def /ang 0 def /CLIP false def /BBcalc false def}bdf /@hsize{/hs exch def /CLIP true def}bdf /@vsize{/vs exch def /CLIP true def}bdf /@hoffset{/ho exch def}bdf /@voffset{ /vo exch def}bdf /@hscale{@scaleunit div /hsc exch def}bdf /@vscale{ @scaleunit div /vsc exch def}bdf /@angle{/ang exch def}bdf /@scaleunit 100 def /@rwi{10 div /rwi exch def}bdf /@llx{/llx exch def}bdf /@lly{/lly exch def} bdf /@urx{/urx exch def}bdf /@ury{/ury exch def /BBcalc true def}bdf /@setclipper{BBcalc{rwi urx llx sub div dup scale llx neg lly neg translate}{ hsc vsc scale}ifelse CLIP{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}{initclip}ifelse}bdf end /@MacSetUp{userdict begin /letter{}def /legal{}def /tab{}def /a4{}def /b5{}def /a4small{}def /a3Size{} def /lettersmall{}def /note{}def /showpage{}def /erasepage{}def /copypage{} def end userdict /md known{userdict /md get type /dicttype eq{md begin /bigs[ lnop lnop lnop lnop lnop lnop lnop lnop lnop lnop]def /smalls[lnop lnop lnop lnop lnop lnop lnop lnop lnop lnop]def end}if}if}def /psf$TeXscale{65782 div} def /startTexFig{(startTeXFig)print showVM /psf$SavedState save def userdict maxlength dict begin Resolution 72 div dup neg scale currentpoint translate /psf$ury exch psf$TeXscale def /psf$urx exch psf$TeXscale def /psf$lly exch psf$TeXscale def /psf$llx exch psf$TeXscale def /psf$y exch psf$TeXscale def /psf$x exch psf$TeXscale def currentpoint /psf$cy exch def /psf$cx exch def /psf$sx psf$x psf$urx psf$llx sub div def /psf$sy psf$y psf$ury psf$lly sub div def psf$sx 0 eq{/psf$sx 1 def(psf$sx = 0\n)print flush}if psf$sy 0 eq{ /psf$sy 1 def(psf$sy = 0\n)print flush}if psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub translate @MacSetUp}def /dorotateplus{currentpoint /origy exch def /origx exch def currentpoint translate 90 rotate psf$llx psf$urx sub 0 translate origx neg origy neg translate}def /dorotateminus{currentpoint /origy exch def /origx exch def currentpoint translate -90 rotate 0 psf$ury psf$lly sub translate origx neg origy neg translate}def /doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto}def /endTexFig{end psf$SavedState restore (endTexFig)print showVM}def /@beginspecial{SDict begin /SpecialSave save def gsave Resolution 72 div dup neg scale currentpoint translate @SpecialDefaults} bdf /@setspecial{ho vo translate @setclipper ang rotate /showpage{}def newpath }bdf /@endspecial{grestore clear SpecialSave restore end}bdf /@defspecial{ SDict begin}bdf /@fedspecial{end}bdf /li{lineto}bdf /rl{rlineto}bdf /rc{ rcurveto}bdf /np{/SaveX currentpoint /SaveY exch def def newpath}bdf /st{ stroke SaveX SaveY moveto}bdf /fil{fill SaveX SaveY moveto}bdf /ellipse{ /endangle exch def /startangle exch def /yrad exch def /xrad exch def /savematrix matrix currentmatrix def translate xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}bdf end TeXDict begin /@letterhead{/LetterTray 1 def /LetterHead true def} bdf /@letter { Resolution dup exch 1.06 mul exch -10.21 mul dopage } bdf /@a4 { Resolution dup exch 1.06 mul exch -10.89 mul dopage /A4format true def } bdf /@a4upa3{ statusdict begin 2 setpapertray end 29.7 21 div dup scale Resolution dup exch 1.06 mul exch -10.89 mul dopage /A4format true def } bdf /@aptex { Resolution dup exch 0.96 mul exch -10.57 mul dopage } bdf /@defaultFormat /@a4 load def end TeXDict begin /ReEncodeForTeX{findfont /basefontdict exch def /newfont basefontdict maxlength 2 add dict def basefontdict{exch dup /FID ne{dup /Encoding eq{exch dup length array copy}{exch}ifelse newfont 3 1 roll put}{ pop pop}ifelse}forall /nextfree 128 def basefontdict /FontInfo get /isFixedPitch get{courvec}{normalvec}ifelse fixup 256 dict begin newfont /Encoding get 0 1 255{2 copy get 3 index 2 index get 1000 mul ptsize div def pop}for pop pop newfont /Metrics currentdict put end newname newfont definefont}bind def /fixup{aload length 2 idiv{dup newfont /CharStrings get exch known{newfont /Encoding get dup nextfree get /.notdef eq{dup dup 4 index get dup /.notdef eq{pop pop}{nextfree exch put /nextfree nextfree 1 add def} ifelse}if 3 1 roll put}{pop pop}ifelse}repeat}bind def /normalvec[127 /dieresis 126 /tilde 125 /quotedbl 124 /emdash 123 /endash 95 /dotaccent 94 /circumflex 92 /quotedblleft 62 /questiondown 60 /exclamdown 34 /quotedblright 31 /Oslash 30 /OE 29 /AE 28 /oslash 27 /oe 26 /ae 25 /germandbls 24 /cedilla 23 /ring 22 /macron 21 /breve 20 /caron 19 /acute 18 /grave 16 /dotlessi 13 /fl 12 /fi 10 /Omega 9 /Psi 8 /Phi 7 /Upsilon 6 /Sigma 5 /Pi 4 /Xi 3 /Lambda 2 /Theta 1 /Delta 0 /Gamma]def /courvec[31 /Oslash 30 /OE 29 /AE 28 /oslash 27 /oe 26 /ae 25 /germandbls 24 /cedilla 23 /ring 22 /macron 21 /breve 20 /caron 19 /acute 18 /grave 16 /dotlessi 15 /questiondown 14 /exclamdown 13 /quotesingle 12 /arrowdown 11 /arrowup 10 /Omega 9 /Psi 8 /Phi 7 /Upsilon 6 /Sigma 5 /Pi 4 /Xi 3 /Lambda 2 /Theta 1 /Delta 0 /Gamma]def /pf{exch pop 655360 div mul Resolution mul 7227 div /ptsize exch def /PSname exch def exch /TeXname exch def dmystr 2 TeXname cvx(@@@)cvs putinterval PSname ReEncodeForTeX newname exch[ptsize 0 0 ptsize neg 0 0]makefont def TeXname{ /foo setfont}2 array copy cvx def TeXname load 0 dmystr 5 string copy cvn cvx put(New font: )print PSname ( )cvs print vmstatus( VM-max: )print( )cvs print ( VM-used: )print( )cvs print pop(\n) print flush}bind def /ObliqueFont{/ObliqueAngle exch def /ObliqueBaseName exch def /ObliqueFontName exch def /ObliqueTransform[1 0 ObliqueAngle sin ObliqueAngle cos div 1 0 0]def /basefontdict ObliqueBaseName findfont ObliqueTransform makefont def /newfont basefontdict maxlength dict def basefontdict{exch dup /FID ne{dup /Encoding eq{exch dup length array copy newfont 3 1 roll put}{exch newfont 3 1 roll put}ifelse}{pop pop}ifelse}forall newfont /FontName ObliqueFontName put ObliqueFontName newfont definefont pop} bind def /SmallCapsFont{/SmallCapsBaseName exch def /SmallCapsFontName exch def /basefontdict SmallCapsBaseName findfont def /newfont basefontdict maxlength 10 add dict def newfont begin /FontName SmallCapsFontName def /FontBaseDict basefontdict 1000 scalefont def /FontSCDict FontBaseDict .8 scalefont def /FontType 3 def /BuildChar{SmallCapChar}def /FontMatrix dup basefontdict exch get def /FontBBox dup basefontdict exch get def /Encoding dup basefontdict exch get def /CharStrings dup basefontdict exch get def /FontInfo dup basefontdict exch get def end SmallCapsFontName newfont definefont pop}bind def /SmallCapChar{/achar(A)def achar exch 0 exch put begin achar 0 get dup 97 ge exch 122 le and{achar 0 achar 0 get 32 sub put FontSCDict}{FontBaseDict}ifelse setfont achar stringwidth FontBBox setcachedevice newpath 0 0 moveto achar show end}bind def end /SetUpGreekFont{ findfont dup length dict /newfont exch def{1 index /FID ne{newfont 3 1 roll put}{pop pop}ifelse}forall /oldvect newfont /Encoding get def oldvect length dup array /newvect exch def 0 1 3 -1 roll 1 sub{newvect exch dup oldvect exch get put}for newvect 8#146 /phi1 put newvect 8#152 /phi put newvect 8#161 /theta1 put newvect 8#112 /theta put newfont /Encoding newvect put newfont definefont pop}def TeXDict begin 300 @start /fa [ 0 0 0 0 0 0 0 0 0 0 0 0 52 52 0 0 29 0 35 35 35 35 35 35 35 63 92 98 63 104 104 81 29 29 35 58 58 92 69 23 35 35 40 61 29 35 29 29 58 58 58 58 58 58 58 58 58 58 29 29 35 61 63 58 105 69 69 75 75 69 63 81 75 29 52 69 58 86 75 81 69 81 75 69 63 75 69 98 69 69 63 29 35 29 35 35 23 58 58 52 58 58 29 58 58 23 23 52 23 86 58 58 58 58 35 52 29 58 52 75 52 52 52 58 104 35 35 35 61 35 27 35 58 49 29 61 61 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 58 58 17 58 58 58 58 20 35 58 35 35 52 52 0 58 58 58 29 0 56 36 23 35 35 58 104 104 0 63 0 35 35 35 35 35 35 35 35 0 35 35 0 35 35 35 104 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 104 0 38 0 0 0 0 58 81 104 38 0 0 0 0 0 92 0 0 0 29 0 0 23 63 98 63 0 0 0 0 ] /Helvetica 1000 655360 1638400 pf /fb [ 0 0 0 0 0 0 0 0 0 0 0 0 35 35 0 0 20 0 23 23 23 23 23 23 23 35 47 47 35 63 67 51 18 23 39 35 35 59 55 23 23 23 35 48 18 23 18 20 35 35 35 35 35 35 35 35 35 35 23 23 27 48 35 35 65 43 43 47 51 43 43 51 51 23 31 47 39 59 47 51 43 51 43 35 39 51 43 59 43 39 39 27 39 27 23 23 23 35 35 31 35 31 20 35 35 20 20 31 20 51 35 35 35 35 27 27 20 35 31 47 31 31 27 35 63 23 23 23 38 28 19 28 35 30 20 48 48 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 35 35 12 35 35 35 35 15 39 35 23 23 35 35 0 35 35 35 18 0 37 25 23 39 39 35 63 71 0 35 0 23 23 23 23 23 23 23 23 0 23 23 0 23 23 23 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 19 0 0 0 0 39 51 67 22 0 0 0 0 0 47 0 0 0 20 0 0 20 35 47 35 0 0 0 0 ] /Times-Italic 1000 655360 1114112 pf /fc [ 43 43 52 48 46 54 42 49 54 56 54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 23 50 35 39 59 55 31 23 23 35 39 18 39 18 20 35 35 35 35 35 35 35 35 35 35 20 20 39 39 39 31 39 51 47 51 43 43 54 43 51 23 45 51 48 63 51 51 54 52 39 42 43 49 31 54 46 56 43 23 61 23 46 35 35 45 39 39 35 31 37 29 43 23 43 39 39 41 37 39 39 37 39 43 31 41 50 48 35 48 35 34 14 34 39 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44 17 39 12 50 35 53 53 53 53 74 70 43 70 43 28 39 29 39 39 50 35 32 39 39 39 39 71 43 71 46 58 48 56 70 54 54 58 54 54 50 50 50 50 50 50 50 54 50 56 56 63 58 39 18 50 43 43 74 70 43 70 43 35 23 56 56 55 50 27 27 27 27 27 27 35 35 35 35 56 23 19 48 48 48 27 27 27 27 27 27 35 35 35 0 ] /Symbol 1000 655360 1114112 pf /fd [ 0 0 0 0 0 0 0 0 0 0 0 0 39 39 0 0 20 0 23 23 23 23 23 23 23 35 47 51 35 63 63 51 18 23 31 35 35 59 55 23 23 23 35 40 18 23 18 20 35 35 35 35 35 35 35 35 35 35 20 20 23 40 31 31 65 51 47 47 51 43 39 51 51 23 27 51 43 63 51 51 39 51 47 39 43 51 51 67 51 51 43 23 31 23 23 23 23 31 35 31 35 31 23 35 35 20 20 35 20 55 35 35 35 35 23 27 20 35 35 51 35 35 31 35 71 23 23 23 38 34 14 34 35 33 20 40 40 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 35 35 12 35 35 35 35 13 31 35 23 23 39 39 0 35 35 35 18 0 32 25 23 31 31 35 71 71 0 31 0 23 23 23 23 23 23 23 23 0 23 23 0 23 23 23 71 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 19 0 0 0 0 43 51 63 22 0 0 0 0 0 47 0 0 0 20 0 0 20 35 51 35 0 0 0 0 ] /Times-Roman 1000 655360 1114112 pf /fe [ 0 0 0 0 0 0 0 0 0 0 0 0 25 25 0 0 14 0 17 17 17 17 17 17 17 25 33 33 25 44 47 36 12 17 28 25 25 41 39 17 17 17 25 34 12 17 12 14 25 25 25 25 25 25 25 25 25 25 17 17 19 34 25 25 46 30 30 33 36 30 30 36 36 17 22 33 28 41 33 36 30 36 30 25 28 36 30 41 30 28 28 19 28 19 17 17 17 25 25 22 25 22 14 25 25 14 14 22 14 36 25 25 25 25 19 19 14 25 22 33 22 22 19 25 44 17 17 17 27 20 14 20 25 21 14 34 34 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 25 25 8 25 25 25 25 11 28 25 17 17 25 25 0 25 25 25 12 0 26 17 17 28 28 25 44 50 0 25 0 17 17 17 17 17 17 17 17 0 17 17 0 17 17 17 44 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44 0 14 0 0 0 0 28 36 47 15 0 0 0 0 0 33 0 0 0 14 0 0 14 25 33 25 0 0 0 0 ] /Times-Italic 1000 655360 786432 pf /ff df[<003F800000FFE00003 FFF80007FFFC000FFFFE001FFFFF003FFFFF803FFFFF807FFFFFC07FFFFFC0FFFFFFE0FFFFFFE0 FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE07FFFFFC07FFFFFC03FFFFF 803FFFFF801FFFFF000FFFFE0007FFFC0003FFF80000FFE000003F8000>27 29 -4 -3 36]15 dc[<00000000060000000000000007000000000000000700000000000000078000000000000003 8000000000000003C000000000000001E000000000000000F00000000000000070000000000000 0078000000000000003C000000000000001E0000FFFFFFFFFFFF0000FFFFFFFFFFFF8000FFFFFF FFFFFFE000000000000001F0000000000000007C000000000000003F000000000000001FC00000 0000000007F800000000000001FE00000000000001FE00000000000007F80000000000001FC000 00000000007E00000000000000F800FFFFFFFFFFFFF000FFFFFFFFFFFFC000FFFFFFFFFFFF8000 00000000001F000000000000003C0000000000000078000000000000007800000000000000F000 000000000001E000000000000001C000000000000003C000000000000007800000000000000700 000000000000070000000000000006000000>63 41 -4 3 72]41 dc[39 44 -4 1 48]94 dc dfe /fg df[<00018000000000 01800000000001C00000000000C00000000000C00000000000C00000000000E000000000006000 000000006000000000006000000000007000000000003000000000003000000000003000000000 01FFC00000001FFFF00000003F987C000000FE181F000001F81C07800001F00C01C00003F00C00 E00003E00C00700003E00E00380003E006001C0003E006000C0003E006000E0003E00700070003 F00300030001F00300038001F00300018001F80380018000F80180018000F8018001C000FC0180 00C0C07C01C000C0E07C00C001C0607E00C001E0603E00C003E0703E00E003E0303E006007E038 1E00600FE01C3E00600FE00E3E00700FE007FC00300FC003F0003007C000000030000000000038 00000000001800000000001800000000001800000000001C00000000000C00000000000C000000 00000C00000000000E000000000006000000000006000000000006000000000007000000000003 0000000000030000000000030000000000038000000000018000>43 64 -2 14 47]32 dc[<3C 7EFFFFFFFF7E3C>8 8 -6 0 20]58 dc dfe /fh df[<0007000E001E003C0038007000E001E0 01C003C00380070007000F000E001E001C001C003C003C00380038007800780070007000700070 00F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00070007000 7000700078007800380038003C003C001C001C001E000E000F0007000700038003C001C001E000 E000700038003C001E000E0007>16 73 -5 19 25]40 dc[16 73 -4 19 25]41 dc[<7FFFFFFFFFE0FFFFFFFFFFF0 FFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFF0 FFFFFFFFFFF07FFFFFFFFFE0>44 17 -4 -9 52]61 dc dfe end TeXDict begin /filename (lifecomp1.dvi) def /dateandtime (Sat May 14 16:04:10 1994 ) def @defaultFormat 1 bop 195 206 a fa(Example)28 b(of)h(LIFE)g(compilation)e(\(1\))-24 504 y ff (\017)21 b fd(LIFE)11 b(is)g(a)g(constraint)g(language)g(implementing)g(uni\ \014cation)g(and)h(matching)33 596 y(on)18 b fg( )s fd(-terms.)-24 720 y ff (\017)j fd(A)c fg( )s fd(-term)h(is)f(a)h(generalization)i(of)e(a)g(Prolog)g (term.)27 b(It)17 b(is)h(to)f(a)h(Prolog)h(term)33 812 y(as)h(a)g(dynamic)g (record)h(is)f(to)f(a)g(static)h(array)-5 b(.)33 b(That)20 b(is,)f(it)f(has)j (named)f(\014elds)33 903 y(and)27 b(\014elds)f(may)h(be)f(added)h(at)f(will.) 49 b(There)28 b(is)e(no)g(notion)g(of)h(a)f fb(gr)m(ound)33 994 y fd(term.) -24 1119 y ff(\017)21 b fd(In)d(this)e(example,)i(we)f(show)h(how)f(the)g(RIS\ C-macro)j(technique)e(is)f(used)h(to)33 1210 y(compile)g fg( )s fd(-term)g (uni\014cation)g(in)g(LIFE.)-24 1335 y ff(\017)j fd(A)30 b fg( )s fd(-term)g (can)h(be)f(considered)j(as)d(a)h(conjunction)g(of)f(three)h(primitive)33 1426 y(constraints:)39 b(a)24 b(sort)g(constraint)h(\()p fe(X)i fd(:)e fe(s)p fd (\),)g(a)f(feature)h(constraint)g(\()p fe(X)q fg(:)p fe(f)33 b fh(=)25 b fe (Y)r fd(\),)33 1517 y(and)18 b(an)h(equality)f(constraint)h(\()p fe(X)j fh (=)d fe(Y)r fd(\).)-24 1642 y ff(\017)i fd(The)g fg( )s fd(-term)f fe(X)k fd (:)d fe(person)p fh(\()p fe(age)j ff(\))e fc(25)p fh(\))f fd(is)f(equivalent) h(to)f fe(X)j fd(:)f fe(person)c ff(^)e fh(\()p fe(X)q fg(:)p fe(age)23 b fh (=)33 1733 y fe(Y)r fh(\))16 b ff(^)g fh(\()p fe(Y)22 b fd(:)e fc(25)p fh(\)) p fd(.)-24 1858 y ff(\017)h fd(The)f(representation)i(of)e fg( )s fd(-terms,) g(if)f(used)i(as)f(Prolog)g(terms,)g(has)h(at)e(most)33 1949 y(a)f(single)g (word)h(of)f(memory)h(overhead.)g eop eod end %%EndDocument endTexFig 1029 3278 a Fa(10)p eop %%Page: 11 11 11 10 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/11.ps /showVM{vmstatus( VM-max: )print( )cvs print ( VM-used: )print( )cvs print pop(\n)print flush }def /showVM{}def /printVM{}def(Start dvips output)print showVM /TeXDict 350 dict def TeXDict begin /bdf{bind def}def /Inch{Resolution mul}bdf /Points{72 div Resolution mul}bdf /Dots{}bdf /Cm{2.54 div Resolution mul}bdf /dopage{72 Resolution div dup neg scale translate}bdf /USformat false def /@letter{ Resolution dup -10 mul dopage /USformat true def}bdf /@note{@letter}bdf /@legal{Resolution dup -13 mul dopage}bdf /A4format false def /@a4{Resolution dup -10.6929133858 mul dopage /A4format true def}bdf /@a4offset{21 2.54 div 72 mul 0 translate -1 1 scale Resolution dup -10.6929133858 mul dopage}bdf /@a3{ 72 72 translate Resolution dup -10.6929133858 mul dopage}bdf /@a3offset{21 2.54 div 72 mul 0 translate -1 1 scale 72 72 translate Resolution dup -10.6929133858 mul dopage}bdf /@a4upa3{29.7 21 div dup scale Resolution dup -10.6929133858 mul dopage}bdf /@aptex{Resolution dup -10.6929133858 mul dopage }bdf /@defaultFormat /@letter load def /@translate{translate}bdf /@scale{ scale}bdf /@rotate{rotate}bdf /@landscape{[0 1 -1 0 0 0]concat Resolution dup dopage}bdf /@manualfeed{statusdict /manualfeed true put}bdf /@copies{/#copies exch def}bdf /@letterhead{}bdf /LetterHead false def /filename()def /dateandtime()def /isTwoUp false def /isReverse false def /PageNumber 0 def /Odd-Page false def /TypeSetter false def /LetterTray 1 def statusdict begin product(PrintServer 20)eq product(PrintServer 40)eq or{currentdict /defaultpapertray known{/DefaultTray defaultpapertray def}if}if end /@FontMatrix[1 0 0 -1 0 0]def /@FontBBox[0 0 1 1]def /dmystr(ZZf@@)def /newname{dmystr cvn}bdf /df{/fontname exch def dmystr 2 fontname cvx(@@@)cvs putinterval newname 7 dict def newname load begin /FontType 3 def /FontMatrix @FontMatrix def /FontBBox @FontBBox def /BitMaps 256 array def /BuildChar{ CharBuilder}def /Encoding TeXEncoding def end fontname{/foo setfont}2 array copy cvx def fontname load 0 dmystr 5 string copy cvn cvx put printVM}bdf /dfe {newname newname load definefont setfont}bdf /ch-image{ch-data 0 get}bdf /ch-width{ch-data 1 get}bdf /ch-height{ch-data 2 get}bdf /ch-xoff{ch-data 3 get .1 add}bdf /ch-yoff{ch-data 4 get .1 sub}bdf /ch-tfmw{ch-data 5 get}bdf /CharBuilder{save 3 1 roll exch /BitMaps get exch get /ch-data exch def ch-data null ne{ch-tfmw 0 ch-xoff neg ch-yoff neg ch-width ch-xoff sub ch-height ch-yoff sub setcachedevice ch-width ch-height true[1 0 0 1 ch-xoff ch-yoff]{ch-image}imagemask}if restore}bdf /dc{/ch-code exch def dup 0 get length 1 lt{pop[<00>1 1 0 0 8.00]}if /ch-data exch def newname load /BitMaps get ch-code ch-data put}bdf /@onetick{newpath -0.3 Cm 0 moveto -1 Cm 0 rlineto 1.3 Cm -1.3 Cm rmoveto 0 1 Cm rlineto stroke}def /@drawpagemarks{gsave 1 Dots setlinewidth -1 Inch Yoffset translate @onetick gsave 21 Cm 0 translate 90 rotate @onetick grestore gsave 21 Cm 29.7 Cm translate 180 rotate @onetick grestore gsave 0 29.7 Cm translate -90 rotate @onetick grestore 0.5 Cm 30.5 Cm moveto /Helvetica findfont[30 0 0 -30 0 0]makefont setfont(File: )filename show( dvips run date: )show dateandtime show( Page: )show pagenumber ( )cvs show 18 Cm 30.5 Cm moveto 1 0 0 setrgbcolor 0.5 Cm 0 rlineto stroke 19 Cm 30.5 Cm moveto 0 1 0 setrgbcolor 0.5 Cm 0 rlineto stroke 20 Cm 30.5 Cm moveto 0 0 1 setrgbcolor 0.5 Cm 0 rlineto stroke grestore}def /bop{/pagenumber exch def(Printing page: )print pagenumber( ) cvs print showVM LetterHead{[0 0 0 0 0 0]currentmatrix statusdict begin product(PrintServer 20)eq product(PrintServer 40)eq or{currentdict /defaultpapertray known{pagenumber 1 eq{/DefaultTray defaultpapertray def LetterTray setpapertray}{DefaultTray setpapertray}ifelse}if}if end setmatrix} if pagenumber dup 2 div cvi 2 mul ne /Odd-Page exch def gsave /SaveImage save def isTwoUp{A4format{-90 rotate -29.7 2.54 add Cm -2.54 Cm translate 2.54 21 29.7 div mul Cm dup translate Odd-Page{29.7 2 div Cm 0 translate}if 21 29.7 div dup scale}if USformat{-90 rotate -11 1 add Inch -1 Inch translate 1 8.5 11 div mul Inch dup translate Odd-Page{11 2 div Inch 0 translate}if 8.5 11 div dup scale}if}if TypeSetter{pagenumber @drawpagemarks}if 0 0 moveto}bdf /eop{ showVM clear SaveImage restore isTwoUp not isReverse Odd-Page xor or{showpage} if grestore}bdf /eod{isTwoUp isReverse Odd-Page xor not and{showpage}if}bdf /@start{/Resolution exch def /TeXEncoding 256 array def 0 1 255{TeXEncoding exch 1 string dup 0 3 index put cvn put}for}bdf /p{show}bdf /RuleMatrix[1 0 0 -1 0 -1]def /BlackDots 8 string def /v{gsave currentpoint translate newpath 0 0 moveto dup 0 exch neg rlineto exch 0 rlineto 0 exch rlineto closepath fill grestore}bdf /v{gsave currentpoint translate false RuleMatrix{BlackDots} imagemask grestore}bdf /a{moveto}bdf /delta 0 def /tail{dup /delta exch def 0 rmoveto}bdf /b{exch p tail}bdf /c{p delta 4 sub tail}bdf /d{p delta 3 sub tail }bdf /e{p delta 2 sub tail}bdf /f{p delta 1 sub tail}bdf /g{p delta 0 rmoveto} bdf /h{p delta 1 add tail}bdf /i{p delta 2 add tail}bdf /j{p delta 3 add tail} bdf /k{p delta 4 add tail}bdf /l{p -4 0 rmoveto}bdf /m{p -3 0 rmoveto}bdf /n{ p -2 0 rmoveto}bdf /o{p -1 0 rmoveto}bdf /q{p 1 0 rmoveto}bdf /r{p 2 0 rmoveto }bdf /s{p 3 0 rmoveto}bdf /t{p 4 0 rmoveto}bdf /w{0 rmoveto}bdf /x{0 exch rmoveto}bdf /y{3 -1 roll p moveto}bdf /bos{/section save def}bdf /eos{clear section restore}bdf /SDict 200 dict def SDict begin /@SpecialDefaults{/hs 8.5 Inch def /vs 11 Inch def /ho 0 def /vo 0 def /hsc 1 def /vsc 1 def /ang 0 def /CLIP false def /BBcalc false def}bdf /@hsize{/hs exch def /CLIP true def}bdf /@vsize{/vs exch def /CLIP true def}bdf /@hoffset{/ho exch def}bdf /@voffset{ /vo exch def}bdf /@hscale{@scaleunit div /hsc exch def}bdf /@vscale{ @scaleunit div /vsc exch def}bdf /@angle{/ang exch def}bdf /@scaleunit 100 def /@rwi{10 div /rwi exch def}bdf /@llx{/llx exch def}bdf /@lly{/lly exch def} bdf /@urx{/urx exch def}bdf /@ury{/ury exch def /BBcalc true def}bdf /@setclipper{BBcalc{rwi urx llx sub div dup scale llx neg lly neg translate}{ hsc vsc scale}ifelse CLIP{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}{initclip}ifelse}bdf end /@MacSetUp{userdict begin /letter{}def /legal{}def /tab{}def /a4{}def /b5{}def /a4small{}def /a3Size{} def /lettersmall{}def /note{}def /showpage{}def /erasepage{}def /copypage{} def end userdict /md known{userdict /md get type /dicttype eq{md begin /bigs[ lnop lnop lnop lnop lnop lnop lnop lnop lnop lnop]def /smalls[lnop lnop lnop lnop lnop lnop lnop lnop lnop lnop]def end}if}if}def /psf$TeXscale{65782 div} def /startTexFig{(startTeXFig)print showVM /psf$SavedState save def userdict maxlength dict begin Resolution 72 div dup neg scale currentpoint translate /psf$ury exch psf$TeXscale def /psf$urx exch psf$TeXscale def /psf$lly exch psf$TeXscale def /psf$llx exch psf$TeXscale def /psf$y exch psf$TeXscale def /psf$x exch psf$TeXscale def currentpoint /psf$cy exch def /psf$cx exch def /psf$sx psf$x psf$urx psf$llx sub div def /psf$sy psf$y psf$ury psf$lly sub div def psf$sx 0 eq{/psf$sx 1 def(psf$sx = 0\n)print flush}if psf$sy 0 eq{ /psf$sy 1 def(psf$sy = 0\n)print flush}if psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub translate @MacSetUp}def /dorotateplus{currentpoint /origy exch def /origx exch def currentpoint translate 90 rotate psf$llx psf$urx sub 0 translate origx neg origy neg translate}def /dorotateminus{currentpoint /origy exch def /origx exch def currentpoint translate -90 rotate 0 psf$ury psf$lly sub translate origx neg origy neg translate}def /doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto}def /endTexFig{end psf$SavedState restore (endTexFig)print showVM}def /@beginspecial{SDict begin /SpecialSave save def gsave Resolution 72 div dup neg scale currentpoint translate @SpecialDefaults} bdf /@setspecial{ho vo translate @setclipper ang rotate /showpage{}def newpath }bdf /@endspecial{grestore clear SpecialSave restore end}bdf /@defspecial{ SDict begin}bdf /@fedspecial{end}bdf /li{lineto}bdf /rl{rlineto}bdf /rc{ rcurveto}bdf /np{/SaveX currentpoint /SaveY exch def def newpath}bdf /st{ stroke SaveX SaveY moveto}bdf /fil{fill SaveX SaveY moveto}bdf /ellipse{ /endangle exch def /startangle exch def /yrad exch def /xrad exch def /savematrix matrix currentmatrix def translate xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}bdf end TeXDict begin /@letterhead{/LetterTray 1 def /LetterHead true def} bdf /@letter { Resolution dup exch 1.06 mul exch -10.21 mul dopage } bdf /@a4 { Resolution dup exch 1.06 mul exch -10.89 mul dopage /A4format true def } bdf /@a4upa3{ statusdict begin 2 setpapertray end 29.7 21 div dup scale Resolution dup exch 1.06 mul exch -10.89 mul dopage /A4format true def } bdf /@aptex { Resolution dup exch 0.96 mul exch -10.57 mul dopage } bdf /@defaultFormat /@a4 load def end TeXDict begin /ReEncodeForTeX{findfont /basefontdict exch def /newfont basefontdict maxlength 2 add dict def basefontdict{exch dup /FID ne{dup /Encoding eq{exch dup length array copy}{exch}ifelse newfont 3 1 roll put}{ pop pop}ifelse}forall /nextfree 128 def basefontdict /FontInfo get /isFixedPitch get{courvec}{normalvec}ifelse fixup 256 dict begin newfont /Encoding get 0 1 255{2 copy get 3 index 2 index get 1000 mul ptsize div def pop}for pop pop newfont /Metrics currentdict put end newname newfont definefont}bind def /fixup{aload length 2 idiv{dup newfont /CharStrings get exch known{newfont /Encoding get dup nextfree get /.notdef eq{dup dup 4 index get dup /.notdef eq{pop pop}{nextfree exch put /nextfree nextfree 1 add def} ifelse}if 3 1 roll put}{pop pop}ifelse}repeat}bind def /normalvec[127 /dieresis 126 /tilde 125 /quotedbl 124 /emdash 123 /endash 95 /dotaccent 94 /circumflex 92 /quotedblleft 62 /questiondown 60 /exclamdown 34 /quotedblright 31 /Oslash 30 /OE 29 /AE 28 /oslash 27 /oe 26 /ae 25 /germandbls 24 /cedilla 23 /ring 22 /macron 21 /breve 20 /caron 19 /acute 18 /grave 16 /dotlessi 13 /fl 12 /fi 10 /Omega 9 /Psi 8 /Phi 7 /Upsilon 6 /Sigma 5 /Pi 4 /Xi 3 /Lambda 2 /Theta 1 /Delta 0 /Gamma]def /courvec[31 /Oslash 30 /OE 29 /AE 28 /oslash 27 /oe 26 /ae 25 /germandbls 24 /cedilla 23 /ring 22 /macron 21 /breve 20 /caron 19 /acute 18 /grave 16 /dotlessi 15 /questiondown 14 /exclamdown 13 /quotesingle 12 /arrowdown 11 /arrowup 10 /Omega 9 /Psi 8 /Phi 7 /Upsilon 6 /Sigma 5 /Pi 4 /Xi 3 /Lambda 2 /Theta 1 /Delta 0 /Gamma]def /pf{exch pop 655360 div mul Resolution mul 7227 div /ptsize exch def /PSname exch def exch /TeXname exch def dmystr 2 TeXname cvx(@@@)cvs putinterval PSname ReEncodeForTeX newname exch[ptsize 0 0 ptsize neg 0 0]makefont def TeXname{ /foo setfont}2 array copy cvx def TeXname load 0 dmystr 5 string copy cvn cvx put(New font: )print PSname ( )cvs print vmstatus( VM-max: )print( )cvs print ( VM-used: )print( )cvs print pop(\n) print flush}bind def /ObliqueFont{/ObliqueAngle exch def /ObliqueBaseName exch def /ObliqueFontName exch def /ObliqueTransform[1 0 ObliqueAngle sin ObliqueAngle cos div 1 0 0]def /basefontdict ObliqueBaseName findfont ObliqueTransform makefont def /newfont basefontdict maxlength dict def basefontdict{exch dup /FID ne{dup /Encoding eq{exch dup length array copy newfont 3 1 roll put}{exch newfont 3 1 roll put}ifelse}{pop pop}ifelse}forall newfont /FontName ObliqueFontName put ObliqueFontName newfont definefont pop} bind def /SmallCapsFont{/SmallCapsBaseName exch def /SmallCapsFontName exch def /basefontdict SmallCapsBaseName findfont def /newfont basefontdict maxlength 10 add dict def newfont begin /FontName SmallCapsFontName def /FontBaseDict basefontdict 1000 scalefont def /FontSCDict FontBaseDict .8 scalefont def /FontType 3 def /BuildChar{SmallCapChar}def /FontMatrix dup basefontdict exch get def /FontBBox dup basefontdict exch get def /Encoding dup basefontdict exch get def /CharStrings dup basefontdict exch get def /FontInfo dup basefontdict exch get def end SmallCapsFontName newfont definefont pop}bind def /SmallCapChar{/achar(A)def achar exch 0 exch put begin achar 0 get dup 97 ge exch 122 le and{achar 0 achar 0 get 32 sub put FontSCDict}{FontBaseDict}ifelse setfont achar stringwidth FontBBox setcachedevice newpath 0 0 moveto achar show end}bind def end /SetUpGreekFont{ findfont dup length dict /newfont exch def{1 index /FID ne{newfont 3 1 roll put}{pop pop}ifelse}forall /oldvect newfont /Encoding get def oldvect length dup array /newvect exch def 0 1 3 -1 roll 1 sub{newvect exch dup oldvect exch get put}for newvect 8#146 /phi1 put newvect 8#152 /phi put newvect 8#161 /theta1 put newvect 8#112 /theta put newfont /Encoding newvect put newfont definefont pop}def TeXDict begin 300 @start /fa [ 0 0 0 0 0 0 0 0 0 0 0 0 52 52 0 0 29 0 35 35 35 35 35 35 35 63 92 98 63 104 104 81 29 29 35 58 58 92 69 23 35 35 40 61 29 35 29 29 58 58 58 58 58 58 58 58 58 58 29 29 35 61 63 58 105 69 69 75 75 69 63 81 75 29 52 69 58 86 75 81 69 81 75 69 63 75 69 98 69 69 63 29 35 29 35 35 23 58 58 52 58 58 29 58 58 23 23 52 23 86 58 58 58 58 35 52 29 58 52 75 52 52 52 58 104 35 35 35 61 35 27 35 58 49 29 61 61 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 58 58 17 58 58 58 58 20 35 58 35 35 52 52 0 58 58 58 29 0 56 36 23 35 35 58 104 104 0 63 0 35 35 35 35 35 35 35 35 0 35 35 0 35 35 35 104 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 104 0 38 0 0 0 0 58 81 104 38 0 0 0 0 0 92 0 0 0 29 0 0 23 63 98 63 0 0 0 0 ] /Helvetica 1000 655360 1638400 pf /fb [ 0 0 0 0 0 0 0 0 0 0 0 0 39 39 0 0 20 0 23 23 23 23 23 23 23 35 47 51 35 63 63 51 18 23 31 35 35 59 55 23 23 23 35 40 18 23 18 20 35 35 35 35 35 35 35 35 35 35 20 20 23 40 31 31 65 51 47 47 51 43 39 51 51 23 27 51 43 63 51 51 39 51 47 39 43 51 51 67 51 51 43 23 31 23 23 23 23 31 35 31 35 31 23 35 35 20 20 35 20 55 35 35 35 35 23 27 20 35 35 51 35 35 31 35 71 23 23 23 38 34 14 34 35 33 20 40 40 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 35 35 12 35 35 35 35 13 31 35 23 23 39 39 0 35 35 35 18 0 32 25 23 31 31 35 71 71 0 31 0 23 23 23 23 23 23 23 23 0 23 23 0 23 23 23 71 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 19 0 0 0 0 43 51 63 22 0 0 0 0 0 47 0 0 0 20 0 0 20 35 51 35 0 0 0 0 ] /Times-Roman 1000 655360 1114112 pf /fc [ 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 16 0 19 19 19 19 19 19 19 29 39 42 29 52 52 42 15 19 26 29 29 48 45 19 19 19 29 33 15 19 15 16 29 29 29 29 29 29 29 29 29 29 16 16 19 33 26 26 54 42 39 39 42 36 32 42 42 19 23 42 36 52 42 42 32 42 39 32 36 42 42 55 42 42 36 19 26 19 19 19 19 26 29 26 29 26 19 29 29 16 16 29 16 45 29 29 29 29 19 23 16 29 29 42 29 29 26 29 58 19 19 19 31 28 12 28 29 27 16 33 33 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 29 29 10 29 29 29 29 10 26 29 19 19 32 32 0 29 29 29 15 0 26 20 19 26 26 29 58 58 0 26 0 19 19 19 19 19 19 19 19 0 19 19 0 19 19 19 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 0 16 0 0 0 0 36 42 52 18 0 0 0 0 0 39 0 0 0 16 0 0 16 29 42 29 0 0 0 0 ] /Times-Roman 1000 655360 917504 pf /fd [ 0 0 0 0 0 0 0 0 0 0 0 0 0 30 30 30 30 0 30 30 30 30 30 30 30 30 0 0 30 0 0 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 30 30 30 30 30 30 30 30 30 30 30 30 0 0 0 30 30 30 30 0 30 30 30 30 30 30 30 0 0 30 0 30 30 30 30 30 30 30 30 0 30 30 0 30 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 0 0 0 30 30 0 30 0 0 0 0 0 0 0 0 0 30 0 0 30 30 0 30 0 0 0 0 ] /Courier 1000 655360 786432 pf /fe [ 0 0 0 0 0 0 0 0 0 0 0 0 25 25 0 0 14 0 17 17 17 17 17 17 17 25 33 33 25 44 47 36 12 17 28 25 25 41 39 17 17 17 25 34 12 17 12 14 25 25 25 25 25 25 25 25 25 25 17 17 19 34 25 25 46 30 30 33 36 30 30 36 36 17 22 33 28 41 33 36 30 36 30 25 28 36 30 41 30 28 28 19 28 19 17 17 17 25 25 22 25 22 14 25 25 14 14 22 14 36 25 25 25 25 19 19 14 25 22 33 22 22 19 25 44 17 17 17 27 20 14 20 25 21 14 34 34 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 25 25 8 25 25 25 25 11 28 25 17 17 25 25 0 25 25 25 12 0 26 17 17 28 28 25 44 50 0 25 0 17 17 17 17 17 17 17 17 0 17 17 0 17 17 17 44 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44 0 14 0 0 0 0 28 36 47 15 0 0 0 0 0 33 0 0 0 14 0 0 14 25 33 25 0 0 0 0 ] /Times-Italic 1000 655360 786432 pf /ff [ 30 30 37 34 32 38 29 34 38 40 38 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 17 36 25 27 41 39 22 17 17 25 27 12 27 12 14 25 25 25 25 25 25 25 25 25 25 14 14 27 27 27 22 27 36 33 36 30 30 38 30 36 17 31 36 34 44 36 36 38 37 28 29 30 34 22 38 32 40 30 17 43 17 33 25 25 31 27 27 25 22 26 20 30 16 30 27 27 29 26 27 27 26 27 30 22 29 36 34 25 34 25 24 10 24 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 12 27 8 36 25 38 38 38 38 52 49 30 49 30 20 27 20 27 27 36 25 23 27 27 27 27 50 30 50 33 41 34 40 49 38 38 41 38 38 36 36 36 36 36 36 36 38 36 39 39 44 41 27 12 36 30 30 52 49 30 49 30 25 16 39 39 39 36 19 19 19 19 19 19 25 25 25 25 39 16 14 34 34 34 19 19 19 19 19 19 25 25 25 0 ] /Symbol 1000 655360 786432 pf /fg [ 25 25 31 28 27 32 25 29 32 33 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 14 30 21 23 35 32 18 14 14 21 23 10 23 10 12 21 21 21 21 21 21 21 21 21 21 12 12 23 23 23 18 23 30 28 30 25 25 32 25 30 14 26 30 28 37 30 30 32 31 23 25 25 29 18 32 27 33 25 14 36 14 27 21 21 26 23 23 21 18 22 17 25 14 25 23 23 24 22 23 23 22 23 25 18 24 30 28 20 28 21 20 8 20 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 10 23 7 30 21 31 31 31 31 43 41 25 41 25 17 23 17 23 23 30 21 19 23 23 23 23 42 25 42 27 34 28 33 41 32 32 34 32 32 30 30 30 30 30 30 30 32 30 33 33 37 34 23 10 30 25 25 43 41 25 41 25 21 14 33 33 33 30 16 16 16 16 16 16 21 21 21 21 33 14 11 28 28 28 16 16 16 16 16 16 21 21 21 0 ] /Symbol 1000 655360 655360 pf /fh [ 0 0 0 0 0 0 0 0 0 0 0 0 19 19 0 0 10 0 12 12 12 12 12 12 12 19 25 25 19 33 35 27 9 12 21 19 19 31 29 12 12 12 19 25 9 12 9 10 19 19 19 19 19 19 19 19 19 19 12 12 15 25 19 19 34 23 23 25 27 23 23 27 27 12 17 25 21 31 25 27 23 27 23 19 21 27 23 31 23 21 21 15 21 15 12 12 12 19 19 17 19 17 10 19 19 10 10 17 10 27 19 19 19 19 15 15 10 19 17 25 17 17 15 19 33 12 12 12 20 15 10 15 19 16 10 25 25 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 19 19 6 19 19 19 19 8 21 19 12 12 19 19 0 19 19 19 9 0 20 13 12 21 21 19 33 37 0 19 0 12 12 12 12 12 12 12 12 0 12 12 0 12 12 12 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 0 10 0 0 0 0 21 27 35 12 0 0 0 0 0 25 0 0 0 10 0 0 10 19 25 19 0 0 0 0 ] /Times-Italic 1000 655360 589824 pf /fi df[<003F800000FFE00003FFF80007FFFC 000FFFFE001FFFFF003FFFFF803FFFFF807FFFFFC07FFFFFC0FFFFFFE0FFFFFFE0FFFFFFE0FFFF FFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE07FFFFFC07FFFFFC03FFFFF803FFFFF801F FFFF000FFFFE0007FFFC0003FFF80000FFE000003F8000>27 29 -4 -3 36]15 dc[<00000000 060000000000000007000000000000000700000000000000078000000000000003800000000000 0003C000000000000001E000000000000000F00000000000000070000000000000007800000000 0000003C000000000000001E0000FFFFFFFFFFFF0000FFFFFFFFFFFF8000FFFFFFFFFFFFE00000 0000000001F0000000000000007C000000000000003F000000000000001FC000000000000007F8 00000000000001FE00000000000001FE00000000000007F80000000000001FC00000000000007E 00000000000000F800FFFFFFFFFFFFF000FFFFFFFFFFFFC000FFFFFFFFFFFF800000000000001F 000000000000003C0000000000000078000000000000007800000000000000F000000000000001 E000000000000001C000000000000003C000000000000007800000000000000700000000000000 070000000000000006000000>63 41 -4 3 72]41 dc dfe /fj df[<3C7EFFFFFFFF7E3C>8 8 -6 0 20]58 dc[<6000700038001C000E000E00070007000300030003800180018001803D807F 80FF80FF80FF00FF007E003C00>9 22 -6 14 20]59 dc dfe /fk df[<0007000E001E003C00 38007000E001E001C003C00380070007000F000E001E001C001C003C003C003800380078007800 7000700070007000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F0 00F000700070007000700078007800380038003C003C001C001C001E000E000F00070007000380 03C001C001E000E000700038003C001E000E0007>16 73 -5 19 25]40 dc[16 73 -4 19 25]41 dc[<7FFFFFFFFF E0FFFFFFFFFFF0FFFFFFFFFFF00000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00FFFFFFFFFFF0FFFFFFFFFFF07FFFFFFFFFE0>44 17 -4 -9 52]61 dc dfe /fl df[<7CFEFE FEFEFE7C>7 7 -5 0 17]58 dc[<6070381C1C0E0606070303037FFFFFFFFEFE7C>8 19 -5 12 17]59 dc dfe end TeXDict begin /filename (lifecomp2.dvi) def /dateandtime (Sat May 14 16:05:38 1994 ) def @defaultFormat 1 bop 195 206 a fa(Example)28 b(of)h(LIFE)g(compilation)e(\(2\))-24 476 y fi (\017)21 b fb(Consider)11 b(a)g(LIFE)g(progr)q(am)g(con)q(sisting)g(of)h(the) f(single)g(fac)q(t)g(p\(X:f\(X\))q(\).)g(This)33 568 y(program)23 b(is)f(tran\ slated)g(into)f(Kernel)i(LIFE)f(and)g(then)g(into)f(FLAM)g(code.)33 659 y(The) d(FLAM)g(translation)h(uses)g(the)f(two-stream)h(uni\014cation)f(algorithm:) 152 750 y fd(extern\(p\))242 800 y(allocate)332 850 y(pred_args\([v\(1\)]\)) 332 899 y(begin_unify)421 949 y(sort_and_features\(v\(1\),f,[1],[v\(2\)],)o (0,intern\()o(6\)\))421 999 y(if_new_feat\(v\(2\),intern\(7\),1\))421 1049 y (unify\(v\(2\),v\(1\)\))332 1099 y(intern\(8\))421 1148 y(jump\(intern\(9\)\)) 332 1198 y(intern\(6\))332 1248 y(intern\(7\))421 1298 y(write_feature\(v\(1\ \),v\(2\)\))421 1348 y(write_test\(intern\(8\),1\))332 1397 y(intern\(9\))332 1447 y(end_unify)242 1497 y(deallocate)242 1547 y(return)-24 1679 y fi(\017)j fb(The)11 b(instruction)g(sort)t 22 2 v 23 w(and)t 22 2 v 22 w(features\(Re)q (g,Func)q(,FeatList,RegList,Level,Labe)q(l\))33 1771 y(corresponds)22 b(to)17 b(the)h(constraint)h fe(V)k fk(=)c fe(f)7 b fk(\()p fe(f)1048 1782 y ff(1) 1095 1771 y fi(\))20 b fe(V)1217 1782 y ff(1)1244 1771 y fj(;)12 b(:::;)g fe (f)1382 1782 y fh(n)1422 1771 y fi(\))20 b fe(V)1544 1782 y fh(n)1565 1771 y fk(\))p fb(,)e(with:)558 1836 y 854 2 v 557 1910 a 2 75 v 583 1888 a fc(Reg) 798 1910 y 2 75 v 823 1888 a fe(V)1411 1910 y 2 75 v 558 1912 a 854 2 v 557 1987 a 2 75 v 583 1964 a fc(Func)798 1987 y 2 75 v 823 1964 a fe(f)1411 1987 y 2 75 v 558 1988 a 854 2 v 557 2063 a 2 75 v 583 2041 a fc(FeatList)798 2063 y 2 75 v 823 2041 a([)11 b fe(f)867 2050 y fg(1)889 2041 y fl(;)f(:::;)g fe(f) 1008 2050 y fh(n)1037 2041 y fc(])1411 2063 y 2 75 v 558 2065 a 854 2 v 557 2139 a 2 75 v 583 2117 a(RegList)798 2139 y 2 75 v 823 2117 a([)h fe(V)883 2126 y fg(1)906 2117 y fl(;)f(:::;)g fe(V)1041 2126 y fh(n)1070 2117 y fc(]) 1411 2139 y 2 75 v 558 2141 a 854 2 v 557 2216 a 2 75 v 583 2193 a(Level)798 2216 y 2 75 v 823 2193 a(\(two-stream)16 b(uni\014cation\))1411 2216 y 2 75 v 558 2218 a 854 2 v 557 2292 a 2 75 v 583 2270 a(Label)798 2292 y 2 75 v 823 2270 a(\(branch)f(to)g(write)g(stream\))1411 2292 y 2 75 v 558 2294 a 854 2 v -24 2387 a fi(\017)21 b fb(The)31 b(instructions)h(unify\(Reg1,Reg2\))j(and)c (write)t 22 2 v 22 w(feature\(Reg1,Reg2)q(\))33 2479 y(correspond)i(to)d(the) f(constraint)i fe(V)j fk(=)d fe(W)r fb(,)i(with)c(Reg1)i(and)f(Reg2)h(corre-) 33 2570 y(sponding)19 b(to)f fe(V)i fb(and)f fe(W)r fb(.)-24 2689 y fi(\017)i fb(The)26 b(FLAM)f(code)h(is)f(translated)h(into)f(C)g(using)h(the)f(RISC-mac\ ro)j(tech-)33 2780 y(nique.)g eop eod end %%EndDocument endTexFig 1029 3278 a Fa(11)p eop %%Page: 12 12 12 11 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/12.ps /showVM{vmstatus( VM-max: )print( )cvs print ( VM-used: )print( )cvs print pop(\n)print flush }def /showVM{}def /printVM{}def(Start dvips output)print showVM /TeXDict 350 dict def TeXDict begin /bdf{bind def}def /Inch{Resolution mul}bdf /Points{72 div Resolution mul}bdf /Dots{}bdf /Cm{2.54 div Resolution mul}bdf /dopage{72 Resolution div dup neg scale translate}bdf /USformat false def /@letter{ Resolution dup -10 mul dopage /USformat true def}bdf /@note{@letter}bdf /@legal{Resolution dup -13 mul dopage}bdf /A4format false def /@a4{Resolution dup -10.6929133858 mul dopage /A4format true def}bdf /@a4offset{21 2.54 div 72 mul 0 translate -1 1 scale Resolution dup -10.6929133858 mul dopage}bdf /@a3{ 72 72 translate Resolution dup -10.6929133858 mul dopage}bdf /@a3offset{21 2.54 div 72 mul 0 translate -1 1 scale 72 72 translate Resolution dup -10.6929133858 mul dopage}bdf /@a4upa3{29.7 21 div dup scale Resolution dup -10.6929133858 mul dopage}bdf /@aptex{Resolution dup -10.6929133858 mul dopage }bdf /@defaultFormat /@letter load def /@translate{translate}bdf /@scale{ scale}bdf /@rotate{rotate}bdf /@landscape{[0 1 -1 0 0 0]concat Resolution dup dopage}bdf /@manualfeed{statusdict /manualfeed true put}bdf /@copies{/#copies exch def}bdf /@letterhead{}bdf /LetterHead false def /filename()def /dateandtime()def /isTwoUp false def /isReverse false def /PageNumber 0 def /Odd-Page false def /TypeSetter false def /LetterTray 1 def statusdict begin product(PrintServer 20)eq product(PrintServer 40)eq or{currentdict /defaultpapertray known{/DefaultTray defaultpapertray def}if}if end /@FontMatrix[1 0 0 -1 0 0]def /@FontBBox[0 0 1 1]def /dmystr(ZZf@@)def /newname{dmystr cvn}bdf /df{/fontname exch def dmystr 2 fontname cvx(@@@)cvs putinterval newname 7 dict def newname load begin /FontType 3 def /FontMatrix @FontMatrix def /FontBBox @FontBBox def /BitMaps 256 array def /BuildChar{ CharBuilder}def /Encoding TeXEncoding def end fontname{/foo setfont}2 array copy cvx def fontname load 0 dmystr 5 string copy cvn cvx put printVM}bdf /dfe {newname newname load definefont setfont}bdf /ch-image{ch-data 0 get}bdf /ch-width{ch-data 1 get}bdf /ch-height{ch-data 2 get}bdf /ch-xoff{ch-data 3 get .1 add}bdf /ch-yoff{ch-data 4 get .1 sub}bdf /ch-tfmw{ch-data 5 get}bdf /CharBuilder{save 3 1 roll exch /BitMaps get exch get /ch-data exch def ch-data null ne{ch-tfmw 0 ch-xoff neg ch-yoff neg ch-width ch-xoff sub ch-height ch-yoff sub setcachedevice ch-width ch-height true[1 0 0 1 ch-xoff ch-yoff]{ch-image}imagemask}if restore}bdf /dc{/ch-code exch def dup 0 get length 1 lt{pop[<00>1 1 0 0 8.00]}if /ch-data exch def newname load /BitMaps get ch-code ch-data put}bdf /@onetick{newpath -0.3 Cm 0 moveto -1 Cm 0 rlineto 1.3 Cm -1.3 Cm rmoveto 0 1 Cm rlineto stroke}def /@drawpagemarks{gsave 1 Dots setlinewidth -1 Inch Yoffset translate @onetick gsave 21 Cm 0 translate 90 rotate @onetick grestore gsave 21 Cm 29.7 Cm translate 180 rotate @onetick grestore gsave 0 29.7 Cm translate -90 rotate @onetick grestore 0.5 Cm 30.5 Cm moveto /Helvetica findfont[30 0 0 -30 0 0]makefont setfont(File: )filename show( dvips run date: )show dateandtime show( Page: )show pagenumber ( )cvs show 18 Cm 30.5 Cm moveto 1 0 0 setrgbcolor 0.5 Cm 0 rlineto stroke 19 Cm 30.5 Cm moveto 0 1 0 setrgbcolor 0.5 Cm 0 rlineto stroke 20 Cm 30.5 Cm moveto 0 0 1 setrgbcolor 0.5 Cm 0 rlineto stroke grestore}def /bop{/pagenumber exch def(Printing page: )print pagenumber( ) cvs print showVM LetterHead{[0 0 0 0 0 0]currentmatrix statusdict begin product(PrintServer 20)eq product(PrintServer 40)eq or{currentdict /defaultpapertray known{pagenumber 1 eq{/DefaultTray defaultpapertray def LetterTray setpapertray}{DefaultTray setpapertray}ifelse}if}if end setmatrix} if pagenumber dup 2 div cvi 2 mul ne /Odd-Page exch def gsave /SaveImage save def isTwoUp{A4format{-90 rotate -29.7 2.54 add Cm -2.54 Cm translate 2.54 21 29.7 div mul Cm dup translate Odd-Page{29.7 2 div Cm 0 translate}if 21 29.7 div dup scale}if USformat{-90 rotate -11 1 add Inch -1 Inch translate 1 8.5 11 div mul Inch dup translate Odd-Page{11 2 div Inch 0 translate}if 8.5 11 div dup scale}if}if TypeSetter{pagenumber @drawpagemarks}if 0 0 moveto}bdf /eop{ showVM clear SaveImage restore isTwoUp not isReverse Odd-Page xor or{showpage} if grestore}bdf /eod{isTwoUp isReverse Odd-Page xor not and{showpage}if}bdf /@start{/Resolution exch def /TeXEncoding 256 array def 0 1 255{TeXEncoding exch 1 string dup 0 3 index put cvn put}for}bdf /p{show}bdf /RuleMatrix[1 0 0 -1 0 -1]def /BlackDots 8 string def /v{gsave currentpoint translate newpath 0 0 moveto dup 0 exch neg rlineto exch 0 rlineto 0 exch rlineto closepath fill grestore}bdf /v{gsave currentpoint translate false RuleMatrix{BlackDots} imagemask grestore}bdf /a{moveto}bdf /delta 0 def /tail{dup /delta exch def 0 rmoveto}bdf /b{exch p tail}bdf /c{p delta 4 sub tail}bdf /d{p delta 3 sub tail }bdf /e{p delta 2 sub tail}bdf /f{p delta 1 sub tail}bdf /g{p delta 0 rmoveto} bdf /h{p delta 1 add tail}bdf /i{p delta 2 add tail}bdf /j{p delta 3 add tail} bdf /k{p delta 4 add tail}bdf /l{p -4 0 rmoveto}bdf /m{p -3 0 rmoveto}bdf /n{ p -2 0 rmoveto}bdf /o{p -1 0 rmoveto}bdf /q{p 1 0 rmoveto}bdf /r{p 2 0 rmoveto }bdf /s{p 3 0 rmoveto}bdf /t{p 4 0 rmoveto}bdf /w{0 rmoveto}bdf /x{0 exch rmoveto}bdf /y{3 -1 roll p moveto}bdf /bos{/section save def}bdf /eos{clear section restore}bdf /SDict 200 dict def SDict begin /@SpecialDefaults{/hs 8.5 Inch def /vs 11 Inch def /ho 0 def /vo 0 def /hsc 1 def /vsc 1 def /ang 0 def /CLIP false def /BBcalc false def}bdf /@hsize{/hs exch def /CLIP true def}bdf /@vsize{/vs exch def /CLIP true def}bdf /@hoffset{/ho exch def}bdf /@voffset{ /vo exch def}bdf /@hscale{@scaleunit div /hsc exch def}bdf /@vscale{ @scaleunit div /vsc exch def}bdf /@angle{/ang exch def}bdf /@scaleunit 100 def /@rwi{10 div /rwi exch def}bdf /@llx{/llx exch def}bdf /@lly{/lly exch def} bdf /@urx{/urx exch def}bdf /@ury{/ury exch def /BBcalc true def}bdf /@setclipper{BBcalc{rwi urx llx sub div dup scale llx neg lly neg translate}{ hsc vsc scale}ifelse CLIP{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}{initclip}ifelse}bdf end /@MacSetUp{userdict begin /letter{}def /legal{}def /tab{}def /a4{}def /b5{}def /a4small{}def /a3Size{} def /lettersmall{}def /note{}def /showpage{}def /erasepage{}def /copypage{} def end userdict /md known{userdict /md get type /dicttype eq{md begin /bigs[ lnop lnop lnop lnop lnop lnop lnop lnop lnop lnop]def /smalls[lnop lnop lnop lnop lnop lnop lnop lnop lnop lnop]def end}if}if}def /psf$TeXscale{65782 div} def /startTexFig{(startTeXFig)print showVM /psf$SavedState save def userdict maxlength dict begin Resolution 72 div dup neg scale currentpoint translate /psf$ury exch psf$TeXscale def /psf$urx exch psf$TeXscale def /psf$lly exch psf$TeXscale def /psf$llx exch psf$TeXscale def /psf$y exch psf$TeXscale def /psf$x exch psf$TeXscale def currentpoint /psf$cy exch def /psf$cx exch def /psf$sx psf$x psf$urx psf$llx sub div def /psf$sy psf$y psf$ury psf$lly sub div def psf$sx 0 eq{/psf$sx 1 def(psf$sx = 0\n)print flush}if psf$sy 0 eq{ /psf$sy 1 def(psf$sy = 0\n)print flush}if psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub translate @MacSetUp}def /dorotateplus{currentpoint /origy exch def /origx exch def currentpoint translate 90 rotate psf$llx psf$urx sub 0 translate origx neg origy neg translate}def /dorotateminus{currentpoint /origy exch def /origx exch def currentpoint translate -90 rotate 0 psf$ury psf$lly sub translate origx neg origy neg translate}def /doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto}def /endTexFig{end psf$SavedState restore (endTexFig)print showVM}def /@beginspecial{SDict begin /SpecialSave save def gsave Resolution 72 div dup neg scale currentpoint translate @SpecialDefaults} bdf /@setspecial{ho vo translate @setclipper ang rotate /showpage{}def newpath }bdf /@endspecial{grestore clear SpecialSave restore end}bdf /@defspecial{ SDict begin}bdf /@fedspecial{end}bdf /li{lineto}bdf /rl{rlineto}bdf /rc{ rcurveto}bdf /np{/SaveX currentpoint /SaveY exch def def newpath}bdf /st{ stroke SaveX SaveY moveto}bdf /fil{fill SaveX SaveY moveto}bdf /ellipse{ /endangle exch def /startangle exch def /yrad exch def /xrad exch def /savematrix matrix currentmatrix def translate xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}bdf end TeXDict begin /@letterhead{/LetterTray 1 def /LetterHead true def} bdf /@letter { Resolution dup exch 1.06 mul exch -10.21 mul dopage } bdf /@a4 { Resolution dup exch 1.06 mul exch -10.89 mul dopage /A4format true def } bdf /@a4upa3{ statusdict begin 2 setpapertray end 29.7 21 div dup scale Resolution dup exch 1.06 mul exch -10.89 mul dopage /A4format true def } bdf /@aptex { Resolution dup exch 0.96 mul exch -10.57 mul dopage } bdf /@defaultFormat /@a4 load def end TeXDict begin /ReEncodeForTeX{findfont /basefontdict exch def /newfont basefontdict maxlength 2 add dict def basefontdict{exch dup /FID ne{dup /Encoding eq{exch dup length array copy}{exch}ifelse newfont 3 1 roll put}{ pop pop}ifelse}forall /nextfree 128 def basefontdict /FontInfo get /isFixedPitch get{courvec}{normalvec}ifelse fixup 256 dict begin newfont /Encoding get 0 1 255{2 copy get 3 index 2 index get 1000 mul ptsize div def pop}for pop pop newfont /Metrics currentdict put end newname newfont definefont}bind def /fixup{aload length 2 idiv{dup newfont /CharStrings get exch known{newfont /Encoding get dup nextfree get /.notdef eq{dup dup 4 index get dup /.notdef eq{pop pop}{nextfree exch put /nextfree nextfree 1 add def} ifelse}if 3 1 roll put}{pop pop}ifelse}repeat}bind def /normalvec[127 /dieresis 126 /tilde 125 /quotedbl 124 /emdash 123 /endash 95 /dotaccent 94 /circumflex 92 /quotedblleft 62 /questiondown 60 /exclamdown 34 /quotedblright 31 /Oslash 30 /OE 29 /AE 28 /oslash 27 /oe 26 /ae 25 /germandbls 24 /cedilla 23 /ring 22 /macron 21 /breve 20 /caron 19 /acute 18 /grave 16 /dotlessi 13 /fl 12 /fi 10 /Omega 9 /Psi 8 /Phi 7 /Upsilon 6 /Sigma 5 /Pi 4 /Xi 3 /Lambda 2 /Theta 1 /Delta 0 /Gamma]def /courvec[31 /Oslash 30 /OE 29 /AE 28 /oslash 27 /oe 26 /ae 25 /germandbls 24 /cedilla 23 /ring 22 /macron 21 /breve 20 /caron 19 /acute 18 /grave 16 /dotlessi 15 /questiondown 14 /exclamdown 13 /quotesingle 12 /arrowdown 11 /arrowup 10 /Omega 9 /Psi 8 /Phi 7 /Upsilon 6 /Sigma 5 /Pi 4 /Xi 3 /Lambda 2 /Theta 1 /Delta 0 /Gamma]def /pf{exch pop 655360 div mul Resolution mul 7227 div /ptsize exch def /PSname exch def exch /TeXname exch def dmystr 2 TeXname cvx(@@@)cvs putinterval PSname ReEncodeForTeX newname exch[ptsize 0 0 ptsize neg 0 0]makefont def TeXname{ /foo setfont}2 array copy cvx def TeXname load 0 dmystr 5 string copy cvn cvx put(New font: )print PSname ( )cvs print vmstatus( VM-max: )print( )cvs print ( VM-used: )print( )cvs print pop(\n) print flush}bind def /ObliqueFont{/ObliqueAngle exch def /ObliqueBaseName exch def /ObliqueFontName exch def /ObliqueTransform[1 0 ObliqueAngle sin ObliqueAngle cos div 1 0 0]def /basefontdict ObliqueBaseName findfont ObliqueTransform makefont def /newfont basefontdict maxlength dict def basefontdict{exch dup /FID ne{dup /Encoding eq{exch dup length array copy newfont 3 1 roll put}{exch newfont 3 1 roll put}ifelse}{pop pop}ifelse}forall newfont /FontName ObliqueFontName put ObliqueFontName newfont definefont pop} bind def /SmallCapsFont{/SmallCapsBaseName exch def /SmallCapsFontName exch def /basefontdict SmallCapsBaseName findfont def /newfont basefontdict maxlength 10 add dict def newfont begin /FontName SmallCapsFontName def /FontBaseDict basefontdict 1000 scalefont def /FontSCDict FontBaseDict .8 scalefont def /FontType 3 def /BuildChar{SmallCapChar}def /FontMatrix dup basefontdict exch get def /FontBBox dup basefontdict exch get def /Encoding dup basefontdict exch get def /CharStrings dup basefontdict exch get def /FontInfo dup basefontdict exch get def end SmallCapsFontName newfont definefont pop}bind def /SmallCapChar{/achar(A)def achar exch 0 exch put begin achar 0 get dup 97 ge exch 122 le and{achar 0 achar 0 get 32 sub put FontSCDict}{FontBaseDict}ifelse setfont achar stringwidth FontBBox setcachedevice newpath 0 0 moveto achar show end}bind def end /SetUpGreekFont{ findfont dup length dict /newfont exch def{1 index /FID ne{newfont 3 1 roll put}{pop pop}ifelse}forall /oldvect newfont /Encoding get def oldvect length dup array /newvect exch def 0 1 3 -1 roll 1 sub{newvect exch dup oldvect exch get put}for newvect 8#146 /phi1 put newvect 8#152 /phi put newvect 8#161 /theta1 put newvect 8#112 /theta put newfont /Encoding newvect put newfont definefont pop}def TeXDict begin 300 @start /fa [ 0 0 0 0 0 0 0 0 0 0 0 0 52 52 0 0 29 0 35 35 35 35 35 35 35 63 92 98 63 104 104 81 29 29 35 58 58 92 69 23 35 35 40 61 29 35 29 29 58 58 58 58 58 58 58 58 58 58 29 29 35 61 63 58 105 69 69 75 75 69 63 81 75 29 52 69 58 86 75 81 69 81 75 69 63 75 69 98 69 69 63 29 35 29 35 35 23 58 58 52 58 58 29 58 58 23 23 52 23 86 58 58 58 58 35 52 29 58 52 75 52 52 52 58 104 35 35 35 61 35 27 35 58 49 29 61 61 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 58 58 17 58 58 58 58 20 35 58 35 35 52 52 0 58 58 58 29 0 56 36 23 35 35 58 104 104 0 63 0 35 35 35 35 35 35 35 35 0 35 35 0 35 35 35 104 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 104 0 38 0 0 0 0 58 81 104 38 0 0 0 0 0 92 0 0 0 29 0 0 23 63 98 63 0 0 0 0 ] /Helvetica 1000 655360 1638400 pf /fb [ 0 0 0 0 0 0 0 0 0 0 0 0 39 39 0 0 20 0 23 23 23 23 23 23 23 35 47 51 35 63 63 51 18 23 31 35 35 59 55 23 23 23 35 40 18 23 18 20 35 35 35 35 35 35 35 35 35 35 20 20 23 40 31 31 65 51 47 47 51 43 39 51 51 23 27 51 43 63 51 51 39 51 47 39 43 51 51 67 51 51 43 23 31 23 23 23 23 31 35 31 35 31 23 35 35 20 20 35 20 55 35 35 35 35 23 27 20 35 35 51 35 35 31 35 71 23 23 23 38 34 14 34 35 33 20 40 40 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 35 35 12 35 35 35 35 13 31 35 23 23 39 39 0 35 35 35 18 0 32 25 23 31 31 35 71 71 0 31 0 23 23 23 23 23 23 23 23 0 23 23 0 23 23 23 71 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 19 0 0 0 0 43 51 63 22 0 0 0 0 0 47 0 0 0 20 0 0 20 35 51 35 0 0 0 0 ] /Times-Roman 1000 655360 1114112 pf /fc [ 0 0 0 0 0 0 0 0 0 0 0 0 0 30 30 30 30 0 30 30 30 30 30 30 30 30 0 0 30 0 0 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 30 30 30 30 30 30 30 30 30 30 30 30 0 0 0 30 30 30 30 0 30 30 30 30 30 30 30 0 0 30 0 30 30 30 30 30 30 30 30 0 30 30 0 30 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 0 0 0 30 30 0 30 0 0 0 0 0 0 0 0 0 30 0 0 30 30 0 30 0 0 0 0 ] /Courier 1000 655360 786432 pf /fd df[<003F800000FFE00003FFF80007FFFC000FFFFE 001FFFFF003FFFFF803FFFFF807FFFFFC07FFFFFC0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFF FFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE07FFFFFC07FFFFFC03FFFFF803FFFFF801FFFFF000F FFFE0007FFFC0003FFF80000FFE000003F8000>27 29 -4 -3 36]15 dc dfe end TeXDict begin /filename (lifecomp3.dvi) def /dateandtime (Sat May 14 15:59:06 1994 ) def @defaultFormat 1 bop 195 206 a fa(Example)28 b(of)h(LIFE)g(compilation)e(\(3\))-24 504 y fd (\017)21 b fb(The)13 b(C)g(code)g(resulting)h(from)f(the)g(compilation)f(of)h (p\(X:f\(X\)\))i(is)e(a)f(sequence)33 596 y(of)22 b(macros)g(that)f(strongly) h(resembles)h(a)f(RISC)f(assembly)i(program.)38 b(It)21 b(is)33 687 y(101)d (lines)g(long)g(and)h(begins)g(as)f(follows:)93 795 y fc(extern\(p\))182 845 y (start_block\(block\(local_vars)27 b(=>)j([t\(0\),t\(1\),l\(2\),t\(2\)],numbe\ r)d(=>)i(0\)\))182 895 y(comment\(p)g(=)h(allocate\))182 944 y(blt\(frame,cho\ ice,intern\(10\)\))182 994 y(sub\(choice,frame_block\(0\),t\(0\)\))182 1044 y (b\(intern\(11\)\))93 1094 y(intern\(10\))182 1144 y(sub\(frame,frame_block\(\ 0\),t\(0\)\))93 1194 y(intern\(11\))182 1243 y(sw\(frame,frame_previous,t\(0\ \)\))182 1293 y(sw\(cont,frame_cont,t\(0\)\))182 1343 y(mv\(t\(0\),frame\)) 182 1393 y(lv\(t\(0\),0\))182 1443 y(sw\(t\(0\),frame_size,frame\))182 1492 y (comment\(p)f(=)h(begin_unify\))182 1542 y(comment\(p)f(=)h(sort_and_features\ \(v\(1\),f,[1],[v\()o(2\)],0,int)o(ern\(6\)\)\))182 1592 y(b\(intern\(13\)\)) 93 1642 y(intern\(12\))182 1692 y(mv\(t\(0\),r\(0\)\))93 1741 y(intern\(13\)) 182 1791 y(lref\(t\(0\),r\(0\)\))182 1841 y(bref\(t\(0\),intern\(12\)\))182 1891 y(beq\(t\(0\),static_add\(sort_f,feat_tag)o(\),intern\()o(14\)\))182 1941 y(beq\(t\(0\),topAtom,intern\(18\)\))182 1991 y(beq\(t\(0\),static_add\(topAt\ om,feat_ta)o(g\),intern)o(\(15\)\))182 2040 y(beq\(t\(0\),sort_f,intern\(14\)\ \))182 2090 y(jmp_fail)93 2140 y(intern\(14\))182 2190 y(b\(intern\(17\)\)) 182 2240 y(jmp_fail)93 2289 y(intern\(15\))182 2339 y(lv\(t\(1\),static_add\(\ sort_f,feat_tag\))o(\))182 2389 y(sw\(t\(1\),0,heap\))182 2439 y(set_ref\(hea\ p,t\(1\)\))182 2489 y(add\(heap,word,heap\))182 2538 y(c_call\(CopyTable\(r\(\ 0\)\)\))182 2588 y(bgt\(r\(0\),last_heap,intern\(16\)\))93 2638 y(...)g eop eod end %%EndDocument endTexFig 1029 3278 a Fa(12)p eop %%Page: 13 13 13 12 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/13.ps /md 153 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /@a { np :M 0 rl :L 0 exch rl 0 rl :L fill }bd /@b { np :M 0 rl 0 exch rl :L 0 rl 0 exch rl fill }bd /arct where { pop }{ /arct { arcto pop pop pop pop }bd }ifelse /x1 Z /x2 Z /y1 Z /y2 Z /rad Z /@q { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct fill }bd /@s { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct :K stroke }bd /@i { np 0 360 arc fill }bd /@j { gS np :T scale 0 0 .5 0 360 arc fill gR }bd /@e { np 0 360 arc :K stroke }bd /@f { np $m currentmatrix pop :T scale 0 0 .5 0 360 arc :K $m setmatrix stroke }bd /@k { gS np :T 0 0 :M 0 0 5 2 roll arc fill gR }bd /@l { gS np :T 0 0 :M scale 0 0 .5 5 -2 roll arc fill gR }bd /@m { np arc stroke }bd /@n { np $m currentmatrix pop :T scale 0 0 .5 5 -2 roll arc $m setmatrix stroke }bd /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Roman :mre /f1_75 f1_1 75 scf /f1_67 f1_1 67 scf /f2_1/Times-Italic :mre /f2_75 f2_1 75 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 254 291 :M f0_100 sf -.006(Using types when compiling constraints)A 800 1090 :M f1_67 sf -.04(Master routine)A 817 1161 :M (for constraint)S 890 1232 :M -.079(A=B+C)A 769.5 994.5 450 281 rS np 863 994 :M 850 944 :L 863 944 :L 875 944 :L 863 994 :L eofill -1 -1 864 945 1 1 863 638 @b np 1125 994 :M 1112 944 :L 1125 944 :L 1138 944 :L 1125 994 :L eofill -1 -1 1126 945 1 1 1125 638 @b 779 531 :M -.165(source)A 804 602 :M -.158(code)A 771 1688 :M -.141(object)A 790 1759 :M -.158(code)A 1072 602 :M -.117(type)A 1018 1688 :M -.101(new type)A np 1125 1631 :M 1112 1581 :L 1125 1581 :L 1138 1581 :L 1125 1631 :L eofill -1 -1 1126 1582 1 1 1125 1275 @b np 863 1631 :M 850 1581 :L 863 1581 :L 875 1581 :L 863 1631 :L eofill -1 -1 864 1582 1 1 863 1275 @b 1166 750 :M -.052(int\(A\),unboxed\(A\),)A 1166 821 :M -.031(int\(B\),unboxed\(B\),)A 1166 892 :M -.177(new\(C\))A 1166 1390 :M -.052(int\(A\),unboxed\(A\),)A 1166 1461 :M -.031(int\(B\),unboxed\(B\),)A 1166 1532 :M -.048(int\(C\),unboxed\(C\))A 614 892 :M -.079(A=B+C)A 514 1390 :M -.064(add\(A,B,C\))A 151 1968 :M f1_75 sf (\245 The source code is annotated with type information.)S 151 2100 :M -.077(\245 A single )A 467 2100 :M f2_75 sf -.019(master routine)A f1_75 sf -.018( per constraint generates specialized )A 151 2179 :M -.028( object code and updates the type.)A 151 2306 :M -.004(\245 The master routine can be used as the abstract operation in )A 151 2385 :M -.005( global analysis. The analyzer is easily integrated in the compiler.)A 151 2531 :M -.006(\245 This technique is planned for the LIFE compiler. It generalizes)A 151 2610 :M ( the technique of entry specialization used in the Aquarius compiler.)S 151 2689 :M -.01( Using an accumulator preprocessor the source code is kept compact.)A endp end % md %%EndDocument endTexFig 1029 3278 a Fa(13)p eop %%Page: 14 14 14 13 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/14.ps /md 131 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Courier :mre /f1_75 f1_1 75 scf /f2_1/Times-Roman :mre /f2_75 f2_1 75 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 311 291 :M f0_100 sf -.012(Sample code for the master routine)A 282 656 :M f1_75 sf (master_add\(X=Y+Z, Tin, Code, Tout\) :-)S 282 731 :M ( if \(Tin=>\(int\(Y\),int\(Z\)\) then)S 282 806 :M ( % Generate add instruction:)S 282 881 :M ( Code = [add\(T,Y,Z\),unify\(T,X\)])S 282 956 :M ( % Update type:)S 282 1031 :M ( Tout = update\(int\(X\),Tin\))S 282 1106 :M ( else)S 282 1181 :M ( % Handle other special cases)S 282 1256 :M ( ...)S 282 1331 :M ( else)S 282 1406 :M ( % Default \(most general\) case:)S 282 1481 :M ( Code = [general_add\(X,Y,Z\)])S 282 1556 :M ( Tout = update\(\(int\(X\),int\(Y\),)S 282 1631 :M ( int\(Z\)\),Tin\)\))S 282 1706 :M ( endif.)S 189 2012 :M f2_75 sf -.006(\245 Special cases can be added according to need. Leaving them)A 189 2091 :M ( out affects speed and does not affect not correctness.)S endp end % md %%EndDocument endTexFig 1029 3278 a Fa(14)p eop %%Page: 15 15 15 14 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/15.ps /md 129 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Roman :mre /f1_75 f1_1 75 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 344 291 :M f0_100 sf (The Prolog language and the WAM)S 211 533 :M f1_75 sf -.003(\245 Prolog is a constraint logic language that solves equality)A 211 612 :M -.011( constraints over finite trees or rational trees. Constraint)A 211 691 :M -.003( solving is done by unification. Control flow is sequential)A 211 770 :M -.011( augmented with chronological backtracking.)A 209 958 :M -.003(\245 Prolog has been used as a base to build constraint systems)A 209 1037 :M -.002( using other domains, both practically and theoretically.)A 209 1116 :M -.006( For example, CLP\(R\) handles linear equalities and inequalities)A 209 1195 :M -.007( over floats, and is built on top of a standard Prolog engine.)A 209 1387 :M -.013(\245 Prolog systems are reaching the performance of imperative )A 209 1466 :M -.008( programming. Hence it is important to understand what makes )A 209 1545 :M ( Prolog run fast.)S 209 1727 :M -.012(\245 The main breakthrough in Prolog implementation was the )A 209 1806 :M -.004( development of the Warren Abstract Machine \(WAM\) in 1983. )A 209 1885 :M -.004( The WAM defines a high-level instruction set and execution )A 209 1964 :M ( model for Prolog. Implementation work since then has built on )S 209 2043 :M -.015( this foundation.)A endp end % md %%EndDocument endTexFig 1029 3278 a Fa(15)p eop %%Page: 16 16 16 15 bop 0 154 a 33154007 46747147 0 0 39205928 55388241 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/16.ps /@olda4{}def /a4 where{pop /@olda4 /a4 load def}if /a4{@olda4 @a4size}def /@a4size{/hsize 21 2.54 div 72 mul def /vsize 29.7 2.54 div 72 mul def}def /@olda3{}def /a3 where{pop /@olda3 /a3 load def}if /a3{@olda3 @a3size}def /@a3size{/hsize 29.7 2.54 div 72 mul def /vsize 42 2.54 div 72 mul def}def /letter where{pop}{/letter{}def}ifelse /legal where{pop}{/legal{}def}ifelse /ledger where{pop}{/ledger{}def}ifelse /tabloid where{pop}{/tabloid{}def} ifelse /TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N /X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{ statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{ pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get} B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D }B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V {}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave transform round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail} B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{ 3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{ 3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2 index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def} ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict end definefont 3 -1 roll makefont /setfont load]cvx def}def /ObliqueSlant{dup sin S cos div neg}B /SlantFont{4 index mul add}def /ExtendFont{3 -1 roll mul exch}def /ReEncodeFont{/Encoding exch def}def end TeXDict begin 39158280 55380996 1000 300 300 (/udir/vanroy/SURVEY/speed2.dvi) @start /Fa 4 123 df<003F800000FFE00003 FFF80007FFFC000FFFFE001FFFFF001FFFFF003FFFFF807FFFFFC07FFFFFC07FFFFFC0FF FFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE07FFFFFC07FFFFFC07F FFFFC03FFFFF801FFFFF001FFFFF000FFFFE0007FFFC0003FFF80000FFE000003F80001B 1D7C9F24>15 D<01FC0007FF000F07801E01C03C00E07800607800F07001F0F001F0F001 F0F000E0F00000F00000F000007800007800003C00001C00000E000007000003C00001F0 0007FC000E0F001C03803C03C07801E07800F0F000F0F00070F00078F00078F00078F000 787000787800787800F03C00F01E01E00E01C007838001FF00007C00001E000007000003 800001C00001E00000F00000F00000780000780000783800787C00787C00787C00707800 F03000F03801E01C03C00F078007FF0001FC0015407BB120>120 D<003800007C00007C00007C00007C00007C00007C00007C000038000038000038000038 0000380000380000100000100000100078103CFF93FEFFFFFEFF93FE78103C0010000010 00003800003800003800003800007C00007C00007C00007C00007C00007C00007C00007C 00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C 00007C00007C00007C000038000038000038000038000038000038000038000038000038 0000380000380000380000380000380017417CB120>I<003800007C00007C00007C0000 7C00007C00007C000038000038000038000038000038000010002010087E10FCFFFFFEFF FFFE7E10FC001000001000003800003800003800003800003800007C00007C00007C0000 7C00007C00007C00003800000000003800007C00007C00007C00007C00007C00007C0000 380000380000380000380000100000100078103CFF93FEFFFFFEFF93FE78103C00100000 1000003800003800003800003800007C00007C00007C00007C00007C00007C0000380017 407CB120>I E /Fb 133[31 35 1[51 35 35 20 27 23 35 35 35 35 55 20 35 1[20 35 35 23 31 35 31 35 31 8[51 2[51 43 39 47 51 39 1[51 63 43 2[23 51 2[43 51 47 47 51 6[20 35 35 35 35 35 35 35 35 35 35 20 18 23 18 40 1[23 23 40[{}59 70.833336 /Times-Roman rf /Fc 137[52 58 29 1[35 1[58 58 58 86 23 2[23 1[58 29 58 1[52 1[58 16[69 10[69 69[{}17 104.166664 /Helvetica rf end TeXDict begin 1 0 bop 193 206 a Fc(Ev)m(olution)29 b(of)f(Prolog)g(perf)m(or)s(mance) p -71 357 2011 2 v -72 448 2 92 v 104 420 a Fb(System)p 486 448 V 201 w(Machine)p 783 448 V 62 w(Clock)p 1024 448 V 332 w(Benchmark)p 1939 448 V -71 450 2011 2 v -72 541 2 92 v 486 541 V 783 541 V 808 513 a(\(MHz\))p 1024 541 V 79 w(N)p 1180 541 V 104 w(Q)p 1336 541 V 105 w(D)p 1491 541 V 110 w(S)p 1647 541 V 96 w(R)p 1767 541 V 1776 541 V 69 w(HM)p 1939 541 V -71 543 2011 2 v -72 634 2 92 v -46 606 a Fa(z)h Fb(DEC-10)19 b(Prolog)p 486 634 V 57 w(DEC-10)p 783 634 V 1024 634 V 375 w(1)p 1180 634 V 120 w(1)p 1336 634 V 121 w(1)p 1491 634 V 121 w(1)p 1647 634 V 85 w(1)p 1767 634 V 1776 634 V 137 w(1)p 1939 634 V -72 725 V -46 698 a(XSB)f(1.3)p 486 725 V 315 w(SP)-6 b(ARC)p 783 725 V 112 w(25)p 1024 725 V 210 w(7)p 1180 725 V 120 w(4)p 1336 725 V 121 w(2)p 1491 725 V 121 w(4)p 1647 725 V 85 w(3)p 1767 725 V 1776 725 V 137 w(3)p 1939 725 V -72 816 V -46 789 a(Quintus)18 b(2.0)p 486 816 V 229 w(Sun)p 783 816 V 220 w(20)p 1024 816 V 174 w(11)p 1180 816 V 121 w(4)p 1336 816 V 121 w(3)p 1491 816 V 121 w(4)p 1647 816 V 85 w(3)p 1767 816 V 1776 816 V 137 w(4)p 1939 816 V -72 908 V -46 880 a Fa(z)29 b Fb(MProlog)19 b(2.3)p 486 908 V 140 w(386)p 783 908 V 224 w(33)p 1024 908 V 174 w(13)p 1180 908 V 121 w(6)p 1336 908 V 121 w(5)p 1491 908 V 121 w(5)p 1647 908 V 85 w(2)p 1767 908 V 1776 908 V 137 w(5)p 1939 908 V -72 999 V -46 972 a(ECLiPSe)f(3.3.7)p 486 999 V 137 w(SP)-6 b(ARC)p 783 999 V 112 w(25)p 1024 999 V 174 w(11)p 1180 999 V 121 w(6)p 1336 999 V 121 w(4)p 1491 999 V 121 w(6)p 1647 999 V 85 w(3)p 1767 999 V 1776 999 V 137 w(5)p 1939 999 V -72 1090 V -46 1063 a(NU-Prolog)19 b(1.5.38)p 486 1090 V 51 w(SP)-6 b(ARC)p 783 1090 V 112 w(25)p 1024 1090 V 174 w(22)p 1180 1090 V 121 w(7)p 1336 1090 V 121 w(5)p 1491 1090 V 121 w(7)p 1647 1090 V 85 w(2)p 1767 1090 V 1776 1090 V 137 w(5)p 1939 1090 V -72 1182 V -46 1154 a(SICStus)19 b(2.1)p 486 1182 V 221 w(DEC)p 783 1182 V 188 w(25)p 1024 1182 V 174 w(37)p 1180 1182 V 86 w(16)p 1336 1182 V 86 w(10)p 1491 1182 V 85 w(10)p 1647 1182 V 86 w(5)p 1767 1182 V 1776 1182 V 102 w(10)p 1939 1182 V -72 1273 V -46 1246 a(Quintus)f(2.5)p 486 1273 V 229 w(SP)-6 b(ARC)p 783 1273 V 112 w(25)p 1024 1273 V 174 w(33)p 1180 1273 V 86 w(16)p 1336 1273 V 121 w(9)p 1491 1273 V 85 w(13)p 1647 1273 V 86 w(8)p 1767 1273 V 1776 1273 V 102 w(12)p 1939 1273 V -72 1364 V -46 1337 a Fa(z)29 b Fb(BIM)18 b(3.1)g(beta)p 486 1364 V 123 w(SP)-6 b(ARC)p 783 1364 V 112 w(25)p 1024 1364 V 174 w(34)p 1180 1364 V 86 w(21)p 1336 1364 V 121 w(8)p 1491 1364 V 85 w(16)p 1647 1364 V 86 w(8)p 1767 1364 V 1776 1364 V 102 w(13)p 1939 1364 V -72 1456 V -46 1428 a Fa(z)29 b Fb(SICStus)19 b(2.1)p 486 1456 V 160 w(SP)-6 b(ARC)p 783 1456 V 112 w(25)p 1024 1456 V 174 w(39)p 1180 1456 V 86 w(26)p 1336 1456 V 86 w(15)p 1491 1456 V 85 w(20)p 1647 1456 V 86 w(8)p 1767 1456 V 1776 1456 V 102 w(17)p 1939 1456 V -72 1547 V -46 1520 a Fa(z)29 b(x)h(y)f Fb(Aquarius)p 486 1547 V 117 w(SP)-6 b(ARC)p 783 1547 V 112 w(25)p 1024 1547 V 139 w(120)p 1180 1547 V 51 w(140)p 1336 1547 V 86 w(28)p 1491 1547 V 85 w(25)p 1647 1547 V 51 w(12)p 1767 1547 V 1776 1547 V 102 w(29)p 1939 1547 V -72 1638 V -46 1611 a Fa(z)29 b(x)h Fb(IBM)18 b(Prolog)p 486 1638 V 97 w(IBM)p 783 1638 V 1024 1638 V 405 w(120)p 1180 1638 V 86 w(59)p 1336 1638 V 86 w(74)p 1491 1638 V 85 w(69)p 1647 1638 V 51 w(33)p 1767 1638 V 1776 1638 V 102 w(60)p 1939 1638 V -72 1730 V -46 1702 a Fa(z)29 b(x)h Fb(Aquarius)19 b(1.0)p 486 1730 V 71 w(DEC)p 783 1730 V 188 w(25)p 1024 1730 V 139 w(180)p 1180 1730 V 51 w(210)p 1336 1730 V 86 w(63)p 1491 1730 V 85 w(44)p 1647 1730 V 51 w(46)p 1767 1730 V 1776 1730 V 102 w(71)p 1939 1730 V -72 1821 V -46 1794 a Fa(z)29 b(x)h(y)f Fb(P)o(arma)p 486 1821 V 196 w(MIPS)p 783 1821 V 165 w(25)p 1024 1821 V 139 w(330)p 1180 1821 V 51 w(350)p 1336 1821 V 50 w(130)p 1491 1821 V 51 w(170)p 1647 1821 V 51 w(59)p 1767 1821 V 1776 1821 V 66 w(140)p 1939 1821 V -71 1823 2011 2 v -24 2015 a Fa(\017)21 b Fb(This)d(table)g(compares)i(popular)f(softw) o(are)h(implementations)e(of)h(Prolog.)-24 2132 y Fa(\017)i Fb(Annotations:)34 b Fa(z)25 b Fb(\(nati)n(v)o(e)e(code)g(system\),)g Fa(x)j Fb(\(system)d(with)e(global)h(analy-)33 2224 y(sis\),)c Fa(y)i Fb(\(research)h(system\).)-24 2341 y Fa(\017)g Fb(Benchmarks)26 b(with)c(times)h(on)g(DEC-10)i(Prolog)f(\(year)h (1977,)g(in)e(ms\):)36 b(N)33 2432 y(\(nai)n(v)o(e)11 b(re)n(v)o(er)q(se)q(,)k(53.7\),)e(Q)e(\(quicksort,)k(75.0\),)e(D)e (\(deri)n(v)-5 b(,)15 b(10.1\),)e(S)e(\(serialise,)33 2523 y(40.2\),)18 b(R)g(\(query)-5 b(,)20 b(185.0\),)e(HM)g(\(harmonic) h(mean\).)-24 2640 y Fa(\017)i Fb(Machines:)44 b(DEC)27 b(\(DECstation)g(5000/200\),)k(IBM)26 b(\(IBM)i(System)f(370)33 2732 y(ES/9000)c(Model)e(9021\),)j(MIPS)e(\(MIPS)h(R3230\),)h(SP)-6 b(ARC)22 b(\(SP)-6 b(ARCsta-)33 2823 y(tion)17 b(1+\),)h(Sun)h(\(Sun)g (3/60)f(MC68020\),)h(386)f(\(IBM)h(PC)f(clone\).)p eop end userdict /end-hook known{end-hook}if %%EndDocument endTexFig 1029 3278 a Fa(16)p eop %%Page: 17 17 17 16 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/17.ps /md 156 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /@a { np :M 0 rl :L 0 exch rl 0 rl :L fill }bd /@b { np :M 0 rl 0 exch rl :L 0 rl 0 exch rl fill }bd /arct where { pop }{ /arct { arcto pop pop pop pop }bd }ifelse /x1 Z /x2 Z /y1 Z /y2 Z /rad Z /@q { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct fill }bd /@s { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct :K stroke }bd /@i { np 0 360 arc fill }bd /@j { gS np :T scale 0 0 .5 0 360 arc fill gR }bd /@e { np 0 360 arc :K stroke }bd /@f { np $m currentmatrix pop :T scale 0 0 .5 0 360 arc :K $m setmatrix stroke }bd /@k { gS np :T 0 0 :M 0 0 5 2 roll arc fill gR }bd /@l { gS np :T 0 0 :M scale 0 0 .5 5 -2 roll arc fill gR }bd /@m { np arc stroke }bd /@n { np $m currentmatrix pop :T scale 0 0 .5 5 -2 roll arc $m setmatrix stroke }bd /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Roman :mre /f1_75 f1_1 75 scf /f1_58 f1_1 58 scf /f1_50 f1_1 50 scf /f2_1/Symbol :bsr 240/apple pd :esr /f2_75 f2_1 75 scf /f2_58 f2_1 58 scf /f2_50 f2_1 50 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 344 254 :M f0_100 sf -.015(The WAM as a constraint language)A 153 833 :M f1_75 sf -.011(\245 The WAM provides two primitive constraints, a functor)A 153 912 :M -.009( constraint and an equality constraint.)A 151 1375 :M -.027(X=f\(X1,...,Xn\))A 151 1434 :M f1_50 sf -.016(\(n)A cF f2_50 sf -.016(\263)A sf -.016(0, Xi variable or constant\))A 1407 1352 :M f1_75 sf -.098(put_...)A 1407 1431 :M (unify_...)S 1407 1510 :M -.125(...)A 1407 1589 :M (unify_...)S 1726 1352 :M -.063(get_...)A 1726 1431 :M (unify_...)S 1726 1510 :M -.125(...)A 1726 1589 :M (unify_...)S 995 1971 :M -.056(put_variable ...)A 1503 1971 :M -.017(unify_variable ...)A -1 -1 1689 1632 1 1 1688 1275 @b 956.5 1894.5 1182 450 rS 956 2007 -1 1 2139 2006 1 956 2006 @a 995 2083 :M -.063(put_value ...)A 995 2196 :M -.042(get_variable ...)A 995 2308 :M -.045(get_value ...)A 1501 2083 :M -.015(unify_value ...)A 1501 2196 :M -.05(put_unsafe_value ...)A 1501 2308 :M -.023(unify_local_value ...)A -1 -1 1464 2345 1 1 1463 1894 @b 956 2120 -1 1 2139 2119 1 956 2119 @a 956 2232 -1 1 2139 2231 1 956 2231 @a 151 1968 :M -.293(X=Y)A 301 1968 :M 2 setlinecap 2025 1388 :M 2062.302 1388 2081 1406.644 2081 1444 :C 2081 1481.312 2090.468 1500 2109.5 1500 :C 2128.468 1500 2128.468 1500 2109.5 1500 :C 2090.468 1500 2081 1518.809 2081 1556.5 :C 2081 1594.143 2062.302 1613 2025 1613 :C stroke 2081 1613 :M 0 setlinecap 1370 1713 :M f1_58 sf (Two possible instruction sequences)S 957 1106 :M -.008(Instruction sequences that implement the constraint)A 132 1106 :M -.07(Constraint)A 957 2438 :M -.014(Eight possible instructions)A 131.5 1294.5 638 169 rS 131.5 1894.5 188 112 rS 153 496 :M f1_75 sf (\245 The data manipulation instructions of the WAM instruction set)S 153 575 :M ( are executable constraints, specialized with execution order and)S 153 654 :M -.01( type information.)A 1369.5 1275.5 637 356 rS 957 1350 :M -.184(X=f/n)A 957 1429 :M -.067(X.1=X1)A 957 1508 :M -.125(...)A 957 1587 :M -.067(X.n=Xn)A 957 1713 :M f1_58 sf -.086(Decomposed)A 957 1776 :M -.025(constraints)A 153 2646 :M f1_75 sf -.006(\245 The instructions are specialized for variables occurring for the )A 153 2725 :M ( first time \(denoted \322variable\323\) and others \(denoted \322value\323\).)S 151 2887 :M -.008(\245 The \322unify\323 instructions may only occur in the positions shown.)A 1822 1229 :M f1_58 sf (n unify instructions)S 2273 1229 :M 2 setlinecap 2194 1238 :M 2194 1412.645 2168.967 1500 2119 1500 :C stroke 2194 1500 :M 0 setlinecap endp end % md %%EndDocument endTexFig 1029 3278 a Fa(17)p eop %%Page: 18 18 18 17 bop 0 154 a 33154007 46747147 0 0 39205928 55388241 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/18.ps /@olda4{}def /a4 where{pop /@olda4 /a4 load def}if /a4{@olda4 @a4size}def /@a4size{/hsize 21 2.54 div 72 mul def /vsize 29.7 2.54 div 72 mul def}def /@olda3{}def /a3 where{pop /@olda3 /a3 load def}if /a3{@olda3 @a3size}def /@a3size{/hsize 29.7 2.54 div 72 mul def /vsize 42 2.54 div 72 mul def}def /letter where{pop}{/letter{}def}ifelse /legal where{pop}{/legal{}def}ifelse /ledger where{pop}{/ledger{}def}ifelse /tabloid where{pop}{/tabloid{}def} ifelse /TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N /X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{ statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{ pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get} B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D }B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V {}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave transform round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail} B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{ 3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{ 3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2 index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def} ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict end definefont 3 -1 roll makefont /setfont load]cvx def}def /ObliqueSlant{dup sin S cos div neg}B /SlantFont{4 index mul add}def /ExtendFont{3 -1 roll mul exch}def /ReEncodeFont{/Encoding exch def}def end TeXDict begin 39158280 55380996 1000 300 300 (/udir/vanroy/SURVEY/wam2.dvi) @start /Fa 1 1 df0 D E /Fb 1 21 df<0000300000F00001C0000700001E0000780001E000038000 0E00003C0000F00000F000003800000E000007800001E000007800001C000007000003C0 0000F00000300000000000000000000000000000000000007FFFE0FFFFF0141E7D951B> 20 D E /Fc 206[17 49[{}1 33.333332 /Times-Roman rf /Fd 1 95 df<000001800000000003C00000000003C00000000007E00000000007E000000000 07E0000000000FF0000000000FF0000000000FF0000000001FF8000000001E7800000000 1E78000000003E7C000000003C3C000000003C3C000000007C3E00000000781E00000000 781E00000000F81F00000000F00F00000000F00F00000001F00F80000001E00780000001 E00780000003E007C0000003C003C0000003C003C0000007C003E00000078001E0000007 8001E000000F8001F000000F0000F000000F0000F000001F0000F800001E00007800001E 00007800003E00007C00003C00003C00003C00003C00007C00003E00007800001E000078 00001E0000F800001F0000F000000F0000F000000F0001F000000F8001E00000078001E0 0000078003E0000007C003C0000003C003C0000003C007C0000003E00780000001E00780 000001E00F80000001F00F00000000F00F00000000F01F00000000F81E00000000781E00 000000783E000000007C3C000000003C3C000000003C7C000000003E78000000001E7800 0000001EF8000000001FF0000000000FF0000000000F60000000000630467D7F37>94 D E /Fe 2 62 df<70F8F8F87005057C840E>58 D<000080000180000180000300000300 000300000600000600000600000C00000C00000C00001800001800001800003000003000 00300000600000600000600000C00000C00000C000018000018000018000018000030000 0300000300000600000600000600000C00000C00000C0000180000180000180000300000 300000300000600000600000600000C00000C00000C0000011317DA418>61 D E /Ff 145[17 3[9 9 26[22 78[{}4 33.333332 /Times-Italic rf /Fg 134[25 25 36 25 28 17 19 22 1[28 25 28 41 14 2[14 28 25 17 22 28 22 28 25 97[{}22 50.000000 /Times-Bold rf /Fh 4 62 df<00200040008001000300060004000C000C0018001800300030003000 7000600060006000E000E000E000E000E000E000E000E000E000E000E000E000E000E000 6000600060007000300030003000180018000C000C000400060003000100008000400020 0B327CA413>40 D<800040002000100018000C0004000600060003000300018001800180 01C000C000C000C000E000E000E000E000E000E000E000E000E000E000E000E000E000E0 00C000C000C001C0018001800180030003000600060004000C0018001000200040008000 0B327DA413>I<0001800000018000000180000001800000018000000180000001800000 0180000001800000018000000180000001800000018000000180000001800000018000FF FFFFFEFFFFFFFE0001800000018000000180000001800000018000000180000001800000 01800000018000000180000001800000018000000180000001800000018000000180001F 227D9C26>43 D61 D E /Fi 145[25 1[14 1[14 14 2[14 4[25 7[28 30 1[30 1[28 25 30 1[30 1[33 1[28 5[30 2[33 1[30 65[{}18 50.000000 /Times-Italic rf /Fj 81[28 51[22 25 25 36 25 25 14 19 17 1[25 25 25 39 14 25 14 14 25 25 17 22 25 22 25 22 11[36 1[28 33 1[28 2[44 30 1[19 1[36 1[28 2[33 33 15[25 25 2[12 17 12 2[17 17 40[{}44 50.000000 /Times-Roman rf /Fk 138[58 29 52 35 2[58 58 4[23 58 2[58 1[52 11[98 2[63 6[86 11[69 65[{}14 104.166664 /Helvetica rf end TeXDict begin 1 0 bop 460 204 a Fk(The)28 b(W)-5 b(AM)30 b(instr)r(uction)c(set)p -71 358 2221 2 v -72 416 2 59 v 91 398 a Fj(Constraint)p 459 416 V 467 w(Specialized)12 b(constraint)g(\(with)g(e)o(x)o(ecution) h(order)e(and)h(type\))p 2149 416 V -71 418 2221 2 v -71 428 V -72 486 2 59 v 459 486 V 459 486 V 844 468 a(Loading)g(ar)o(gument)g(re)o(gisters)g(\(just)h(before)e(a)i(call\))p 2149 486 V -71 487 2221 2 v -72 545 2 59 v 130 528 a Fi(X)j Fh(=)e Fi(Y)p 459 545 V 229 w Fg(put)p 561 528 15 2 v 17 w(variable)d Fi(V)791 535 y Ff(n)811 528 y Fj(,)h Fi(R)865 535 y Ff(i)p 1045 545 2 59 v 1070 528 a Fj(Create)h(a)f(ne)o(w)h(v)o(ariable,)f(put)g(in)g Fi(V)1683 535 y Ff(n)1715 528 y Fj(and)g Fi(R)1829 535 y Ff(i)1841 528 y Fj(.)p 2149 545 V -72 604 V 130 586 a Fi(X)k Fh(=)e Fi(Y)p 459 604 V 229 w Fg(put)p 561 586 15 2 v 17 w(value)e Fi(V)731 593 y Ff(n)750 586 y Fj(,)h Fi(R)805 593 y Ff(i)p 1045 604 2 59 v 1070 586 a Fj(Mo)o(v)o(e)g Fi(V)1227 593 y Ff(n)1259 586 y Fj(to)f Fi(R)1340 593 y Ff(i)1352 586 y Fj(.)p 2149 604 V -72 662 V 128 644 a Fi(X)17 b Fh(=)d Fi(C)p 459 662 V 225 w Fg(put)p 561 644 15 2 v 17 w(constant)d Fi(C)q Fj(,)j Fi(R)857 651 y Ff(i)p 1045 662 2 59 v 1070 644 a Fj(Mo)o(v)o(e)f(the)g(constant)f Fi(C)i Fj(to)e Fi(R)1577 651 y Ff(i)1589 644 y Fj(.)p 2149 662 V -72 720 V 119 702 a Fi(X)17 b Fh(=)d Fi(nil)p 459 720 V 214 w Fg(put)p 561 702 15 2 v 17 w(nil)e Fi(R)673 709 y Ff(i)p 1045 720 2 59 v 1070 702 a Fj(Mo)o(v)o(e)h(the)g(constant) f Fi(nil)g Fj(to)h Fi(R)1596 709 y Ff(i)1607 702 y Fj(.)p 2149 720 V -72 778 V 99 760 a Fi(X)k Fh(=)c Fi(F)r Fe(=)p Fi(N)p 459 778 V 199 w Fg(put)p 561 760 15 2 v 17 w(structur)o(e)f Fi(F)r Fe(=)p Fi(N)s Fj(,)i Fi(R)931 767 y Ff(i)p 1045 778 2 59 v 1070 760 a Fj(Create)f(the)f(functor)f Fi(F)r Fe(=)p Fi(N)s Fj(,)j(put)e(in)g Fi(R)1717 767 y Ff(i)1729 760 y Fj(.)p 2149 778 V -72 836 V 114 819 a Fi(X)17 b Fh(=)c Fe(:=)p Fj(2)p 459 836 V 210 w Fg(put)p 561 819 15 2 v 17 w(list)f Fi(R)681 826 y Ff(i)p 1045 836 2 59 v 1070 819 a Fj(Create)h(a)f(list)h(pointer)n(,)f(put)g(in)g Fi(R)1642 826 y Ff(i)1654 819 y Fj(.)p 2149 836 V -71 838 2221 2 v -72 896 2 59 v 459 896 V 459 896 V 892 878 a(Unifying)f(with)h(re)o(gisters)h(\(head)f(uni\256cation\))p 2149 896 V -71 897 2221 2 v -72 956 2 59 v 130 938 a Fi(X)k Fh(=)e Fi(Y)p 459 956 V 229 w Fg(get)p 552 938 15 2 v 18 w(variable)d Fi(V)783 945 y Ff(n)802 938 y Fj(,)i Fi(R)857 945 y Ff(i)p 1045 956 2 59 v 1070 938 a Fj(Mo)o(v)o(e)g Fi(R)1227 945 y Ff(i)1252 938 y Fj(to)f Fi(V)1333 945 y Ff(n)1352 938 y Fj(.)p 2149 956 V -72 1014 V 130 996 a Fi(X)k Fh(=)e Fi(Y)p 459 1014 V 229 w Fg(get)p 552 996 15 2 v 18 w(value)d Fi(V)722 1003 y Ff(n)741 996 y Fj(,)i Fi(R)796 1003 y Ff(i)p 1045 1014 2 59 v 1070 996 a Fj(Unify)f Fi(V)1229 1003 y Ff(n)1261 996 y Fj(with)g Fi(R)1392 1003 y Ff(i)1403 996 y Fj(.)p 2149 1014 V -72 1072 V 128 1054 a Fi(X)17 b Fh(=)d Fi(C)p 459 1072 V 225 w Fg(get)p 552 1054 15 2 v 18 w(constant)d Fi(C)q Fj(,)i Fi(R)848 1061 y Ff(i)p 1045 1072 2 59 v 1070 1054 a Fj(Unify)f(the)g(constant)h Fi(C)h Fj(with)e Fi(R)1629 1061 y Ff(i)1640 1054 y Fj(.)p 2149 1072 V -72 1130 V 119 1112 a Fi(X)17 b Fh(=)d Fi(nil)p 459 1130 V 214 w Fg(get)p 552 1112 15 2 v 18 w(nil)e Fi(R)665 1119 y Ff(i)p 1045 1130 2 59 v 1070 1112 a Fj(Unify)g(the)g(constant)h Fi(nil)f Fj(with)g Fi(R)1647 1119 y Ff(i)1659 1112 y Fj(.)p 2149 1130 V -72 1188 V 99 1171 a Fi(X)17 b Fh(=)c Fi(F)r Fe(=)p Fi(N)p 459 1188 V 199 w Fg(get)p 552 1171 15 2 v 18 w(structur)o(e)f Fi(F)r Fe(=)p Fi(N)s Fj(,)h Fi(R)922 1178 y Ff(i)p 1045 1188 2 59 v 1070 1171 a Fj(Unify)f(the)g (functor)g Fi(F)r Fe(=)p Fi(N)k Fj(with)c Fi(R)1665 1178 y Ff(i)1677 1171 y Fj(.)p 2149 1188 V -72 1246 V 114 1229 a Fi(X)17 b Fh(=)c Fe(:=)p Fj(2)p 459 1246 V 210 w Fg(get)p 552 1229 15 2 v 18 w(list)f Fi(R)673 1236 y Ff(i)p 1045 1246 2 59 v 1070 1229 a Fj(Unify)g(a)h(list)f(pointer)f (with)i Fi(R)1592 1236 y Ff(i)1603 1229 y Fj(.)p 2149 1246 V -71 1248 2221 2 v -72 1306 2 59 v 459 1306 V 459 1306 V 779 1288 a(Unifying)e(with)h(structure)g(ar)o(guments)g(\(head)g (uni\256cation\))p 2149 1306 V -71 1308 2221 2 v -72 1366 2 59 v 116 1348 a Fi(X)r Fe(:)p Fi(i)i Fh(=)g Fi(Y)p 459 1366 V 215 w Fg(unify)p 600 1348 15 2 v 17 w(variable)d Fi(V)830 1355 y Ff(n)p 1045 1366 2 59 v 1070 1348 a Fj(Mo)o(v)o(e)i(ne) o(xt)g(structure)f(ar)o(gument)f(to)i Fi(V)1763 1355 y Ff(n)1782 1348 y Fj(.)p 2149 1366 V -72 1424 V 116 1406 a Fi(X)r Fe(:)p Fi(i)h Fh(=)g Fi(Y)p 459 1424 V 215 w Fg(unify)p 600 1406 15 2 v 17 w(value)d Fi(V)769 1413 y Ff(n)p 1045 1424 2 59 v 1070 1406 a Fj(Unify)h Fi(V)1229 1413 y Ff(n)1261 1406 y Fj(with)g(ne)o(xt)g(structure)g(ar)o (gument.)p 2149 1424 V -72 1482 V 115 1464 a Fi(X)r Fe(:)p Fi(i)i Fh(=)f Fi(C)p 459 1482 V 212 w Fg(unify)p 600 1464 15 2 v 17 w(constant)e Fi(C)p 1045 1482 2 59 v 231 w Fj(Unify)h(the)g(constant)h Fi(C)h Fj(with)e(ne)o(xt)g(structure)g (ar)o(gument.)p 2149 1482 V -72 1540 V 106 1523 a Fi(X)r Fe(:)p Fi(i)h Fh(=)h Fi(nil)p 459 1540 V 201 w Fg(unify)p 600 1523 15 2 v 17 w(nil)p 1045 1540 2 59 v 400 w Fj(Unify)e(the)g (constant)h Fi(nil)f Fj(with)g(ne)o(xt)g(structure)g(ar)o(gument.)p 2149 1540 V -72 1662 2 123 v -18 1545 a Fd(^)-46 1650 y Fc(1)p Fb(\024)6 b Ff(j)p Fb(\024)p Ff(N)73 1592 y Fi(X)r Fe(:)p Fh(\()p Fi(i)11 b Fh(+)g Fi(j)g Fa(\000)g Fj(1)p Fh(\))j(=)f Fi(Y)424 1599 y Ff(i)p 459 1662 V 485 1592 a Fg(unify)p 600 1592 15 2 v 17 w(void)e Fi(N)p 1045 1662 2 123 v 320 w Fj(Skip)h(ne)o(xt)h Fi(N)i Fj(structure)d(ar)o (guments.)p 2149 1662 V -71 1664 2221 2 v -72 1722 2 59 v 459 1722 V 459 1722 V 1037 1705 a(Managing)h(unsafe)f(v)o (ariables)p 2149 1722 V -71 1724 2221 2 v -72 1782 2 59 v 130 1764 a Fi(X)k Fh(=)e Fi(Y)p 459 1782 V 229 w Fg(put)p 561 1764 15 2 v 17 w(unsafe)p 717 1764 V 17 w(value)e Fi(V)887 1771 y Ff(n)906 1764 y Fj(,)h Fi(R)961 1771 y Ff(i)p 1045 1782 2 59 v 1070 1764 a Fj(Mo)o(v)o(e)g Fi(V)1227 1771 y Ff(n)1259 1764 y Fj(to)f Fi(R)1340 1771 y Ff(i)1364 1764 y Fj(and)h(globalize.)p 2149 1782 V -72 1840 V 116 1822 a Fi(X)r Fe(:)p Fi(i)h Fh(=)g Fi(Y)p 459 1840 V 215 w Fg(unify)p 600 1822 15 2 v 17 w(local)p 717 1822 V 17 w(value)e Fi(V)887 1829 y Ff(n)p 1045 1840 2 59 v 1070 1822 a Fj(Unify)g Fi(V)1229 1829 y Ff(n)1261 1822 y Fj(with)g(ne)o(xt)g(structure)g(ar)o(gument)f(and)i(globalize.)p 2149 1840 V -71 1842 2221 2 v -72 1900 2 59 v 459 1900 V 459 1900 V 1120 1882 a(Procedural)f(control)p 2149 1900 V -71 1901 2221 2 v -72 1959 2 59 v 459 1959 V 485 1942 a Fg(call)g Fi(P)p Fj(,)i Fi(N)p 1045 1959 V 409 w Fj(Call)f(predicate)f Fi(P)p Fj(,)h(trim)f(en)n(vironment)f(size)i (to)f Fi(N)s Fj(.)p 2149 1959 V -72 2018 V 459 2018 V 485 2000 a Fg(execute)g Fi(P)p 1045 2018 V 385 w Fj(Jump)h(to)f (predicate)g Fi(P)p Fj(.)p 2149 2018 V -72 2076 V 459 2076 V 485 2058 a Fg(pr)o(oceed)p 1045 2076 V 417 w Fj(Return.)p 2149 2076 V -72 2134 V 459 2134 V 485 2116 a Fg(allocate)p 1045 2134 V 421 w Fj(Create)h(an)f(en)n(vironment.)p 2149 2134 V -72 2192 V 459 2192 V 485 2174 a Fg(deallocate)p 1045 2192 V 371 w Fj(Remo)o(v)o(e)h(an)g(en)n(vironment.)p 2149 2192 V -71 2194 2221 2 v -72 2252 2 59 v 459 2252 V 459 2252 V 886 2234 a(Selecting)f(a)g(clause)h(\(conditional)e (branching\))p 2149 2252 V -71 2253 2221 2 v -72 2311 2 59 v 459 2311 V 485 2294 a Fg(switch)p 624 2294 15 2 v 18 w(on)p 695 2294 V 17 w(term)i Fi(V)t Fj(,)g Fi(C)q Fj(,)g Fi(L)p Fj(,)g Fi(S)p 1045 2311 2 59 v 50 w Fj(F)o(our)o(-way)e (jump)h(on)g(type)h(of)e Fi(A)1633 2301 y Fc(1)1653 2294 y Fj(.)p 2149 2311 V -72 2370 V 459 2370 V 485 2352 a Fg(switch)p 624 2352 15 2 v 18 w(on)p 695 2352 V 17 w(constant)h Fi(N)s Fj(,)h Fi(T)p 1045 2370 2 59 v 79 w Fj(Hashed)g(jump)f(\(size)h Fi(N)i Fj(table)d(at)h Fi(T)t Fj(\))e(on)i(constant)f(in)g Fi(A)2042 2359 y Fc(1)2062 2352 y Fj(.)p 2149 2370 V -72 2428 V 459 2428 V 485 2410 a Fg(switch)p 624 2410 15 2 v 18 w(on)p 695 2410 V 17 w(structur)o(e)g Fi(N)s Fj(,)h Fi(T)p 1045 2428 2 59 v 64 w Fj(Hashed)g(jump)f(\(size)h Fi(N)i Fj(table)d(at)h Fi(T)t Fj(\))e(on)i(structure)e(in)i Fi(A)2051 2417 y Fc(1)2070 2410 y Fj(.)p 2149 2428 V -71 2429 2221 2 v -72 2487 2 59 v 459 2487 V 459 2487 V 894 2470 a(Backtracking)f(\(choice)g(point)f(management\))p 2149 2487 V -71 2489 2221 2 v -72 2547 2 59 v 459 2547 V 485 2530 a Fg(try)p 552 2530 15 2 v 18 w(me)p 633 2530 V 18 w(else)i Fi(L)p 1045 2547 2 59 v 304 w Fj(Create)g(choice)f(point) g(to)g Fi(L)p Fj(,)h(then)f(fall)g(through.)p 2149 2547 V -72 2605 V 459 2605 V 485 2588 a Fg(r)o(etry)p 595 2588 15 2 v 18 w(me)p 676 2588 V 19 w(else)h Fi(L)p 1045 2605 2 59 v 260 w Fj(Change)g(retry)e(address)i(to)f Fi(L)p Fj(,)h(then)f(fall)g(through.)p 2149 2605 V -72 2663 V 459 2663 V 485 2646 a Fg(trust)p 591 2646 15 2 v 17 w(me)p 671 2646 V 19 w(else)h Fi(fail)p 1045 2663 2 59 v 226 w Fj(Remo)o(v)o(e)g(top-most)f(choice)g(point,)h(then)f (fall)f(through.)p 2149 2663 V -72 2722 V 459 2722 V 485 2704 a Fg(try)h Fi(L)p 1045 2722 V 481 w Fj(Create)h(choice)f (point,)h(then)f(jump)g(to)g Fi(L)p Fj(.)p 2149 2722 V -72 2780 V 459 2780 V 485 2762 a Fg(r)o(etry)h Fi(L)p 1045 2780 V 437 w Fj(Change)g(retry)e(address,)j(then)e(jump)g(to)g Fi(L)p Fj(.)p 2149 2780 V -72 2838 V 459 2838 V 485 2820 a Fg(trust)g Fi(L)p 1045 2838 V 442 w Fj(Remo)o(v)o(e)h(top-most)f (choice)g(point,)h(then)f(jump)g(to)g Fi(L)p Fj(.)p 2149 2838 V -71 2839 2221 2 v eop end userdict /end-hook known{end-hook}if %%EndDocument endTexFig 1029 3278 a Fa(18)p eop %%Page: 19 19 19 18 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/19.ps /md 132 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Italic :mre /f1_75 f1_1 75 scf /f2_1/Times-Roman :mre /f2_75 f2_1 75 scf /f2_58 f2_1 58 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 565 266 :M f0_100 sf -.009(How to compile unification)A 132 494 :M f1_75 sf (In the WAM \(1983\))S 130 1771 :M (The two-stream algorithm \(1989\))S 378 648 :M f2_75 sf -.03(\245 Single instruction stream)A 378 802 :M -.011(\245 A mode flag distinguishes between Read and Write mode)A 378 957 :M (\245 Breadth-first traversal of terms: X=f\(g\(A\),h\(B\)\) is)S 378 1032 :M -.003( compiled as X=f\(T,U\), T=g\(A\), U=h\(B\))A 378 1182 :M -.011(\245 Problems:)A 603 1279 :M f2_58 sf -.004(- Write mode is not propagated to substructures, resulting in )A 603 1342 :M -.004( superfluous variable creations and bindings)A 601 1429 :M -.001(- Every instruction sets or tests the mode flag)A 603 1523 :M -.007(- Superfluous work on failure, e.g. X=f\(g\(a\),_,_\) always unifies )A 603 1586 :M -.019( the last two arguments)A 378 1939 :M f2_75 sf -.012(\245 Two instruction streams: for Read and for Write mode)A 378 2089 :M -.013(\245 Depth-first traversal of terms)A 378 2243 :M -.013(\245 Key idea: a mechanism to jump between the Read and)A 378 2318 :M -.006( Write mode streams as needed, with very low overhead)A 378 2469 :M -.07(\245 Advantages:)A 603 2574 :M f2_58 sf -.031(- No superfluous operations)A 603 2659 :M -.006(- Downward propagation of Write mode \(to substructures\))A 601 2746 :M -.046(- Linear code size)A 602 2833 :M -.004(- Efficient expansion to native code)A endp end % md %%EndDocument endTexFig 1029 3278 a Fa(19)p eop %%Page: 20 20 20 19 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/20.ps /md 158 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /@a { np :M 0 rl :L 0 exch rl 0 rl :L fill }bd /@b { np :M 0 rl 0 exch rl :L 0 rl 0 exch rl fill }bd /arct where { pop }{ /arct { arcto pop pop pop pop }bd }ifelse /x1 Z /x2 Z /y1 Z /y2 Z /rad Z /@q { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct fill }bd /@s { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct :K stroke }bd /@i { np 0 360 arc fill }bd /@j { gS np :T scale 0 0 .5 0 360 arc fill gR }bd /@e { np 0 360 arc :K stroke }bd /@f { np $m currentmatrix pop :T scale 0 0 .5 0 360 arc :K $m setmatrix stroke }bd /@k { gS np :T 0 0 :M 0 0 5 2 roll arc fill gR }bd /@l { gS np :T 0 0 :M scale 0 0 .5 5 -2 roll arc fill gR }bd /@m { np arc stroke }bd /@n { np $m currentmatrix pop :T scale 0 0 .5 5 -2 roll arc $m setmatrix stroke }bd /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /:q/setdash ld /:r{ np :M :L stroke }bd /nodash[]def /qdenddash { nodash 0 setdash }bd /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Roman :mre /f1_75 f1_1 75 scf /f1_58 f1_1 58 scf /f1_50 f1_1 50 scf /f2_1/Symbol :bsr 240/apple pd :esr /f2_58 f2_1 58 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 523 329 :M f0_100 sf (How to compile unification:)S 895 433 :M -.068(The WAM)A 168 754 :M f1_75 sf -.015(\245 Consider the unification X=f\(g\(A\),h\(B\)\))A 708 1346 :M -.008(get_structure X, f/2)A 708 1421 :M -.057(unify_variable T)A 708 1496 :M -.012(unify_variable U)A 708 1721 :M -.019(get_structure T, g/1)A 708 1796 :M -.012(unify_variable A)A 708 2021 :M -.036(get_structure U, h/1)A 708 2096 :M -.005(unify_variable B)A 154 1346 :M -.097(X=f\(T, U\))A 154 1721 :M -.134(T=g\(A\))A 154 2021 :M -.176(U=h\(B\))A 1802 913 :M f1_58 sf -.043(var\(X\)?)A 1587 1097 :M -.094(Mode)A f2_58 sf (\254)S 1780 1097 :M f1_58 sf (W)S 1956 1097 :M -.094(Mode)A f2_58 sf (\254)S 2149 1097 :M f1_58 sf (R)S 1587 1157 :M -.027(Create f/2)A 1820 1451 :M (Mode?)S 1596 1688 :M -.157(Write T)A 2007 1629 :M -.02(Read T)A 1823 1955 :M (Mode?)S 1596 2199 :M -.065(Write U)A 2003 2140 :M -.109(Read U)A np 1689 1051 :M 1712 1028 :L 1716 1035 :L 1720 1042 :L 1689 1051 :L eofill -2 -2 1717 1036 2 2 1889 932 @b np 2055 1051 :M 2025 1039 :L 2029 1033 :L 2034 1026 :L 2055 1051 :L 2 lw eofill 1889 934 -2 2 2030 1032 2 1889 932 @a np 1890 1287 :M 1906 1259 :L 1911 1264 :L 1917 1270 :L 1890 1287 :L eofill -2 -2 1912 1265 2 2 2054 1109 @b np 1890 1287 :M 1859 1277 :L 1863 1271 :L 1867 1264 :L 1890 1287 :L eofill 1700 1170 -2 2 1864 1270 2 1700 1168 @a np 1689 1583 :M 1712 1560 :L 1716 1567 :L 1720 1573 :L 1689 1583 :L eofill -2 -2 1717 1568 2 2 1889 1464 @b np 2079 1583 :M 2048 1573 :L 2052 1566 :L 2056 1559 :L 2079 1583 :L eofill 1889 1466 -2 2 2053 1565 2 1889 1464 @a np 1890 1795 :M 1909 1769 :L 1914 1775 :L 1919 1781 :L 1890 1795 :L eofill -2 -2 1915 1776 2 2 2078 1641 @b np 1890 1795 :M 1858 1789 :L 1861 1782 :L 1865 1775 :L 1890 1795 :L eofill 1688 1702 -2 2 1862 1781 2 1688 1700 @a np 2079 2091 :M 2048 2080 :L 2052 2074 :L 2056 2067 :L 2079 2091 :L eofill 1889 1973 -2 2 2053 2073 2 1889 1971 @a np 1689 2091 :M 1712 2068 :L 1716 2075 :L 1720 2081 :L 1689 2091 :L eofill -2 -2 1717 2076 2 2 1889 1971 @b np 1890 2315 :M 1908 2288 :L 1914 2294 :L 1919 2300 :L 1890 2315 :L eofill -2 -2 1915 2295 2 2 2078 2149 @b np 1890 2315 :M 1858 2307 :L 1862 2300 :L 1866 2293 :L 1890 2315 :L eofill 1688 2210 -2 2 1863 2299 2 1688 2208 @a np 1890 1913 :M 1882 1882 :L 1890 1882 :L 1898 1882 :L 1890 1913 :L eofill -2 -2 1891 1883 2 2 1889 1794 @b np 1890 2433 :M 1882 2401 :L 1890 2401 :L 1898 2401 :L 1890 2433 :L eofill -2 -2 1891 2402 2 2 1889 2314 @b np 1890 1406 :M 1882 1374 :L 1890 1374 :L 1898 1374 :L 1890 1406 :L eofill -2 -2 1891 1375 2 2 1889 1286 @b np 1890 862 :M 1882 831 :L 1890 831 :L 1898 831 :L 1890 862 :L eofill -2 -2 1891 832 2 2 1889 743 @b 1748 1513 :M f1_50 sf (W)S 1985 1512 :M (R)S 1748 2021 :M (W)S 1985 2020 :M (R)S 1736 981 :M -.319(yes)A 1962 981 :M (no)S [20.833 12.5 ] 0 :q 1654 709 1297 1268 :r 1654 2457 1299 1528 :r 2126 709 1654 709 :r 2126 2457 1654 2457 :r 165 1268 1299 1268 :r 709 1528 1299 1528 :r 168 946 :M f1_75 sf -.027(\245 The WAM instructions and their)A 168 1021 :M -.025( internal operations look like this:)A 1596 1632 :M f1_58 sf -.037(Create T)A 1602 2140 :M -.1(Create U)A 472 1382 709 1528 :r 165 1382 472 1382 :r 197 2565 :M -.086(Subterm)A 158 2628 :M -.073(unifications)A 903 2565 :M -.086(WAM)A 853 2628 :M -.006(instruction)A 870 2691 :M -.075(sequence)A 1674 2565 :M -.021(Internal operations)A 1644 2628 :M -.005(of WAM instructions)A endp end % md %%EndDocument endTexFig 1029 3278 a Fa(20)p eop %%Page: 21 21 21 20 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/21.ps /md 156 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /@a { np :M 0 rl :L 0 exch rl 0 rl :L fill }bd /@b { np :M 0 rl 0 exch rl :L 0 rl 0 exch rl fill }bd /arct where { pop }{ /arct { arcto pop pop pop pop }bd }ifelse /x1 Z /x2 Z /y1 Z /y2 Z /rad Z /@q { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct fill }bd /@s { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct :K stroke }bd /@i { np 0 360 arc fill }bd /@j { gS np :T scale 0 0 .5 0 360 arc fill gR }bd /@e { np 0 360 arc :K stroke }bd /@f { np $m currentmatrix pop :T scale 0 0 .5 0 360 arc :K $m setmatrix stroke }bd /@k { gS np :T 0 0 :M 0 0 5 2 roll arc fill gR }bd /@l { gS np :T 0 0 :M scale 0 0 .5 5 -2 roll arc fill gR }bd /@m { np arc stroke }bd /@n { np $m currentmatrix pop :T scale 0 0 .5 5 -2 roll arc $m setmatrix stroke }bd /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Roman :mre /f1_75 f1_1 75 scf /f1_58 f1_1 58 scf /f2_1/Symbol :bsr 240/apple pd :esr /f2_75 f2_1 75 scf /f2_58 f2_1 58 scf /f3_1/Times-Italic :mre /f3_75 f3_1 75 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 517 304 :M f0_100 sf (How to compile unification:)S 656 408 :M -.008(The two-stream idea)A 933 1025 :M f1_75 sf -.014(\245 It is possible to efficiently execute any)A 933 1100 :M -.01( contiguous subsequence. Give each sub-)A 933 1175 :M -.015( sequence a unique identifier \011)A f3_75 sf (s)S 1881 1175 :M f1_75 sf -.089( . Then a )A 933 1250 :M -.008( single comparison per subsequence and a )A 933 1325 :M -.02( single register R are all that is needed.)A 933 864 :M -.015(\245 Given a sequence of instructions.)A 1 G 472 803 213 1654 rF 0 G 2 lw 472 803 213 1654 rS np 591 803 :M 583 772 :L 591 772 :L 598 772 :L 591 803 :L eofill -2 -2 592 773 2 2 590 578 @b 472 637 :M f1_58 sf -.038(R)A cF f2_58 sf -.038(\271)A sf -.038(s)A 1 G 531 1276 95 673 rF 0 G 531 1276 95 673 rS np 531 1276 :M 499 1276 :L 501 1268 :L 503 1260 :L 531 1276 :L eofill 153 1182 -2 2 502 1267 2 153 1180 @a np 130 2055 :M 160 2043 :L 161 2050 :L 162 2058 :L 130 2055 :L eofill -2 -2 162 2051 2 2 519 1995 @b 1 G 543 1972 390 71 rF 532 2021 :M 0 G -.06(jump if R=s)A 190 1158 :M -.477(R=s)A np 579 2551 :M 571 2520 :L 579 2520 :L 587 2520 :L 579 2551 :L eofill -2 -2 580 2521 2 2 578 2456 @b 438 2671 :M (Sequence of)S 445 2734 :M -.056(instructions)A 933 1464 :M f1_75 sf -.01(\245 Arrange the unification instructions in)A 933 1539 :M -.007( a depth-first traversal of the term.)A 933 1614 :M -.029( Then two properties are true:)A 1133 1772 :M -.021(- Each subterm is a contiguous)A 1133 1847 :M ( sequence of instructions.)S 1133 2010 :M -.019(- Nested subterms are also nested)A 1133 2085 :M -.005( sequences of instructions.)A 1133 2160 :M ( \(This permits further reduction )S 1133 2235 :M -.017( of overhead.\))A 933 2374 :M -.027(\245 Idea due to Mohamed Amraoui, )A 933 2449 :M -.012( Andr\216 Mari\221n and Bart Demoen, )A 933 2524 :M -.026( Kent Boortz, and Micha Meier.)A endp end % md %%EndDocument endTexFig 1029 3278 a Fa(21)p eop %%Page: 22 22 22 21 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/22.ps /md 158 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /@a { np :M 0 rl :L 0 exch rl 0 rl :L fill }bd /@b { np :M 0 rl 0 exch rl :L 0 rl 0 exch rl fill }bd /arct where { pop }{ /arct { arcto pop pop pop pop }bd }ifelse /x1 Z /x2 Z /y1 Z /y2 Z /rad Z /@q { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct fill }bd /@s { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct :K stroke }bd /@i { np 0 360 arc fill }bd /@j { gS np :T scale 0 0 .5 0 360 arc fill gR }bd /@e { np 0 360 arc :K stroke }bd /@f { np $m currentmatrix pop :T scale 0 0 .5 0 360 arc :K $m setmatrix stroke }bd /@k { gS np :T 0 0 :M 0 0 5 2 roll arc fill gR }bd /@l { gS np :T 0 0 :M scale 0 0 .5 5 -2 roll arc fill gR }bd /@m { np arc stroke }bd /@n { np $m currentmatrix pop :T scale 0 0 .5 5 -2 roll arc $m setmatrix stroke }bd /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /:q/setdash ld /:r{ np :M :L stroke }bd /nodash[]def /qdenddash { nodash 0 setdash }bd /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Roman :mre /f1_75 f1_1 75 scf /f1_58 f1_1 58 scf /f1_50 f1_1 50 scf /f2_1/Symbol :bsr 240/apple pd :esr /f2_58 f2_1 58 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 493 304 :M f0_100 sf (How to compile unification:)S 521 408 :M -.012(The two-stream algorithm)A 239 683 :M f1_75 sf -.015(\245 Consider the unification X=f\(g\(A\),h\(B\)\))A 239 837 :M -.001(\245 The two-stream compilation looks like this:)A 535 1133 :M f1_58 sf -.043(var\(X\)?)A 513 1322 :M -.041(X=f\(T,U\))A 538 1511 :M -.136(var\(T\)?)A 536 1700 :M -.122(T=g\(A\))A 535 2015 :M -.043(var\(U\)?)A 535 2204 :M -.173(U=h\(B\))A 977 1322 :M -.098( X=f\(T,U\))A 1007 1700 :M -.122(T=g\(A\))A 955 1889 :M -.016(jump if R)A cF f2_58 sf -.016(\263)A sf -.016(1)A 1006 2204 :M -.173(U=h\(B\))A 955 2393 :M -.016(jump if R)A cF f2_58 sf -.016(\263)A sf -.016(1)A np 625 1652 :M 618 1625 :L 625 1625 :L 632 1625 :L 625 1652 :L eofill -1 -1 626 1626 1 1 625 1534 @b np 625 1959 :M 618 1932 :L 625 1932 :L 632 1932 :L 625 1959 :L eofill -1 -1 626 1933 1 1 625 1723 @b np 625 1274 :M 618 1247 :L 625 1247 :L 632 1247 :L 625 1274 :L eofill -1 -1 626 1248 1 1 625 1156 @b np 625 1463 :M 618 1436 :L 625 1436 :L 632 1436 :L 625 1463 :L eofill -1 -1 626 1437 1 1 625 1345 @b np 625 2148 :M 618 2121 :L 625 2121 :L 632 2121 :L 625 2148 :L eofill -1 -1 626 2122 1 1 625 2030 @b np 625 1085 :M 618 1058 :L 625 1058 :L 632 1058 :L 625 1085 :L eofill -1 -1 626 1059 1 1 625 955 @b 732 1110 -1 1 1099 1109 1 732 1109 @a np 1098 1274 :M 1091 1247 :L 1098 1247 :L 1105 1247 :L 1098 1274 :L eofill -1 -1 1099 1248 1 1 1098 1109 @b np 1098 1652 :M 1091 1625 :L 1098 1625 :L 1105 1625 :L 1098 1652 :L eofill -1 -1 1099 1626 1 1 1098 1345 @b np 1098 1841 :M 1091 1814 :L 1098 1814 :L 1105 1814 :L 1098 1841 :L eofill -1 -1 1099 1815 1 1 1098 1723 @b np 1098 2148 :M 1091 2121 :L 1098 2121 :L 1105 2121 :L 1098 2148 :L eofill -1 -1 1099 2122 1 1 1098 1900 @b np 1098 2325 :M 1091 2298 :L 1098 2298 :L 1105 2298 :L 1098 2325 :L eofill -1 -1 1099 2299 1 1 1098 2207 @b np 1098 2585 :M 1091 2558 :L 1098 2558 :L 1105 2558 :L 1098 2585 :L eofill -1 -1 1099 2559 1 1 1098 2408 @b -1 -1 626 2468 1 1 625 2207 @b np 1098 2467 :M 1070 2474 :L 1070 2467 :L 1070 2460 :L 1098 2467 :L eofill 625 2468 -1 1 1071 2467 1 625 2467 @a np 625 1877 :M 653 1870 :L 653 1877 :L 653 1883 :L 625 1877 :L eofill 653 1878 -1 1 945 1877 1 653 1877 @a np 625 2373 :M 653 2366 :L 653 2373 :L 653 2379 :L 625 2373 :L eofill 653 2374 -1 1 945 2373 1 653 2373 @a np 1098 1983 :M 1070 1990 :L 1070 1983 :L 1070 1976 :L 1098 1983 :L eofill 732 1984 -1 1 1071 1983 1 732 1983 @a np 1098 1487 :M 1070 1494 :L 1070 1487 :L 1070 1480 :L 1098 1487 :L eofill 732 1488 -1 1 1071 1487 1 732 1487 @a 832 1476 :M -.15(set R)A 950 1476 :M f2_58 sf -.236(\2541)A 838 1097 :M f1_58 sf -.15(set R)A 956 1097 :M f2_58 sf -.156(\254)A f1_58 sf (0)S [20.833 12.5 ] 0 :q 1452 1392 259 1392 :r 1452 1912 1452 1392 :r 1452 1912 259 1912 :r 259 1912 259 1392 :r 494 2679 :M -.066(Read mode)A 490 2742 :M -.056(instructions)A 950 2678 :M -.042(Write mode)A 952 2741 :M -.056(instructions)A 1480 1442 :M -.032(Instructions that implement)A 1480 1505 :M -.027(the unification of T with the )A 1480 1568 :M -.073(subterm g\(A\))A 734 1145 :M f1_50 sf -.319(yes)A 567 1191 :M (no)S 734 1523 :M -.319(yes)A 734 2019 :M -.319(yes)A 567 1569 :M (no)S 567 2065 :M (no)S 829 1974 :M f1_58 sf -.15(set R)A 947 1974 :M f2_58 sf -.236(\2541)A 1418 1025 :M f1_75 sf -.033(\245 There are two instruction)A 1418 1100 :M -.018( sequences, with jumps)A 1418 1175 :M -.005( between them)A 1418 2108 :M -.022(\245 The constraint T=g\(A\))A 1418 2183 :M -.024( is compiled differently in)A 1418 2258 :M -.035( the Read and Write mode)A 1418 2333 :M -.049( sequences)A endp end % md %%EndDocument endTexFig 1029 3278 a Fa(22)p eop %%Page: 23 23 23 22 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/23.ps /@olda4{}def /a4 where{pop /@olda4 /a4 load def}if /a4{@olda4 @a4size}def /@a4size{/hsize 21 2.54 div 72 mul def /vsize 29.7 2.54 div 72 mul def}def /@olda3{}def /a3 where{pop /@olda3 /a3 load def}if /a3{@olda3 @a3size}def /@a3size{/hsize 29.7 2.54 div 72 mul def /vsize 42 2.54 div 72 mul def}def /letter where{pop}{/letter{}def}ifelse /legal where{pop}{/legal{}def}ifelse /ledger where{pop}{/ledger{}def}ifelse /tabloid where{pop}{/tabloid{}def} ifelse /TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N /X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{ statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{ pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get} B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D }B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V {}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave transform round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail} B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{ 3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{ 3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2 index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def} ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict end definefont 3 -1 roll makefont /setfont load]cvx def}def /ObliqueSlant{dup sin S cos div neg}B /SlantFont{4 index mul add}def /ExtendFont{3 -1 roll mul exch}def /ReEncodeFont{/Encoding exch def}def end TeXDict begin 39158280 55380996 1000 300 300 (/udir/vanroy/SURVEY/unify2.dvi) @start /Fa 150[9 105[{}1 33.333332 /Times-Italic rf /Fb 2 57 df<00000060000000000030000000000030 00000000001800000000001800000000000C0000000000060000000000030000FFFFFFFF 8000FFFFFFFFE000000000007000000000001C00000000000F800000000003E000000000 0780000000001E00000000003800000000006000FFFFFFFFC000FFFFFFFF800000000003 00000000000600000000000C000000000018000000000018000000000030000000000030 00000000006000002B1C7D9932>41 D<40000010C0000030600000606000006060000060 300000C0300000C0300000C018000180180001800C0003000C0003000C00030007FFFE00 07FFFE0003000C0003000C0003000C0001801800018018000180180000C0300000C03000 0060600000606000006060000030C0000030C000001980000019800000198000000F0000 000F0000000F000000060000000600001C2480A21D>56 D E /Fc 134[25 1[36 25 25 14 19 17 25 25 25 25 39 14 2[14 25 25 17 22 25 22 25 22 7[36 36 47 2[30 1[33 3[36 6[36 3[33 1[36 3[28 2[14 13[12 2[17 17 1[39 38[{}37 50.000000 /Times-Roman rf /Fd 69[31 11[39 3[31 48[35 1[51 35 35 20 27 23 35 35 35 35 55 20 2[20 35 35 23 31 35 31 35 31 7[51 51 3[43 18[51 3[40 14[18 1[18 2[23 23 40[{}34 70.833336 /Times-Roman rf /Fe 2 42 df<003F800000FFE00003FFF80007FFFC000FFFFE001FFFFF001FFFFF00 3FFFFF807FFFFFC07FFFFFC07FFFFFC0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0 FFFFFFE0FFFFFFE07FFFFFC07FFFFFC07FFFFFC03FFFFF801FFFFF001FFFFF000FFFFE00 07FFFC0003FFF80000FFE000003F80001B1D7C9F24>15 D<000000000200000000000000 070000000000000007000000000000000380000000000000038000000000000001C00000 0000000000E000000000000000F000000000000000700000000000000038000000000000 001C000000000000000E0000FFFFFFFFFFFF0000FFFFFFFFFFFFC0007FFFFFFFFFFFE000 000000000000F8000000000000003E000000000000001F8000000000000007F000000000 000001FE00000000000000FE00000000000003F00000000000000FC00000000000001E00 0000000000007C00000000000000F0007FFFFFFFFFFFC000FFFFFFFFFFFF8000FFFFFFFF FFFF000000000000000E000000000000001C000000000000003800000000000000700000 0000000000E000000000000000E000000000000001C00000000000000380000000000000 038000000000000007000000000000000700000000000000020000003F297CA548>41 D E /Ff 81[52 52[52 1[75 1[58 29 52 2[58 58 58 86 23 2[23 58 58 1[58 1[52 1[58 11[75 85[{}18 104.166664 /Helvetica rf end TeXDict begin 1 0 bop 42 206 a Ff(Using)28 b(types)g(when)g(compiling)g (uni\256cation)-24 414 y Fe(\017)21 b Fd(This)d(table)g(describes)i(ho) n(w)e(uni\256cation)h(is)f(compiled)g(in)g(Aquarius.)-24 530 y Fe(\017)j Fd(unify\(X,Y\))e(generates)h(code)f(for)g(the)f (uni\256cation)g(X=Y)g(using)g(type)g(T)-5 b(.)-24 647 y Fe(\017)21 b Fd(\252)12 b(T)18 b Fe(\))f Fd(v)n(ar\(X\))d(\272)k (tests)g(whether)h(type)f(T)g(implies)g(v)n(ar\(X\).)p -9 814 1852 2 v -10 872 2 59 v 127 854 a Fc(Name)372 b(Condition)553 b(Actions)p 1842 872 V -9 873 1852 2 v -10 932 2 59 v 16 914 a(unify\(X,)12 b(Y\))154 b(v)o(ar\(X\),)12 b(v)o(ar\(Y\))382 b(v)o(ar)p 1144 914 15 2 v 17 w(v)o(ar\(X,)12 b(Y\))p 1842 932 2 59 v -10 990 V 406 972 a(v)o(ar\(X\),)g(non)n(v)o (ar\(Y\))309 b(v)o(ar)p 1144 972 15 2 v 17 w(n)n(v)o(ar\(X,)12 b(Y\))p 1842 990 2 59 v -10 1048 V 406 1030 a(non)n(v)o(ar\(X\),)f(v)o (ar\(Y\))310 b(v)o(ar)p 1144 1030 15 2 v 17 w(n)n(v)o(ar\(Y)-6 b(,)12 b(X\))p 1842 1048 2 59 v -10 1106 V 406 1089 a(non)n(v)o (ar\(X\),)f(non)n(v)o(ar\(Y\))237 b(n)n(v)o(ar)p 1167 1089 15 2 v 17 w(n)n(v)o(ar\(X,)12 b(Y\))p 1842 1106 2 59 v -9 1108 1852 2 v -9 1118 V -10 1176 2 59 v 16 1158 a(n)n(v)o(ar)p 105 1158 15 2 v 18 w(n)n(v)o(ar\(X,)f(Y\))743 b Fb(8)11 b Fc(ar)o(gs)i(X)1249 1165 y Fa(i)1260 1158 y Fc(,)g(Y)1321 1165 y Fa(i)1332 1158 y Fc(:)18 b(unify\(X)1523 1165 y Fa(i)1533 1158 y Fc(,)13 b(Y)1594 1165 y Fa(i)1605 1158 y Fc(\))p 1842 1176 2 59 v -9 1177 1852 2 v -10 1235 2 59 v 16 1218 a(v)o(ar)p 82 1218 15 2 v 18 w(n)n(v)o(ar\(X,)e (Y\))94 b(T)13 b Fb(\))g Fc(ne)o(w\(X\))414 b(ne)o(w)p 1163 1218 V 18 w(old\(X,)12 b(Y\))p 1842 1235 2 59 v -10 1294 V 406 1276 a(T)h Fb(\))g Fc(ground\(X\))354 b(old)p 1145 1276 15 2 v 18 w(old\(X,)12 b(Y\))p 1842 1294 2 59 v -10 1352 V 406 1334 a(otherwise)478 b(old)p 1145 1334 15 2 v 18 w(old\(X,)12 b(Y\))g(\(depth)g(limited\))p 1842 1352 2 59 v -9 1353 1852 2 v -10 1411 2 59 v 16 1394 a(v)o(ar)p 82 1394 15 2 v 18 w(v)o(ar\(X,)f(Y\))117 b(T)13 b Fb(\))g Fc(\(old\(X\),)e(old\(Y\)\))241 b(oldv)p 1170 1394 V 18 w(oldv\(X,)12 b(Y\))p 1842 1411 2 59 v -10 1470 V 406 1452 a(T)h Fb(\))g Fc(\(old\(X\),)e(ne)o(w\(Y\)\))223 b(Generate)12 b(store)h(instruction)p 1842 1470 V -10 1528 V 406 1510 a(T)g Fb(\))g Fc(\(ne)o(w\(X\),)e(old\(Y\)\))223 b(Generate)12 b(store)h(instruction)p 1842 1528 V -10 1586 V 406 1568 a(T)g Fb(\))g Fc(\(ne)o(w\(X\),)e(ne)o(w\(Y\)\))205 b(ne)o(w)p 1163 1568 15 2 v 18 w(ne)o(w\(X,)12 b(Y\))p 1842 1586 2 59 v -9 1587 1852 2 v -9 1597 V -10 1656 2 59 v 16 1638 a(ne)o(w)p 101 1638 15 2 v 18 w(ne)o(w\(X,)g(Y\))750 b(Generate)12 b(store)h(and)f(mo)o(v)o(e)h(instructions)p 1842 1656 2 59 v -9 1657 1852 2 v -10 1715 2 59 v 16 1698 a(ne)o(w)p 101 1698 15 2 v 18 w(old\(X,)f(Y\))96 b(compound\(Y\))391 b(W)p 1128 1698 V 18 w(seq\(X,)13 b(Y\))p 1842 1715 2 59 v -10 1773 V 406 1756 a(atomic\(Y\))466 b(Generate)12 b(store)h(instruction)p 1842 1773 V -10 1832 V 406 1814 a(v)o(ar\(Y\))539 b(v)o(ar)p 1144 1814 15 2 v 17 w(v)o(ar\(X,)12 b(Y\))p 1842 1832 2 59 v -9 1833 1852 2 v -10 1891 2 59 v 16 1874 a(old)p 83 1874 15 2 v 18 w(old\(X,)g(Y\))114 b(compound\(Y\),)12 b(\(T)p Fb(\))p Fc(non)n(v)o(ar\(X\)\))47 b(T)m(est)13 b(Y)f(type,)h(then)f (old)p 1497 1874 V 18 w(old)p 1579 1874 V 17 w(R\(X,)h(Y\))p 1842 1891 2 59 v -10 1949 V 406 1932 a(compound\(Y\))391 b(Generate)12 b(switch,)h(R)g(&)f(W)h(branches)p 1842 1949 V -10 2008 V 406 1990 a(atomic\(Y\),)f(\(T)g Fb(\))h Fc(non)n(v)o(ar\(X\)\))97 b(old)p 1145 1990 15 2 v 18 w(old)p 1227 1990 V 17 w(R\(X,)13 b(Y\))p 1842 2008 2 59 v -10 2066 V 406 2048 a(atomic\(Y\))466 b(Generate)12 b(unify)p 1379 2048 15 2 v 17 w(atomic)h(instruction)p 1842 2066 2 59 v -10 2124 V 406 2106 a(non)n(v)o(ar\(Y\),)e(\(T)i Fb(\))f Fc(v)o(ar\(X\)\))171 b(old)p 1145 2106 15 2 v 18 w(old)p 1227 2106 V 17 w(W\(X,)13 b(Y\))p 1842 2124 2 59 v -10 2182 V 406 2164 a(v)o(ar\(Y\))539 b(v)o(ar)p 1144 2164 15 2 v 17 w(v)o(ar\(X,)12 b(Y\))p 1842 2182 2 59 v -9 2184 1852 2 v -10 2242 2 59 v 16 2224 a(oldv)p 108 2224 15 2 v 18 w(oldv\(X,)g(Y\))64 b(A)13 b(=)f(atomic)p 634 2224 V 18 w(v)o(alue\(T)l(,)h(X\))201 b(unify\(Y)-6 b(,)11 b(A\))p 1842 2242 2 59 v -10 2300 V 406 2282 a(A)i(=)f(atomic)p 634 2282 15 2 v 18 w(v)o(alue\(T)l(,)h(Y\))201 b(unify\(X,)12 b(A\))p 1842 2300 2 59 v -10 2358 V 406 2340 a(T)h Fb(\))g Fc(\(atomic\(X\),)e(atomic\(Y\)\))97 b(Generate)12 b(comparison)g (instruction)p 1842 2358 V -10 2416 V 406 2399 a(T)h Fb(\))g Fc(\(v)o(ar\(X\),)e(non)n(v)o(ar\(Y\)\))170 b(Generate)12 b(store)h(instruction)p 1842 2416 V -10 2474 V 406 2457 a(T)g Fb(\))g Fc(\(non)n(v)o(ar\(X\),)d(v)o(ar\(Y\)\))171 b(Generate)12 b(store)h(instruction)p 1842 2474 V -10 2532 V 406 2515 a(otherwise)478 b(Generate)12 b(unify)g(instruction)p 1842 2532 V -9 2534 1852 2 v -9 2544 V -10 2602 2 59 v 16 2585 a(old)p 83 2585 15 2 v 18 w(old)p 165 2585 V 17 w(W\(X,)h(Y\))49 b(compound\(Y\))391 b(W)p 1128 2585 V 18 w(seq\(X,)13 b(Y\))p 1842 2602 2 59 v -10 2660 V 406 2643 a(atomic\(Y\))466 b(Generate)12 b(store)h(instruction)p 1842 2660 V -9 2662 1852 2 v -10 2720 2 59 v 16 2702 a(old)p 83 2702 15 2 v 18 w(old)p 165 2702 V 17 w(R\(X,)g(Y\))63 b(compound\(Y\))391 b Fb(8)11 b Fc(ar)o(gs)i(X)1249 2709 y Fa(i)1260 2702 y Fc(,)g(Y)1321 2709 y Fa(i)1332 2702 y Fc(:)18 b(old)p 1431 2702 V 18 w(old\(X)1563 2709 y Fa(i)1573 2702 y Fc(,)13 b(Y)1634 2709 y Fa(i)1645 2702 y Fc(\))p 1842 2720 2 59 v -10 2778 V 406 2761 a(atomic\(Y\))466 b(Generate)12 b(comparison)g(instruction)p 1842 2778 V -9 2780 1852 2 v -10 2838 2 59 v 16 2820 a(W)p 66 2820 15 2 v 18 w(seq\(X,)h(Y\))800 b(Generate)12 b(W)h(mode)f(sequence)p 1842 2838 2 59 v -9 2839 1852 2 v eop end userdict /end-hook known{end-hook}if %%EndDocument endTexFig 1029 3278 a Fa(23)p eop %%Page: 24 24 24 23 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/24.ps /md 158 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /@a { np :M 0 rl :L 0 exch rl 0 rl :L fill }bd /@b { np :M 0 rl 0 exch rl :L 0 rl 0 exch rl fill }bd /arct where { pop }{ /arct { arcto pop pop pop pop }bd }ifelse /x1 Z /x2 Z /y1 Z /y2 Z /rad Z /@q { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct fill }bd /@s { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct :K stroke }bd /@i { np 0 360 arc fill }bd /@j { gS np :T scale 0 0 .5 0 360 arc fill gR }bd /@e { np 0 360 arc :K stroke }bd /@f { np $m currentmatrix pop :T scale 0 0 .5 0 360 arc :K $m setmatrix stroke }bd /@k { gS np :T 0 0 :M 0 0 5 2 roll arc fill gR }bd /@l { gS np :T 0 0 :M scale 0 0 .5 5 -2 roll arc fill gR }bd /@m { np arc stroke }bd /@n { np $m currentmatrix pop :T scale 0 0 .5 5 -2 roll arc $m setmatrix stroke }bd /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /:q/setdash ld /:r{ np :M :L stroke }bd /nodash[]def /qdenddash { nodash 0 setdash }bd /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin countdictstack [ {%stopped level2 {1 dict dup /ManualFeed false put setpagedevice}{statusdict begin /manualfeed false store end} ifelse }featurecleanup countdictstack [ {%stopped }featurecleanup countdictstack [ {%stopped level2 { 2 dict dup /PageSize [612 792] put dup /ImagingBBox null put setpagedevice }{ /lettersmall where {pop lettersmall} {letterR} ifelse } ifelse }featurecleanup (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Italic :mre /f1_75 f1_1 75 scf /f1_58 f1_1 58 scf /f2_1/Times-Roman :mre /f2_75 f2_1 75 scf /f2_58 f2_1 58 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 841 235 :M f0_100 sf -.029(Backtracking)A 120 863 :M f1_75 sf (The raw ingredients: three stacks)S 1 G 248 1051 945 71 rF 0 G 2 lw 248 1051 945 71 rS 1 G 248 1996 945 71 rF 0 G 248 1996 945 71 rS 1 G 248 1524 1642 70 rF 0 G 248 1524 1642 70 rS -2 -2 249 1170 2 2 247 1003 @b -2 -2 249 1643 2 2 247 1523 @b -2 -2 249 2115 2 2 247 1948 @b 271 1018 :M f2_58 sf -.043(choice point stack)A 271 1500 :M -.029(data stack)A 271 1971 :M (trail stack)S 284 2137 :M f1_58 sf (\(a log of actions to restore objects older than the most recent choice point\))S -2 -2 958 1123 2 2 956 1050 @b -2 -2 721 1123 2 2 719 1050 @b -2 -2 485 1123 2 2 483 1050 @b -2 -2 1430 1595 2 2 1428 1523 @b -2 -2 1005 1595 2 2 1003 1523 @b -2 -2 615 1595 2 2 613 1523 @b -2 -2 1005 2068 2 2 1003 1995 @b -2 -2 698 2068 2 2 696 1995 @b -2 -2 509 2068 2 2 507 1995 @b np 1276 1087 :M 1248 1095 :L 1257 1087 :L 1248 1078 :L 1276 1087 :L eofill 1192 1088 -2 2 1258 1086 2 1192 1086 @a np 1972 1559 :M 1944 1568 :L 1954 1559 :L 1944 1550 :L 1972 1559 :L eofill 1889 1560 -2 2 1955 1558 2 1889 1558 @a np 1276 2031 :M 1248 2040 :L 1257 2031 :L 1248 2023 :L 1276 2031 :L eofill 1192 2032 -2 2 1258 2030 2 1192 2030 @a 1192 2030 :M 2 setlinecap 354 1087 :M 354 1220.315 336.329 1306.812 301 1346.5 :C 265.662 1386.146 248 1445.311 248 1524 :C stroke 248 1406 :M 0 setlinecap np 248 1524 :M 240 1495 :L 248 1505 :L 258 1496 :L 248 1524 :L eofill [37.5 37.5 ] 0 :q 249 1503 248 1505 :r 352 1084 357 1088 1 @q [] 0 :q 352 1084 357 1088 1 @s 248 1505 :M 2 setlinecap 602 1087 :M 602 1220.315 603.991 1306.812 608 1346.5 :C 611.991 1386.146 614 1445.311 614 1524 :C stroke 614 1406 :M 0 setlinecap np 614 1524 :M 605 1496 :L 614 1505 :L 623 1496 :L 614 1524 :L eofill [37.5 37.5 ] 0 :q 614 1488 614 1505 :r 600 1084 605 1088 1 @q [] 0 :q 600 1084 605 1088 1 @s 614 1505 :M 2 setlinecap 827 1087 :M 827 1224.315 856.486 1313.146 915.5 1353.5 :C 974.486 1393.813 1004 1450.645 1004 1524 :C stroke 1004 1414 :M 0 setlinecap np 1004 1524 :M 994 1496 :L 1003 1505 :L 1012 1495 :L 1004 1524 :L eofill [37.5 37.5 ] 0 :q 1003 1510 1003 1505 :r 824 1084 829 1087 0.5 @q [] 0 :q 824 1084 829 1087 0.5 @s 1003 1505 :M 2 setlinecap 1075 1087 :M 1075 1224.315 1133.98 1313.146 1252 1353.5 :C 1369.982 1393.813 1429 1450.645 1429 1524 :C stroke 1429 1414 :M 0 setlinecap np 1429 1524 :M 1418 1497 :L 1427 1505 :L 1435 1495 :L 1429 1524 :L eofill [37.5 37.5 ] 0 :q 1428 1513 1427 1505 :r 1073 1084 1077 1088 1 @q [] 0 :q 1073 1084 1077 1088 1 @s [20.833 37.5 ] 0 :q 1004 1996 1429 1594 :r 697 1996 1004 1594 :r 508 1996 614 1594 :r 248 1996 248 1594 :r 1 G 319 1157 815 60 rF 284 1204 :M 0 G -.001(\(a choice point encapsulates execution state: registers, stack pointers, retry address\))A 120 2340 :M f1_75 sf -.157(Actions)A 272 2491 :M f2_75 sf (\245 To mark an execution point as backtrackable:)S 272 2574 :M -.015( Create a choice point.)A 272 2706 :M -.015(\245 To backtrack to a previous execution point:)A 272 2789 :M -.005( Restore machine state \(registers & stack pointers\);)A 272 2872 :M -.007( Unwind the trail \(restore the trailed objects\);)A 272 2955 :M -.011( Go to the retry address.)A 120 426 :M f1_75 sf -.012(What does it do?)A 272 602 :M f2_75 sf (\245 A general multi-level \322undo\323 mechanism)S 272 685 :M -.004( that recovers memory.)A 1 G 331 1618 708 59 rF 284 1667 :M 0 G f1_58 sf -.006(\(all data objects are put here\))A endp end % md %%EndDocument endTexFig 1029 3278 a Fa(24)p eop %%Page: 25 25 25 24 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/25.ps /md 133 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Roman :mre /f1_75 f1_1 75 scf /f1_67 f1_1 67 scf /f2_1/Times-Italic :mre /f2_75 f2_1 75 scf /f2_67 f2_1 67 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 736 254 :M f0_100 sf -.046(Timestamping \(1\))A 170 937 :M f1_75 sf -.004(\245 WAM trail condition: Trail a variable binding if the address)A 170 1016 :M -.009( of the variable is less than the address of the top-most choice )A 170 1095 :M -.061( point.)A 170 1725 :M -.007(\245 Improved trail condition: Trail a constraint modification if)A 170 1804 :M -.011( the previous modification was done before the creation time )A 170 1883 :M -.028( of the top-most choice point.)A 341 1229 :M f1_67 sf -.011(- This works well for the WAM since an unbound variable can )A 341 1300 :M -.04( only be bound )A 775 1300 :M f2_67 sf -.039(once)A f1_67 sf -.036( on forward execution.)A 341 1398 :M -.005(- Other constraints may be modified \(\322bound\323\) more than once)A 341 1469 :M -.012( on forward execution \(e.g., refinement of finite domains\). The )A 341 1540 :M -.003( WAM condition results in too much trailing for them \(c.f., CHIP \).)A 170 2062 :M f1_75 sf -.006(\245 Implementing this trail condition requires that each choice)A 170 2141 :M -.005( point and each constraint contain a timestamp marking its)A 170 2220 :M ( creation or modification time.)S 170 602 :M -.016(\245 To )A f2_75 sf -.014(trail)A f1_75 sf -.017( a binding means to store enough information on a )A 170 681 :M -.055( stack \(the )A 516 681 :M f2_75 sf -.012(trail stack)A f1_75 sf -.013(\) so that backtracking may restore the)A 170 760 :M -.061( unbound state.)A endp end % md %%EndDocument endTexFig 1029 3278 a Fa(25)p eop %%Page: 26 26 26 25 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/26.ps /md 156 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /@a { np :M 0 rl :L 0 exch rl 0 rl :L fill }bd /@b { np :M 0 rl 0 exch rl :L 0 rl 0 exch rl fill }bd /arct where { pop }{ /arct { arcto pop pop pop pop }bd }ifelse /x1 Z /x2 Z /y1 Z /y2 Z /rad Z /@q { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct fill }bd /@s { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct :K stroke }bd /@i { np 0 360 arc fill }bd /@j { gS np :T scale 0 0 .5 0 360 arc fill gR }bd /@e { np 0 360 arc :K stroke }bd /@f { np $m currentmatrix pop :T scale 0 0 .5 0 360 arc :K $m setmatrix stroke }bd /@k { gS np :T 0 0 :M 0 0 5 2 roll arc fill gR }bd /@l { gS np :T 0 0 :M scale 0 0 .5 5 -2 roll arc fill gR }bd /@m { np arc stroke }bd /@n { np $m currentmatrix pop :T scale 0 0 .5 5 -2 roll arc $m setmatrix stroke }bd /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Roman :mre /f1_100 f1_1 100 scf /f1_75 f1_1 75 scf /f1_67 f1_1 67 scf /f1_58 f1_1 58 scf /f1_38 f1_1 38 scf /f2_1/Symbol :bsr 240/apple pd :esr /f2_67 f2_1 67 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 736 254 :M f0_100 sf -.046(Timestamping \(2\))A np 1958 758 :M 1908 771 :L 1908 758 :L 1908 746 :L 1958 758 :L eofill 308 759 -1 1 1909 758 1 308 758 @a -1 -1 309 834 1 1 308 683 @b -1 -1 459 797 1 1 458 721 @b -1 -1 647 797 1 1 646 721 @b -1 -1 1134 797 1 1 1133 721 @b -1 -1 1584 797 1 1 1583 721 @b -1 -1 1772 797 1 1 1771 721 @b 442 683 :M f1_67 sf (1)S 629 683 :M (2)S 1754 683 :M (n)S 1539 683 :M -.148(n-1)A 1124 683 :M (i)S 207 1093 :M f1_75 sf -.011(\245 At any execution point, number the choice points on the )A 207 1172 :M -.022( stack from 1 to n.)A 207 1337 :M -.009(\245 Let ts )A f1_38 sf ( )S f1_75 sf -.01(be the timestamp corresponding to choice point i)A 207 1416 :M ( and top )S f1_38 sf ( )S f1_75 sf -.003(be the stack top at the creation time of choice point i.)A 472 1429 :M f1_58 sf (i)S 426 1348 :M (i)S 207 1581 :M f1_75 sf -.012(\245 The following invariants are maintained:)A 666 1721 :M (i)S 687 1721 :M f2_67 sf (<)S 724 1721 :M f1_75 sf -.085(j )A f2_67 sf -.29(\336)A f1_75 sf -.125( top )A 1019 1721 :M f2_67 sf (\243)S 1056 1721 :M f1_75 sf -.196( top)A 666 1817 :M (i)S 687 1817 :M f2_67 sf (<)S 724 1817 :M f1_75 sf -.084(j )A f2_67 sf -.284(\336)A f1_75 sf -.09( ts )A f2_67 sf (<)S 1010 1817 :M f1_75 sf -.378( ts)A 940 1828 :M f1_58 sf (i)S 983 1732 :M (i)S 1172 1733 :M (j)S 1082 1829 :M (j)S 207 1981 :M f1_75 sf -.011(\245 Trail condition when modifying constraint c:)A 207 2302 :M -.008(\245 Maintaining consistent values of the timestamps:)A 666 2452 :M -.014(1. Keep a global timestamp counter gts)A 668 2579 :M -.013(2. Store gts in choice points and constraints )A 668 2658 :M -.027( at their creation)A 666 2921 :M -.022(4. Never decrement gts)A 666 2131 :M -.074(if ts )A f1_38 sf ( )S 828 2131 :M f2_67 sf -.912(>)A f1_58 sf ( )S 879 2131 :M f1_75 sf -.011(ts then trail)A 782 2144 :M f1_58 sf (n)S 928 2145 :M (c)S 1980 771 :M f1_67 sf -.162(stack)A 218 900 :M -.169(bottom)A -1 -1 1847 834 1 1 1846 683 @b 1809 883 :M -.308(top)A 1894 883 :M 2 setlinecap 440 608 :M 440 583.324 555.486 571 786.5 571 :C 1017.49 571 1133 564.658 1133 552 :C 1133 539.325 1133 539.325 1133 552 :C 1133 564.658 1242.476 571 1461.5 571 :C 1680.479 571 1790 583.324 1790 608 :C stroke 1790 571 :M 0 setlinecap 956 508 :M -.03(choice points)A 856 683 :M f1_100 sf (...)S 1323 683 :M (...)S 668 2796 :M f1_75 sf -.018(3. Increment gts at choice point creation)A endp end % md %%EndDocument endTexFig 1029 3278 a Fa(26)p eop %%Page: 27 27 27 26 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/27.ps /md 133 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Roman :mre /f1_75 f1_1 75 scf /f2_1/Times-Bold :mre /f2_75 f2_1 75 scf /f3_1/Courier :mre /f3_67 f3_1 67 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 608 254 :M f0_100 sf -.025(The CLP\(FD\) language)A 301 658 :M f1_75 sf -.005(\245 CLP\(FD\) is a constraint logic language that incorporates)A 301 737 :M -.011( a finite-domain solver built using the \322glass-box\323 approach.)A 301 900 :M -.002(\245 \322Glass-box\323: provide primitive operations to allow efficient)A 301 979 :M -.007( implementation of constraint solvers in the user language.)A 301 1146 :M -.019(\245 CLP\(FD\) provides the single constraint )A 1548 1146 :M f2_75 sf -.057(X in R)A f1_75 sf -.056( where X is)A 301 1225 :M ( a finite-domain variable and R is a range. Various ranges)S 301 1304 :M ( are provided, e.g., L..H, min\(Y\), max\(Y\), dom\(Y\), val\(Y\).)S 301 1464 :M -.007(\245 The finite-domain constraint \322X=Y+C\323 can be )A 301 1543 :M -.033( implemented as follows:)A 714 1869 :M f3_67 sf -.014('X=Y+C'\(X,Y,C\) :-)A 714 1936 :M -.012( X in min\(Y\)+C..max\(Y\)+C,)A 714 2003 :M -.012( Y in min\(X\)-C..max\(X\)-C.)A 341 1706 :M f1_75 sf -.006(Partial lookahead scheme:)A 341 2175 :M -.013(Full lookahead scheme:)A 714 2338 :M f3_67 sf -.014('X=Y+C'\(X,Y,C\) :-)A 714 2405 :M -.025( X in dom\(Y\)+C,)A 714 2472 :M -.025( Y in dom\(X\)-C.)A endp end % md %%EndDocument endTexFig 1029 3278 a Fa(27)p eop %%Page: 28 28 28 27 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/28.ps /md 156 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /@a { np :M 0 rl :L 0 exch rl 0 rl :L fill }bd /@b { np :M 0 rl 0 exch rl :L 0 rl 0 exch rl fill }bd /arct where { pop }{ /arct { arcto pop pop pop pop }bd }ifelse /x1 Z /x2 Z /y1 Z /y2 Z /rad Z /@q { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct fill }bd /@s { /rad xs /y2 xs /x2 xs /y1 xs /x1 xs np x2 x1 add 2 div y1 :M x2 y1 x2 y2 rad arct x2 y2 x1 y2 rad arct x1 y2 x1 y1 rad arct x1 y1 x2 y1 rad arct :K stroke }bd /@i { np 0 360 arc fill }bd /@j { gS np :T scale 0 0 .5 0 360 arc fill gR }bd /@e { np 0 360 arc :K stroke }bd /@f { np $m currentmatrix pop :T scale 0 0 .5 0 360 arc :K $m setmatrix stroke }bd /@k { gS np :T 0 0 :M 0 0 5 2 roll arc fill gR }bd /@l { gS np :T 0 0 :M scale 0 0 .5 5 -2 roll arc fill gR }bd /@m { np arc stroke }bd /@n { np $m currentmatrix pop :T scale 0 0 .5 5 -2 roll arc $m setmatrix stroke }bd /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /:q/setdash ld /:r{ np :M :L stroke }bd /nodash[]def /qdenddash { nodash 0 setdash }bd /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 29.999 761.009]def/mT[.24 0 0 -.24 29.999 761.009]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Roman :mre /f1_75 f1_1 75 scf /f1_58 f1_1 58 scf /f1_50 f1_1 50 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 1)setjob gS 0 0 2300 3042 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 494 160 :M f0_100 sf (The CLP\(FD\) implementation)S 151 396 :M f1_75 sf -.013(\245 CLP\(FD\) is implemented by translation to C. The base engine)A 151 475 :M -.004( is a WAM, and the WAM instructions are C macros.)A 151 618 :M (\245 A new class of FD variables is added, with a new tag.)S 151 771 :M -.006(\245 Unification of FD variables and standard variables is defined)A 151 850 :M -.045( in the obvious way.)A 151 996 :M -.005(\245 Data structures and abstract instructions are added to support)A 151 1075 :M -.035( the range constraints.)A 1 G 263 1781 263 76 rF 0 G 263.5 1781.5 262 75 rS 1 G 263 1856 263 76 rF 0 G 263.5 1856.5 262 75 rS 1 G 263 1931 263 76 rF 0 G 263.5 1931.5 262 75 rS 1 G 1106 1781 264 76 rF 0 G 1106.5 1781.5 263 75 rS 1 G 1106 1856 264 76 rF 0 G 1106.5 1856.5 263 75 rS 1 G 1106 1931 264 76 rF 0 G 1106.5 1931.5 263 75 rS 1 G 1106 2006 264 76 rF 0 G 1106.5 2006.5 263 75 rS 1 G 1106 2081 264 76 rF 0 G 1106.5 2081.5 263 75 rS np 1106 1819 :M 1056 1831 :L 1056 1819 :L 1056 1806 :L 1106 1819 :L eofill 394 1820 -1 1 1057 1819 1 394 1819 @a np 694 1969 :M 644 1981 :L 644 1969 :L 644 1956 :L 694 1969 :L eofill 394 1970 -1 1 645 1969 1 394 1969 @a 1 G 263 2475 263 76 rF 0 G 263.5 2475.5 262 75 rS 1 G 263 2550 263 76 rF 0 G 263.5 2550.5 262 75 rS 1 G 263 2625 263 76 rF 0 G 263.5 2625.5 262 75 rS 1 G 694 2625 263 245 rF 0 G 694.5 2625.5 262 244 rS 1 G 1481 1781 151 76 rF 0 G 1481.5 1781.5 150 75 rS -1 -1 1557 1857 1 1 1556 1781 @b 1 G 1744 1781 151 76 rF 0 G 1744.5 1781.5 150 75 rS -1 -1 1820 1857 1 1 1819 1781 @b np 1481 1819 :M 1431 1831 :L 1431 1819 :L 1431 1806 :L 1481 1819 :L eofill 1238 1820 -1 1 1432 1819 1 1238 1819 @a np 1744 1819 :M 1694 1831 :L 1694 1819 :L 1694 1806 :L 1744 1819 :L eofill 1594 1820 -1 1 1695 1819 1 1594 1819 @a np 2006 1819 :M 1956 1831 :L 1956 1819 :L 1956 1806 :L 2006 1819 :L eofill 1856 1820 -1 1 1957 1819 1 1856 1819 @a np 1481 1894 :M 1431 1906 :L 1431 1894 :L 1431 1881 :L 1481 1894 :L eofill 1238 1895 -1 1 1432 1894 1 1238 1894 @a np 1481 1969 :M 1431 1981 :L 1431 1969 :L 1431 1956 :L 1481 1969 :L eofill 1238 1970 -1 1 1432 1969 1 1238 1969 @a np 1481 2044 :M 1431 2056 :L 1431 2044 :L 1431 2031 :L 1481 2044 :L eofill 1238 2045 -1 1 1432 2044 1 1238 2044 @a np 1481 2119 :M 1431 2131 :L 1431 2119 :L 1431 2106 :L 1481 2119 :L eofill 1238 2120 -1 1 1432 2119 1 1238 2119 @a 1 G 694 1931 263 245 rF 0 G 694.5 1931.5 262 244 rS 264 1769 :M f1_58 sf -.037(FD variable)A 281 1909 :M f1_50 sf -.118(Timestamp)A np 694 2663 :M 644 2675 :L 644 2663 :L 644 2650 :L 694 2663 :L eofill 394 2664 -1 1 645 2663 1 394 2663 @a 264 2463 :M f1_58 sf -.031(C-frame)A 1 G 1125 2475 264 76 rF 0 G 1125.5 2475.5 263 75 rS 1 G 1125 2700 264 76 rF 0 G 1125.5 2700.5 263 75 rS 1 G 1125 2775 264 76 rF 0 G 1125.5 2775.5 263 75 rS 1125.5 2475.5 263 375 rS 1107 1769 :M -.019(Constraints)A 1501 1919 :M -.131(Max only)A 1501 1994 :M -.071(Min and Max)A 1501 2069 :M (Dom)S 1501 2144 :M -.365(Val)A 1932 1900 :M -.041(Min only)A 1126 2463 :M -.062(A-frame)A 1407 2519 :M -.016(Environment of the clause)A 1407 2582 :M -.002(containing the FD variable)A np 1125 2513 :M 1075 2525 :L 1075 2513 :L 1075 2500 :L 1125 2513 :L eofill 394 2514 -1 1 1076 2513 1 394 2513 @a np 1575 1688 :M 1567 1739 :L 1555 1734 :L 1544 1729 :L 1575 1688 :L eofill -1 -1 1520 1820 1 1 1555 1734 @b np 1838 1688 :M 1829 1739 :L 1818 1734 :L 1806 1729 :L 1838 1688 :L eofill -1 -1 1782 1820 1 1 1818 1734 @b 1781 1819 :M 2 setlinecap 1556 1688 :M 1556 1668.641 1580.975 1659 1631 1659 :C 1680.975 1659 1706 1654.308 1706 1645 :C 1706 1635.641 1706 1635.641 1706 1645 :C 1706 1654.308 1730.972 1659 1781 1659 :C 1830.973 1659 1856 1668.641 1856 1688 :C stroke 1856 1659 :M 0 setlinecap 1613 1626 :M f1_50 sf (C-frames)S np 1500 2756 :M 1449 2765 :L 1450 2752 :L 1451 2740 :L 1500 2756 :L eofill 1256 2739 -1 1 1451 2752 1 1256 2738 @a np 1500 2831 :M 1449 2840 :L 1450 2827 :L 1451 2815 :L 1500 2831 :L eofill 1256 2814 -1 1 1451 2827 1 1256 2813 @a 1520 2781 :M f1_58 sf -.085(FD variables)A 1520 2856 :M -.061(Clause arguments)A 8 lw [8.333 20.833 ] 0 :q 1256 2663 1256 2588 :r [] 0 :q 1256 2588 :M 2 setlinecap 1 lw 394 2588 :M 556.658 2588 638 2544.13 638 2456.5 :C 638 2368.795 556.662 2281.301 394 2194 :C 231.326 2106.633 150 2022.304 150 1941 :C 150 1859.636 187.664 1819 263 1819 :C stroke 150 1819 :M 0 setlinecap np 263 1819 :M 215 1839 :L 213 1827 :L 211 1814 :L 263 1819 :L eofill [8.333 20.833 ] 0 :q 213 1827 224 1825 :r 734 2033 :M -.169(Domain)A 745 2096 :M -.033(\(value\))A 764 2763 :M -.143(Code)A 264 2756 :M -.043(Created for)A 264 2819 :M -.03(each constraint)A 151 1227 :M f1_75 sf (\245 Several non-trivial constraint optimizations are implemented.)S 151 1306 :M ( The system is significantly faster than CHIP.)S 1109 2215 :M f1_58 sf -.012(List of suspended constraints,)A 1109 2278 :M -.015(separated into 5 chains for speed)A 153 1454 :M f1_75 sf -.005(\245 The following data structures support the constraint solver:)A endp end % md %%EndDocument endTexFig 1029 3278 a Fa(28)p eop %%Page: 29 29 29 28 bop 0 154 a 33154007 42768667 0 0 40258437 52099153 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/31.ps /md 129 dict def md begin /currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if /bd{bind def}bind def /xdf{exch def}bd /xs{exch store}bd /ld{load def}bd /Z{0 def}bd /T/true /F/false /:L/lineto /lw/setlinewidth /:M/moveto /rl/rlineto /rm/rmoveto /:C/curveto /:T/translate /:K/closepath /:mf/makefont /gS/gsave /gR/grestore /np/newpath 14{ld}repeat /$m matrix def /av 81 def /por true def /normland false def /psb-nosave{}bd /pse-nosave{}bd /us Z /psb{/us save store}bd /pse{us restore}bd /level2 /languagelevel where { pop languagelevel 2 ge }{ false }ifelse def /featurecleanup { stopped cleartomark countdictstack exch sub dup 0 gt { {end}repeat }{ pop }ifelse }bd /noload Z /startnoload { {/noload save store}if }bd /endnoload { {noload restore}if }bd level2 startnoload /setjob { statusdict/jobname 3 -1 roll put }bd /setcopies { userdict/#copies 3 -1 roll put }bd level2 endnoload level2 not startnoload /setjob { 1 dict begin/JobName xdf currentdict end setuserparams }bd /setcopies { 1 dict begin/NumCopies xdf currentdict end setpagedevice }bd level2 not endnoload /pm Z /mT Z /sD Z /realshowpage Z /initializepage { /pm save store mT concat }bd /endp { pm restore showpage }def /$c/DeviceRGB def /rectclip where { pop/rC/rectclip ld }{ /rC { np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K clip np }bd }ifelse /rectfill where { pop/rF/rectfill ld }{ /rF { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl fill gR }bd }ifelse /rectstroke where { pop/rS/rectstroke ld }{ /rS { gS np 4 2 roll :M 1 index 0 rl 0 exch rl neg 0 rl :K stroke gR }bd }ifelse /G/setgray ld /:F/setrgbcolor ld /$t Z /$p Z /$s Z /$o 1. def /2state? false def /ps Z level2 startnoload /pushcolor/currentrgbcolor ld /popcolor/setrgbcolor ld /setcmykcolor where { pop/currentcmykcolor where { pop/pushcolor/currentcmykcolor ld /popcolor/setcmykcolor ld }if }if level2 endnoload level2 not startnoload /pushcolor { currentcolorspace $c eq { currentcolor currentcolorspace true }{ currentcmykcolor false }ifelse }bd /popcolor { { setcolorspace setcolor }{ setcmykcolor }ifelse }bd level2 not endnoload /pushstatic { ps 2state? $o $t $p $s }bd /popstatic { /$s xs /$p xs /$t xs /$o xs /2state? xs /ps xs }bd /pushgstate { save errordict/nocurrentpoint{pop 0 0}put currentpoint 3 -1 roll restore pushcolor currentlinewidth currentlinecap currentlinejoin currentdash exch aload length np clippath pathbbox $m currentmatrix aload pop }bd /popgstate { $m astore setmatrix 2 index sub exch 3 index sub exch rC array astore exch setdash setlinejoin setlinecap lw popcolor np :M }bd /bu { pushgstate gR pushgstate 2state? { gR pushgstate }if pushstatic pm restore mT concat }bd /bn { /pm save store popstatic popgstate gS popgstate 2state? { gS popgstate }if }bd /cpat{pop 64 div G 8{pop}repeat}bd /S/show ld /A{ 0.0 exch ashow }bd /R{ 0.0 exch 32 exch widthshow }bd /W{ 0.0 3 1 roll widthshow }bd /J{ 0.0 32 4 2 roll 0.0 exch awidthshow }bd /V{ 0.0 4 1 roll 0.0 exch awidthshow }bd /fcflg true def /fc{ fcflg{ vmstatus exch sub 50000 lt{ (%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store }if pop }if }bd /$f[1 0 0 -1 0 0]def /:ff{$f :mf}bd /MacEncoding StandardEncoding 256 array copy def MacEncoding 39/quotesingle put MacEncoding 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave /Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron MacEncoding 128 128 getinterval astore pop level2 startnoload /copyfontdict { findfont dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall }bd level2 endnoload level2 not startnoload /copyfontdict { findfont dup length dict copy begin }bd level2 not endnoload md/fontname known not{ /fontname/customfont def }if /Encoding Z /:mre { copyfontdict /Encoding MacEncoding def fontname currentdict end definefont :ff def }bd /:bsr { copyfontdict /Encoding Encoding 256 array copy def Encoding dup }bd /pd{put dup}bd /:esr { pop pop fontname currentdict end definefont :ff def }bd /scf { scalefont def }bd /scf-non { $m scale :mf setfont }bd /ps Z /fz{/ps xs}bd /sf/setfont ld /cF/currentfont ld /mbf { /makeblendedfont where { pop makeblendedfont /ABlend exch definefont }{ pop }ifelse def }def /currentpacking where {pop sc_oldpacking setpacking}if end % md md begin (So)setjob /pT[1 0 0 -1 28.079 810.927]def/mT[.24 0 0 -.24 28.079 810.927]def /sD 16 dict def 300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse /f0_1/Helvetica :mre /f0_100 f0_1 100 scf /f1_1/Times-Roman :mre /f1_75 f1_1 75 scf /Courier findfont[10 0 0 -10 0 0]:mf setfont initializepage (So; page: 1 of 2)setjob gS 0 0 2242 3254 rC 0 0 :M 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 430 291 :M f0_100 sf -.004(Conclusions and Further Work)A 249 553 :M f1_75 sf -.001(\245 The field of constraint logic language implementation)A 249 632 :M -.008( is relatively new. Much remains to be done.)A 236 815 :M (\245 Prolog is a constraint language over a simple domain.)S 236 894 :M -.012( Prolog implementation technology has progressed much)A 236 973 :M -.013( in the last decade, and implementation of other constraint)A 236 1052 :M ( domains can profit from this work.)S 249 1228 :M -.007(\245 Some fruitful areas for further work:)A 425 1547 :M -.013(\245 Design of a common intermediate form to be)A 425 1626 :M -.002( shared between researchers to avoid duplication )A 425 1705 :M -.062( of work.)A 425 1853 :M -.016(\245 Extension of the \322glass-box\323 approach to other)A 425 1932 :M -.042( constraint domains.)A 425 2325 :M -.009(\245 Development of global analysis for constraint)A 425 2404 :M -.08( systems.)A 425 1382 :M (\245 Development of constraint compilers.)S 425 2091 :M (\245 Better understanding of \322cooperation\323 between)S 425 2170 :M -.042( constraint solvers.)A endp initializepage (So; page: 2 of 2)setjob gS 0 0 2242 3254 rC endp end % md %%EndDocument endTexFig 1029 3278 a Fa(29)p eop %%Page: 30 30 30 29 bop 0 154 a 33154007 46747147 0 0 39205928 55388241 startTexFig 0 154 a %%BeginDocument: /home/ps-home/vanroy/public_html/32.ps /@olda4{}def /a4 where{pop /@olda4 /a4 load def}if /a4{@olda4 @a4size}def /@a4size{/hsize 21 2.54 div 72 mul def /vsize 29.7 2.54 div 72 mul def}def /@olda3{}def /a3 where{pop /@olda3 /a3 load def}if /a3{@olda3 @a3size}def /@a3size{/hsize 29.7 2.54 div 72 mul def /vsize 42 2.54 div 72 mul def}def /letter where{pop}{/letter{}def}ifelse /legal where{pop}{/legal{}def}ifelse /ledger where{pop}{/ledger{}def}ifelse /tabloid where{pop}{/tabloid{}def} ifelse /TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N /X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{ statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{ pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get} B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D }B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V {}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave transform round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail} B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{ 3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{ 3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2 index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def} ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict end definefont 3 -1 roll makefont /setfont load]cvx def}def /ObliqueSlant{dup sin S cos div neg}B /SlantFont{4 index mul add}def /ExtendFont{3 -1 roll mul exch}def /ReEncodeFont{/Encoding exch def}def end TeXDict begin 39158280 55380996 1000 300 300 (/udir/vanroy/SURVEY/biblio2.dvi) @start /Fa 139[20 11[35 20[35 2[43 3[39 1[31 23 5[47 10[35 6[35 35 48[{}11 70.833336 /Times-Italic rf /Fb 6[35 71[35 54[31 35 35 1[35 35 20 27 23 35 35 35 35 55 20 2[20 35 35 23 31 35 31 35 31 7[51 1[67 51 1[43 39 47 1[39 51 51 63 43 51 27 23 51 51 39 43 51 47 47 51 6[20 35 35 35 2[35 35 35 35 35 1[18 23 18 2[23 23 40[{}61 70.833336 /Times-Roman rf /Fc 134[52 4[29 1[35 1[58 58 2[23 2[23 58 58 4[58 58 16[69 80[{}12 104.166664 /Helvetica rf end TeXDict begin 1 0 bop 495 204 a Fc(P)l(ar)t(tial)28 b(bib)n(liog)o(r)o(aph)m(y)-71 436 y Fb(Daniel)16 b(Diaz)f(and)i(Philippe)f(Codognet.)25 b(A)16 b(Minimal)e(Extension)j(of)f(the)g(W)-8 b(AM)-71 528 y(for)27 b(clp\(FD\).)f(In)h Fa(10th)f(ICLP)p Fb(,)g(pages)h (774\261790,)i(Budapest,)g(Hungary)-5 b(,)29 b(MIT)-71 619 y(Press,)19 b(June)g(1993.)-71 785 y(Joxan)i(Jaf)n(f)o(ar)h(and)e (Michael)f(J.)g(Maher)l(.)31 b(Constraint)20 b(Logic)g(Programming:)30 b(A)-71 876 y(Surv)o(e)o(y)-5 b(.)27 b(In)19 b Fa(JLP)p Fb(,)f(T)-5 b(enth)18 b(Anni)n(v)o(ersary)j(Issue,)e(1994.)-71 1042 y(Niels)30 b(J\371r)o(gensen,)35 b(Kim)30 b(Marriott)g(and)h (Spiro)f(Michaylo)o(v)-5 b(.)63 b(Some)31 b(Global)-71 1134 y(Compile-T)n(ime)18 b(Optimizations)f(for)h(CLP\(R\).)h(In)f Fa(8th)f(ILPS)p Fb(,)h(pages)h(420\261434,)-71 1225 y(MIT)f(Press,)h (October)g(1991.)-71 1391 y(Peter)25 b(V)-8 b(an)25 b(Ro)o(y)-5 b(.)46 b(1983\2611993:)41 b(The)24 b(W)-6 b(onder)26 b(Y)-7 b(ears)26 b(of)f(Sequential)g(Prolog)-71 1482 y(Implementation.)h(In)19 b Fa(JLP)p Fb(,)f(T)-5 b(enth)18 b(Anni)n(v)o(ersary)j(Issue,)e(1994.)p eop end userdict /end-hook known{end-hook}if %%EndDocument endTexFig 1029 3278 a Fa(30)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF