Curry design

From: John Lloyd <jwl_at_cs.bris.ac.uk>
Date: Tue, 1 Jul 1997 16:06:05 +0100 (BST)

Michael Hanus and I have been having some discussions recently on the current
Curry design document and, in particular, have been comparing the way Curry
and Escher handle various things. While there has been a substantial
convergence of Curry and Escher on certain matters, there are still have some
fundamental differences.

In the hope of getting some more debate going on the Curry design,
I enclose at the end of this message the latest Escher paper which summarises
the main aspects of the language. It seems to me to be important when
designing Curry to have available for comparion some alternative ways of doing
things. I hope the Escher paper will serve this purpose at least.

To be more specific, I would like to raise the following issues.

1. A longstanding difference between Curry and Escher is that the operational
   semantics of Curry is based on narrowing (plus a little more to subsume
   what Escher does), while Escher is based on rewriting. I think there is
   agreement that the Escher model is simpler, but it's been argued that it
   is not sufficiently flexible for various reasons. My experience in
   writing a lot of Escher code is that it is flexible enough as it is. Since
   narrowing and rewriting are the two obvious computational models for a
      declarative language, perhaps some debate on this might somehow clarify
   which is best or at least what the trade-offs are.

2. Escher emphasises set processing partly because I think set processing
   facilities have been sadly neglected in language design (usually
   programmers are expected to do everything with lists even when they are
   not at all appropriate) and partly because I use sets to "encapsulate"
   logic programming computations. I would like to see set processing added
   to Curry. What do you think?

3. Curry will have concurrency. My preferred model for this is based on the
   concurrent Haskell proposal which uses monads (Peyton Jones, Gordon,
   Finne, POPL'96), except I've replaced their forkIO function by
   something more "symmetric". Unfortunately, the write-up of this isn't
   in the Escher paper, but one can see enough from the POPl paper to know
   what it would look like. Is this the way to do concurrency in Curry?
   If not, what should we do?

4. The Curry document introduces the type Constraint and the value Valid.
   I do not understand the need for these. Certainly, one can write
   constraint systems in the usual mathematical way and solve them without the
     
   need for such things and, logically, Constraint is just Bool. In my view,
   Constraint solving is primarily about building clever constraint solvers -
   it shouldn't have a significant effect on the look or facilities of the
   language. Is the current Curry proposal the best way to handle constraints
   or can we find a way to make constraint solving blend more seamlessly into
   the language?

I'm sure there are other important issues that could also be debated.

John Lloyd


*******************************************************************************

%!PS-Adobe-2.0
%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
%%Title: flp.dvi
%%Pages: 30
%%PageOrder: Ascend
%%BoundingBox: 0 0 596 842
%%DocumentPaperSizes: a4
%%EndComments
%DVIPSCommandLine: dvips flp.dvi
%DVIPSParameters: dpi=600, compressed, comments removed
%DVIPSSource: TeX output 1997.06.20:2155
%%BeginProcSet: texc.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 /hsize 8.5 72
mul N /landplus90{false}def /_at_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 round sub abs 0.00001 lt{round}if}
forall round exch round exch]setmatrix}N /_at_landscape{/isls true N}B
/_at_manualfeed{statusdict /manualfeed true put}B /_at_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 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
chg nd}{pop nd}]dup{bind pop}forall N /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 _at_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 userdict
/eop-hook known{eop-hook}if showpage}N /_at_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 newpath 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
TeXDict begin 39158280 55380996 1000 600 600 (flp.dvi)
_at_start /Fa 1 77 df<ED0F80ED7FC0913801FFE0020713F0EC0E0FEC1C07EC38031478
02F013E0010114C002E01300010390C7FC5C13075C130FA249C8FCA3133EA35BA313FC5B
A3485AA24914064848141C163C48B46C13784801F813F09138FFC0E048ECFFC0D8380F14
8048C6EBFE0000C0EB07F0272A7DA82E>76 D E /Fb 8 117 df<913803FFC0027F13F0
0103B512FC010FEB00FED93FF8133FD97FE0EBFF8049485A5A1480484A13C04A6C1380A3
6F1300167E93C7FCA592383FFFC0B8FCA4000390C7FCB3ABB5D8FC3F13FFA4303A7EB935
>12 D<141E143E14FE1307133FB5FCA313CFEA000FB3B3A6007FB61280A4213779B630>
49 D<B87E17F817FF18C028007FF8000713F09338007FF8EF1FFE717E050313807113C0
A27113E0F07FF0A2F03FF8A219FC181FA219FEA419FFAC19FEA419FC183FA219F8187F19
F0F0FFE0A24D13C04D13804D1300EF1FFEEF7FFC933807FFF0B912C095C7FC17FC178040
397DB849>68 D<903803FF80011F13F0017F13FC3901FF83FE3A03FE007F804848133F48
4814C0001FEC1FE05B003FEC0FF0A2485A16F8150712FFA290B6FCA301E0C8FCA4127FA3
6C7E1678121F6C6C14F86D14F000071403D801FFEB0FE06C9038C07FC06DB51200010F13
FC010113E025257DA42C>101 D<EA01F0EA07FC487EA2487EA56C5AA26C5AEA01F0C8FC
A913FF127FA412077EB3A9B512F8A4153B7DBA1B>105 D<01FEEB7FC000FF903803FFF8
020F13FE91381F03FFDA3C011380000713780003497E6D4814C05CA25CA291C7FCB3A3B5
D8FC3F13FFA430257DA435>110 D<903801FFC0010F13F8017F13FFD9FF807F3A03FE00
3FE048486D7E48486D7E48486D7EA2003F81491303007F81A300FF1680A9007F1600A300
3F5D6D1307001F5DA26C6C495A6C6C495A6C6C495A6C6C6CB45A6C6CB5C7FC011F13FC01
0113C029257DA430>I<130FA55BA45BA25B5BA25A1207001FEBFFE0B6FCA3000390C7FC
B21578A815F86CEB80F014816CEBC3E090383FFFC06D1380903803FE001D357EB425>
116 D E /Fc 7 116 df<003FB612F04815FE707EB812E06C82836C82C690C7EA1FFEEE
07FF1601701380177F18C0173FA2EF1FE0A7173F18C0177F188017FF4C13005E4C5AEE3F
FC923803FFF891B612E05F94C7FC17C017F0838391C7EA07FEEE01FF701380EF7FC0EF3F
E0171F18F0170FA3EF07F8A7170F18F0A2171F173F18E0177F933801FFC04C1380161F00
3F90B71200485E5FB85A6C16E017806C03FCC7FC35497DC83E>66
D<90380FFFC0017F13F848B512FE486E7E4815E04881823A1FFC007FFC49EB0FFE1507ED
01FFA26C486D7F6C48147FC97F163FA60203B5FC147F0103B6FC131F137F90B7FC0003EC
C03F48EBF800481380D81FFCC7FCEA3FF05B485A5B12FF90C8FCA56D147F127F6D14FF6C
6C130301F8010F7F6CB490B612F06C90B712F818FC6C15CF000115076CDAFC0113F8013F
9039F0007FF0010790C9FC363679B43E>97 D<EC1FF891B57E010314E0010F14F8498049
8090B7FC48D9F80F1380DAC00113C04890C7EA7FE04848143F4848EC1FF049140F484815
F81607485A49EC03FCA2485AA2EE01FE12FF90C8FC90B7FCA517FC17F890CAFCA26C7EA3
7F123F6D1578001F16FC6DEC01FE6C7E6D14036C6CEC07FC6D140F6C6DEB1FF86C01E013
7F6C9039FC03FFF06DB612E06D15C0010F15806DECFE00010114F8D9003F13E0020790C7
FC2F3679B43E>101 D<003FB57EB67E81A4123FC7121FB3B3B3A5003FB712F0B812FCA5
003F16F02E4978C83E>108 D<ED07FCD83FFF90383FFF80486DB512E002C380B500C780
6C01CF8002DF806C9038FFF80FD8003F9038C003FFED00014A7F4A815C177F5CA25CA35C
B3A8003FB5D8C03FB51280486EB612C0A2B66C15E06C4A15C0A26CDAC03F14803B347FB3
3E>110 D<EC1FF0ECFFFE01036D7E010F14E04980017F14FC90B67E489038F01FFFECC0
0748D90001138048486D13C04848EC7FE049143F4848EC1FF049140F003F16F8491407A2
4848EC03FCA448C8EA01FEAA6D1403007F16FCA26D1407A2003F16F86D140F6C6CEC1FF0
A26C6CEC3FE06D147F6C6CECFFC06D5B6CD9C00713806CD9F01F13006C90B55A6D5C6D5C
010F14E001031480010049C7FCEC1FF02F3679B43E>I<903901FFF00F011F9038FE1F80
90B612BF000315FF5A5A5A393FFE003F01F01307D87FC0130190C8FC5A48157FA47EEE3F
00D87FC091C7FC13F0EA3FFE381FFFF06CEBFFC06C14FE6C6E7EC615E0013F14F8010780
D9003F7F02007F03071380030013C0003EED3FE0007F151F48150F17F06D1407A37FA26D
140F6D15E0161F01FCEC3FC06D14FF9026FFC00F138091B612005E485D013F5C6D14E0D8
FC0714802778007FF8C7FC2C3677B43E>115 D E /Fd 34 118 df<B612F8A91D097F9A
25>45 D<EA0780EA1FE0EA3FF0EA7FF8EAFFFCA6EA7FF8EA3FF0EA1FE0EA07800E0E788D
1F>I<EC03C01407141F147FEB03FF133FB6FCA313C3EA0003B3B3AFB712FCA4264177C0
38>49 D<ECFFE0010F13FE013FEBFFC090B612F02603FE017F3A07F0007FFED80FC0EB1F
FF48486D138048C76C13C04816E001C07F01F06D13F012FF7F6F13F8A56C5A6C5A6C5AC9
FC4B13F0A34B13E017C05D17804B13005E4B5A4B5A5E4B5AEDFF804A90C7FC4A5AEC07F8
4A5A4A5AEC3F804AC71278147E5CD901F014F8494814F0495A495A49C8FC013C14014914
0390B7FC4816E05A5A5A5A5A5AB812C0A42D417BC038>I<ECFFF0010713FF011F14C0D9
7F8013F09039FC003FFCD803F06D7E48486D7EA2D80FF86D138013FE001F16C07FA66C5A
6C4815806C485BC81400A24B5A5E4B5A4B5A4B5A4A1380DA0FFEC7FC903807FFF85D15FF
90C713C0ED3FF0ED1FFC6FB4FC6F138017C08117E017F081A217F8A2EA0FC0EA3FF0487E
A2487EA317F05DA26C4815E04915C0495BD83F804913806C6C1500D80FF0EB3FFE6CB4EB
FFF8000190B55A6C6C14C0011F49C7FC010113E02D427BC038>I<161F5EA25E5E5DA25D
5D5D5DA25D5D92B5FCEC01F715E7EC03C7EC0787140FEC1F07141E143C147814F8EB01F0
14E0EB03C0EB0780130FEB1F00131E5B5B13F85B485A485A485A120F90C7FC121E5A127C
5AB91280A4C8000F90C7FCAC027FB61280A431417DC038>I<0007150301E0143F01FFEB
07FF91B55A5EA25E16E05E5E4BC7FC15F815E04AC8FC01C0C9FCAAEC3FF001C3B5FC01CF
14C09039DFE03FF09039FE000FFC01F86D7E496D7E491580496D13C06C5AC814E08117F0
A317F8A31206EA1FC0EA7FE07F12FF7FA317F05B5D6C4815E01380007CC714C06C5C6C16
806D4913006C6C495AD807F0EB3FFCD803FEEBFFF0C6B65A013F1480010F01FCC7FC0101
13C02D427BC038>I<4AB47E021F13F0027F13FC903901FF807F903A07FC001F80494813
0FD93FE0EB1FC04948137F01FFECFFE048495A481300A2485A120FA248486D13C0EE7F80
EE1E00003F92C7FCA25B127FA3EC1FFE00FF90387FFFC091B512F09039F9E00FF89039FB
C007FC9039FF8003FF4A7E17804915C06F13E05B17F0A317F85BA4127FA5123FA317F06C
7EA2000F16E05D6C6C15C017806C6C4913006C6D5A6C9038C00FFC90397FF03FF8011FB5
5A010714C0010191C7FC9038003FF82D427BC038>I<DCFFF81470031F01FF14F04AB6EA
E0010207EDF803023F9039E003FE07DAFFFEC7EA7F0F4901F0EC1FDF010701C0EC07FF49
49804948C87E4948814948167F4948163F4849161F5A4849160FA248491607A24890CA12
03A25A5B1901127FA296C7FC5B12FFAE127F7FA21AF0123FA27F7E19016C6D17E0A26C6D
16031AC06C6D16076C19806C6D160F6D6CEE1F006D6C163E6D6C5E6D6C6C5D6D6DEC03F0
010101F04A5A6D01FEEC3FC091283FFFE001FFC7FC020790B512FC020115F0DA001F1480
030001F8C8FC44467AC451>67 D<B9FC18F018FE727E26003FFEC7001F13E0050113F871
6C7EF01FFF06077F727F727F727F197F86737EA2737EA2737EA21B80A2851BC0A51BE0AD
1BC0A51B8061A21B00A24F5AA24F5A62197F4F5A4E5B4E5B4E5B061F90C7FC4E5A943801
FFF8051F5BBA12C04EC8FC18F095C9FC4B447CC356>I<BA1280A426003FFEC7001F13C0
1701EF007F183F181F180F1807A2F003E0A31801A4F000F0EE01E0A31900A31603A31607
160F167F91B6FCA49138FE007F160F16071603A31601A693C9FCB0B712F0A43C447CC346
>70 D<B7D88003B612FEA426003FFEC9EBF800B3A991B9FCA44AC9FCB3ABB7D88003B612
FEA44F447CC358>72 D<B712F0A426003FFECAFCB3B3F00780A4180F1900A460A360A218
7EA218FE170117031707171F177FEE03FFB95AA439447CC343>76
D<923807FFC092B512FE0207ECFFC091261FFE0013F0DA7FF0EB1FFC902601FFC0EB07FF
010790C7000113C049486E7F49486F7E49486F7E49486F7E49486F7E48496F7E4819804A
814819C091C97E4819E0A248487013F0A2003F19F8A3007F19FC49177FA400FF19FEAD00
7F19FC6D17FFA3003F19F8A36C6C4C13F0A36C6D4B13E0A26C6D4B13C06C19806E5D6C19
006C6D4B5A6D6C4B5A6D6C4B5A6D6C4B5A6D6C4A5B6D01C001075B010101F0011F90C7FC
6D01FEEBFFFE023FB612F8020715C002004AC8FC030713C047467AC454>79
D<B9FC18F018FE727ED8001F90C7001F13E005017F716C7E727E727E85721380A27213C0
A31AE0A81AC0A34E1380A24E1300614E5AF0FFF84D5B051F13C092B7C7FC18FC18C092CB
FCB3A9B712E0A443447DC34D>I<923807FFC092B512FE0207ECFFC091261FFE0013F0DA
7FF0EB1FFC902601FFC0EB07FF010790C7000113C049486E7F49486F7E49486F7E49486F
7E49486F7E488448496F1380A248496F13C0A24890C96C13E0A24819F04982003F19F8A3
007F19FCA249177FA300FF19FEAD007F19FCA36D17FF003F19F8A3001F19F06D5EA26C19
E06E5D6C03FE15C06C912603FF8014806E486D5A6C9028E00F83E00F13006C91261E00F0
5B6D6C489038781FFC90263FF8386D485AD91FFC6E485AD90FFE91381FFFE0D907FF5E01
0101FC6D90C7FC6D6D495A913A3FFF80FFF8020790B500E01302020017070307EBC7F092
C7EA07F8716C130F72131F9538FF80FF96B5FC7114FEA3831AFCA27213F81AF0847213E0
7213C0721300F001FC48587AC454>I<DAFFE0131C010701FE133C013F9038FF807C90B6
EAE0FC489038801FF93A03FC0003FF4848EB007F4848143F4848141F4848140F1607007F
1503491401A2160012FF177CA27F173C7F7F7F6D92C7FC6CB4FC14E014FE6CEBFFF015FF
6C15E016FC6C816C6F7E6C826C826C6C81011F810107811300020F80140003077FED007F
82040F138082A200F08182A3827EA218007EA26C5D5F7E6D4A5A13E06D4A5A01FC4A5AD9
FF80EB3FE026FE7FF8EBFFC0D8FC1FB6C7FCD8F80714FC48C614F0480107138031467AC4
3E>83 D<903807FFF0017F13FF48B612C03A03FC007FF0486CEB1FF8486CEB0FFE6F7EA2
6F7FA26F7F6C5A6C5AEA00F090C7FCA44AB5FC147F0107B6FC013F13C19038FFF8010003
13E0481380381FFE00485A5B127F5B12FF5BA35DA26D5B6C6C5B003F141ED81FFE4913F8
3C0FFF80F87FFFC00003EBFFF0C6ECC01F90390FFE0007322C7DAB36>97
D<EB7FC0B5FCA412037EB3ED1FF802C1B5FC02C714E09139DFC03FF89139FF000FFC02FC
EB03FE4A6D7E4A15804A6D13C04A15E0177F18F0A2EF3FF8A318FCAB18F8A3177F18F0A2
18E017FF6E15C06E4913806E491300027C495A496C495A903AFC1FC07FF0D9F807B512C0
D9F00191C7FC9039E0003FF036457DC43E>I<EC3FFF0103B512F0010F14FC90393FF001
FE9039FFC003FF4849481380481300485A485A121F5B003F6E13006F5A007FEC00784991
C7FCA312FFAA127FA27FA2123FEE03C06C7E16076C6C15806C6C140F6C6DEB1F006C6D13
3E6C6D13FC90393FF807F8010FB512E0010314809026003FF8C7FC2A2C7CAB32>I<EE03
FEED07FFA4ED001F160FB3EC3FF0903803FFFE010FEBFF8F90393FF807EF9039FFC001FF
48903880007F4890C7123F4848141F4848140F121F5B123FA2127F5BA312FFAB127FA36C
7EA2121F7F000F151F6C6C143F0003157F6C6C14FF6CD9C0037F90277FF01FCF13FC011F
B5120F010313FC9038007FE036457CC43E>I<EC3FFC0103B57E011F14E090393FF81FF8
9039FFC007FC48496C7E48496C7E48486D13804848147F17C0485A003FED3FE0A2127F49
15F0A2161F12FFA290B7FCA301F0C9FCA5127FA36C7EA217F06C7E000F15016C6C15E016
036C6CEC07C0C66DEB1F80D97FE0EB7F0090393FFC03FE010FB512F8010114E09026001F
FEC7FC2C2C7DAB33>I<177E9139FFE003FF010FD9FE071380013F9039FF9F9FC0903AFF
C07FFE3F489038001FF84848130F4848EB07FC000F9238FE1F80001F9238FF0F00496D90
C7FCA2003F82A7001F93C7FCA26D5B000F5D00075D6C6C495A6C6C495A489038C07FE091
B51280D8078F49C8FC018013E0000F90CAFCA47F7F7F90B612C016FE6C6F7E17E06C826C
16FC7E000382000F82D81FF0C7123FD83FC014074848020113808248C9FC177FA46D15FF
007F17006C6C4A5A6D1403D81FF8EC0FFCD807FEEC3FF03B01FFC001FFC06C6CB6C7FC01
0F14F80100148032417DAC38>103 D<EB7FC0B5FCA412037EB3ED07FE92383FFFC092B5
12F09139C3F03FF89139C7C01FFC9138CF000F02DE8014FC4A6D7EA25C5CA35CB3A8B600
83B512FEA437457CC43E>I<13FC487E487E4813804813C0A66C13806C13006C5A6C5A90
C7FCACEB7FC0EA7FFFA412037EB3B0B6FCA418467CC520>I<EB7FC0B5FCA412037EB3B3
B3A5B61280A419457CC420>108 D<90277F8007FFEC0FFEB5013F01C090387FFF8092B5
D8F001B512E0913D81F81FFC03F03FF8913D87C00FFE0F801FFC000390268F000790381E
000F6C019E6E488002BC5D02B86D496D7E14F84A5DA24A5DA24A5DB3A8B60081B60003B5
12FEA4572C7CAB5E>I<90397F8007FEB590383FFFC092B512F0913983F03FF8913987C0
1FFC000390388F000F6C019E8014BC02B86D7E14F85C5CA35CB3A8B60083B512FEA4372C
7CAB3E>I<EC1FFC49B512C0010F14F890393FF80FFE90397FC001FF4848C7EA7FC04848
6E7E48486E7E000F8249140F001F82A2003F82491407007F82A300FF1780AA007F1700A4
6C6C4A5AA2001F5E6C6C4A5AA26C6C4A5A6C6C4A5A6C6D495A6C6D485B90273FF80FFEC7
FC010FB512F8010114C09026001FFCC8FC312C7DAB38>I<90397FC01FF8B500C1B5FC02
C714E09139DFC03FF89139FF001FFC000301FCEB07FE6C496D7E4A15804A6D13C04A15E0
8218F0177F18F8A3EF3FFCAB18F8177FA318F017FF18E05E6E15C06E4913806E4913006E
495A6E495A9139DFC07FF002C7B512C002C191C7FC9138C03FF092C9FCAFB67EA4363F7D
AB3E>I<90387F807FB53881FFE0028313F091388F87F891389F0FFC000390389E1FFE6C
13BC14B814F814F0A29138E00FFCED07F8ED01E092C7FCA25CB3A6B612E0A4272C7DAB2E
>114 D<90391FFE038090B512CF000314FF380FF003391FC0007F48C7123F48141F007E
140FA200FE1407A27E7F6D90C7FC13F0EBFF806C13FCECFF806C14E015F86C14FE6C8012
03C61580013F14C01301D9000F13E0140000F0147F153F6C141FA2150F7E16C07E6C141F
168001C0133F6DEB7F009038F801FC00FCB55AD8F03F13E026E007FEC7FC232C7CAB2C>
I<EB01E0A51303A41307A2130FA2131FA2133F137F13FF1203000F90B51280B7FCA3C601
E0C7FCB3A4ED01E0A91503D97FF013C0A2013FEB0780ECF80F90391FFC1F00903807FFFE
010113F89038003FE0233F7EBE2C>I<D97FC049B4FCB50103B5FCA40003EC000F6C81B3
A85EA25EA26C5DA26E5B017FD901F7138090273FF807E713FE010FB512870103EBFE0790
38007FF8372C7CAB3E>I E /Fe 17 104 df<007FB81280B912C0A26C17803204799641>
0 D<0060150600F0150F6C151F007C153E6C157C6C15F86C6CEB01F06C6CEB03E06C6CEB
07C06C6CEB0F806C6CEB1F00017C133E6D5B6D5B90380F81F0903807C3E0903803E7C06D
B45A6D90C7FC147EA214FF497F903803E7C0903807C3E090380F81F049C67E013E137C49
7F497F4848EB0F804848EB07C04848EB03E04848EB01F048C812F8003E157C48153E4815
1F48150F00601506282874A841>2 D<EB1FF0EB7FFC48B5FC4814804814C04814E04814
F04814F8A24814FCA3B612FEA86C14FCA36C14F8A26C14F06C14E06C14C06C14806C1400
38007FFCEB1FF01F207BA42A>15 D<181EA4181F84A285180785727EA2727E727E85197E
85F11F80F10FC0F107F0007FBA12FCBCFCA26C19FCCCEA07F0F10FC0F11F80F13F00197E
61614E5A4E5AA24E5A61180F96C7FCA260181EA4482C7BAA53>33
D<010314C0496C487EB3B3A60040160200F0160F00FC163F00FF16FFD83F87ECE1FCD80F
C7ECE3F0D807F7ECEFE0D801FFECFF806C1600013F14FC011F5C010F5C6D6C485A6D6C48
5A01015CECF00F6D6C48C7FCEC781E6E5AEC3E7CEC1E78EC1FF86E5AA26E5AA26E5AA36E
5AA2304A7FB933>43 D<91381FFFFE91B6FC13074914FED93FF0C7FCEB7F8001FCC8FC48
5AEA03E0485A485A90C9FC5A121E123E123C127C1278A212F85AA3B712FE16FFA216FE00
F0C9FCA37E1278A2127C123C123E121E121F7E7F6C7E6C7EEA01F86C7EEB7F80EB3FF001
0FB512FE6D14FF1300021F13FE283279AD37>50 D<0060161800F0163CA26C167C007816
78A2007C16F8003C16F0003E1501001E16E0A2001F15036C16C0A26D1407000716806D14
0F00031600A26D5C6CB612FEA36C5D01F8C7127C01781478A2017C14F8013C5CA2013E13
01011E5C011F13036D5CA2EC800701075CA2ECC00F010391C7FC6E5A0101131EA2ECF03E
0100133CA2ECF87CEC7878EC7CF8EC3CF0A2143F6E5AA36E5AA26E5AA26EC8FC2E3C80B9
2F>56 D<007FB612F0B712F8A27EC91278B3A5003FB612F85AA27EC91278B3A5007FB612
F8B7FCA26C15F0253A7CB92E>I<007FB712F8B812FCA27ECA123CB217182E177C9D37>I<
ED03FE92381FFF80037F13C04AB5FCEC07C091381E003F0238131F5C49481480495A495A
49C71300495C013E143E133C017C5C5B495C12010003EC01E0491480000791C8FC5BA212
0F5B121FA290CAFC5AA35A127EA412FEA87E160C163C6D14F8127F6D495A5E6C6C495A6D
495A6C6C010EC7FC01FE5B390FFF80F86CEBFFE06C1480C649C8FCEB3FF02A3D7FBA2C>
67 D<0203B512F0027F14FF49B712E0010716F890271FC3F00713FED978039038007FFF
01E0030F13802603C007020313C0D80780030013E0D80F00167F48EF3FF0003E4AEC1FF8
180F5A0070EF07FC00C0010F1503C7FC5D1801A3141F5DA219F8A24AC8FCA2F003F0A214
7E19E0180719C05CF00F8019004A5D0101163E183C4A5D01035E4D5A4A4A5A01074B5A05
0EC7FC4A143C010F15704A495AEE0780011F023EC8FC91380001F849EB3FE091B5128090
B500FCC9FC000314E04801FCCAFC3E397FB840>I<EE01F8EE0FFCEE3FFE93B5FC1503DB
0F031380ED1E014B7E157C4B137F4A5A020315004B137E0207147C4A48137017C04A4890
C7FCA24AC9FCA25C147E14FEA25C1301A25C1303A3495AA4495AA4495AA35C133F91CAFC
A2137E18204916E017034848ED0FC0D9F7F0141F48B56C148003F014004802FE133E4891
38FFE03C0107ECFFF8261E003F14E048010714800070010049C7FC00C0EC0FF0333D7EBA
39>76 D<EE3FF0923803FFFE030FEBFF80033F14C0DBFC0713E0913801C000DA0780EB3F
F04AC7121F021E140F143E027EEC07E0147C14FC1880EF0E00010192C7FCA280A280816D
7F81EC7FF86E7E6EB4FC6E13C0020313F06E13FC6E6C7E92381FFF8003077F03017F6F7F
EE3FF8161F160F01706E7E48481403EA07C048C8FC481501123E5F127E5F12FE4C5A7E4C
5A6D5D6D4AC7FC6C6C141E6D1438D83FFC5C6CB4EB03E06C9038E03F806CD9FFFEC8FC00
0114F86C6C13C0D90FFCC9FC343D7FBA32>83 D<14034A7EA24A7EA24A7EA24A7E143CEC
7CF8EC7878A2ECF87CECF03C0101133EECE01E0103131F4A7EA2010780EC8007010F80EC
00034980011E1301013E80013C1300A2017C800178147801F8147C49143C0001153E4914
1EA20003151F498000071680491407000F16C090C812034816E0001E1501A2003E16F000
3C1500007C16F80078167800F8167C48163CA2006016182E347CB137>94
D<0060161800F0163CA26C167C00781678007C16F8003C16F0003E1501001E16E0A2001F
15036C16C06D1407000716806D140F000316006D5C0001151EA26D143E0000153C6D147C
01781478017C14F8013C5CA2013E1301011E5C011F13036D5CEC800701075CECC00F0103
91C7FCA26E5A0101131EECF03E0100133CECF87CEC7878A2EC7CF8EC3CF0143F6E5AA26E
5AA26E5AA26EC8FC2E347CB137>I<EC01F8140FEC3F80ECFC00495A495A495AA2130F5C
B3A7131F5C133F49C7FC13FEEA03F8EA7FE048C8FCEA7FE0EA03F8EA00FE137F6D7E131F
80130FB3A7801307A26D7E6D7E6D7EEC3F80EC0FF814011D537ABD2A>102
D<12FCEAFFC0EA07F0EA01FCEA007E7F80131F80130FB3A7801307806D7E6D7EEB007EEC
1FF0EC07F8EC1FF0EC7E00495A495A495A5C130F5CB3A7131F5C133F91C7FC137E485AEA
07F0EAFFC000FCC8FC1D537ABD2A>I E /Ff 3 111 df<EB0FE0EB7FFCD9F83E13602603
C01F13C03907800F80390F0007C0001EECC180123E003CECE300007C130315E65A15EC15
F8A25D485CA300781307141D6C903879F0C03A1E03E0F180390FFF807F3A03FC003E0023
197C982B>11 D<130E131F5BA2133E131C90C7FCA8EA03E0EA0FF0EA1C78EA387C123012
605B12C0A2EA01F0A3485AA2485AA2EBC180EA0F81EB8300EA1F031306120F131CEA07F8
EA03E011277DA617>105 D<3907801FC0391FE07FF03939F0E0F83930FB807C3860FF00
5B5BEAC1F85B1201A248485BA34A5AEA07C01660EC03E016C0390F8007C0EDC1801403ED
C70090380001FE000EEB00F823197D9829>110 D E /Fg 3 62 df<140EB3A2B812E0A3
C7000EC8FCB3A22B2B7DA333>43 D<13381378EA01F8121F12FE12E01200B3AB487EB512
F8A215267BA521>49 D<B812E0A3CBFCABB812E0A32B117D9633>61
D E /Fh 24 121 df<EC3FC0ECFFF8903807E07C90380F801FD93F00EB800C017E130F49
903807C01C4848ECE018485A484801031338000FEDF0305B001F16704848156017E0007F
16C090C713F1178016F34816004815F716FE5EA2485D5EA4007E1407150F003E91381DF8
18003F14796C02E11338270F8007C013303B07E03F007CF02601FFF8EB3FC026003FC0EB
0F802E267DA435>11 D<ED01FC923807FF8092381E07C092387801E003E013F0913901C0
00F84A5A4AC7FC020E14FC5C5C143002701301026014F814E05C010114034A14F0130391
C7EA07E017C049140F0106EC1F809238FFBF00D90E0113FC90390C0381F8EDFFFE020013
1F011C010013800118140F17C0A213380130EC07E0A2160F13701360A301E0141F4915C0
A30001153F1780A2EE7F00120316FE5E6D495AD80760495AD80670495A6D495A6D495AD8
0E0E49C7FC390C0780FC903801FFF09038007F80001C90C9FC1218A312381230A3127012
60A312E05AA22E4B7EBA2F>I<133F14C0EB07F06D7E801301A26D7EA3147FA36E7EA36E
7EA36E7EA36E7EA36E7EA36E7EA26E7EA214014A7E5C4A7E91381E3F80143C14784A6C7E
1301EB03E049486C7EEB0F80EB1F00496D7E137E5B48486D7E485A485A000F6E7E485A48
5A48C87E12FE167F4816800070151F293B7CB930>21 D<027FB512C00103B612E0130F5B
017F15C09026FF81FEC7FC3901FC007E48487F485A497F484880485AA248C7FCA2127EA2
153F00FE92C7FC5AA25D157E5A5DA24A5AA24A5A007C495A5D003C495A003E013FC8FC6C
137C380F81F83803FFE0C66CC9FC2B257DA32F>27 D<013FB512FE90B7FC5A5A4815FE26
0F801CC7FCEA1E005A00385B5A5A481378C7FC147014F0A4495AA31303A3495AA3130FA2
5C131FA3133FA291C8FC131E28257EA324>I<121C127FEAFF80A5EA7F00121C09097988
17>58 D<121C127FEAFF80A213C0A3127F121C1200A412011380A2120313005A1206120E
5A5A5A12600A19798817>I<EF0380EF0FC0173FEFFF80933803FE00EE0FF8EE3FE0EEFF
80DB03FEC7FCED0FF8ED3FE0EDFF80DA03FEC8FCEC0FF8EC3FE0ECFF80D903FEC9FCEB0F
F8EB3FE0EBFF80D803FECAFCEA0FF8EA3FE0EA7F8000FECBFCA2EA7F80EA3FE0EA0FF8EA
03FEC66C7EEB3FE0EB0FF8EB03FE903800FF80EC3FE0EC0FF8EC03FE913800FF80ED3FE0
ED0FF8ED03FE923800FF80EE3FE0EE0FF8EE03FE933800FF80EF3FC0170FEF0380323279
AD41>I<126012FCB4FCEA7FC0EA1FF0EA07FCEA01FF38007FC0EB1FF0EB07FCEB01FF90
38007FC0EC1FF0EC07FCEC01FF9138007FC0ED1FF0ED07FCED01FF9238007FC0EE1FF0EE
07FCEE01FF9338007F80EF1FC0A2EF7F80933801FF00EE07FCEE1FF0EE7FC04B48C7FCED
07FCED1FF0ED7FC04A48C8FCEC07FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB7FC04848
CAFCEA07FCEA3FF0EA7FC048CBFC12FC1270323279AD41>62 D<0103B812E05BA2902600
07F8C7123F4B140FF003C0140F18015DA2141FA25D1980143FA25D1760027F14E095C7FC
92C75AA24A1301A24A495A16070101141F91B6FC94C8FCA2903903FC001F824A130EA213
07A24A130CA2010F141CA24A90C9FCA2131FA25CA2133FA25CA2137FA291CBFC497EB612
C0A33B397DB835>70 D<92391FE00380DBFFFC130002036D5A91390FE01F8F91393F0007
DF027EEB01FE02F81300495A4948147E177C4948143C495AA2011F153891C8FCA3491530
A28094C7FC80806D7E14FEECFFE06D13FE6DEBFFC06D14F06D806D80021F7F02037FEC00
3F03037F1500167F163F161FA3120C160FA2001C151F94C7FCA3003C153EA25E003E5D12
7E007F4A5A6D495A6DEB0FC0D8F9F0495AD8F0FE01FEC8FC39E03FFFF8010F13E0D8C001
90C9FC313D7CBA33>83 D<147E903803FF8090390FC1C38090391F00EFC0017E137F4913
3F485A4848EB1F8012075B000F143F48481400A2485A5D007F147E90C7FCA215FE485C5A
A214015D48150CA21403EDF01C16181407007C1538007E010F1330003E131F027B13706C
01E113E03A0F83C0F9C03A03FF007F80D800FCEB1F0026267DA42C>97
D<133FEA1FFFA3C67E137EA313FE5BA312015BA312035BA31207EBE0FCEBE3FF9038E707
C0390FFE03E09038F801F001F013F8EBE000485A15FC5BA2123F90C7FCA214015A127EA2
140312FE4814F8A2140715F05AEC0FE0A215C0EC1F80143F00781400007C137E5C383C01
F86C485A380F07C06CB4C7FCEA01FC1E3B7CB924>I<EC3FC0903801FFF0903807E07890
381F801C90387E001E49130E485A485A1207485A49131E001F141C153C484813F8EC03E0
007FEB3FC09038FFFE0014E090C8FC5A5AA7007E140315071506003E140E153C6C14706C
6C13E0EC07C03903E03F003801FFF838003FC020267DA427>101
D<16F8ED03FEED0F8792381F0F80ED3E3F167F157CA215FC1700161C4A48C7FCA414035D
A414075DA20107B512F0A39026000FE0C7FC5DA4141F5DA4143F92C8FCA45C147EA514FE
5CA413015CA4495AA45C1307A25C121E123F387F8F80A200FF90C9FC131E12FEEA7C3CEA
7878EA1FF0EA07C0294C7CBA29>I<EB03F0EA01FFA3EA00075CA3130F5CA3131F5CA313
3F91C9FCA35B90387E03F8EC0FFF91383C0F809039FEF007C0D9FDC07FEBFF80EC000348
5A5BA249130712035BA2150F00075D5BA2151F000F5D5B153F93C7FC121F4990387F0180
157EEDFE03003F02FC130090C7FC5EEDF80648150E007E150C161C5E00FEEC787048EC3F
E00038EC0F80293B7CB930>104 D<14E0EB03F8A21307A314F0EB01C090C7FCAB13F8EA
03FEEA070F000E1380121C121812381230EA701F1260133F00E0130012C05BEA007EA213
FE5B1201A25B12035BA20007131813E01438000F133013C01470EB806014E014C01381EB
838038078700EA03FEEA00F815397EB71D>I<EB0FC0EA03FF5AA2EA001F1480A2133FA2
1400A25BA2137EA213FEA25BA21201A25BA21203A25BA21207A25BA2120FA25BA2121FA2
5BA2123FA290C7FCA25AA2EA7E03A2EAFE07130612FCA2130E130C131C1318EA7C38EA3C
70EA1FE0EA0780123B7DB919>108 D<D803E0137F3A07F801FFE03A0E3C0781F03A1C3E
1E00F826383F387F00305B4A137C00705B00605BA200E090C712FC485A137EA200001401
01FE5C5BA2150300015D5B15075E120349010F133016C0031F13700007ED80605B17E0EE
00C0000F15014915801603EE0700001FEC0F0E49EB07FC0007C7EA01F02C267EA432>
110 D<EC1FC0ECFFF8903807E07E90380F801F90393F000F80017E14C0491307484814E0
485A4848EB03F0120F5B121F48481307A2127F90C7FCA2150F5A4815E0A2151F16C0A248
EC3F8016005D157E007E5C4A5A003E495A003F495A6C495A6C6C48C7FC3807E07E3801FF
F038003F8024267DA428>I<3903E001F83907F807FE390E3C1E07391C3E381F3A183F70
3F800038EBE07F0030EBC0FF00705B00601500EC007E153CD8E07F90C7FCEAC07EA21200
13FE5BA312015BA312035BA312075BA3120F5BA3121F5B0007C9FC21267EA425>114
D<14FF010313C090380F80F090383E00380178131C153C4913FC0001130113E0A33903F0
00F06D13007F3801FFE014FC14FF6C14806D13C0011F13E013039038003FF01407140300
1E1301127FA24814E0A348EB03C012F800E0EB07800070EB0F006C133E001E13F83807FF
E0000190C7FC1E267CA427>I<EB01C0497E1307A4130F5CA3131F5CA3133F91C7FC007F
B51280A2B6FCD8007EC7FCA313FE5BA312015BA312035BA312075BA3120FEBC006A2140E
001F130CEB801C141814385C146014E0380F81C038078780D803FEC7FCEA00F819357EB3
1E>I<903907E001F090391FF807FC9039783E0E0F9039E01F1C1FD801C09038383F803A
03800FF07F0100EBE0FF5A000E4A1300000C157E021F133C001C4AC7FC1218A2C7123FA2
92C8FCA25CA2147EA214FEA24A130CA20101141C001E1518003F5BD87F81143801835C00
FF1560010714E03AFE0E7C01C0D87C1C495A2778383E0FC7FC391FF00FFC3907C003F029
267EA42F>120 D E /Fi 82 127 df<003C131E007F137F481480A66C1400A6007E7FA6
003E133EA3003C131E001C131C191977B32C>34 D<EB0FC0EB3FE0497E497E80EA01F8EB
F07C147E0003133E13E0A5147E147C9138FC3FF89039F0F87FFCEA01F1EBF3F001F7EB3F
F89138E01F009038FFC03F6CEB803EA2EC007E49137C485A486C13FC00075CEBFF01D80F
DF5B381F9F81383F8F8390380FC3E0387E07E75D38FC03F7EB01FF5D6D1410ED007C80A2
6CEBFF80D87E0113C0D87F03EBE0FC3A3F87F7F1F89038FFE3FF6C01C113F06C13806C90
38007FC0D801FCEB1F8026357EB32C>38 D<143814FC13011303EB07F8EB0FF0EB1FC0EB
3F80EB7F0013FE485A485A5B12075B120F5B485AA2123F90C7FCA25A127EA312FE5AAC7E
127EA3127F7EA27F121FA26C7E7F12077F12037F6C7E6C7E137FEB3F80EB1FC0EB0FF0EB
07F8EB03FC130113001438164272B92C>40 D<127012FC7E7E6C7E6C7EEA0FE06C7E6C7E
6C7E6C7E137F7F1480131F14C0130FEB07E0A214F01303A214F81301A314FC1300AC1301
14F8A3130314F0A2130714E0A2EB0FC0131F1480133F14005B13FE485A485A485A485AEA
3FC0485A48C7FC5A5A1270164279B92C>I<EB0380497EA60020140800F8143E00FE14FE
00FF13C1EBC7C7EBE7CF003FB512F8000F14E0000314806C140038007FFCA248B5FC4814
80000F14E0003F14F839FFE7CFFEEBC7C7EB07C100FE13C000F8143E0020140800001400
A66D5A1F247AAA2C>I<147814FCAF007FB612F0B712F8A46C15F0C700FCC7FCAF147825
267DAB2C>I<EA0F80EA1FE0EA3FF0EA7FF8A213FCA3123F121F120F120013F8A21201EA
03F01207EA1FE0EA7FC0EAFF80130012FC12700E17718A2C>I<007FB6FCB71280A46C15
0021067B9B2C>I<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B0B708A2C>I<15
07ED0F80151FA2153F16005D157E15FE5D14015D14035DA214075D140F5D141F5D143F92
C7FC5C147E14FE5CA213015C13035C13075C130F5C131F5CA2133F91C8FC5B137E13FE5B
12015B12035B12075BA2120F5B121F5B123F90C9FC5A127E12FE5AA25A127821417BB92C
>I<EB03F8EB0FFE90383FFF80497F90B57E3901FE0FF03903F803F848486C7EEBE00048
48137EA248487FA248C7EA1F80A2003E140F007E15C0A3007C140700FC15E0AC6C140F00
7E15C0A46CEC1F80A36C6CEB3F00A26C6C137E6D13FE00075CEBF0016C6C485A3901FE0F
F06CB55A6D5B6D5BD90FFEC7FCEB03F823357CB32C>I<1307497EA2131FA2133F137F13
FF5A1207127FB5FC13DF139FEA7C1F1200B3AE007FB512E0B612F0A36C14E01C3477B32C
>I<EB0FF890387FFF8048B512E00007804814FC391FF80FFE393FE001FF903880007F48
C7EA3F80007E141F00FE15C0150F6C15E01507A3127E123CC8FCA2150F16C0151F168015
3F16005D15FE4A5A14034A5A4A5A4A5A4A5AECFF804948C7FC495A495A495AEB3FE0EB7F
8049C8FC485A4848EB03C04848EB07E0EA1FE0485A48B6FCB7FCA36C15C023347CB32C>
I<EB0FFC90387FFF8048B512E0000714F84880391FF807FEEBC0004848137F6D7F168015
1FA26C5A6CC7FCC8FC153F16005D15FE14014A5AEC1FF890381FFFF0495BA215F86D7F90
380007FEEC00FF81ED3F80ED1FC0150FA216E01507A2123C127EB4FC150F16C0A248141F
007FEC3F806DEB7F006C6C5B391FF807FE6CB55A6C5C6C14E0C66C1380D90FFCC7FC2335
7CB32C>I<EC07F04A7E141F143FA2147EA214FCEB01F8A2EB03F0EB07E0A2EB0FC0EB1F
80A2EB3F00137EA25B485AA2485A5B1207485AA2485A48C7FCA2127E5AB712FC16FEA36C
15FCC8EAF800AA91387FFFF091B512F8A36E13F027347EB32C>I<000FB512FE4880A35D
0180C8FCADEB83FE90389FFF8090B512E015F8819038FE03FE9038F000FF01C07F49EB3F
8090C7121F6C15C0C8120FA2ED07E0A4123C127EB4FC150F16C0A248141F007EEC3F8000
7FEC7F006C6C5B6D485A391FF80FFC6CB55A6C5C000114C06C6C90C7FCEB0FF823347CB2
2C>I<EC3FC0903801FFF801077F011F7F497F90387FE07F9039FF003F804848137FEA03
F8485A5B000FEC3F004848131E4990C7FC123F90C9FCA25A127EEB03FE90381FFF80D8FC
7F13E000FDB57EB67E9038FE07FC9038F001FE9038C0007F49EB3F8090C7121F16C04814
0F16E01507A3127EA47E150F6D14C0001F141F6D1480000F143F6DEB7F003907F801FE39
03FE07FC6CB55A6C5C6D5B011F1380D907FCC7FC23357CB32C>I<1278B712C016E0A316
C000FCC7EA3F80ED7F0015FE00785CC712014A5A4A5A5D140F5D4A5A143F92C7FC5C147E
14FE5C13015CA2495AA213075CA3495AA4495AA5133F91C8FCAA131E23357CB32C>I<EB
07FC90383FFF8090B512E0000314F84880390FFC07FE391FF001FF9038C0007F4848EB3F
8090C7121F4815C0007E140FA56CEC1F80A26C6CEB3F006D5B390FF001FE3903FC07F86C
B55A6C6C13C0D907FCC7FC90387FFFC048B512F03903FC07F8390FF001FE391FC0007F49
7F48C7EA1F80007EEC0FC0A248EC07E0A7007EEC0FC0A2007F141F6C6CEB3F806C6CEB7F
009038F001FF390FFC07FE6CB55A6C5CC614E0013F1380D907FCC7FC23357CB32C>I<EB
07FCEB3FFF90B512C0488048803907FC07F8390FF001FC48486C7ED83F80137E157F48C7
7E007EEC1F8012FE5AED0FC0A416E0A37E127E007F141F7E6D133F6C6C137F390FF001FF
3807FC0F6CB6FC6C14F76C14C7013F130FD90FF813C090C7FCA2151F1680153F1600000F
5C486C137E486C13FE4A5A4A5A14079038801FF0391FE07FE090B55A6C91C7FC6C5B0001
13F838007FC023357CB32C>I<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F00C7FC
AE121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B2470A32C>I<EA0F80EA1FC0EA
3FE0EA7FF0A5EA3FE0EA1FC0EA0F80C7FCAEEA0F80EA1FC0EA3FE0127F13F0A4123F121F
120F1201120313E01207EA0FC0A2EA3F80EA7F005A5A12F812700C3071A32C>I<1507ED
1F80153F15FF14034A1300EC1FFC4A5AECFFE0491380010790C7FCEB0FFCEB3FF8EB7FE0
48485A4890C8FCEA0FFEEA1FF8EA7FF0EAFFC05BA27FEA7FF0EA1FF8EA0FFEEA03FF6C13
C06C6C7EEB3FF8EB0FFC6DB4FC01017F6D13E0EC3FF86E7EEC07FF6E13801400153F151F
ED0700212A7BAD2C>I<007FB612F0B712F8A4003F15F0CAFCA8003FB612F0B712F8A46C
15F025147DA22C>I<127012FC7E6C7E13E06C7EEA1FFC6C7E3803FF80C67FEB7FF0EB1F
F8EB0FFEEB03FF6D13C06D6C7EEC3FF8EC0FFC6EB4FC0201138080A25C02071300EC0FFC
EC3FF8EC7FE049485A4990C7FCEB0FFEEB1FF8EB7FF0EBFFC000035BD80FFEC8FC485AEA
7FF0485A138048C9FC5A1270212A7BAD2C>I<14FE497EA4497FA214EFA2130781A214C7
A2010F7FA31483011F7FA590383F01F8A490387E00FCA549137E90B512FEA34880A29038
F8003FA34848EB1F80A4000715C049130FD87FFEEBFFFC6D5AB514FE6C15FC497E27347E
B32C>65 D<007FB512E015F8B612FE6C8016C03903F0003FED0FE0ED07F01503A2ED01F8
A6ED03F0A21507ED0FE0ED1FC0EDFF8090B612005D5D15FF16C09039F0001FE0ED07F0ED
03F81501ED00FCA216FE167EA616FE16FC1501ED03F8150FED3FF0007FB612E016C0B712
806CECFE0015F027337FB22C>I<02FF13700107EBE0F84913F9013F13FD4913FFEBFF81
3901FE007F4848131FD807F0130F1507485A491303485A150148C7FCA25A007EEC00F016
00A212FE5AAB7E127EA3007F15F06CEC01F8A26C7EA26C6C13036D14F06C6C130716E0D8
03FC131F6C6CEB3FC03A00FF81FF806DB512006D5B010F5B6D13F00100138025357DB32C
>I<007FB5FCB612C015F0816C803907E003FEEC00FFED7F80153FED1FC0ED0FE0A21507
16F0150316F81501A4ED00FCACED01F8A3150316F0A2150716E0150FED1FC0153FED7F80
EDFF00EC03FE007FB55AB65A5D15C06C91C7FC26337EB22C>I<007FB612F0B712F8A37E
3903F00001A7ED00F01600A4EC01E04A7EA490B5FCA5EBF003A46E5A91C8FCA5163C167E
A8007FB612FEB7FCA36C15FC27337EB22C>I<007FB612F8B712FCA37ED803F0C7FCA716
781600A515F04A7EA490B5FCA5EBF001A46E5A92C7FCAD387FFFE0B5FC805C7E26337EB2
2C>I<903901FC038090390FFF87C04913EF017F13FF90B6FC4813073803FC01497E4848
137F4848133F49131F121F5B003F140F90C7FCA2127EED078092C7FCA212FE5AA8913803
FFF84A13FCA27E007E6D13F89138000FC0A36C141FA27F121F6D133F120F6D137F6C7E6C
6C13FF6D5A3801FF076C90B5FC6D13EF011F13CF6DEB0780D901FCC7FC26357DB32C>I<
D87FFEEBFFFCB54813FEA36C486C13FCD807E0EB0FC0B190B6FCA59038E0000FB3D87FFE
EBFFFCB54813FEA36C486C13FC27337EB22C>I<007FB512F8B612FCA36C14F839000FC0
00B3B3A5007FB512F8B612FCA36C14F81E3379B22C>I<0107B512804914C0A36D148090
390003F000B3AF1218127EA2B4FCA24A5A48130F007F131F9038C07FC06CB55A6C91C7FC
6C5B000313F838007FC022347BB22C>I<D87FFCEB7FF8486CEBFFFCA36C48EB7FF8D807
C0EB1F80153FED7F00157E5D4A5A14034A5A5D4A5A4A5A143F4AC7FC147E5CEBC1F813C3
EBC7FCA2EBCFFEEBDFBEEBFFBF141F01FE7F496C7E13F86E7EEBF00301E07FEBC001816E
7EA2157E153E153F811680ED0FC0A2ED07E0D87FFCEB1FFC486CEB3FFEA36C48EB1FFC27
337EB22C>I<387FFFE0B57EA36C5BD803F0C8FCB3AE16F0ED01F8A8007FB6FCB7FCA36C
15F025337DB22C>I<D87FE0EB0FFC486CEB1FFEA26D133F007F15FC000F15E001BC137B
A4019E13F3A3EB9F01A2018F13E3A21483A2018713C314C7A201831383A314EF01811303
A214FFEB80FEA3147C14381400ACD87FF0EB1FFC486CEB3FFEA36C48EB1FFC27337EB22C
>I<D87FF0EB7FFC486CEBFFFEA27F007FEC7FFCD807FEEB07C013DEA213DF13CFA21480
13C714C0A213C314E0A213C114F0A213C014F8A2147CA3143EA2141E141FA2140F1587A2
140715C7A2140315E71401A215F71400A215FFD87FFC137F487E153FA26C48EB1F802733
7EB22C>I<EB7FFF0003B512E0000F14F848804880EBE003EB800048C7127FA2007E80A3
00FE158048141FB3A86C143FA2007E1500A3007F5CA26C6C13FEEBF00790B5FC6C5C6C5C
000314E0C66C90C7FC21357BB32C>I<007FB512C0B612F88115FF6C15802603F00013C0
153FED0FE0ED07F0A2150316F81501A6150316F01507A2ED0FE0ED3FC015FF90B6128016
0015FC5D15C001F0C8FCB0387FFF80B57EA36C5B25337EB22C>I<EB7FFF0003B512E000
0F14F848804880EBF007EB800048C7127FA2007E80A300FE158048141FB3A7EB01F0EB03
F800FE143F267E01FC1300A2EB00FE007F5C147FD83F8013FEEBF03F90B5FC6C5C6C5C00
0314E0C67E90380007F0A26E7EA26E7EA26E7EA2157FA2153E21407BB32C>I<387FFFFC
B67E15E015F86C803907E007FE1401EC007F6F7E151FA26F7EA64B5AA2153F4BC7FCEC01
FE140790B55A5D15E081819038E007FCEC01FE1400157F81A8160FEE1F80A5D87FFEEB1F
BFB5ECFF00815E6C486D5AC8EA01F029347EB22C>I<90381FF80790B5EA0F804814CF00
0714FF5A381FF01F383FC003497E48C7FC007E147F00FE143F5A151FA46CEC0F00007E91
C7FC127F7FEA3FE0EA1FFCEBFFC06C13FC0003EBFFC06C14F06C6C7F01077F9038007FFE
EC07FF02001380153FED1FC0A2ED0FE0A20078140712FCA56CEC0FC0A26CEC1F806D133F
01E0EB7F009038FE01FF90B55A5D00F914F0D8F83F13C0D8700790C7FC23357CB32C>I<
007FB612FCB712FEA43AFC007E007EA70078153CC71400B3AF90383FFFFCA2497F6D5BA2
27337EB22C>I<D87FF0EB07FF486C491380A36C486D1300001FC8127CA46C6C5CA76C6C
495AA4143E147FA33A03E0FF83E0A214F7A201E113C3A3000101E35BA201F113C701F313
E7A314C1A200005DA201F713F71480A301FF13FF017F91C7FC4A7EA4013E133E29347FB2
2C>87 D<D87FFCEB7FFC486CEBFFFEA36C48EB7FFCD807F0EB0FC0151F000315806D133F
12016DEB7F0012006D137E017E13FE017F5BEB3F01EC81F8131FEC83F0EB0FC314C79038
07E7E0A201035B14EF6DB45AA292C7FC7F5C147EB0903807FFE0497FA36D5B27337EB22C
>89 D<387FFFFCB512FEA314FC00FCC7FCB3B3B3B512FC14FEA36C13FC17416FB92C>91
D<127812F87EA27E127E127F7E7F121F7F120F7F1207A27F12037F12017F12007F137E13
7F7F80131FA280130F801307801303801301801300A280147E147F8081141F81140F8114
07811403A281140181140081157E157F811680151FA2150FED070021417BB92C>I<387F
FFFCB512FEA37EC7127EB3B3B3387FFFFEB5FCA36C13FC17417DB92C>I<007FB6FCB712
80A46C150021067B7D2C>95 D<137013F812011203EA07F0EA0FE0EA1FC01380EA3F0012
3E127E127CA212FC5AA4EAFF8013C013E0A2127FA2123FEA1FC0EA0F800D1B71B82C>I<
3801FFF0000713FE001F6D7E15E048809038C01FF81407EC01FC381F80000006C77EC812
7EA3ECFFFE131F90B5FC1203120F48EB807E383FF800EA7FC090C7FC12FE5AA47E007F14
FEEB8003383FE01F6CB612FC6C15FE6C14BF0001EBFE1F3A003FF007FC27247CA32C>I<
EA7FF0487EA3127F1201AAEC1FE0ECFFF801FB13FE90B6FC16809138F07FC09138801FE0
91380007F049EB03F85BED01FC491300A216FE167EA816FE6D14FCA2ED01F86D13036DEB
07F0150F9138801FE09138E07FC091B51280160001FB5B01F813F83900F03FC027337FB2
2C>I<903803FFE0011F13F8017F13FE48B5FC48804848C6FCEA0FF0485A49137E484813
1890C9FC5A127EA25AA8127EA2127F6C140F6DEB1F806C7E6D133F6C6CEB7F003907FE03
FF6CB55A6C5C6C6C5B011F13E0010390C7FC21247AA32C>I<EC0FFE4A7EA380EC003FAA
EB07F8EB3FFE90B512BF4814FF5A3807FC0F380FF00348487E497E48487F90C7FC007E80
A212FE5AA87E007E5CA2007F5C6C7E5C6C6C5A380FF0073807FC1F6CB612FC6CECBFFE6C
143FEB3FFC90390FF01FFC27337DB22C>I<EB03FE90381FFFC0017F13F048B57E488039
07FE03FE390FF800FFD81FE0EB3F805B4848EB1FC090C7120F5A007E15E015075AB7FCA4
16C000FCC9FC7E127EA2127F6CEC03C06DEB07E06C7ED80FF0130F6C6CEB3FC001FF13FF
000190B512806C1500013F13FC010F13F00101138023247CA32C>I<EC0FF8EC3FFE91B5
FC4914805B903807FC7F14F090390FE03F0014C092C7FCA6007FB512FEB7FCA36C5C2600
0FC0C7FCB3A8003FB512F04880A36C5C21337DB22C>I<ED03F8903907F80FFC90391FFE
3FFE017FB6FC48B7FC48ECFE7F9038FC0FF82607F003133E3A0FE001FC1CD9C000130000
1F8049137EA66D13FE000F5CEBE0016C6C485A3903FC0FF048B5FC5D481480D99FFEC7FC
EB87F80180C8FCA37F6C7E90B512F06C14FE48ECFF804815E04815F03A3FC0001FF848C7
EA03FC007E1400007C157C00FC157E48153EA46C157E007E15FCD87F801303D83FE0EB0F
F8D81FFCEB7FF06CB612E0000315806C1500D8003F13F8010713C028387EA42C>I<EA7F
F0487EA3127F1201AAEC1FE0EC7FFC9038F9FFFE01FB7F90B6FC9138F03F80ECC01F0280
7FEC000F5B5BA25BB3267FFFE0B5FCB500F11480A36C01E0140029337FB22C>I<1307EB
1FC0A2497EA36D5AA20107C7FC90C8FCA7387FFFC080B5FC7EA2EA0007B3A8007FB512FC
B612FEA36C14FC1F3479B32C>I<140EEC3F80A2EC7FC0A3EC3F80A2EC0E0091C7FCA748
B512804814C0A37EC7120FB3B3A2141F003C1480007E133FB414005CEB01FEEBFFFC6C5B
5C001F5B000790C7FC1A467CB32C>I<EA7FE0487EA3127F1201AA91381FFFF04A13F8A3
6E13F0913800FE004A5A4A5A4A5A4A5A4A5A4A5A4AC7FC14FEEBF1FC13F3EBF7FE90B5FC
A2EC9F80EC0FC001FE7FEBFC07496C7E496C7E811400157E811680151F3A7FFFC0FFFCB5
00E113FEA36C01C013FC27337EB22C>I<387FFFE0B57EA37EEA0003B3B3A5007FB61280
B712C0A36C158022337BB22C>I<3A7F83F007E09039CFFC1FF83AFFDFFE3FFCD87FFF13
FF91B57E3A07FE1FFC3E01FCEBF83F496C487E01F013E001E013C0A301C01380B33B7FFC
3FF87FF0027F13FFD8FFFE6D13F8D87FFC4913F0023F137F2D2481A32C>I<397FF01FE0
39FFF87FFC9038F9FFFE01FB7F6CB6FC00019038F03F80ECC01F02807FEC000F5B5BA25B
B3267FFFE0B5FCB500F11480A36C01E0140029247FA32C>I<EB07FCEB1FFF017F13C048
B512F048803907FC07FC390FF001FE48486C7E0180133F003F158090C7121F007EEC0FC0
A348EC07E0A76C140F007E15C0A2007F141F6C15806D133F6C6CEB7F006D5B6C6C485A39
07FC07FC6CB55A6C5C6C6C13C0011F90C7FCEB07FC23247CA32C>I<397FF01FE039FFF8
FFF801FB13FE90B6FC6C158000019038F07FC09138801FE091380007F049EB03F85BED01
FC491300A216FE167EA816FE6D14FCA2ED01F86D13036DEB07F0150F9138801FE09138E0
7FC091B51280160001FB5B01F813F8EC3FC091C8FCAD387FFFE0B57EA36C5B27367FA32C
>I<903903FC078090391FFF0FC0017F13CF48B512EF4814FF3807FE07380FF00148487E
49137F4848133F90C7FC48141F127E150F5AA87E007E141FA26C143F7F6C6C137F6D13FF
380FF0033807FC0F6CB6FC6C14EF6C6C138F6D130FEB07F890C7FCAD0203B5FC4A1480A3
6E140029367DA32C>I<D87FFEEB3FC0B53801FFF0020713F8021F13FC6C5B39003F7FE1
ECFF019138FC00F84A13704A13005CA25C5CA391C8FCAF007FB512E0B67EA36C5C26247E
A32C>I<90387FF8700003B512F8120F5A5A387FC00F387E00034813015AA36CEB00F000
7F140013F0383FFFC06C13FE6CEBFF80000314E0C66C13F8010113FCEB0007EC00FE0078
147F00FC143F151F7EA26C143F6D133E6D13FE9038F007FC90B5FC15F815E000F8148039
701FFC0020247AA32C>I<131E133FA9007FB6FCB71280A36C1500D8003FC8FCB1ED03C0
ED07E0A5EC800F011FEB1FC0ECE07F6DB51280160001035B6D13F89038003FE0232E7EAD
2C>I<3A7FF003FF80486C487FA3007F7F0001EB000FB3A3151FA2153F6D137F3900FE03
FF90B7FC6D15807F6D13CF902603FE07130029247FA32C>I<3A7FFF01FFFCB514FE1483
14016C15FC3A03E0000F80A26D131F00011500A26D5B0000143EA26D137E017C137CA201
7E13FC013E5BA2EB3F01011F5BA21483010F5BA214C701075BA214EF01035BA214FF6D90
C7FCA26D5A147C27247EA32C>I<D87FFFEB7FFF6EB5FCB515806C16004A7ED807C0EB01
F0A66C6C495AA3143E147FA2D801F0495AECFF87A214F7A201F113C700005D9038F9E3CF
A201FB13EFA3D97BC190C7FC017F13FFA21480A2013F5B90381F007C29247FA32C>I<3A
3FFF03FFF048018713F8A36C010313F03A00FC007E005D90387E01F8013F5BEB1F83EC87
E090380FCFC0903807EF80EB03FF6D90C7FC5C6D5A147C14FE130180903803EF80903807
CFC0EB0FC7EC83E090381F01F0013F7FEB7E00017C137C49137E0001803A7FFF01FFFC14
83B514FE6C15FC140127247EA32C>I<3A7FFF01FFFCB5008113FE148314816C010113FC
3A03E0000F806C7E151F6D140012005D6D133E137C017E137E013E137CA2013F13FC6D5B
A2EB0F815DA2EB07C1ECC3E0A2EB03E3ECE7C0130114F75DEB00FFA292C7FC80A2143EA2
147E147CA214FC5CA2EA0C01003F5BEA7F83EB87E0EA7E0F495A387FFF806C90C8FC6C5A
6C5AEA07E027367EA32C>I<003FB612E04815F0A4007EC7EA1FE0ED3FC0ED7F80EDFF00
4A5A003C495AC7485A4A5A4A5A4A5A4A5A4AC7FCEB01FC495AEB0FF0495A495A495A49C8
FC4848EB01E04848EB03F0485A485A485A485A485AB7FCA46C15E024247DA32C>I<15FF
02071380141F147F91B512004913C04AC7FCEB03F85CB31307EB1FE013FF007F5BB55A49
C8FC6D7E6C7FC67F131FEB07F01303B380EB01FEECFFC06D13FF6E1380141F1407020013
0021417BB92C>I<127812FCB3B3B3A9127806416DB92C>I<EA7FC0EAFFF813FE6D7E6C7F
C67F131FEB07F01303B380EB01FEECFFC06D13FF6E1380141F147F91B512004913C04AC7
FCEB03F85CB31307EB1FE013FF007F5BB55A49C8FC13F8EA7FC021417BB92C>I<01F813
70D803FE13F8380FFF0148138748EBCFF0397F9FFFE0D8FF0F13C0D8FC07138039F803FE
00387000F81D0A79B22C>I E /Fj 56 128 df<EE3FFC4BB51280923907E007C092391F
8001E0DB3F0013F0037E13034B1307A24A5A18E04A48EB038094C7FCA314075DA4140F5D
A3010FB7FCA25F903A001F80007EA217FE023F5C92C7FCA216015F5C147E16035FA214FE
4A13075FA30101140F5F4AECC1C0A2161F1783010316805CA2EF870013074A5CEE0F8EEE
079EEE03FC010FEC00F04A91C7FCA35C131FA2001C90CAFC127E5BEAFE3E133C137CEAF8
78EA78F0EA3FE0EA0F80344C82BA2F>12 D<EE7FE0923903FFFC7E92380FC03E92381F00
0F033EEB3FFE4B137F03FC14FC5D1401173D4A48EB01F8A21703A24A4814F0A21707A202
0F15E05D170FA218C0010FB7FCA3903B001F80001F80A2173F143F92C71300A25FA24A14
7E147E17FEA25F14FE4A1301A25FA2010114035CEFF070A21607010316F04AECE0E0A3EF
E1C013074A14C3933803E380EE01E7933800FF004948143C94C7FCA3495AA3001C90CAFC
127E133E12FE133C137CEAF878EA78F0EA3FE0EA0F80374C82BA31>I<EA01E0EA07F012
0F13F8121FA3120FEA07B0EA0030A21370136013E013C0120113801203EA0700120E5A5A
5A5A5A0D196EB919>39 D<150C151C153815F0EC01E0EC03C0EC0780EC0F00141E5C147C
5C5C495A1303495A5C130F49C7FCA2133EA25BA25BA2485AA212035B12075BA2120F5BA2
121FA290C8FCA25AA2123EA2127EA2127CA412FC5AAD1278A57EA3121C121EA2120E7EA2
6C7E6C7EA212001E5274BD22>I<140C140E80EC0380A2EC01C015E0A2140015F0A21578
A4157C153CAB157CA715FCA215F8A21401A215F0A21403A215E0A21407A215C0140F1580
A2141F1500A2143EA25CA25CA2495AA2495A5C1307495A91C7FC5B133E133C5B5B485A12
035B48C8FC120E5A12785A12C01E527FBD22>I<EA03C0EA07F0120F121F13F8A313F0EA
07B0EA003013701360A213E013C01201EA038013005A120E5A5A5A5A5A0D197A8819>44
D<387FFFF8A2B5FCA214F0150579941E>I<120EEA3F80127F12FFA31300127E123C0909
778819>I<EC03F8EC1FFEEC7C1F9138F80780D901E013C0903903C003E0EB0780010F13
01D91F0013F0A2133E137E017C130313FCA2485AA2000314075BA2120716E049130F120F
A34848EB1FC0A44848EB3F80A448C7EA7F00A3157E007E14FEA25D00FE13015DA248495A
A25D007C13075D4A5AA24AC7FC6C133E5C6C5B380F83E03807FF80C648C8FC243A77B72A
>48 D<15181538157815F0140114031407EC0FE0141F147FEB03FF90383FEFC0148FEB1C
1F13001580A2143FA21500A25CA2147EA214FEA25CA21301A25CA21303A25CA21307A25C
A2130FA25CA2131FA25CA2133FA291C7FC497EB61280A31D3877B72A>I<EC03F8EC0FFE
91383C0F809138F007C0903901E003E0D903C013F09038078001020013F8130E131E9039
1C6000FCEB3870EC30011370A213F013E0EC70030001016013F813C014E0ECC00701C114
F0903881800F018314E09039C7001FC001FEEB3F80D80078140090C7127E5D4A5A4A5AEC
07C0EC1F80023EC7FC14FCEB01F0EB07C0495A011EC8FC137C4914C0484813015B485A48
48130348C71380000E1407001E140F48EC1F00D83FF85B397FFFC07E39783FFFFCEA700F
D8F0075BD8E0015B6D13C0021FC7FC263A79B72A>I<16E0ED01F01503A3150716E0A315
0F16C0A2151F1680A2ED3F00A3157EA2157C15FC5D14015D14035D14075D140F5D141F92
C7FC143EA25CECF81C153E903801F07EEB03E014C090380780FE130F49485A133EEB7C01
137801F05BEA01E03803C003EA0FFE391FFFC3F04813FB267C01FF13403AF0003FFFE000
601307C71400EC0FE05DA3141F5DA3143F92C7FCA4143E141C24487DB72A>52
D<010314186E13F8903907F007F091B512E016C01600495B15F8010E13E0020CC7FC011E
C8FC131CA3133C1338A313781370A2147F9038F3FFC09038EF83E09038FC01F0496C7E48
5A497F49137CC8FC157EA315FEA41401000C5C123F5A1403485C5A4A5A12F800E05C140F
4A5A5D6C49C7FC0070137E00785B387C01F8383E07F0381FFFC06C90C8FCEA01F8253A77
B72A>I<EC01FCEC0FFF023F138091387E07C0903901F803E0EB03F0903907E001F0EB0F
C0EB1F80013F14F814005B137E13FEA2485AA2150312035BA2ED07F012075B150FA216E0
0003141FA2153FED7FC0120115FF6C6C5A90397803BF8090383C0F3FD91FFC1300903807
F07F90C7FC157E15FE5D14015D4A5AA2003E495A007F495A5D4AC7FC00FE5B48137E0070
13F8387803F0387C0FE0383FFF806C48C8FCEA03F8253A78B72A>57
D<133C137E13FF5AA313FE13FCEA00701300B2120EEA3F80127F12FFA31300127E123C10
2477A319>I<14FCEB07FF90381F03C090383C01E090387000F049137048481378485A12
0748C7FC120E121E121C003C14F8003814F0007813011270007CEB03E000FE1307EC0FC0
EC1F80147F48EBFF00387001FCC6485AEB0FF0495AEB3F8049C7FCEA01FE485A13F0485A
5B380F81C01301A2495A130791C7FC131EEA07FCEA01F0C9FCA81207EA1FC0123F127FA3
5B6CC8FC121E1D3C70BB2A>63 D<EE01C01603A21607160FA2161F83163FA2167F16FF16
EF150116CFED038FA2ED070FA2150E151E151C1538A203707FA2EDE007A2EC01C0140315
80EC0700A2140EA25CA25C027FB5FCA291B6FC9139E00007F849481303A2495A130791C7
FC5B130E5BA25B1378137013F0EA03F8486C4A7EB56C48B512F0A3343C7BBB3E>65
D<0107B612FCEFFF8018C0903B000FF0001FF04BEB07F81703021F15FC17014B14FEA202
3F1400A24B1301A2147F18FC92C7120318F84A140718F04AEC0FE0EF1FC00101ED3F80EF
7F004AEB01FEEE07F849B612E05F9139F80007F0EE01FC01076E7E177F4AEC3F80A2010F
16C0171F5CA2131F173F5CA2133FEF7F805C1800017F5D4C5A91C7485A5F49140FEE1FE0
494A5A00014AB45AB748C7FC16F816C037397BB83A>I<DB03FE130E92393FFF801E92B5
EAE03C913903FE01F0913A0FF000787CDA3FC0EB3CFC4AC7EA1FF802FE140FEB03FC4948
1407494815F049481403495A5C49C813E05B485A5B000317C0485AA2485A1880485A94C7
FCA2485AA3127F5BA312FF90CBFCA41738A217784816707E17F06C5E16015F16036C6C4A
5A94C7FC001F150E6D141E000F5D6D5C6C6C495A6C6CEB03C0D801FEEB0F8027007F807E
C8FC6DB45A010F13E0010090C9FC373D74BA3B>I<0103B612FEEFFFC018F0903B0007F8
000FF84BEB03FCEF00FE020F157FF03F804B141F19C0021F150F19E05D1807143F19F05D
A2147FA292C8FCA25C180F5CA2130119E04A151FA2130319C04A153FA201071780187F4A
1600A2010F16FEA24A4A5A60011F15034D5A4A5D4D5A013F4B5A173F4A4AC7FC17FC017F
EC03F84C5A91C7EA1FC04949B45A007F90B548C8FCB712F016803C397CB83F>I<0107B7
12FEA3903A000FF000074B1300187C021F153CA25DA2143FA25D1838147FA292C8FCEE03
804A130718004A91C7FCA201015CA24A131E163E010314FE91B5FC5EA2903807F800167C
4A1378A2130FA24A1370A2011F14F0A24A90C8FCA2133FA25CA2137FA291CAFCA25BA25B
487EB6FCA337397BB836>70 D<DB03FE130E92393FFF801E92B5EAE03C913903FE01F091
3A0FF000787CDA3FC0EB3CFC4AC7EA1FF802FE140FEB03FC49481407494815F049481403
495A5C49C813E05B485A5B000317C0485AA2485A1880485A94C7FCA2485AA3127F5BA312
FF90CBFC0307B512E0A392390007FC00705A16075FA36C150F5FA36C6C141FA2001F5E6D
143F6C7E167F6C6C4A5A6C6CEB03EFD801FEEB07C73A007FC03F0790273FFFFC03C7FC01
0F01F0C8FC01001380373D74BA40>I<0103B5D8F80FB512E0A390260007F8C7381FE000
4B5DA2020F153F615DA2021F157F96C7FC5DA2023F5D605DA2027F14016092C7FCA24A14
03605CA249B7FC60A202FCC712070103150F605CA20107151F605CA2010F153F605CA201
1F157F95C8FC5CA2013F5D5F5CA2017F14015F91C7FC491403007FD9FE01B512F8B55BA2
43397CB83E>I<0103B512F8A390390007F8005DA2140FA25DA2141FA25DA2143FA25DA2
147FA292C7FCA25CA25CA21301A25CA21303A25CA21307A25CA2130FA25CA2131FA25CA2
133FA25CA2137FA291C8FC497EB6FCA25C25397CB820>I<0207B512F0A391390007FC00
6F5AA215075EA3150F5EA3151F5EA3153F5EA3157F93C7FCA35D5DA314015DA314035DA3
1407A25DA2140FA2003F5C5A141F485CA24A5A12FC00E049C8FC14FE00705B495A6C485A
381E0FC06CB4C9FCEA01F82C3B78B82C>I<0107B512FCA25E9026000FF8C7FC5D5D141F
A25DA2143FA25DA2147FA292C8FCA25CA25CA21301A25CA21303A25CA21307A25CA2130F
170C4A141CA2011F153C17384A1478A2013F157017F04A14E01601017F140317C091C712
07160F49EC1F80163F4914FF000102071300B8FCA25E2E397BB834>76
D<902607FFF8923807FFF0614F13E0D9000FEFF0004F5AA2021F167FF1EFC0141DDA1CFC
EC01CF023C16DF9538039F800238ED071FA20278ED0E3F97C7FC0270151CA202F04B5AF0
707E14E0037E14E0010117FE4D485A02C0EC0380A20103ED0701610280140EA20107ED1C
0305385B14006F137049160705E05B010EEC01C0A2011E913803800F61011CEC0700A201
3C020E131F4C5C1338ED1FB80178163F04F091C8FC01705CA201F04A5B187E00015DD807
F816FEB500C09039007FFFFC151E150E4C397AB84A>I<902603FFF891B512E0A281D900
07923807F8006F6E5A61020F5E81DA0E7F5DA2021E6D1307033F92C7FC141C82DA3C1F5C
70130EEC380FA202786D131E0307141C147082DAF003143C70133814E0150101016E1378
030014705C8201036E13F0604A1480163F010715C1041F5B91C7FC17E149EC0FE360010E
15F31607011E15FF95C8FC011C80A2013C805F1338160013785F01F8157CEA03FC267FFF
E0143CB51538A243397CB83E>I<ED03FE92383FFFC09238FC07F0913903E001F891390F
80007C023FC77E027E8002F815804948EC0FC0EB07E04948EC07E0131F4A15F049C81203
137E01FE16F8485AA2485AA2485AA2120F5B001F16075B123FA34848ED0FF0A448C9EA1F
E0A3EF3FC0A21880177F18005F5F16015F6C4B5A4C5AA24C5A6C4B5A6D4A5A001F93C7FC
6D147E000F5D6C6CEB03F06C6C495A6C6CEB0F806C6C013FC8FC90383F01FC90381FFFE0
010190C9FC353D74BA40>I<0107B612F817FF1880903B000FF0003FE04BEB0FF0EF03F8
141FEF01FC5DA2023F15FEA25DA2147FEF03FC92C7FCA24A15F817074A15F0EF0FE01301
EF1FC04AEC3F80EFFE0001034A5AEE0FF091B612C04CC7FCD907F8C9FCA25CA2130FA25C
A2131FA25CA2133FA25CA2137FA291CAFCA25BA25B1201B512FCA337397BB838>I<9238
3FC00E913901FFF01C020713FC91391FC07E3C91393F001F7C027CEB0FF84A1307494813
03495A4948EB01F0A2495AA2011F15E091C7FCA34915C0A36E90C7FCA2806D7E14FCECFF
806D13F015FE6D6D7E6D14E0010080023F7F14079138007FFC150F15031501A21500A216
7C120EA3001E15FC5EA3003E4A5AA24B5AA2007F4A5A4B5A6D49C7FC6D133ED8F9F013FC
39F8FC03F839F07FFFE0D8E01F138026C003FCC8FC2F3D7ABA2F>83
D<0007B812E0A25AD9F800EB001F01C049EB07C0485AD900011403121E001C5C003C1780
1403123800785C00701607140700F01700485CA2140FC792C7FC5DA2141FA25DA2143FA2
5DA2147FA292C9FCA25CA25CA21301A25CA21303A25CA21307A25CA2130FA25CEB3FF000
7FB512F8B6FCA2333971B83B>I<B5D8F80FB590381FFFF06102F018E0D807FEC7D87FE0
903803FE00D803F8DA3F806D5AF100F0A24F5A621903621907047F92C7FC190E16FF4B5D
A2DB03BF5C7F0001DA073F5CA2030E5D83DB1C1F495A180303385D4EC8FC157003F0140E
15E0DA01C05CA2DA03805CA2DA07005CA2020E5D17C14A5DEFC3805C027802C7C9FC1470
4A14CE13FE6C6C4814DCA24A14F8A291C75B160F495D5F5B5F5B4992CAFCA249140E4C3B
6FB853>87 D<14F8EB07FE90381F871C90383E03FE137CEBF801120148486C5A485A120F
EBC001001F5CA2EA3F801403007F5C1300A21407485C5AA2140F5D48ECC1C0A2141F1583
1680143F1587007C017F1300ECFF076C485B9038038F8E391F0F079E3907FE03FC3901F0
00F0222677A42A>97 D<133FEA1FFFA3C67E137EA313FE5BA312015BA312035BA31207EB
E0F8EBE7FE9038EF0F80390FFC07C013F89038F003E013E0D81FC013F0A21380A2123F13
00A214075A127EA2140F12FE4814E0A2141F15C05AEC3F80A215005C147E5C387801F800
7C5B383C03E0383E07C0381E1F80D80FFEC7FCEA01F01C3B77B926>I<147F903803FFC0
90380FC1E090381F0070017E13784913383901F801F83803F003120713E0120FD81FC013
F091C7FC485AA2127F90C8FCA35A5AA45AA3153015381578007C14F0007EEB01E0003EEB
03C0EC0F806CEB3E00380F81F83803FFE0C690C7FC1D2677A426>I<ED01F815FFA31503
16F0A21507A216E0A2150FA216C0A2151FA21680A2153FA202F81300EB07FE90381F877F
90383E03FF017C5BEBF80112013803F00048485B120FEBC001121F5DEA3F801403127F01
005BA214075A485CA2140FA248ECC1C0A2141F15C3ED8380143F1587007C017F1300ECFF
076C485B9038038F8E391F0F079E3907FE03FC3901F000F0253B77B92A>I<147F903803
FFC090380FC1E090383F00F0017E13785B485A485A485A120F4913F8001F14F0383F8001
EC07E0EC1F80397F81FF00EBFFF891C7FC90C8FC5A5AA55AA21530007C14381578007E14
F0003EEB01E0EC03C06CEB0F806CEB3E00380781F83803FFE0C690C7FC1D2677A426>I<
ED07C0ED1FF0ED3E38ED7C3CEDF8FC15F9140115F1020313F8EDF0F0160014075DA4140F
5DA4141F5D010FB512C05B16809039003F800092C7FCA45C147EA414FE5CA413015CA413
035CA413075CA4130F5CA3131F5CA391C8FC5B121CEA7E3EA2EAFE3C137C1378EAF8F012
78EA3FC0EA0F80264C82BA19>I<EC07C0EC3FF09138FC38E0903901F01FF0EB03E09038
07C00FEB0F80011F1307D93F0013E05B017E130F13FE4914C01201151F1203491480A215
3F1207491400A25DA249137EA215FEA25D00031301140314076C6C485A0000131FEB787B
EB3FF390380FC3F0EB00031407A25DA2140F5D121C007E131F5D00FE49C7FC147E5C3878
01F8387C07E0381FFF80D803FEC8FC24367CA426>I<EB03F0EA01FFA3EA00075CA3130F
5CA3131F5CA3133F91C8FCA35B90387E07F0EC1FFCEC783E9038FFE01F02C01380EC800F
1400485A16C05B49EB1F8012035BA2153F000715005BA25D000F147E5B15FE5D121FD980
01131C15F8163C003F01031338010013F0A216704814E0007E15F016E0EDE1C000FE9038
01E38048903800FF000038143C263B7BB92A>I<EB01C0EB07E014F0130F14E01307EB03
8090C7FCAB13F0EA03FCEA071EEA0E1F121CA212385B1270A25BEAF07E12E013FEC65AA2
12015B1203A25B12075BA2000F13E013C013C1001F13C01381A2EB83801303EB0700A213
0E6C5AEA07F8EA01E0143879B619>I<EB0FC0EA07FFA3EA001F1480A2133FA21400A25B
A2137EA213FEA25BA21201A25BA21203A25BA21207A25BA2120FA25BA2121FA25BA2123F
A290C7FCA25AA2EA7E0EA212FE131EEAFC1CA2133C133812F81378EA7870EA7CE0121FEA
0F80123B79B915>108 D<D801E001FEEB07F03C07F803FF801FFC3C0E3C0F07C0783E3C
1E3E3C03E1E01F261C1F78D9F3C013803C383FF001F7800F02E01400007801C013FE0070
18C002805B4A4848EB1F80EAF07FD8E07E5CA200000207143F01FE1700495CA2030F5C00
01177E495C18FE031F5C120349DA8001131C18F8033F153C00070403133849020013F0A2
4B1570000F17E049017E15F019E003FEECE1C0001FEE01E34949903800FF000007C70038
143C3E2679A444>I<D801E013FE3A07F803FF803A0E3C0F07C03A1E3E3C03E0261C1F78
7F39383FF00114E0007813C000708114804A485AEAF07FEAE07EA20000140701FE5C5BA2
150F00015D5B151F5E12034990383F8380160316070007027F130049137EA2160E000F14
7C49141E161C5E001FEC3C7849EB1FE00007C7EA0780292679A42F>I<147F903803FFC0
90380FC1F090381F00F8017E137C5B4848137E4848133E0007143F5B120F485AA2485A15
7F127F90C7FCA215FF5A4814FEA2140115FC5AEC03F8A2EC07F015E0140F007C14C0007E
EB1F80003EEB3F00147E6C13F8380F83F03803FFC0C648C7FC202677A42A>I<90390780
07C090391FE03FF090393CF0787C903938F8E03E9038787FC00170497EECFF00D9F0FE14
8013E05CEA01E113C15CA2D80003143FA25CA20107147FA24A1400A2010F5C5E5C4B5A13
1F5EEC80035E013F495A6E485A5E6E48C7FC017F133EEC70FC90387E3FF0EC0F8001FEC9
FCA25BA21201A25BA21203A25B1207B512C0A3293580A42A>I<3903C003F0390FF01FFC
391E783C0F381C7C703A3C3EE03F8038383FC0EB7F800078150000701300151CD8F07E90
C7FCEAE0FE5BA2120012015BA312035BA312075BA3120F5BA3121F5BA3123F90C9FC120E
212679A423>114 D<14FE903807FF8090380F83C090383E00E04913F00178137001F813
F00001130313F0A215E00003EB01C06DC7FC7FEBFFC06C13F814FE6C7F6D13807F010F13
C01300143F141F140F123E127E00FE1480A348EB1F0012E06C133E00705B6C5B381E03E0
6CB45AD801FEC7FC1C267AA422>I<EB0380EB07C0130FA4131F1480A3133F1400A35B13
7E007FB5FCA2B6FC3800FC00A312015BA312035BA312075BA3120F5BA3121FEB801CA214
3C003F1338EB0078147014F014E0EB01C0EA3E03381F0780380F0F00EA07FCEA01F01835
79B31C>I<13F8D803FEEB01C0D8078FEB03E0390E0F8007121E121C0038140F131F0078
15C01270013F131F00F0130000E015805BD8007E133FA201FE14005B5D120149137EA215
FE120349EBFC0EA20201131E161C15F813E0163CD9F003133814070001ECF07091381EF8
F03A00F83C78E090393FF03FC090390FC00F00272679A42D>I<01F0130ED803FC133FD8
071EEB7F80EA0E1F121C123C0038143F49131F0070140FA25BD8F07E140000E08013FEC6
485B150E12015B151E0003141C5BA2153C000714385B5DA35DA24A5A140300035C6D48C7
FC0001130E3800F83CEB7FF8EB0FC0212679A426>I<01F01507D803FC903903801F80D8
071E903907C03FC0D80E1F130F121C123C0038021F131F49EC800F00701607A249133FD8
F07E168000E0ED000313FEC64849130718000001147E5B03FE5B0003160E495BA2171E00
070101141C01E05B173C1738A217781770020314F05F0003010713016D486C485A000190
391E7C07802800FC3C3E0FC7FC90393FF81FFE90390FE003F0322679A437>I<903907E0
07C090391FF81FF89039787C383C9038F03E703A01E01EE0FE3803C01F018013C0D80700
14FC481480000E1570023F1300001E91C7FC121CA2C75AA2147EA214FEA25CA21301A24A
1370A2010314F016E0001C5B007E1401010714C000FEEC0380010F1307010EEB0F003978
1CF81E9038387C3C393FF03FF03907C00FC027267CA427>I<13F0D803FCEB01C0D8071E
EB03E0D80E1F1307121C123C0038140F4914C01270A249131FD8F07E148012E013FEC648
133F160012015B5D0003147E5BA215FE00075C5BA214015DA314035D14070003130FEBF0
1F3901F87FE038007FF7EB1FC7EB000F5DA2141F003F5C48133F92C7FC147E147C007E13
FC387001F8EB03E06C485A383C1F80D80FFEC8FCEA03F0233679A428>I<001E1338007F
13FEEAFF811383A3EB03FC00FE13F8383800F017096AB72A>127
D E /Fk 26 90 df<15C014031407141F14FF90B5FC15803801FE3FC7FCA3147F1500A5
5C5CA513015CA513035CA513075CA5130F5CA5131F5CA3133F497EB612F0A215E01C3878
B72A>49 D<EC07F8EC3FFF91B512C0903903F01FE0903907800FF090390E0003F84914FC
49EB01FE5B0160130001E014FF13FC487E7FA449EB01FE5BEA007890C7FCED03FCA2ED07
F8ED0FF0A2ED1FE0ED3FC01680ED7F0015FE4A5A4A5AEC07E04A5A4A5A4AC7FC147C5C49
5A495AD90780136049C7FC131E4914C013705B484813014848EB038048B6FC5A003F1500
5AB7FC5DA228387CB72A>I<EC0FF0EC7FFE49B51280903903F01FC090390F800FE09039
1E0007F0011C14F8133C017F13031480A201FF1307A3EB7F00013E130F90C713F0A2ED1F
E016C0ED3F80A2ED7E005D4A5AEC0FE0D903FFC7FC15E090380001F8EC00FE157FED3F80
16C0A2ED1FE0A416F0A2001F143FD87F8014E07F12FFA2ED7FC0A249148090C712FF00FC
150000E0495A0070495A6C495A001E495A390FC03FC06CB55A000101FCC7FC38003FE025
3A7BB72A>I<166016E0150115031507150F16C0151F153F157F15FFEC01DF913803BF80
153F1406140C141C14389138707F00146014C0EB0180EB03005B010E13FE5B13185B5B5B
0001495AEA0380130012065A5A0038495A5A5AB712F8A3C73807F8005DA4140FA25DA4EC
3FF0011FB512C0A325397BB82A>I<010C1418010F147890391FE007F091B512E016C016
80160015FC4913F0013113800130C8FCA413701360A513E0EBC07F9038C3FFE09038CF81
F09038FC00FC01F0137E4848133E49133F491480C8FC151F16C0A3153FA4121FEA7F8015
7F00FF1580A390C7EAFF005A00C05C6C13015D0060495A0070495A7E003CEB1FC06C495A
6C6CB4C7FC3807FFFC000113F038007F80253A7AB72A>I<EC01FE91380FFF80023F13E0
9138FF01F0903901F80070903907F001F890380FC00390381F8007EB3F005B13FE4914F0
0001EC01C0484890C7FCA2485A120F5BA2121FEBC07F393FC3FFC09038C781F09038CE00
F84848137C01B87F01F0133F5B49EB1F8012FF4914C0A390C7FC153FA35AA3157F1680A3
16005D5DA2007E495A5D003E1303003F495A6C6C485AEC1F80260FE07FC7FC3803FFFC6C
13F038003FC0253A79B72A>I<160EA2161EA2163E163F5EA25EA25D83ED037FA21506A2
150C83ED183FA21530A2156083EDC01F14011580140303007F5C0206130F140E140C141C
0218800238130714301470146091B6FC835B913880000349C7FCA2130683491401A25BA2
4981A201708013F0486C4A1380D80FFC4A13C0B56C017F13FF93B6FC18FE383C7DBB3E>
65 D<017FB612F017FEEFFF8001009039C0003FE06E48EB1FF0EF07F814FF92C7EA03FC
18FEA21701A25B5CA21703A218FC010315074A15F8EF0FF0EF1FE0EF3FC0EF7F80010791
3801FF004AEB07FC91B612F05F9139F80007FCEE00FE010FED7F804AEC3FC0171F18E018
F0170F131F4A15F8A5013F16F04A141FA218E0173FEF7FC0137F4AECFF804C13004C5AEE
0FFCD801FFEC3FF0B812C094C7FC16F837397DB83B>I<DB07FC130692397FFF800E4AB5
EAE01E913A07FC01F03C913A1FE000787CDA7F80EB1CFC02FEC7120FD903FC1407495A49
48EC03F849481401495A4948140049C9FC5A4916F04848167012075B120FA248481660A2
5B003F1700A3485AA512FF5BA51703A2127FA25F17066C6C150EA25F121F6D5D000F5E7F
6C6C5D00034B5A6C6C4A5A6C6C020FC7FCD97F80131E6D6C137890390FF803F00103B512
C0010091C8FCEC1FF8373D77BA3C>I<017FB612F017FE717E0100D9C0007F6E48EB1FE0
EF07F002FF6E7E92C76C7E717E8484F03F805B5C19C0181FA219E013035CA513074A153F
A5010F17C04A157FA31980A2011F16FF4A1600A24D5AA24D5A013F5E4A1407604D5A4D5A
173F017F4B5A4A02FEC7FC4C5AEE07F8EE1FF0D801FFECFFC0B8C8FC16FC16C03B397DB8
3F>I<017FB712FEA301009038C000076E481300183E02FF151E92C8FC180EA45B4A1506
A3933801800CA20103EC03004A1500A25EA25E0107141E4A137E91B512FEA3ECF800010F
143C4A131CA3160C041C1306011F0218130C5CA293C71218A3013F16305C1870186018E0
A2017F15014AEC03C01707171FEF7F80D801FFEC03FFB9FC1800A237397DB839>I<017F
B712FCA301009038C0000F6E481301EF007C02FF153C92C8FC181CA45B4A150CA3181816
03010314064A1500A3160EA201075C4A133C16FC91B5FCA390390FF801F89138F0007816
38A4011F14305CA393C8FCA2133F5CA5137F5CA448487EB612E0A336397DB836>I<DB07
FE130392393FFF80074AB5EAE00F913A07FE01F81E913A1FF0003C3EDA7F80EB1E7E4AC7
EA07FEEB03FC494814034948EC01FC49481400495A495A49C9127CA24848167848481638
12075B120FA248481630A348481600A3485AA512FF5BA293B6FC18FE5D92C713C0007FEE
7F80A417FF6C7E1800A26C7EA26C6C5CA26C6C5D6C6C14036C6C14076C6CEC0E7E6D6C13
1CD93FE0EB783E903A0FFC03F01C0103B5EAC00C010091C8FCEC0FF8383D78BA41>I<01
7FB500C0B61280A24C150001009026C0000113806E486D90C7FC5F14FF92C75BA417035B
4A5DA4170713034A5DA4170F13074A5D91B7FCA302F8C7121F130F4A5DA4173F131F4A5D
A4177F133F4A5DA417FF137F4A92C8FCA448486C01037FB60081B6FCA203015C41397DB8
3E>I<013FB512E0A25B9039007FE0006E5AA2147F5DA514FF92C7FCA55B5CA513035CA5
13075CA5130F5CA5131F5CA5133F5CA4EBFFE0007FEBFFC0A2B6FC23397EB81E>I<017F
B512F0A3010001C0C8FC6E5AA214FF92C9FCA55B5CA513035CA513075CA5130F5CA4EF01
80011FED03005CA25F1706A2013F150E4A140CA2171C173C1738017F15784A14F81601EE
07F0161FD801FF14FFB8FC5FA231397DB834>76 D<90267FFF80923803FFFE81610100F0
FE00027FEE0DFCDA6FE0151B14EF02CFEE33F8A2DAC7F01563A219C71301028792380187
F0DA83F8EC0307A21806190F90260381FC140C02015F1818A218306E6C151F4916600106
04C05BA2037FEB0180A2943803003F130E010C03065CED3F805F5F197F011C6D6C5A0118
95C7FC5FA25FDB0FE05C0138ECE180013002E3C75AA216E6ED07F604FC1301137001604A
5C150301F05C00015DD807FCEE07FEB500E0D9C003B512FC150116804F397DB84C>I<90
267FFFC00103B51280A26F1600D9007F9138003FF06FEC0F8072C7FCECEFF802CF1506EC
C7FCA2ECC3FE180E903801C1FF0281150C02807FA26F7E181C01036D7E020015186F7EA2
6F7E1838496D7E010616306F7EA26F7E6F1470010E1580010C027F136017C0163F17E004
1F13E0011C15F00118020F5B17F8160717FCEE03FD013815FF01306E5BA282A2177F1370
01606FC8FCA201F0811201D807FC81B512E017065C41397DB83E>I<ED0FFC92B57E9139
03F80FE091390FC003F8023FC77E027E147ED901F8804948EC1F804948EC0FC0494815E0
49481407013F16F049C8FC01FEED03F812014916FC1203491501000717FE485AA2121F5B
A2123F17035B127FA54848ED07FCA4EF0FF8A3EF1FF0127F18E0173F18C0EF7F806C7EEF
FF005F001F15016D4A5A000F5E6C6C4A5A4C5A6C6C4A5A6C6C4AC7FC6C6C147E017F495A
90391F8007F090390FF01FC0902601FFFEC8FC9038003FF0373D77BA41>I<017FB612E0
17FC17FF0100D9C00013C06E48EB1FE0EF0FF002FFEC07F892C7EA03FCA318FEA25B5CA4
18FC010315075C18F8EF0FF0A2EF1FE00107ED3FC04AEC7F00EE01FEEE0FF891B612E094
C7FCD90FF8C9FC5CA5131F5CA5133F5CA5137F5CA448487EB67EA337397DB839>I<017F
B6FC17F017FC01009038C003FF913A7F80007FC0EF1FE002FF6E7E92C7FC717EA284A25B
5CA44D5A13034A5D4D5A604D5A4DC7FC0107EC01FE4AEB03F8EE3FE091B6C8FC16FC9138
F8007F010FEC1FC04A6D7E707E83160383131F5CA5013F14075CA5017F17C05CA2180119
8048486C1503B6D880031400706C5A92C7130ECAEA3FFCEF07F03A3B7DB83D>82
D<DA03FC133091391FFF8070027FEBE0F0903A01FC03F1E0903903F0007B4948133F4948
131F4948130F49C71207013E15C0017E14035BA3000115014915807FA46D91C7FC7F8014
E06C13FEECFFC06D13FC6D13FF16C06D14F00107801301D9003F7F14039138007FFE1507
15036F7E81A2821218A30038157EA45EA2007C5D1501007E4A5A007F5D6D495A6D495AD8
F9F0013FC7FCD8F0FE13FE90383FFFF8D8E00F13E0D8C00190C8FC2C3D7CBA2E>I<0007
B812FCA3903AF8007FE003D80FC090383FC00049163C000EC7127F001E4B131C121CA212
180038170C003014FF93C7FCA25A1818A2485BC7491400A514035DA514075DA5140F5DA5
141F5DA5143F5DA3147F4A7E0003B612F85AA2363977B83C>I<B6D88007B5FCA2030014
FE000101809038007FE06C90C8EA1F00170E5A49150CA4171C1203491518A41738120749
1530A41770120F491560A417E0121F495DA41601123F495DA3160394C7FCA25E1606160E
001F150C161C5E6C6C14785E6C6C495A00034A5A6D495A6C6C011FC8FC39007F80FC6DB4
5A010F13E0010190C9FC383B74B83E>I<011FB539C00FFFFE495D16809028007FFC0003
13C0DA3FF0903801FC00715A021F15E0020F4A5A6F5C4DC7FC6E6C5B170E6E6C130C5F6E
6C5B5F6EEB80E0EE81C092387FC18004C3C8FCED3FE616EEED1FFC5E5E6F7EA26F7EA26F
7E1507ED0DFF151903387F5D9238607FC015C0913801803FDA03007F5C020E6D7E140C4A
6D7E5C02706D7E5C49486D7E5C49C76C7E5B010E6E7F133E017F4A7F2603FF80497FB500
F0013FEBFF80A33F397EB83E>88 D<B691381FFFE0A24A5C000301E0913807FE00C649EC
03F060017F1680A26D6C4AC7FC17066D6C5C5F17386D6C14305F6D6C5C16016D6C5C4CC8
FC6E13066D140E160C6D6D5A16386E6C5A16606F5AEC3FE1EDE380DA1FF3C9FC15F6EC0F
FE5D5D14075D140FA55D141FA55D143FA5ECFFE0017FEBFFC05EA23B3976B83E>I
E /Fl 84 128 df<B912FEA3000190C7000113006C5EB3B3AD486D497EB648B512FEA337
397DB83E>5 D<B812FEA3D87FE0C7121F16016C6CEC007F6C6C151FA26C6C816C6C81A2
6C6C816C7F7E6E15806D6C14016D7EA26D7E6D6C91C7FCA26D7E6D7EA26D7F6D7FA26E7E
143FA26E5A6E5A6EC9FC140E5C5C14300270EC01805C495A495A49C81203010E16005B5B
495D5B48485D48485D90C95A485E000E4B5A48ED1FFE003FB7FC5AB8FCA231397BB83C>
I<DA0FF813FC91397FFF07FF903B01F807DF83C0903A07E001FF0F903B1F8007FE1FE090
393F000FFC137E16F85B9338F007804848010790C7FC1503ACB812F8A32801F80003F0C7
FCB3AB486C497E267FFFE0B512F0A3333B7FBA30>11 D<EC0FF8EC7FFE903901F8078090
3907E001C090391F8000E090383F0007017E497EA25BA2485A6F5AED018092C8FCA9ED03
F0B7FCA33901F8000F1503B3AA486C497E267FFFE0B512C0A32A3B7FBA2E>I<EC0FFC91
387FFF70903901F803F0903807E00790381F800FEB3F00137EA25B150748481303ADB7FC
A33901F80003B3AB486C497E267FFFE0B512C0A32A3B7FBA2E>I<DA0FF0EB1FF0DA7FFE
EBFFFC903B01F80F83F00F903C07E001CFC00380903C1F8000FF0001C090273F0007FE13
0F017E4948497EA2495CA248485C03076E5A03030203C7FC95C8FCA9F007E0BAFCA33C01
F80003F0001F1807B3AA486C496C497E267FFFE0B500C1B51280A3413B7FBA45>I<121C
127FEAFF80A8EA7F00AB123EAB121CABC7FCA8121C127FEAFF80A5EA7F00121C093C79BB
17>33 D<001C131C007F137F39FF80FF80A26D13C0A3007F137F001C131C00001300A400
01130101801380A20003130301001300485B00061306000E130E485B485B485B00601360
1A197DB92A>I<141FEC7FC0903801F0E0903803C0600107137090380F803090381F0038
1518A25BA2133E133F15381530A215705D5D140190381F838092CAFC1487148E02DC49B5
1280EB0FF85C4A9039003FF8000107ED0FC06E5D71C7FC6E140E010F150CD91DFC141C01
391518D970FE143801E015302601C07F1470D803805D00076D6C5BD80F00EBC00148011F
5C4890380FE003003E6E48C8FC007E903807F8060203130E00FE6E5A6E6C5A1400ED7F70
6C4B13036F5A6F7E6C6C6D6C5B7013066C6C496C130E6DD979FE5B281FF001F07F133C3C
07F80FE03FC0F86CB539800FFFF0C69026FE000313C0D91FF0D9007FC7FC393E7DBB41>
38 D<121C127FEAFF80A213C0A3127F121C1200A412011380A2120313005A1206120E5A
5A5A12600A1979B917>I<146014E0EB01C0EB0380EB0700130E131E5B5BA25B485AA248
5AA212075B120F90C7FCA25A121EA2123EA35AA65AB2127CA67EA3121EA2121F7EA27F12
077F1203A26C7EA26C7E1378A27F7F130E7FEB0380EB01C0EB00E01460135278BD20>I<
12C07E12707E7E7E120F6C7E6C7EA26C7E6C7EA21378A2137C133C133E131EA2131F7FA2
1480A3EB07C0A6EB03E0B2EB07C0A6EB0F80A31400A25B131EA2133E133C137C1378A25B
A2485A485AA2485A48C7FC120E5A5A5A5A5A13527CBD20>I<121C127FEAFF80A213C0A3
127F121C1200A412011380A2120313005A1206120E5A5A5A12600A19798817>44
D<B512FCA516057F941C>I<121C127FEAFF80A5EA7F00121C0909798817>I<150C151EA2
153E153CA2157C1578A215F815F0A2140115E0A2140315C0A214071580A2140F15005C14
1EA2143E143CA2147C1478A214F85CA213015CA213035CA213075CA2130F91C7FCA25B13
1EA2133E133CA2137C1378A213F85BA212015B12035BA212075BA2120F90C8FCA25A121E
A2123E123CA2127C1278A212F85AA212601F537BBD2A>I<EB03F8EB1FFF90387E0FC090
38F803E03901E000F0484813780007147C48487FA248C77EA2481580A3007EEC0FC0A600
FE15E0B3007E15C0A4007F141F6C1580A36C15006D5B000F143EA26C6C5B6C6C5B6C6C48
5A6C6C485A90387E0FC0D91FFFC7FCEB03F8233A7DB72A>I<EB01C013031307131F13FF
B5FCA2131F1200B3B3A8497E007FB512F0A31C3879B72A>I<EB0FF0EB7FFE48B57E3903
E03FE0390F000FF0000E6D7E486D7E486D7E123000706D7E126012FCB4EC7F807FA56CC7
FC121CC8FCEDFF00A34A5A5D14035D4A5A5D140F4A5A4A5A92C7FC147C5C495A495A495A
495A91C8FC011EEB01805B5B49130348481400485A485A000EC75A000FB6FC5A5A485CB6
FCA321387CB72A>I<EB07F8EB3FFF4913C03901F80FF03903C007F848486C7E380E0001
000F80381FE0006D7FA56C5A6C5AC85A1401A25D4A5AA24A5A5DEC0F80027EC7FCEB1FFC
ECFF809038000FE06E7EEC01FC816E7EED7F80A216C0A2153F16E0A2121EEA7F80487EA4
16C049137F007F1580007EC7FC0070ECFF006C495A121E390F8003F83907F00FF00001B5
12C06C6C90C7FCEB0FF8233A7DB72A>I<1538A2157815F8A2140114031407A2140F141F
141B14331473146314C313011483EB030313071306130C131C131813301370136013C012
01EA038013005A120E120C5A123812305A12E0B712F8A3C73803F800AB4A7E0103B512F8
A325397EB82A>I<0006140CD80780133C9038F003F890B5FC5D5D158092C7FC14FC3806
7FE090C9FCABEB07F8EB3FFE9038780F803907E007E090388003F0496C7E12066E7EC87E
A28181A21680A4123E127F487EA490C71300485C12E000605C12700030495A00385C6C13
03001E495A6C6C485A3907E03F800001B5C7FC38007FFCEB1FE0213A7CB72A>I<EC3FC0
903801FFF0010713FC90380FE03E90383F800790387E001F49EB3F804848137F485AA248
5A000FEC3F0049131E001F91C7FCA2485AA3127F90C9FCEB01FC903807FF8039FF1E07E0
90383801F0496C7E01607F01E0137E497FA249148016C0151FA290C713E0A57EA56C7E16
C0A2121FED3F807F000F15006C6C5B15FE6C6C5B6C6C485A3900FE07F090383FFFC06D90
C7FCEB03FC233A7DB72A>I<12301238123E003FB612E0A316C05A168016000070C71206
0060140E5D151800E01438485C5D5DC712014A5A92C7FC5C140E140C141C5CA25CA214F0
495AA21303A25C1307A2130FA3495AA3133FA5137FA96DC8FC131E233B7BB82A>I<EB03
F8EB1FFF017F13C09038FC07F03901E001F848486C7E4848137C90C77E48141E000E141F
001E80A3121FA27F5D01E0131E6C6C133E01FC133C6D5B6C6C6C5AECC1E06CEBF3C06C01
FFC7FC6C5BEB3FFF6D13C081017F13F801F07F3903E07FFE3907801FFF48486C13804813
03003E6D13C0003CEB007F007C143F0078EC0FE000F814075A1503A21501A36C15C01278
1503007C15806CEC07006C5C6C6C131ED807E0137C3903F803F0C6B55A013F1380D907FC
C7FC233A7DB72A>I<EB03F8EB1FFF017F13C09038FC07E03903F803F048486C7E48486C
7E49137E121F48487FA2007F158090C7FCA248EC1FC0A616E0A56C143FA27F123F001F14
7FA26C6C13FF6C6C13DF000313013901F0039F3900FC0F1FD93FFC13C0EB07F090C7FC15
3F1680A316005D000F147E487E486C5BA24A5A4A5A49485A6C48485A001C495A260F807F
C7FC3807FFFC000113F038003FC0233A7DB72A>I<121C127FEAFF80A5EA7F00121CC7FC
B2121C127FEAFF80A5EA7F00121C092479A317>I<121C127FEAFF80A5EA7F00121CC7FC
B2121C127F5A1380A4127F121D1201A412031300A25A1206A2120E5A121812385A126009
3479A317>I<007FB812F8B912FCA26C17F8CCFCAE007FB812F8B912FCA26C17F836167B
9F41>61 D<EB3FE03801FFFE3907C03F80390E000FC0003CEB07F000301303007014F800
7C130100FE14FC7EA4127E003CEB03F8C7FCEC07F0A2EC0FE0EC1F80EC3F00147E147C5C
495A5C495A5CA249C7FCA31306AA90C8FCA8130EEB3F80497EA56D5A010EC7FC1E3B7CBA
27>63 D<1538A3157CA315FEA34A7EA34A6C7EA202077FEC063FA2020E7FEC0C1FA2021C
7FEC180FA202387FEC3007A202707FEC6003A202C07F1501A2D901807F81A249C77F167F
A20106810107B6FCA24981010CC7121FA2496E7EA3496E7EA3496E7EA213E0707E120148
6C81D80FFC02071380B56C90B512FEA3373C7DBB3E>65 D<B712E016FC16FF0001903980
007FC06C90C7EA1FE0707E707E707EA2707EA283A75F16035F4C5A4C5A4C5A4C5AEEFF80
91B500FCC7FCA291C7EA7F80EE1FE0EE07F0707E707E83707EA21880177F18C0A7188017
FFA24C13005F16034C5AEE1FF8486DEB7FF0B812C094C7FC16F832397DB83B>I<913A01
FF800180020FEBE003027F13F8903A01FF807E07903A03FC000F0FD90FF0EB039F4948EB
01DFD93F80EB00FF49C8127F01FE153F12014848151F4848150FA248481507A2485A1703
123F5B007F1601A35B00FF93C7FCAD127F6DED0180A3123F7F001F160318006C7E5F6C7E
17066C6C150E6C6C5D00001618017F15386D6C5CD91FE05C6D6CEB03C0D903FCEB0F8090
2701FF803FC7FC9039007FFFFC020F13F002011380313D7BBA3C>I<B712C016F816FE00
0190398001FF806C90C7EA3FE0EE0FF0EE03F8707E707E177FA2EF3F8018C0171F18E017
0F18F0A3EF07F8A418FCAC18F8A4EF0FF0A218E0A2171F18C0EF3F80A2EF7F0017FE4C5A
4C5AEE0FF0EE3FE0486DEBFF80B8C7FC16F816C036397DB83F>I<B812FCA30001903880
000F6C90C71201EE007E173E171E170EA31706A317078316C0A394C7FCA31501A2150315
0F91B5FCA3EC000F15031501A21500A21860A318E093C712C0A41701A3EF0380A21707A2
170F173F177F486D903807FF00B9FCA333397DB839>I<B812F8A30001903880001F6C90
C71201EE00FC177C173C171CA2170CA4170E1706A2ED0180A21700A41503A21507151F91
B5FCA3EC001F15071503A21501A692C8FCAD4813C0B612C0A32F397DB836>I<DBFF8013
C0020FEBF001023F13FC9139FF803F03903A03FC000787D90FF0EB03CF4948EB00EF4948
147F4948143F49C8121F485A4848150F48481507A248481503A2485A1701123F5B007F16
00A448481600AB93B6FCA26C7E9338007FE0EF3FC0A2123F7F121FA26C7EA26C7EA26C7E
6C7E6C6C157F6D7E6D6C14FF6D6C14EFD90FF8EB03C7D903FEEB0783903A00FFC03F0191
393FFFFC00020F01F0130002001380383D7CBA41>I<B648B512FEA30001902680000313
006C90C76C5AB3A491B6FCA391C71201B3A6486D497EB648B512FEA337397DB83E>I<B6
12C0A3C6EBC0006D5AB3B3AD497EB612C0A31A397EB81E>I<013FB512E0A39039001FFC
00EC07F8B3B3A3123FEA7F80EAFFC0A44A5A1380D87F005B0070131F6C5C6C495A6C49C7
FC380781FC3801FFF038007F80233B7DB82B>I<B649B5FCA3000101809038007FF06C90
C8EA3F80053EC7FC173C17385F5F4C5A4C5A4CC8FC160E5E5E5E5E4B5AED0780030EC9FC
5D153E157E15FF5C4A7F4A6C7E140E4A6C7E4A6C7E14704A6C7E4A6C7E14804A6C7E6F7E
A26F7F707EA2707E707EA2707EA2707E707EA2707E707F8484486D497FB6011FEBFF80A3
39397DB841>I<B612E0A3000101C0C8FC6C90C9FCB3AD1718A517381730A31770A317F0
A216011603160FEE1FE0486D13FFB8FCA32D397DB834>I<B5933807FFF86E5DA20001F0
FC002600DFC0ED1BF8A2D9CFE01533A3D9C7F01563A3D9C3F815C3A2D9C1FCEC0183A3D9
C0FEEC0303A2027F1406A36E6C130CA36E6C1318A26E6C1330A36E6C1360A26E6C13C0A3
913901FC0180A3913900FE0300A2ED7F06A3ED3F8CA2ED1FD8A3ED0FF0A3486C6D5A487E
D80FFC6D48497EB500C00203B512F8A2ED018045397DB84C>I<B5913807FFFE8080C692
38007FE06EEC1F80D9DFF0EC0F001706EBCFF8EBC7FCA2EBC3FEEBC1FFA201C07F6E7EA2
6E7E6E7E81140F6E7E8114036E7E168080ED7FC016E0153FED1FF0ED0FF8A2ED07FCED03
FEA2ED01FF6F1386A2EE7FC6EE3FE6A2EE1FF6EE0FFEA216071603A216011600A2177E48
6C153E487ED80FFC151EB500C0140EA2170637397DB83E>I<EC03FF021F13E09138FE01
FC903901F8007ED907E0EB1F8049486D7ED93F80EB07F049C76C7E01FE6E7E48486E7E49
157E0003167F4848ED3F80A24848ED1FC0A2001F17E049150F003F17F0A3007F17F84915
07A300FF17FCAC007F17F86D150FA3003F17F0A26C6CED1FE0A36C6CED3FC0000717806D
157F000317006C6C15FEA26C6C4A5A017F4A5A6D6C495A6D6C495AD907E0EB1F80D903F8
017FC7FC903900FE01FC91381FFFE0020390C8FC363D7BBA41>I<B712C016F816FE0001
90398001FF806C90C7EA3FC0EE0FE0EE07F0EE03F817FC17FE1601A217FFA717FEA2EE03
FCA2EE07F817F0EE0FE0EE3FC0923801FF0091B512FC16F091C9FCB3A5487FB6FCA33039
7DB839>I<B612FEEDFFE016F8000190388007FE6C90C76C7EEE3FC0707E707E707EA270
7EA283A65FA24C5AA24C5A4C5AEE3F8004FFC8FCED07FC91B512E05E9138000FF0ED03F8
ED00FE82707E707EA2161F83A583A6F00180A217F8160F1803486D01071400B66D6C5A04
011306933800FE0ECAEA3FFCEF07F0393B7DB83D>82 D<D90FF813C090383FFE0190B512
813903F807E33907E000F74848137F4848133F48C7121F003E140F007E1407A2007C1403
12FC1501A36C1400A37E6D14006C7E7F13F86CB47E6C13F8ECFF806C14E06C14F86C14FE
C680013F1480010714C0EB007F020713E0EC007FED3FF0151F150FED07F8A200C01403A2
1501A37EA216F07E15036C15E06C14076C15C06C140F6DEB1F80D8FBF0EB3F00D8F0FE13
FE39E03FFFF8010F13E0D8C00190C7FC253D7CBA2E>I<003FB812E0A3D9C003EB001F27
3E0001FE130348EE01F00078160000701770A300601730A400E01738481718A4C71600B3
B0913807FF80011FB612E0A335397DB83C>I<B6903807FFFEA3000101809038007FE06C
90C8EA1F80EF0F001706B3B2170E6D150C80171C133F17186D6C14385F6D6C14F06D6C5C
6D6C495A6D6CEB07806D6C49C7FC91387F807E91381FFFF8020713E09138007F80373B7D
B83E>I<B500FC91387FFF80A30003018091380FFC006C90C8EA07E0715A6C705A6E1403
017F93C7FCA280013F1506A26E140E011F150C80010F5DA28001075DA26E147001031560
A26D6C5CA2806D4A5AA2ED8003027F91C8FCA291383FC006A215E0021F5BA2EDF01C020F
1318A26E6C5AA215FC02035BA2EDFEE002015BA26E6C5AA36FC9FCA3153EA2151CA3393B
7EB83E>I<B5D8FC07B5D8F001B5FCA30007902780001FFEC7EA1FF86C48C7D80FF8EC07
E000010307ED03C01B807F6C6F6C1500A26E5F017F6E6C1406A280013F4A6C5CA280011F
4A6D5BEE067FA26D6C010E6D5BEE0C3FA26D6C011C6D5BEE181FA26D6C6F5BEE300FA26D
6C6F485AEE6007A26D6C4CC7FC9338C003FCA203805D913B7F818001FE06A203C1150EDA
3FC3C7EAFF0CA203E3151CDA1FE6EC7F98A215F6DA0FFCEC3FF0A302075E4B141FA20203
5E4B140FA202015E4B1407A2020093C8FC4B80503B7EB855>I<003FB7FCA39039FC0001
FE01C0130349495A003EC7FC003C4A5A5E0038141F00784A5A12704B5A5E006014FF4A90
C7FCA24A5A5DC712074A5AA24A5A5D143F4A5AA24A5A92C8FC5B495AA2495A5C130F4948
EB0180A2495A5C137F495A16034890C7FC5B1203485AEE0700485A495C001F5D48485C5E
4848495A49130FB8FCA329397BB833>90 D<EAFFF8A4EAF000B3B3B3B3A3EAFFF8A40D53
78BD17>I<3901800180000313033907000700000E130E485B0018131800381338003013
300070137000601360A200E013E0485BA400CE13CE39FF80FF806D13C0A3007F137FA239
3F803F80390E000E001A1974B92A>I<EAFFF8A4EA0078B3B3B3B3A3EAFFF8A40D537FBD
17>I<EB1FE0EBFFFC3803E03F3907000F80390F8007E0486C6C7E13E06E7EA26E7E6C5A
6C5AC8FCA4147FEB07FFEB3FE0EBFE00EA03F8EA0FF0EA1FC0123F485A90C7FC160C12FE
A31401A26C13036CEB077C903980063E18383FC01E3A0FE0781FF03A03FFF00FE03A007F
8007C026277DA52A>97 D<EA03F012FFA3120F1203B0EC1FE0EC7FF89038F1E03E9039F3
801F809039F7000FC001FEEB07E049EB03F049EB01F85BED00FCA216FEA2167E167FAA16
7E16FEA216FC15016D14F8ED03F07F01EEEB07E001C6EB0FC09039C7801F00903881E07E
903800FFF8C7EA1FC0283B7EB92E>I<EB03FC90381FFF8090387E03E03901F800704848
13F83907E001FC380FC003A2EA1F80123F90380001F848EB00F01500A2127E12FEAA127E
127FA26C14067F001F140E6D130C000F141C6C6C13386C6C13706C6C13E039007C07C090
381FFF00EB07F81F277DA525>I<ED0FC0EC03FFA3EC003F150FB0EB03F8EB1FFF90387E
078F9038F801EF3903F0007F4848133F4848131FA24848130F123F90C7FC5AA2127E12FE
AA127E127FA27EA26C6C131FA26C6C133F6C6C137F6C6CEBEFF03A01F801CFFF39007C07
8F90381FFE0FD907F813C0283B7DB92E>I<EB07F8EB1FFF90387C0FC03901F803E03903
F001F0D807E013F8380FC0004848137CA248C7127E153E5A153F127E12FEA3B7FCA248C8
FCA5127EA2127FA26C14037F001F14076C6C13060007140E6D131CD801F013386C6C1370
90387E03E090381FFF80903803FC0020277EA525>I<147E903803FF8090380FC1E0EB1F
8790383F0FF0137EA213FCA23901F803C091C7FCADB512FCA3D801F8C7FCB3AB487E387F
FFF8A31C3B7FBA19>I<ED03F090390FF00FF890393FFC3C3C9039F81F707C3901F00FE0
3903E007C03A07C003E010000FECF000A248486C7EA86C6C485AA200075C6C6C485A6D48
5A6D48C7FC38073FFC38060FF0000EC9FCA4120FA213C06CB512C015F86C14FE6CECFF80
4815C03A0F80007FE048C7EA0FF0003E140348140116F8481400A56C1401007C15F06CEC
03E0003F1407D80F80EB0F80D807E0EB3F003901FC01FC39007FFFF0010790C7FC26387E
A52A>I<EA03F012FFA3120F1203B0EC0FF0EC3FFCECF03F9039F1C01F809039F3800FC0
EBF70013FE496D7EA25BA35BB3A3486C497EB500C1B51280A3293A7EB92E>I<EA0380EA
0FE0487EA56C5AEA0380C8FCAAEA03F012FFA312071203B3AA487EB512C0A312387EB717
>I<EB01C0EB07F0EB0FF8A5EB07F0EB01C090C7FCAAEB01F813FFA313071301B3B3A212
3C127E00FF13F01303A214E038FE07C0127C383C0F00EA0FFEEA03F8154984B719>I<EA
03F012FFA3120F1203B1913801FFFCA39138007FC01600157C15705D4A5A4A5A4AC7FC14
1E1438147814FC13F1EBF3FEEBF73F01FE7FEBF81F496C7E8114076E7E6E7E811400157E
157F811680ED1FC0486CEB3FF0B500C0B5FCA3283A7EB92C>I<EA03F012FFA3120F1203
B3B3AD487EB512C0A3123A7EB917>I<2703F00FF0EB1FE000FFD93FFCEB7FF8913AF03F
01E07E903BF1C01F83803F3D0FF3800FC7001F802603F70013CE01FE14DC49D907F8EB0F
C0A2495CA3495CB3A3486C496CEB1FE0B500C1B50083B5FCA340257EA445>I<3903F00F
F000FFEB3FFCECF03F9039F1C01F803A0FF3800FC03803F70013FE496D7EA25BA35BB3A3
486C497EB500C1B51280A329257EA42E>I<EB03FE90380FFF8090383E03E09038F800F8
4848137C48487F48487F4848EB0F80001F15C090C712074815E0A2007EEC03F0A400FE15
F8A9007E15F0A2007F14076C15E0A26C6CEB0FC0000F15806D131F6C6CEB3F006C6C137E
C66C13F890387E03F090381FFFC0D903FEC7FC25277EA52A>I<3903F01FE000FFEB7FF8
9038F1E07E9039F3801F803A07F7000FC0D803FEEB07E049EB03F04914F849130116FC15
0016FEA3167FAA16FEA3ED01FCA26DEB03F816F06D13076DEB0FE001F614C09039F7803F
009038F1E07E9038F0FFF8EC1FC091C8FCAB487EB512C0A328357EA42E>I<D903F813C0
90381FFE0190387E07819038FC01C33903F000E3000714774848133749133F001F141F48
5A150F48C7FCA312FEAA127FA37E6D131F121F6D133F120F6C6C137F6C6C13EF3901F801
CF39007E078F90381FFE0FEB07F890C7FCABED1FE00203B5FCA328357DA42C>I<3807E0
1F00FFEB7FC09038E1E3E09038E387F0380FE707EA03E613EE9038EC03E09038FC008049
1300A45BB3A2487EB512F0A31C257EA421>I<EBFF03000313E7380F80FF381E003F487F
487F00707F12F0A2807EA27EB490C7FCEA7FE013FF6C13E06C13F86C7F00037FC67F0107
1380EB007F141F00C0EB0FC01407A26C1303A37E15806C13077EEC0F00B4131E38F3C07C
38E1FFF038C03F801A277DA521>I<1318A51338A31378A313F8120112031207001FB5FC
B6FCA2D801F8C7FCB215C0A93800FC011580EB7C03017E13006D5AEB0FFEEB01F81A347F
B220>I<D803F0EB07E000FFEB01FFA3000FEB001F00031407B3A4150FA3151F12016D13
3F0000EC77F86D9038E7FF8090383F03C790381FFF87903A03FC07E00029267EA42E>I<
B538803FFEA33A0FF8000FF06C48EB07E00003EC03C06D148000011500A26C6C1306A26D
130E017E130CA26D5BA2EC8038011F1330A26D6C5AA214E001075BA2903803F180A3D901
FBC7FCA214FF6D5AA2147CA31438A227257EA32C>I<B53A1FFFE03FFEA3260FF8009038
000FF86C48017EEB03E018C00003023EEB0180A26C6C013FEB0300A36C6CEC8006156FA2
017E9038EFC00C15C7A2D93F016D5A15830281EBF038D91F831430150102C3EBF8709026
0FC6001360A2D907E66D5A02EC137CA2D903FCEB7F804A133FA2010192C7FC4A7FA20100
141E4A130E0260130C37257EA33C>I<B538807FFFA33A03FE003FF00001EC1F80000092
C7FC017E131C6D13186D6C5AECC070010F5B6D6C5AECF180EB03FB6DB4C8FC6D5AA2147F
804A7E8114CF903801C7E090380383F090380703F8EB0601496C7E011C137E49137F0178
7F496D7E486C80000FEC3FF0D8FFFE90B51280A329247FA32C>I<B538803FFEA33A0FF8
000FF06C48EB07C00003EC03806C7E16007F00001406A2017E5BA2137F6D5BA26D6C5AA2
ECC070010F1360A26D6C5AA214F101035BA2D901FBC7FCA214FF6D5AA2147CA31438A214
30A214701460A25CA2EA7C0100FE5B130391C8FC1306EAFC0EEA701C6C5AEA1FF0EA0FC0
27357EA32C>I<003FB512FCA2EB8003D83E0013F8003CEB07F00038EB0FE012300070EB
1FC0EC3F800060137F150014FE495AA2C6485A495AA2495A495A495AA290387F000613FE
A2485A485A0007140E5B4848130C4848131CA24848133C48C7127C48EB03FC90B5FCA21F
247EA325>I<B81280A2290280962A>I<001C131C007F137F39FF80FF80A5397F007F0000
1C131C190978B72A>127 D E /Fm 38 122 df<157815FC14031407141F14FF130F0007
B5FCB6FCA2147F13F0EAF800C7FCB3B3B3A6007FB712FEA52F4E76CD43>49
D<EC3FFE0103B512E0010F14FC013F14FF90B712C048D9C07F7F2703FE000F13F8D807F8
01037FD80FE06D7F48486D7F48488001F01680486C6E13C07F486C6E13E07FA27013F0A5
6C5AA26C5AEA0FF0EA03C0C914E05EA218C05E1880A24C13005F4C5A4B5B5F4B5B5F4B5B
4B90C7FC4B5A5E4B5AED7FE04B5A4A5B4A48C8FC4A5A5D4A48EB01F04A5AEC3F804AC7FC
02FEEC03E0495A495A495A495AD91F80140749C8FC013E150F017FB7FC90B812C05A5A5A
5A5A5A5AB9FC1880A4344E79CD43>I<91380FFFC091B512FC0107ECFF80011F15E09026
3FF8077F9026FF800113FC4848C76C7ED803F86E7E491680D807FC8048B416C080486D15
E0A4805CA36C17C06C5B6C90C75AD801FC1680C9FC4C13005FA24C5A4B5B4B5B4B13C04B
5BDBFFFEC7FC91B512F816E016FCEEFF80DA000713E0030113F89238007FFE707E701380
7013C018E07013F0A218F8A27013FCA218FEA2EA03E0EA0FF8487E487E487EB57EA318FC
A25E18F891C7FC6C17F0495C6C4816E001F04A13C06C484A1380D80FF84A13006CB44A5A
6CD9F0075BC690B612F06D5D011F1580010302FCC7FCD9001F1380374F7ACD43>I<177C
17FE1601A216031607160FA2161F163F167F16FFA25D5D5DA2ED0FBF151FED3F3F157E15
7C15F81401EC03F0EC07E015C0140FEC1F80EC3F00143E5C14FC495A495A5C495A130F49
5A91C7FC133E137E5B485A5B485A1207485A5B48C8FC5A127E5ABA12C0A5C96C48C7FCAF
020FB712C0A53A4E7CCD43>I<D80380150ED807E0157E01FEEC03FED9FFF0137F91B65A
5F5F5F5F5F94C7FC5E5E16F016C093C8FC15F801E190C9FC01E0CAFCABEC0FFF027F13F0
01E3B512FE01E76E7E9026FFF8077FDAC0017F49C713F8496E7E01F0143F4981496E7E6C
481680C9FC18C08218E0A418F0A3EA0FE0487E487E487E487EA418E0A35B6C484A13C05B
491680003EC85A003F17006C6C4A5A6D5D6C6C4A5AD807F8495BD803FE01075B2701FFC0
3F5B6C90B65A013F4AC7FC6D14F8010314C09026007FF8C8FC344F79CD43>I<ED0FFF92
B512E0020780021F14FC91397FFE03FE903A01FFF0007F4901C0EB3F804990C7121F4948
EC7FC0494814FF49484913E049485B01FF5C485BA2485B5AA2486F13C04A6D1380486F13
00177E94C7FC5AA291CAFC5AA21508913801FFF8020713FFB54814C04A14F04AC66C7E02
3C6D7E4A6D7E4A6D7E7013804A15C0A24A15E07013F05C18F8A491C714FCA37EA67EA46C
17F880A27E18F06C5D18E06C6D15C07E6E4913806C6D15006D6C495A6D6CEB7FFC6DB448
485A6D90B55A010315C0010092C7FC023F13FC020713C0364F7ACD43>I<171F4D7E4D7E
A24D7EA34C7FA24C7FA34C7FA24C7FA34C7FA24C80A283047F80EE7E3F04FE8016FC8303
01814C7E03038116F0830307814C7E030F8116C083031F814C7E033F8293C7FC844B8203
7E8003FE825D840201834B800203835D840207834B80020F8392B8FCA24A83A24A8492C9
FC854A84027E8202FE845C850101854A820103855C850107854A82010F855C011F83D9FF
FC84B600F8020FB712E0A55B537BD266>65 D<BA12C019FEF1FFC01AF01AFCD8000701F0
C7000313FFDE007F7F737F070F7F737F878587858785A287A84F5BA263616361634F5B4F
5B077F90C7FC4E485A060713F892B812E097C8FC861AF003F0C7000313FE9539003FFF80
070F13E0737F07017F87737F747E1C807413C0A27413E0A31CF0A386A362A31CE0A2621C
C0A250138097B5FC1C004F5B19074F5B073F13F04EB55ABC128098C7FC1AF81AC007F8C8
FC54527CD160>I<932601FFFCEC01C0047FD9FFC013030307B600F81307033F03FE131F
92B8EA803F0203DAE003EBC07F020F01FCC7383FF0FF023F01E0EC0FF94A01800203B5FC
494848C9FC4901F8824949824949824949824949824990CA7E494883A2484983485B1B7F
485B481A3FA24849181FA3485B1B0FA25AA298C7FC5CA2B5FCAE7EA280A2F307C07EA36C
7FA21B0F6C6D1980A26C1A1F6C7F1C006C6D606C6D187EA26D6C606D6D4C5A6D6D16036D
6D4C5A6D6D4C5A6D01FC4C5A6D6DEE7F806D6C6C6C4BC7FC6E01E0EC07FE020F01FEEC1F
F80203903AFFE001FFF0020091B612C0033F93C8FC030715FCDB007F14E0040101FCC9FC
525479D261>I<BC1280A5D8000701F8C7000114C0F0001F19071901851A7F1A3F1A1FA2
F20FE0A21A07A31A03A318F81BF01A01A497C7FC1701A317031707170F177F92B6FCA592
38F8007F170F170717031701A317001B3EA31B7CA395C8FCA21BFCA21BF8A21A01A31A03
1BF01A071A0FA21A1F1A3FF27FE0F101FF1907191F0603B5FCBCFCA21BC0A34F517CD058
>69 D<B812C0A5D8000701F8C7FCB3B3B3B2B812C0A52A527CD132>73
D<B600FC073FB512FE6F61A26F96B6FCA2D80007F5C00070EF01EFA202EF6DEF03CFA202
E76DEF078FA202E36DEF0F0FA202E16D171EA302E06D173CA26F6C1778A26F6C17F0A26F
6DED01E0A26F6DED03C0A36F6DED0780A26F6DED0F00A26F6D151EA26F6D5DA3706C5DA2
706C5DA2706D495AA2706D495AA2706D495AA3706D49C7FCA2706D131EA2706D5BA2716C
5BA3716C5BA271EB81E0A271EBC3C0A271EBE780A27101FFC8FCA3715BA2715BA2725AA2
725AA2D93FFC6F5AB74DB712FEA2725AA2725A77527CD180>77 D<93380FFFC00303B6FC
031F15E092B712FC0203D9FC0013FF020F01C0010F13C0023F90C7000313F0DA7FFC0200
7F494848ED7FFE4901E0ED1FFF49496F7F49496F7F4990C96C7F49854948707F4948707F
A24849717E48864A83481B804A83481BC0A2481BE04A83A2481BF0A348497113F8A5B51A
FCAF6C1BF86E5FA46C1BF0A26E5F6C1BE0A36C6D4D13C0A26C6D4D1380A26C1B006C6D4D
5A6E5E6C626D6C4C5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B90C7FC6D6D4B5A6D
01FF02035B023F01E0011F13F0020F01FC90B512C0020390B7C8FC020016FC031F15E003
0392C9FCDB001F13E0565479D265>79 D<BAFC19F819FF1AE086D8000701F0C7001F13FC
060113FF726C13807313C0070F13E01BF0857313F81BFCA27313FEA41BFFA81BFEA31BFC
61A21BF84F13F04F13E0614F13C04F13004E485A061F5B92B812F01AC04FC7FC19E003F8
CBFCB3AEB812C0A550527CD15C>I<B912F0F0FF8019F819FF1AC0D8000701F0C714F006
0F7F060113FE727F737F737F85737F87A2737FA387A863A2616363A24F5B4F5B4F90C8FC
4F5A06035B060F13F095B512C092B8C9FC19F819E019F89226F0000313FE9439007FFF80
061F7F727F727F86727F8486A2727FA887A71D1C1D3E8785A275137E73157C7315FC736D
13F8B86C6DEBF801739038FE07F07390B512E0736C14C0080F1400CEEA7FFC5F537CD164
>82 D<91260FFF80130791B500F85B010702FF5B011FEDC03F49EDF07F9026FFFC006D5A
4801E0EB0FFD4801800101B5FC4848C87E48488149150F001F824981123F4981007F82A2
8412FF84A27FA26D82A27F7F6D93C7FC14C06C13F014FF15F86CECFF8016FC6CEDFFC017
F06C16FC6C16FF6C17C06C836C836D826D82010F821303010082021F16801400030F15C0
ED007F040714E01600173F050F13F08383A200788200F882A3187FA27EA219E07EA26CEF
FFC0A27F6D4B13806D17006D5D01FC4B5A01FF4B5A02C04A5A02F8EC7FF0903B1FFFC003
FFE0486C90B65AD8FC0393C7FC48C66C14FC48010F14F048D9007F90C8FC3C5479D24B>
I<003FBC1280A59126C0003F9038C0007F49C71607D87FF8060113C001E08449197F4919
3F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C994C7FCB3B3AC91B912F0A5
53517BD05E>I<EC7FFF0107B512F0013F14FE90B77E48D9E00F7F2703FE000113F0486C
6D7F6EEB3FFC48826E131F83707FA36C496D7FA26C90C7FC6C5AC9FCA6037FB5FC020FB6
FC91B7FC01071487013FEBF0074913803901FFFC004813F0485B485B485B4890C7FC5A5B
A2485AA45EA26D5C007F151D163D6C6C02797F6C6D01F113F86C9026C003E0EBFFE06C90
27F81FC07F13F06C90B5487EC64B7E011F01FC010713E0010101E090C8FC3C387CB641>
97 D<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE0001FFD9
7FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F1300705A4892C8
FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C6DEC3F00
6C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49C7FC0201
13E033387CB63C>99 D<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13FC91B6
FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F48498048
5B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D5C6C6D
49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE0FD900
3F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C0490181
7F903A3FFC007FF04948EB1FF8D9FFE06D7E488248496D7E48814A15805A4890C76C13C0
A24817E0A282485A18F0A312FFA390B8FCA318E049CAFCA5127FA46C7EA26C17E0EF01F0
6C7F17036C17E06C6D14076C6DEC0FC06CEE1F806D6CEC3F00D93FFC14FE6D6CEB03FC90
3A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>I<ED3FFC0203
B5FC020F14C0023F14E09139FFF81FF0499038C03FF849EB807F49903800FFFC495A495A
A2495AA2EE7FF8495AEE3FF0EE0FC093C7FCAEB712E0A526007FF8C8FCB3B3A7007FB512
FEA52E547CD329>I<DA3FFF14FF0103B5D8F00713C0010FDAFC1F13E0013FECFF7F9026
7FFC0F9038FF9FF09026FFE001EBF83F48496C13E0484990387FF01F4890C7D83FF813E0
489338FC0FC0F0078048486E6CC7FCA2003F82A9001F5EA26C6C4A5AA26C5E6C6D495A6C
6D495A6C6D485BDAFC0F5B4890B6C8FCD803EF14FC01C314F02607C03F90C9FC91CBFCA2
120FA37FA213F813FE90B7FC6C16F817FF18C06C836C836C836D828448B9FC12074848C7
00031480D81FF8EC003F4848150748486F13C083485A83A56D5D007F18806D5D003F1800
6C6C4B5AD80FFEED1FFC6C6C6CEC7FF86C01E049485A6C01FE011F5B6C6CB71280010F03
FCC7FC010115E0D9000F01FCC8FC3C4F7CB543>I<EB3FF0B5FCA51203C6FCB3A4EE1FFC
93B512C0030314F0030F8092391FE07FFC92393F001FFE037C8003F07FDAF1E081ECF3C0
DAF7807F8502FFC7FC5CA25CA45CB3ACB6D8F807B612C0A542537BD24B>I<137F497E48
7F487F487F487FA76C5B6C5B6C5B6C5B6DC7FC90C8FCADEB3FF0B5FCA512017EB3B3A6B6
12E0A51B547BD325>I<EB3FF0B5FCA51203C6FCB3A54CB512F8A59339003FFE00EF1FE0
4D5A4D5A4DC7FCEE01FCEE07F84C5A4C5AEE3F8004FFC8FC4B5A4B5AED07F0ED1FE0153F
4B7E4B7E02F37F02F77F91B5FC82039F7F030F7F4A7EDAF8037F02F0806F7F6F7F167F70
7E83707F707F8284707F707F82717E84717E1980B6D8F003B6FCA540537CD247>107
D<EB3FF0B5FCA512017EB3B3B3B1B612F0A51C537BD225>I<D93FF0D91FFCEDFFE0B591
B500C0010713FE030302F0011F6D7E030F6E017F8092271FE07FFCD9FF037F922A3F001F
FE01F8007F0003027C9126FF03E080C602F06DD90780137FDAF1E0038FC77FDAF3C0159E
DAF7806D01BC143F07FC8102FFC75C4A5EA24A5EA44A5EB3ACB6D8F807B6D8C03FB512FE
A567367BB570>I<D93FF0EB1FFCB591B512C0030314F0030F8092391FE07FFC92393F00
1FFE0003027C80C602F07FDAF1E081ECF3C0DAF7807F8502FFC7FC5CA25CA45CB3ACB6D8
F807B612C0A542367BB54B>I<913801FFE0021F13FE91B612C0010315F0010F9038807F
FC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F48496D7F4A147F48834890C86C7E
A24883A248486F7EA3007F1880A400FF18C0AC007F1880A3003F18006D5DA26C5FA26C5F
6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE011F90C7FC903A0FFF807FFC
6D90B55A010015C0023F91C8FC020113E03A387CB643>I<903A3FF001FFE0B5010F13FE
033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FFE0EB1FFFC602806D7F92C7
6C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A0060A36118FFA2615F616E4A
5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE075B02F8B612E06F148003
1F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<90397FE003FEB590380FFF80
033F13E04B13F09238FE1FF89139E1F83FFC0003D9E3E013FEC6ECC07FECE78014EF1500
14EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55CB3AAB612FCA52F367CB537>114
D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF81307D81FE0130148487F4980
127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13FF15F86C14FF16C06C15F06C
816C816C81C681013F1580010F15C01300020714E0EC003F030713F015010078EC007F00
F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001F8EC7F0001FEEB01FE9039FF
C00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C387CB635>I<143EA6147EA414
FEA21301A313031307A2130F131F133F13FF5A000F90B6FCB8FCA426003FFEC8FCB3A9EE
07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEBF0FC6DEBFFF86D6C5B021F5B0203
13802A4D7ECB34>I<D93FF8913801FFC0B50207B5FCA50003ED001FC61607B3AE5FA35F
A2017F5D173B177B6D6C14F3DC01E313F06D6CD907C3EBFFC0903A0FFFC03F836D90B512
03010114FE6D6C13F8020701E091C7FC42377BB54B>I<B6D8E07FB5D8C003B512C0A500
0101F0C701F0C7381FF8006E027FED07E06C715DA26E023F150F017F705D6E181F013F70
92C7FC177F6E606D92B5143E6F177E6D71137C5E03C001F315FC6D02036E5B03E001E114
016D05E05B160703F001C014036D020F02F05B03F8EB807FF1F8076D021F5E03FCD9003F
130F027F04FC5B5EDBFE3E90381FFE1F023F017E93C8FCDBFF7C010F5B6EEEFF3E16FC4C
6D13FE6E5F4C7F6E5FA24C7F6E5F4C7F6E5FA24C147F6E5F93C8123F6F5EA2033E6FC9FC
5A357DB461>119 D<007FB500F090387FFFFEA5C66C48C7000F90C7FC6D6CEC03F86D6D
495A6D6D495A6D4B5A6F495A6D6D91C8FC6D6D137E6D6D5B91387FFE014C5A6E6C485A6E
EB8FE06EEBCFC06EEBFF806E91C9FCA26E5B6E5B6F7E6F7EA26F7F834B7F4B7F92B5FCDA
01FD7F03F87F4A486C7E4A486C7E020F7FDA1FC0804A486C7F4A486C7F02FE6D7F4A6D7F
495A49486D7F01076F7E49486E7E49486E7FEBFFF0B500FE49B612C0A542357EB447>I<
B600F00107B5FCA5C601F8C8EA7FC06EED3F00A26D6C153E187E013F167C6E15FC6D5E6F
13016D5E6F13036D5E8117076D6D5C170F6D6D5C171F6D93C7FC6F5B027F143E6F137E02
3F147C6F13FCA26E6D5A16816EEBC1F016C36E5C16E76E5C16FF6E5CA26E91C8FCA36F5A
A26F5AA26F5AA26F5AA26F5AA35E150F5E151F93C9FC5DD81FC0133E486C137E486C137C
486C13FC5D14015D14034A5A6C48485A49485A263FC07FCAFCEB81FE6CB45A6C13F00003
5BC690CBFC404D7DB447>I E /Fn 36 128 df<123C127EB4FCA21380A2127F123D1201
A412031300A25A1206120E120C121C5A5A126009177A8715>44 D<B512F0A514057F921A
>I<123C127E12FFA4127E123C08087A8715>I<15301578A215F815F0A2140115E0A21403
15C014071580A2140F1500A25C141EA2143E143CA2147C1478A214F85C13015CA213035C
A213075CA2130F91C7FCA25B131EA2133E133CA2137C137813F85BA212015BA212035BA2
12075BA2120F90C8FCA25A121E123E123CA2127C1278A212F85AA212601D4B7CB726>I<
15E0A34A7EA24A7EA34A7EA3EC0CFEA3EC187FA202387FEC303FA202607F151FA24A6C7E
A349486C7EA2010380EC0003A20106801501A2496D7E010FB5FCA249800118C77E013881
0130143FA24981161FA2496E7EA21201707E487ED81FF0EC1FF8D8FFFE49B512E0A33335
7DB43A>65 D<DA03FE130C91393FFF801C91B512E0903A03FE01F83C903A0FF0003C7CD9
3FC0EB0EFC49C7120701FE140348481401484814000007167C5B4848153C121F49151C12
3F5B127F170CA348CAFCAB6C7E170CA3123F7F001F161C6D1518000F16386C7E6D157012
036C6C15E06C6CEC01C0017FEC0380D93FC0EB0F00D90FF0131ED903FE13FC0100B512F0
023F13C0DA03FEC7FC2E357CB337>67 D<B812C0A3D803FCC7127F0001150FEE03E01601
A21600A21760A403061330A41700150EA2151E157E90B512FEA39038FC007E151E150EA2
1506170CA3171892C7FCA41738A21770A217F01601160316070003157FB812E0A32E337D
B234>69 D<DA03FE130C91393FFF801C91B512E0903A03FE01F83C903A0FF0003C7CD93F
C0EB0EFC49C7120701FE140348481401484814000007167C5B4848153C121F49151C123F
5B127F170CA348CBFCAA0303B512E06C7EA292390003FE00705A6C7EA2121F7F120F6C7E
7F12036C7E6C6C1403EB7F806D6C1307D90FF0EB1E7CD903FEEBFC3C0100B5EAF01C023F
EBC00CDA03FEC8FC33357CB33C>71 D<B5D8FE03B512F8A3000190C73807FC006C486E5A
B390B7FCA349C71203B3A3486C4A7EB5D8FE03B512F8A335337EB23A>I<B512FEA30001
13006C5AB3B3A7487EB512FEA317337EB21C>I<007FB712FEA390398007F001D87C00EC
003E0078161E0070160EA20060160600E01607A3481603A6C71500B3AB4A7E011FB512FC
A330337DB237>84 D<EB7F803803FFF0380F80FC381C003E003F133F6D6C7E6E7EA26E7E
EA1F00C7FCA4EB01FF131FEBFF873803FC07EA0FF0EA1FC0EA3F80127F13004815C05AA3
140FA26C131F6C133B3A3F8071F180391FC1E1FF2607FFC013003900FE003C22237DA126
>97 D<EA03F012FFA312071203AEEC3F80ECFFE09038F3C0F89038F7007E01FE7F49EB1F
8049EB0FC05BED07E016F0A2150316F8AA16F0150716E0A2ED0FC07F6DEB1F8001ECEB3F
0001CF137C90388381F8903801FFE0C76CC7FC25357EB32B>I<EB07F8EB3FFF9038FC07
C03901F000E03903E003F03807C007120FEA1F80123F90380003E04890C7FCA2127E12FE
AA127FA26C14187F001F14386D1330000F14706C6C13E03903F001C03900FC0F8090383F
FE00EB07F01D237EA122>I<153FEC0FFFA3EC007F81AEEB07F0EB3FFCEBFC0F3901F003
BF3907E001FF48487E48487F8148C7FCA25A127E12FEAA127E127FA27E6C6C5BA26C6C5B
6C6C4813803A03F007BFFC3900F81E3FEB3FFCD90FE0130026357DB32B>I<EB0FE0EB7F
FCEBF83F3903F00F80D807E013C0390FC007E0381F800315F0EA3F0014014814F8127EA2
12FEA2B6FCA248C8FCA5127E127FA26C1418A26C6C1338000F14306D13706C6C13E03901
F003C03900FC0F00EB3FFEEB07F01D237EA122>I<EB01FCEB07FF90381F078090383E0F
C0EB7C1F13FCEA01F8A20003EB070049C7FCACB512F0A3D803F0C7FCB3A7487E387FFFE0
A31A357FB417>I<90381FC01F9039FFF87FC03901F07DE73907E03F83260FC01F138090
39800F8000001F80EB00074880A66C5CEB800F000F5CEBC01F6C6C48C7FCEBF07C380EFF
F8380C1FC0001CC9FCA3121EA2121F380FFFFEECFFC06C14F06C14FC4880381F0001003E
EB007F4880ED1F8048140FA56C141F007C15006C143E6C5C390FC001F83903F007E0C6B5
1280D91FFCC7FC22327EA026>I<EA03F012FFA312071203AEEC1FC0EC7FF09038F1E0FC
9038F3807C9038F7007E13FE497FA25BA25BB3486CEB7F80B538C7FFFCA326347EB32B>
I<EA0780EA0FC0EA1FE0A4EA0FC0EA0780C7FCAAEA07E012FFA3120F1207B3A6EA0FF0B5
FCA310337EB215>I<EA03F012FFA312071203AF913803FFE0A36E1300EC00F8EC01E05D
4A5A020FC7FC141C5C5C14F0EBF3F8EBF7FC13FEEBFC7EEBF87F496C7E141F6E7E811407
6E7E8114016E7E81486CEBFF80B500C313F0A324347EB329>107
D<EA07E012FFA3120F1207B3B3A7EA0FF0B5FCA310347EB315>I<2703F01FE013FF00FF
90267FF80313C0903BF1E07C0F03E0903BF3803E1C01F02807F7003F387FD803FE147049
6D486C7EA2495CA2495CB3486C496C487EB53BC7FFFE3FFFF0A33C217EA041>I<3903F0
1FC000FFEB7FF09038F1E0FC9038F3807C3907F7007EEA03FE497FA25BA25BB3486CEB7F
80B538C7FFFCA326217EA02B>I<EB07F0EB3FFE9038FC1F803901F007C03903C001E000
078048486C7E48C7127CA248147E003E143E007E143FA300FE1580A8007E1500A36C147E
A26C147C6D13FC6C6C485A00075C3903F007E03900FC1F80D93FFEC7FCEB07F021237EA1
26>I<3903F03F8000FFEBFFE09038F3C0F89038F7007ED807FE7F6C48EB1F804914C049
130F16E0ED07F0A3ED03F8A9150716F0A216E0150F16C06D131F6DEB3F80160001FF13FC
9038F381F89038F1FFE0D9F07FC7FC91C8FCAA487EB512C0A325307EA02B>I<903807F0
0390383FFC07EBFC0F3901F8038F3807E001000F14DF48486CB4FC497F123F90C77E5AA2
5A5AA9127FA36C6C5B121F6D5B000F5B3907E003BF3903F0073F3800F81EEB3FF8EB0FE0
90C7FCAAED7F8091380FFFFCA326307DA029>I<3803E07C38FFE1FF9038E38F809038E7
1FC0EA07EEEA03ECA29038FC0F8049C7FCA35BB2487EB512E0A31A217FA01E>I<EBFF06
000713CE381F00FE003C133E48131E140E5A1406A27EA200FE90C7FC6C7EEA7FFC383FFF
C014F0000F7F6C7FC67FEB0FFF1300EC3F8000C0131F140F6C1307A37E15006C5B6C130E
6C5B38F7807838E1FFE038C07F8019237EA11E>I<1330A51370A313F0A21201A2120312
07381FFFFEB5FCA23803F000AF1403A814073801F806A23800FC0EEB7E1CEB1FF8EB07E0
182F7FAD1E>I<D803F0133F00FFEB0FFFA30007EB007F000380B35DA35D12016D481380
0000903803BFFC90387E073FEB1FFED907F8130026227EA02B>I<B5EBFFF0A3D80FF0EB
3F800007EC1F000003140E150C6D131C00011418A26C6C5BA26D1370017E1360137F6D5B
A290381F8180A214C3010F90C7FCA2EB07E6A214FE6D5AA26D5AA36D5AA2146024217E9F
29>I<B53A1FFF81FFF0A33C07F801FC003F8001F049EB1E0000030100141C816C6C017C
1318A26D017E1338000002FE1330A290267E01FF5B159F168090263F030F5BA216C0903A
1F8607C180A202C613E390260FCC0390C7FCA2D907FC13F6ECF80116FE6D486C5AA36D48
1378A36D48133034217F9F37>I<B53801FFF8A32603FE0013806C48EB7C000000147801
7E1370017F5B90383F81C090381F8380D90FC3C7FCEB07E614FE6D5A6D5A6D7E80805B90
38039F809038071FC09038060FE0EB0C0790381C03F0496C7E01707FEBF000000180000F
ECFF8026FFFC0313FCA326207F9F29>I<3A7FFF807FF8A33A07F8001FC00003EC0F8000
01EC070015066C6C5BA26D131C017E1318A26D5BA2EC8070011F1360ECC0E0010F5BA290
3807E180A214F3010390C7FC14FBEB01FEA26D5AA31478A21430A25CA214E05CA2495A12
78D8FC03C8FCA21306130EEA701CEA7838EA1FF0EA0FC025307F9F29>I<001C1370387F
01FC00FF13FEA4007F13FC381C0070170879B226>127 D E /Fo
7 117 df<ED1F80A24B7EA24B7EA34B7EA24A7FA34A7FA24A7F15CFA2020F7F1587021F
801503023F80EC3E01A2027E80EC7C0002FC804A137FA20101814A133F0103814A131FA2
49B67EA24981A290271F8000077F91C77EA24982013E80017E82017C80A201FC8249157F
B500F0013FB512F0A43C347DB343>65 D<EB7FFE0003B512E04814F8390FF00FFC391FF8
03FF806E138016C0157F6C5A6C5AEA0180C8FCEC7FFF010FB5FC90B6FC0003EBF07F000F
1300EA1FF8485A485A485A5BA315FF7F007F5B6D4813E03A3FF80FBFFF000FB5121F0003
EBFC0F39007FE00728217EA02B>97 D<EA01FC12FFA4120F1207ADEC07FC91387FFF8001
FDB512E09039FFF00FF89138C007FC91380003FE496D7E496D1380A217C0167FA217E0A9
17C0A216FF1780A26D4913006D495A9138C007FC9039F3F01FF801E1B512E0D9C07F1380
9026800FF8C7FC2B347EB331>I<903807FF80013F13F090B512FC3903FE01FE4848487E
EA0FF8EA1FF0EA3FE0A2007F6D5A496C5A153000FF91C7FCA9127F7FA2003FEC07807F6C
6C130F000FEC1F00D807FE133E3903FF80FCC6EBFFF8013F13E0010790C7FC21217DA027
>I<3901F81F8000FFEB7FF0ECFFF89038F9E3FC9038FBC7FE380FFF876C1307A213FEEC
03FCEC01F8EC0060491300B1B512F0A41F217EA024>114 D<9038FFE1C0000713FF5A38
3F803F387E000F14075A14037EA26C6CC7FC13FCEBFFE06C13FC806CEBFF80000F14C06C
14E0C6FC010F13F0EB007F140F00F0130714037EA26C14E06C13076CEB0FC09038C01F80
90B5120000F913FC38E03FE01C217DA023>I<133CA5137CA313FCA21201A21203120700
1FB51280B6FCA3D807FCC7FCB0EC03C0A79038FE078012033901FF0F006C13FEEB3FFCEB
0FF01A2F7EAE22>I E /Fp 30 122 df<121EEA7F8012FF13C0A213E0A3127FEA1E6012
00A413E013C0A312011380120313005A1206120E5A5A5A12600B1D78891B>44
D<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A78891B>46 D<143014F013011303131F
13FFB5FC13E713071200B3B3B0497E497E007FB6FCA3204278C131>49
D<14FF010713E0011F13F890387F00FE01FC133FD801F0EB1F804848EB0FC049EB07E000
07EC03F048481301A290C713F8481400A47FA26D130116F07F6C6CEB03E013FC6C6CEB07
C09039FF800F806C9038C01F006CEBF03EECF87839007FFEF090383FFFC07F01077F6D13
F8497F90381E7FFFD97C1F1380496C13C02601E00313E048486C13F000079038007FF848
48EB3FFC48C7120F003EEC07FE150148140016FF167F48153FA2161FA56C151E007C153E
A2007E153C003E157C6C15F86DEB01F06C6CEB03E06C6CEB07C0D803F8EB1F80C6B4EBFF
0090383FFFFC010F13F00101138028447CC131>56 D<B8FC17E017FC00019039C00003FF
6C6C4801007FEF3FC0717E717E717E84170384170184A760A21703601707604D5A4D5AEF
7FC04DC7FCEE03FEEE3FF091B65A17FC0280C7B47EEF1FC0EF0FF0717E717E717E717E19
80187F19C0A2183F19E0A8F07FC0A2198018FF4D1300A24D5AEF0FFC4D5AEF7FE048486C
903803FFC0B9C7FC17FC17C03B447CC345>66 D<DB0FFE146092B500C013E0020314F091
3A0FFC01FC0191393FC0003E02FFC7EA0F83D903FCEC03C74948EC01E74948EC00FF4948
157F4948153F4948151F49C9120F485A491607120348481603A248481601A248481600A2
123FA2491760127FA31900485AAE6C7EA21960A2123F7FA2001F18E07F000F18C0A26C6C
160119806C6C160312016DEE07006C6C16066D6C150E6D6C5D6D6C5D6D6C15786D6C5D6D
6C4A5AD900FFEC0780DA3FC0011FC7FCDA0FFC13FC0203B512F0020014C0DB0FFEC8FC3B
487BC546>I<B8FC17F017FC00019039C00007FF6C499038007FC0017FED1FE0EF07F0EF
03FC717E717E84727E727E727EA2727E85180385A2180185A38584A31A80AD1A00A36061
A361180361180761180F614E5A183F614EC7FC18FEEF03FC4D5AEF1FE001FFED7FC0486D
D907FFC8FCB812FC17F094C9FC41447CC34B>I<010FB512FEA3D9000313806E130080B3
B3AB123F487E487EA44A5A13801300006C495A00705C6C13076C5C6C495A6CEB1F802603
E07FC7FC3800FFFCEB1FE027467BC332>74 D<B600C049B512C0A3000101E0C8387FFC00
6C49ED3FE06D481680063EC7FC183C183860604D5A4D5A4DC8FC171E17385F5F4C5A4C5A
4CC9FC160E5E5E5E5E4B5A4B7E4B7E150F4B7E4B7E1577EDE3FE913881C1FFEC8381DA87
007F028E6D7E149C02B86D7E02F06D7E14C04A6D7E707EA2707E707EA2707F717EA2717E
717EA2717E717EA2717E717EA2717F8585496C82486D4A13FCB600C0011FEBFFE0A34344
7CC34C>I<B612F8A3000101E0C9FC6C6C5A5CB3B31830A418701860A518E0A3EF01C0A2
17031707A2170F173F177FEE01FF48486C011F1380B9FCA334447CC33D>I<49B4130301
0FEBE007013F13F89039FE00FE0FD801F8131FD807E0EB079F49EB03DF48486DB4FC48C8
FC4881003E81127E82127C00FC81A282A37E82A27EA26C6C91C7FC7F7FEA3FF813FE381F
FFE06C13FE6CEBFFE06C14FC6C14FF6C15C0013F14F0010F80010180D9001F7F14019138
001FFF03031380816F13C0167F163F161F17E000C0150FA31607A37EA36C16C0160F7E17
806C151F6C16006C5D6D147ED8FBC05CD8F9F0495AD8F07C495A90393FC00FE0D8E00FB5
1280010149C7FC39C0003FF02B487BC536>83 D<B600C0010FB5FCA3000101E0C813F026
007F80ED1F80F00F00A21806B3B3A7180E6D6C150CA2181C131F6E1518010F163818306D
6C1570606D6C14016D6C5D6D6CEC0780027F4AC7FC6E6C131EDA1FE0137C913907FC03F0
0201B55A6E6C1380DB07FCC8FC40467CC349>85 D<B60107B500F890380FFFFEA3000301
E0D9001F90C813F06C0180DA0FFCED3FC091C86C48ED1F006C871C0E6D6C6E7E1C0CA26D
6C6F5DA36EDA06FF1538011F1A30A26E020E6D1470010FDB0C7F1560A26E021C7F0107DB
183F5DA2856D6CDA301F4A5AA36D6C4A6C6C49C7FCA36D6C4A6C6C1306A3DB80016E130E
027FDA8003140CA2DBC00380023FDA00015CA203E081021F01066D5CA36E6C486E6C5AA3
6E6C486E6C5AA36F48EC1FE1020360A2DBFE7015F302010160020F90C8FCA2DBFFE015FB
6E49EC07FEA36F486E5AA36FC86C5AA3031E6F5AA4030C16605F467EC364>87
D<EB07FC90383FFF809038F80FE03903C003F048C66C7E000E6D7ED80FC0137E486C137F
6D6D7EA36F7EA26C5AEA0380C8FCA4EC0FFF49B5FC90380FFE1FEB3FC0EBFF00EA03FC48
5A485A485A485A127F5B176048C7FCA3153FA36D137F007F14EF6D9038C7E0C0003F1301
3A1FE00783F13B07F81E03FF802701FFFC0113003A001FE0007C2B2E7CAC31>97
D<EC7F80903803FFF090380FC07C90383F000F01FCEB03804848EB01C00003140F4848EB
1FE049133F120F485AA2485AED1FC0007FEC070092C7FCA290C9FC5AAB7E7FA2123F1630
7F001F15706C6C146016E06C6C14C06C6C13010001EC03806C6CEB0700013F131E90381F
C078903807FFF001001380242E7DAC2B>99 D<167FED3FFFA315018182B3EC7F80903803
FFF090380FC07C90383F000E017E1307496D5AD803F87F48487F5B000F81485AA2485AA2
127FA290C8FC5AAB7E7FA2123FA26C7EA2000F5D7F6C6C5B00035C6C6C9038077F806C6C
010E13C0013F011C13FE90380FC0F8903803FFE09026007F0013002F467DC436>I<EB01
FE903807FFC090381F03F090387E00FC49137E48487F485A4848EB1F80000F15C049130F
121F484814E01507A2007F15F090C7FCA25AA390B6FCA290C9FCA67EA27FA2123F16306C
7E1670000F15606D14E06C6C14C0000314016C6CEB03806C6CEB0700013E131E90381F80
F8903803FFE0010090C7FC242E7DAC2B>I<EC0FE0EC7FF8903801F81E903803F03F9039
0FE07F8090381FC0FF5C133F495AA2ED7F0001FE131C92C7FCAFB67EA3C648C8FCB3B248
6C7E007F13FFA321467EC51E>I<EA01E0EA07F8A2487EA46C5AA2EA01E0C8FCADEA01FC
12FFA3120712031201B3B0487EB512F8A315437DC21C>105 D<EA01FC12FFA312071203
1201B3B3B3A5487EB512F8A315457DC41C>108 D<D801FC01FFEC1FE000FF010701E0EB
FFFC913B0F03F801E07F913C3C01FC07803F800007903C7000FE0E001FC0000349D97E1C
130F2601FDC0D97F38804A143001FFDA3FF06D7E91C75BA2495DA3495DB3A8486C4A6C49
7EB5D8F81FB50003B512E0A34B2C7DAB52>I<3901FC01FE00FF903807FFC091381E07F0
91383801F8000701707F0003EBE0002601FDC07F5C01FF147F91C7FCA25BA35BB3A8486C
ECFF80B5D8F83F13FEA32F2C7DAB36>I<EC7F80903803FFF090380FC0FC90383E001F49
6D7E496D7E48486D7E48486D7E48486D7E000F81A24848147E003F157FA290C87E481680
A44816C0AA6C1680A26D147F003F1600A2001F157E6D14FE000F5D6D130100075D6C6C49
5A6C6C495A6C6C495A013E49C7FC90381FC0FE903807FFF89038007F802A2E7DAC31>I<
3901FC03FC00FF90380FFF8091383C07E091387001F83A07FDE000FE00010180137F01FF
EC3F8091C7EA1FC04915E049140F17F0160717F8160317FCA3EE01FEABEE03FCA3EE07F8
A217F0160F6D15E0EE1FC06D143F17806EEB7E00D9FDC05B9039FCF003F891383C0FE091
381FFF80DA03FCC7FC91C9FCAE487EB512F8A32F3F7DAB36>I<3903F803F000FFEB1FFC
EC3C3EEC707F0007EBE0FF3803F9C000015B13FBEC007E153C01FF13005BA45BB3A748B4
FCB512FEA3202C7DAB26>114 D<90383FE0183901FFFC383907E01F78390F0003F8001E
1301481300007C1478127800F81438A21518A27EA27E6C6C13006C7E13FC383FFFE06C13
FC6C13FF6C14C06C14E0C614F0011F13F81300EC0FFC140300C0EB01FE1400157E7E153E
A27EA36C143C6C147C15786C14F86CEB01F039F38003E039F1F00F8039E07FFE0038C00F
F01F2E7DAC26>I<1306A5130EA4131EA3133E137EA213FE12011207001FB512F0B6FCA2
C648C7FCB3A4150CAA017E131C017F1318A26D133890381F8030ECC070903807E0E09038
01FFC09038007F001E3E7EBC26>I<D801FC147F00FFEC3FFFA300071401000380000181
B3A85EA35DA212006D5B017E9038077F80017F010E13C06D011C13FE90380FC078903803
FFF09026007F8013002F2D7DAB36>I<B539F001FFFCA3000790C7EA7FE06C48EC1F8000
011600160E1200160C017F5CA280013F5CA26E1370011F146080010F5CA2ECF00101075C
A26D6C48C7FCA26E5A01011306A26D6C5AA214FF6E5AA215B8EC3FB015F06E5AA36E5AA2
6E5AA36EC8FC2E2C7EAA33>I<B539F001FFFCA3000790C7EA7FE06C48EC1F8000011600
160E0000150C6D141C6D1418A26E1338013F1430A26D6C5BA26E13E0010F5CA26D6C485A
A2ECF803010391C7FCA2903801FC06A2ECFE0E0100130CA2EC7F18A215B8EC3FB0A2EC1F
E0A36E5AA26E5AA36EC8FCA21406A35CA25CA2123C007E5BB4FC5CA25CEAFE01387C0380
D87007C9FCEA3C1EEA0FFCEA03F02E3F7EAA33>121 D E /Fq 17
118 df<BB12FCA4C601FCC8120FD93FF89238007FFE011F171F190719031900A21A7E1A
3EA21A1EA21A1F86A486A6F20380A318E0A297C7FCA61701A417031707170F171F17FF91
B7FCA402F8C7FC171F170F170717031701A41700A895C9FCB3A580133F90B57EB712E0A4
496279E156>70 D<B712C0A4C66CEB8000D91FFEC7FC6D5AB3B3B3B3AE497E90387FFF80
B712C0A422627AE12F>73 D<B712E0A4C60280CAFCD93FFCCBFC131F5CB3B3B21A1CA61A
3C1A38A61A78A41AF8A21AF01901A219031907A2190F191F193F197FF001FF1807013F04
3F13E0D9FFFC0203B5FCBBFCA4466279E153>76 D<B912C018FEF0FFC019F0C601FCC813
FCD93FF8ED0FFF011F04037F06007FF13FF0737E737E1907737E86731380A27313C0A31B
E01A7FA21BF0A91BE0A21AFF1BC0A34F13801B00614F5A624F5A4F5AF17FE04F5A060390
C7FCF01FFE943801FFF891B812E096C8FC18F802F8CCFCB3B3A4497E90B5FCB7FCA44C62
79E15A>80 D<EC3FF0903803FFFE010F6D7E90393FC03FE090397E0007F801F86D7ED801
E06D7E48486D7E48486E7E48C86C7E7F01F06E7E487E6D6E7EA3707EA36C5AEA03E0C9FC
A6167FED7FFF020FB5FC91387FF807903801FF80903807FC00EB1FF0EB7FC0495AD803FE
C7FC485A120F5B485A485AA2484817E0A312FF5BA2160FA3161F6D141B007F153B16736D
913971FC01C06C6C14E1001FEC01C1D80FFC903A0780FE03806C6C903A0F00FF07002701
FF807E6DB4FC27007FFFF86D5A011F01E0EB1FF8010190C7EA07E03B417ABF42>97
D<4AB47E020F13F8023F13FE9139FF007F80D903FCEB07E0D907F0EB01F0D91FE0EB0078
49488049488049C87E48485D4915FF00034B138048485CA2485AA2485AA2003F6F130049
EC007C94C7FC127FA35B12FFAD127F7FA4123F7FA2001FEE01C07F000F16036D16801207
6C6C15076D160000015E6C6C151E6D6C5C6D6C5C6D6C5CD90FF8495AD903FCEB07C0903A
00FF803F8091263FFFFEC7FC020F13F80201138032417CBF3A>99
D<181EEF3FFEEE07FFA4EE000F1703A21701B3AAEDFF80020F13F8023F13FE9139FF803F
81903A03FC0007C14948EB01E1D91FE0EB00F94948147D4948143D49C8121F4848150F49
1507120348481503491501120F121F5BA2123F5B127FA45B12FFAD127F7FA3123FA27F12
1FA26C6C1503A26C6C150712036D150F6C6C151F0000163D137F6D6CECF9FF6D6CEB01F1
D90FF0D903C113C06D6CD90F81EBFF80D901FFEB7F019039007FFFFC021F13E002010100
91C7FC41657CE349>I<EC03FE91381FFFE091B512F8903901FE03FE903A07F0007F8049
486D7ED93FC06D7E49C76C7E496E7E49140348488148481401000782491400000F828348
5A1880123F49153FA2007F17C0A35BA212FF90B8FCA30180CAFCA9127F7FA3123FA27F12
1FEF01C06C7E17036C6C1680A26C6C15070001EE0F006D150E6C6C151E6D6C5C6D6C5C6D
6C5CD907F0EB03E0D903FC495A902700FF803FC7FC91383FFFFC020F13F0020113803241
7CBF3A>I<F03F80DA03FC903801FFE091273FFFC00713F091B539F01FC1F8903B03FC03
FC3E03903A07F000FE784948EB7FE04948EB3FC04948011FEB01F049C76C6CC7FC01FE6E
7EA248486E7EA2000382A2491401000782AA00035E6D1403A200015EA26C6C4A5AA2017F
4A5A6D6C495A6D6C495A496C49C8FCD937F013FE903973FC03FC0160B512F0D9E03F13C0
DA03FCC9FC4848CBFCA57FA27FA27F6C7E13FF91B512FE6DECFFF06D15FE6D6F7E6D16E0
84013F16FC01FEC700017FD803F8EC001FD807E0ED03FF4848030013804848167F003FEF
3FC090CA121F127EF00FE012FE481707A66C170F007E18C0A2007F171F6C6CEE3F806C6C
EE7F00000F177ED807F04B5A6C6C4B5A6C6C4B5AD8007FED1FC0D93FE0ECFF80D90FFED9
0FFEC7FC0101B612F0D9003F1480020101F0C8FC3D5E7DBF42>103
D<133C13FF487F487FA66C5B6C90C7FC133C90C8FCB3A2EB03C0EA07FF127FA41201EA00
7FA2133FB3B3AC497E497EB612E0A41B5F7DDE23>105 D<EB03C0EA07FFB5FCA41201EA
007FA2133FB3B3B3B3AD497E497EB612F0A41C647DE323>108 D<D903C0D9FFC0EC07FE
D807FF010301F891381FFFC0B5010F01FE027F13F0923D3F00FF8001F807FC0378903B3F
C003C001FEDAC1E090261FE00FC77E0001D9C3C090260FF01E6E7ED8007F49902607F81C
6E7E02C7C75CD93FCE6E6C486E7E02CC166002DC16E002D85E02F8DA01FF6F7E4A5EA24A
93C8FCA44A5DB3B3496C4A6C4B7E496C4A6D4A7EB6D8F007B6D8803FB512FCA4663F7CBE
6F>I<D903C0EB7FE0D807FF903803FFFCB5010F13FFDB3F0013C00378EB1FE04B6D7E00
01D9C1C06D7E27007FC3808002C7C71203D93FCE81170114DC14D802F86E7E5CA35CA35C
B3B3496C4A7F496C4A7FB6D8F003B612C0A4423F7DBE49>I<EDFF80020F13F8023F13FE
9139FF007F80D903FCEB1FE0D907F0EB07F0D90FC0EB01F8D93F80EB00FE49C8127F017E
81496F7E48486F7E00038349150700078348486F7EA2001F83491501A2003F83A348486F
7EA400FF1880AC007F1800A26D5DA2003F5FA36C6C4B5AA36C6C4B5A00075FA26C6C4B5A
6C6C4B5AA26C6C4B5A017F4BC7FC6D6C14FE6D6C495AD90FF0EB07F8D903FCEB1FE0D900
FFEB7F806EB5C8FC020F13F8020113C039417CBF42>I<9039078003F8D807FFEB0FFFB5
013F13C092387C0FE0913881F01F9238E03FF00001EB838039007F8700148FEB3F8E029C
EB1FE0EE0FC00298EB030002B890C7FCA214B014F0A25CA55CB3B0497EEBFFF8B612FCA4
2C3F7CBE33>114 D<1438A71478A414F8A31301A31303A21307130F131FA2137F13FF12
03000F90B6FCB8FCA3260007F8C8FCB3AE17E0AE6D6CEB01C0A316036D6C148016076D6C
14006E6C5A91383FC01E91381FF07C6EB45A020313E09138007F802B597FD733>116
D<D903C0150FD807FFED1FFFB50203B5FCA40001ED0007D8007F1501A2013F81B3B25FA3
5FA35F011F15066E140E5F130F6E4A7F01075D6D6C494813E0D901FE4948EBFFC0903A00
FFC01F8091393FFFFE00020F13F8020001C0EC800042407DBE49>I
E end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 600dpi
TeXDict begin
%%PaperSize: a4
%%BeginPaperSize: a4
/setpagedevice where {
pop 1 dict dup /PageSize [ 595 842 ] put setpagedevice
} {
statusdict /a4tray known {
statusdict begin a4tray end
/a4 where { pop a4 } if
} {
/a4 where {
pop a4
} {
statusdict /setpage known {
statusdict begin
595 842 0 setpage
end
} if
} ifelse
} ifelse
} ifelse
%%EndPaperSize

%%EndSetup
%%Page: 1 1
1 0 bop 406 739 a Fq(Programming)43 b(in)i(an)e(In)l(tegrated)h(F)-11
b(unctional)46 b(and)d(Logic)1637 922 y(Language)1674
1162 y Fp(J.W.)33 b(Llo)m(yd)1201 1279 y(Departmen)m(t)f(of)g(Computer)
h(Science)1479 1395 y(Univ)m(ersit)m(y)g(of)f(Bristol)1451
1511 y(Bristol)f(BS8)h(1UB,)h(UK)1743 1814 y Fo(Abstract)473
1944 y Fn(Esc)n(her)26 b(is)h(a)g(general-purp)r(ose,)g(declarativ)n(e)
g(programming)e(language)j(whic)n(h)e(in)n(tegrates)h(the)f(b)r(est)358
2035 y(features)36 b(of)h(b)r(oth)e(functional)h(and)g(logic)h
(programming)e(languages.)66 b(It)35 b(has)h(t)n(yp)r(es)f(and)g(mo)r
(dules,)358 2126 y(higher-order)i(and)g(meta-programming)f(facilities,)
44 b(concurrency)-6 b(,)40 b(and)d(declarativ)n(e)h(input/output.)358
2218 y(The)30 b(main)f(design)h(aim)f(is)h(to)g(com)n(bine)f(in)h(a)g
(practical)h(and)e(comprehensiv)n(e)g(w)n(a)n(y)h(the)f(b)r(est)h
(ideas)h(of)358 2309 y(existing)d(functional)h(and)f(logic)i
(languages,)h(suc)n(h)d(as)h(Hask)n(ell)g(and)f(G\177)-38
b(odel.)43 b(In)27 b(fact,)j(Esc)n(her)f(uses)g(the)358
2400 y(Hask)n(ell)j(syn)n(tax)f(and)h(is)h(most)f(straigh)n(tforw)n
(ardly)i(understo)r(o)r(d)e(as)h(an)f(extension)g(of)h(Hask)n(ell.)54
b(Con-)358 2492 y(sequen)n(tly)-6 b(,)29 b(this)h(pap)r(er)g(discusses)
g(Esc)n(her)g(from)g(this)g(p)r(ersp)r(ectiv)n(e.)46
b(It)29 b(pro)n(vides)h(an)g(in)n(tro)r(duction)f(to)358
2583 y(the)24 b(Esc)n(her)i(language,)g(concen)n(trating)g(largely)g
(on)f(the)g(issue)h(of)f(programming)g(st)n(yle)g(and)f(the)h(Esc)n
(her)358 2674 y(programming)f(idioms)i(not)f(pro)n(vided)g(b)n(y)f
(Hask)n(ell.)35 b(Also)26 b(the)f(extra)h(mec)n(hanisms)e(needed)h(to)h
(supp)r(ort)358 2766 y(these)f(idioms)h(are)g(discussed.)150
3040 y Fm(1)135 b(In)l(tro)t(duction)150 3222 y Fl(Esc)n(her)24
b(is)i(a)g(general-purp)r(ose,)e(declarativ)n(e)g(programming)f
(language)i(whic)n(h)h(in)n(tegrates)e(the)i(b)r(est)h(features)150
3322 y(of)g(b)r(oth)h(functional)f(and)g(logic)f(programming)f
(languages.)35 b(It)27 b(has)f(t)n(yp)r(es)h(and)g(mo)r(dules,)h
(higher-order)c(and)150 3421 y(meta-programming)h(facilities,)k
(concurrency)-7 b(,)26 b(and)i(declarativ)n(e)f(input/output.)39
b(The)28 b(main)g(design)f(aim)h(is)150 3521 y(to)j(com)n(bine)g(in)h
(a)f(practical)g(and)g(comprehensiv)n(e)f(w)n(a)n(y)h(the)g(b)r(est)h
(ideas)f(of)h(existing)f(functional)h(and)f(logic)150
3621 y(languages,)c(suc)n(h)h(as)g(Hask)n(ell)f([4])i(and)f(G\177)-42
b(odel)28 b([9].)39 b(Indeed,)29 b(Esc)n(her)e(go)r(es)h(b)r(ey)n(ond)g
(Hask)n(ell)g(in)g(its)h(abilit)n(y)f(to)150 3720 y(run)20
b(function)h(calls)e(con)n(taining)g(v)-5 b(ariables,)20
b(its)h(more)e(\015exible)h(handling)g(of)g(the)g(connectiv)n(es)f(and)
h(quan)n(ti\014ers,)150 3820 y(and)27 b(its)h(set-pro)r(cessing)d
(facilities.)37 b(Esc)n(her)26 b(go)r(es)g(b)r(ey)n(ond)h(G\177)-42
b(odel)27 b(in)h(its)f(pro)n(vision)f(of)h(function)h(de\014nitions,)
150 3919 y(its)40 b(higher-order)d(facilities,)43 b(its)d(impro)n(v)n
(ed)f(handling)g(of)h(sets,)j(and)c(its)h(pro)n(vision)e(of)i
(concurrency)e(and)150 4019 y(declarativ)n(e)26 b(input/output.)275
4119 y(Originally)-7 b(,)35 b(Esc)n(her)e(grew)g(out)i(of)g(the)g
(G\177)-42 b(odel)34 b(language)f(b)n(y)i(mo)n(ving)f(to)g(a)g
(higher-order)f(logic,)i(using)150 4218 y(equations)23
b(instead)h(of)g(clauses)f(as)g(statemen)n(ts,)h(and)g(adding)f
(function)i(de\014nitions.)36 b(Ho)n(w)n(ev)n(er,)22
b(after)i(sev)n(eral)150 4318 y(y)n(ears)e(dev)n(elopmen)n(t,)i(it)g
(has)f(b)r(ecome)g(clear)g(that)h(the)g(most)f(enligh)n(tening)h(and)f
(appropriate)f(w)n(a)n(y)g(to)i(presen)n(t)150 4418 y(Esc)n(her)34
b(is)h(as)f(an)h(extension)g(of)g(Hask)n(ell)f(whic)n(h)h(also)f(allo)n
(ws)g(the)i(traditional)e(logic)g(programming)f(st)n(yle.)150
4517 y(Syn)n(tactically)-7 b(,)21 b(the)f(extensions)g(needed)g(b)n(y)g
(Esc)n(her)e(compared)h(with)h(Hask)n(ell)g(are)f(rather)f(mo)r(dest.)
35 b(Ho)n(w)n(ev)n(er,)150 4617 y(they)24 b(imply)g(signi\014can)n(t)f
(c)n(hanges)f(at)i(the)g(implemen)n(tation)g(lev)n(el,)g(particularly)f
(in)h(the)g(underlying)f(abstract)150 4716 y(mac)n(hine.)73
b(The)39 b(extensions)g(needed)h(to)g(turn)f(a)h(Hask)n(ell)e(abstract)
h(mac)n(hine)g(in)n(to)h(an)f(Esc)n(her)f(abstract)150
4816 y(mac)n(hine)25 b(are)e(discussed)i(in)g([3].)36
b(An)25 b(implemen)n(tation)g(of)g(the)h(ideas)e(in)h([3])g(based)f(on)
h(the)g(Brisk)f(system)h([10)o(])150 4916 y(is)i(curren)n(tly)g(underw)
n(a)n(y)f(at)i(Bristol.)275 5015 y(I)i(discuss)f(here)h(only)f(the)i(k)
n(ey)e(ideas)h(of)f(the)i(prop)r(osed)e(extensions.)43
b(There)30 b(are)f(still)h(a)g(n)n(um)n(b)r(er)g(of)g(less)150
5115 y(imp)r(ortan)n(t)21 b(p)r(oin)n(ts)g(that)g(need)g(addressing)f
(b)r(efore)g(the)i(prop)r(osed)e(extensions)g(can)h(b)r(ecome)g(fully)g
(compatible)150 5215 y(with)g(Hask)n(ell.)34 b(Most)21
b(of)g(these)f(p)r(oin)n(ts)h(arise)f(b)r(ecause)g(Esc)n(her)g
(originally)f(b)r(egan)h(as)h(a)f(language)f(indep)r(enden)n(t)150
5314 y(from)34 b(Hask)n(ell)f(and)h(with)h(a)f(di\013eren)n(t)g
(treatmen)n(t)g(of)h(man)n(y)e(issues.)57 b(Ho)n(w)n(ev)n(er,)34
b(presen)n(ting)f(Esc)n(her)g(as)g(an)150 5414 y(extension)g(of)h(Hask)
n(ell)f(necessitates)g(c)n(hanging)f(a)h(n)n(um)n(b)r(er)h(of)f(minor)g
(asp)r(ects)h(of)f(Esc)n(her)f(b)r(ey)n(ond)i(those)f(I)150
5513 y(ha)n(v)n(e)h(already)g(dealt)h(with.)60 b(F)-7
b(or)35 b(example,)i(m)n(y)e(preferred)f(views)h(of)g(Esc)n(her's)f
(underlying)g(logic)h(and)g(its)150 5613 y(op)r(erational)d(seman)n
(tics,)h(whic)n(h)g(are)f(giv)n(en)h(in)g(the)g(app)r(endices,)i(are)d
(unfortunately)h(somewhat)f(di\013eren)n(t)1892 5919
y(1)p eop
%%Page: 2 2
2 1 bop 150 100 a Fk(1)83 b(INTR)n(ODUCTION)2680 b Fl(2)150
390 y(from)31 b(the)h(corresp)r(onding)e(Hask)n(ell)g(treatmen)n(ts)i
(and)f(hence)g(some)g(mo)r(di\014cations)h(to)f(the)h(curren)n(t)f(v)n
(ersion)150 490 y(of)k(Esc)n(her)e(are)h(needed.)58 b(I)35
b(in)n(tend)g(to)g(deal)f(with)h(eac)n(h)f(of)h(these)g(issues)f(as)g
(the)h(Bristol)f(implemen)n(tation)150 589 y(pro)r(ceeds)27
b(and)g(the)h(c)n(hanges)e(required)h(b)r(ecome)g(clearer.)275
689 y(The)c(most)h(imp)r(ortan)n(t)f(extension)h(of)g(Esc)n(her)e(o)n
(v)n(er)g(Hask)n(ell)h(is)g(the)i(abilit)n(y)e(to)h(reduce)f
(expressions)f(whic)n(h)150 789 y(con)n(tain)35 b(v)-5
b(ariables.)62 b(This)36 b(extension,)h(together)f(with)g(careful)g
(handling)g(of)g(the)g(quan)n(ti\014cation)g(of)g(lo)r(cal)150
888 y(v)-5 b(ariables)37 b(is)i(su\016cien)n(t)f(to)h(allo)n(w)e(Esc)n
(her)g(to)h(subsume)h(the)g(traditional)f(logic)f(programming)g(st)n
(yle.)69 b(In)150 988 y(addition,)29 b(Esc)n(her)e(pro)n(vides)h
(sophisticated)g(set-pro)r(cessing)f(facilities.)41 b(A)29
b(set)g(in)g(a)f(higher-order)f(logic)g(can)150 1088
y(b)r(e)i(iden)n(ti\014ed)h(with)f(a)g(predicate)g(and)f(hence)h
(set-pro)r(cessing)f(facilities)h(can)f(b)r(e)i(pro)n(vided)e(b)n(y)h
(higher-order)150 1187 y(functions)j(whose)e(de\014nitions)i(con)n
(tain)f(lam)n(b)r(da)g(expressions)e(in)j(the)g(heads)f(of)g(the)h
(equations.)47 b(The)32 b(bulk)150 1287 y(of)f(this)g(pap)r(er)g(is)g
(concerned)f(with)i(elab)r(orating)d(these)i(extensions)f(of)h(Esc)n
(her)f(o)n(v)n(er)f(Hask)n(ell)h(and)h(sho)n(wing)150
1386 y(their)d(utilit)n(y)g(for)f(programming.)275 1486
y(This)i(pap)r(er)h(is)g(written)g(from)f(a)h(functional)g(programming)
e(p)r(ersp)r(ectiv)n(e.)43 b(Essen)n(tially)-7 b(,)29
b(the)h(question)g(I)150 1586 y(p)r(ose)h(and)h(answ)n(er)f(is:)45
b(What)32 b(has)f(to)h(b)r(e)g(added)g(to)g(Hask)n(ell)f(so)g(that)h
(it)g(can)g(pro)n(vide)e(the)i(facilities)g(made)150
1685 y(a)n(v)-5 b(ailable)33 b(b)n(y)h(t)n(ypical)g(logic)f
(programming)f(languages?)55 b(F)-7 b(or)34 b(a)g(functional)g
(programmer,)f(I)i(b)r(eliev)n(e)f(this)150 1785 y(question)27
b(is)h(in)n(teresting)f(for)g(at)g(least)g(t)n(w)n(o)g(reasons.)275
1885 y(First,)36 b(these)e(extensions)g(pro)n(vide)g(a)g(functional)h
(programmer)d(with)j(new)g(programming)d(idioms.)58 b(In)150
1984 y(particular,)22 b(the)g(pro)n(vision)e(of)i(sets)g(as)f(a)h(data)
f(t)n(yp)r(e)h(impro)n(v)n(es)f(the)h(expressiv)n(e)e(p)r(o)n(w)n(er)h
(of)h(Hask)n(ell.)34 b(T)n(ypically)-7 b(,)150 2084 y(sets)22
b(are)f(sim)n(ulated)h(b)n(y)f(lists,)j(but)e(this)h(is)f(not)g
(usually)f(satisfactory)-7 b(.)34 b(Sets)22 b(and)g(lists)g(are)f
(distinct)i(data)e(t)n(yp)r(es)150 2183 y(with)36 b(distinct)f(prop)r
(erties.)58 b(It)36 b(is)f(usually)f(preferable)g(to)h(use)g(precisely)
f(the)h(data)g(t)n(yp)r(e)g(required)f(rather)150 2283
y(than)26 b(attempt)h(to)f(appro)n(ximate)e(b)n(y)h(another.)36
b(An)26 b(alternativ)n(e)f(approac)n(h)f(is)i(to)g(pro)n(vide)e(an)i
(ADT)h(for)e(sets,)150 2383 y(where)f(the)h(sets)f(are)f(implemen)n
(ted)i(b)n(y)g(lists.)35 b(There)24 b(are)g(w)n(ell-kno)n(wn)f
(di\016culties)i(with)g(this)g(approac)n(h)d(and,)150
2482 y(furthermore,)33 b(it)g(do)r(esn't)g(pro)n(vide)f(set)h
(abstractions.)50 b(Ho)n(w)n(ev)n(er,)32 b(ultimately)-7
b(,)35 b(the)e(c)n(hoice)f(of)h(sets)f(or)g(lists)150
2582 y(is)g(partly)g(a)f(matter)h(of)g(taste)g(and)g(it)h(is)f(indeed)g
(true)g(that)h(all)f(the)g(programs)e(in)i(this)h(pap)r(er)e(could,)j
(with)150 2682 y(v)-5 b(arying)26 b(degrees)h(of)g(di\016cult)n(y)-7
b(,)28 b(b)r(e)g(co)r(ded)g(successfully)f(in)h(Hask)n(ell.)275
2781 y(The)21 b(second)f(and,)j(I)e(b)r(eliev)n(e,)h(more)f(comp)r
(elling)g(reason)e(for)i(a)g(functional)g(programmer)e(to)i(b)r(e)g(in)
n(terested)150 2881 y(in)f(these)g(extensions)f(to)g(Hask)n(ell)g(is)h
(that)g(they)g(substan)n(tially)f(increase)f(the)j(lik)n(eliho)r(o)r(d)
e(of)h Fj(lo)l(gic)h Fl(programmers)150 2980 y(using)j(\(or)g(switc)n
(hing)g(to\))g(Hask)n(ell.)35 b(If)25 b(one)f(can)g(pro)n(vide)f(the)i
(familiar)f(logic)f(programming)f(st)n(yle,)j(as)f(w)n(ell)g(as)150
3080 y(all)j(the)h(other)e(sophisticated)h(features)g(of)g(Hask)n(ell,)
f(the)i(language)d(b)r(ecomes)i(a)g(v)n(ery)f(attractiv)n(e)g
(alternativ)n(e)150 3180 y(to)h(the)h(languages)d(curren)n(tly)h(used)h
(b)n(y)g(logic)g(programmers.)34 b(Th)n(us)27 b(Hask)n(ell,)f(extended)
i(with)f(these)h(Esc)n(her)150 3279 y(features,)39 b(could)d(b)r(ecome)
h(the)g(\014rst)g(widely-used,)i(in)n(tegrated)c(declarativ)n(e)h
(language)f({)h(a)h Fj(lingua)h(fr)l(anc)l(a)150 3379
y Fl(for)f(functional)h(and)f(logic)g(programmers.)64
b(F)-7 b(urthermore,)39 b(these)e(extensions)g(op)r(en)h(the)g(w)n(a)n
(y)e(to)i(adding)150 3479 y(constrain)n(t-solving)28
b(capabilities)h(to)h(Hask)n(ell,)g(th)n(us)g(greatly)f(increasing)g
(the)i(p)r(oten)n(tial)f(for)f(industrial)h(and)150 3578
y(commercial)c(applications)h(of)h(functional)f(programming.)275
3678 y(Ho)n(w)40 b(should)h(a)g(logic)f(programmer)f(go)h(ab)r(out)h
(trying)g(to)g(appreciate)f(the)i(adv)-5 b(an)n(tages)39
b(of)i(what)g(is)150 3778 y(prop)r(osed)24 b(in)h(this)h(pap)r(er?)36
b(If)25 b(the)h(programmer)c(kno)n(ws)i(Hask)n(ell,)h(then)h(the)f
(only)g(problem)f(is)h(to)g(in)n(v)n(estigate)150 3877
y(the)c(exten)n(t)f(to)g(whic)n(h)g(the)h(logic)e(programming)f(st)n
(yle)i(is)g(pro)n(vided)f(b)n(y)h(Esc)n(her.)33 b(P)n(erhaps)18
b(the)j(main)f(di\013erence)150 3977 y(b)r(et)n(w)n(een)f(Esc)n(her)f
(and)h(t)n(ypical)g(logic)f(programming)f(languages,)i(suc)n(h)g(as)g
(Prolog,)g(is)g(Esc)n(her's)e(use)i(of)h(equalit)n(y)150
4076 y(at)28 b(the)h(top)f(lev)n(el)g(of)g(a)g(statemen)n(t)h(where)e
(Prolog)f(uses)i(implication.)39 b(This)29 b(di\013erence)f(means)g
(that)g(a)g(little)150 4176 y(massaging)34 b(is)h(needed)h(to)g(con)n
(v)n(ert)e(Prolog)g(co)r(de)h(in)n(to)h(Esc)n(her)e(co)r(de.)61
b(Ho)n(w)n(ev)n(er,)36 b(once)f(some)h(exp)r(erience)150
4276 y(is)31 b(gained)g(in)g(this,)i(a)d(logic)h(programmer)d(will,)33
b(I)e(b)r(eliev)n(e,)h(come)f(to)g(the)h(conclusion)e(as)h(I)g(ha)n(v)n
(e)f(done)h(that)150 4375 y(equalit)n(y)37 b(is)g(easier)g(to)g(w)n
(ork)f(with)i(than)g(implication.)67 b(In)37 b(other)g(w)n(ords,)i(the)
f(equations)f(of)g(Esc)n(her)f(are)150 4475 y(simpler)26
b(and)h(easier)e(to)i(write)f(than)h(the)g(clauses)f(of)g(Prolog.)35
b(F)-7 b(or)26 b(a)g(logic)g(programmer)e(who)i(do)r(esn't)h(kno)n(w)
150 4575 y(Hask)n(ell)i(or)g(an)n(y)g(other)g(mo)r(dern)g(functional)h
(language,)f(the)h(job)g(is)g(harder.)42 b(Ho)n(w)n(ev)n(er,)28
b(once)h(the)i(p)r(o)n(w)n(er)d(of)150 4674 y(t)n(yp)r(es,)f(mo)r
(dules,)h(higher-order)c(functions,)k(and)f(so)f(on,)h(is)g
(appreciated,)f(it)i(is)f(v)n(ery)f(di\016cult)i(to)f(go)f(bac)n(k)g
(to)150 4774 y(Prolog!)275 4873 y(Muc)n(h)h(useful)g(bac)n(kground)e
(material)h(on)h(the)h(issue)e(of)h(in)n(tegration)f(including)h(a)g
(comprehensiv)n(e)f(list)h(of)150 4973 y(references)j(up)i(to)g(1994)d
(can)j(b)r(e)g(found)f(in)h(the)g(surv)n(ey)e(pap)r(er)i(b)n(y)f(Han)n
(us)g([5)o(].)49 b(Also)32 b(a)f(general)f(discussion)150
5073 y(of)39 b(the)h(adv)-5 b(an)n(tages)38 b(of)h(declarativ)n(e)f
(programming)g(can)h(b)r(e)h(found)f(in)h(the)g(\014rst)f(c)n(hapter)g
(of)g([13)o(].)73 b(The)150 5172 y(original)26 b(prop)r(osal)g(for)g
(Esc)n(her)g(app)r(eared)g(in)i([12)o(].)37 b(Some)27
b(discussion)g(of)g(the)h(motiv)-5 b(ation)27 b(for)g(the)g(design)g
(of)150 5272 y(Esc)n(her)g(is)h(giv)n(en)f(in)h(section)g(2.1)f(of)h
([13)o(].)39 b(More)27 b(detail)h(concerning)f(the)i(logic)e
(underlying)h(Esc)n(her)e(app)r(ears)150 5372 y(in)40
b(App)r(endix)g(A)g(of)g([13)o(].)73 b(An)40 b(approac)n(h)e(to)h
(debugging)g(Esc)n(her)f(programs)f(app)r(ears)h(in)i([14)o(].)73
b(Also)39 b(a)150 5471 y(discussion)24 b(of)g(concurrency)f(in)i(Esc)n
(her)e(is)i(giv)n(en)e(in)i([15)o(].)36 b(An)26 b(in)n(tegrated)d
(functional)i(logic)f(language)e(called)150 5571 y(Curry)27
b([6],)i([7)o(])g(is)f(also)g(under)g(dev)n(elopmen)n(t)g(b)n(y)g(a)g
(group)f(of)i(researc)n(hers)c(from)j(b)r(oth)h(functional)g(and)f
(logic)150 5670 y(programming.)43 b(It)30 b(is)g(in)n(tended)h(to)f
(serv)n(e)f(the)i(same)e(role)g(for)h(the)h(declarativ)n(e)d
(programming)g(comm)n(unit)n(y)p eop
%%Page: 3 3
3 2 bop 150 100 a Fk(2)83 b(ELEMENTS)26 b(OF)h(ESCHER)2376
b Fl(3)150 390 y(as)33 b(Hask)n(ell)g(do)r(es)g(for)g(the)h(functional)
g(comm)n(unit)n(y)-7 b(.)55 b(Curry)33 b(has)g(similar)g(facilities)g
(to)h(Esc)n(her)e(but)i(uses)f(a)150 490 y(generalized)26
b(form)h(of)h(narro)n(wing)d(as)i(the)h(op)r(erational)e(seman)n(tics,)
h(whereas)f(Esc)n(her)g(uses)i(rewriting.)275 589 y(The)h(next)g
(section)g(in)n(tro)r(duces)g(the)g(k)n(ey)g(ideas)g(of)g(the)h(Esc)n
(her)d(language.)40 b(The)30 b(third)f(section)g(con)n(tains)150
689 y(a)g(v)-5 b(ariet)n(y)29 b(of)h(programs)e(to)i(illustrate)f(the)h
(Esc)n(her)f(programming)e(st)n(yle.)44 b(The)30 b(fourth)f(section)h
(sho)n(ws)f(ho)n(w)150 789 y(the)h(extensions)f(prop)r(osed)g(here)g
(are)g(incorp)r(orated)f(in)n(to)h(en)n(tire)g(programs.)41
b(The)30 b(\014fth)h(section)e(con)n(tains)f(a)150 888
y(more)e(detailed)h(discussion)e(of)i(the)g(de\014nitions)g(in)g(the)g
Fi(Booleans)c Fl(mo)r(dule)k(whic)n(h)g(con)n(tains)f(the)h(extensions)
150 988 y(of)g(Esc)n(her)e(o)n(v)n(er)f(Hask)n(ell)i(concerning)f(the)i
(connectiv)n(es,)f(quan)n(ti\014ers,)g(and)h(sets.)36
b(The)27 b(last)f(section)g(con)n(tains)150 1088 y(some)e(conclusions.)
35 b(T)-7 b(o)25 b(mak)n(e)f(the)h(pap)r(er)f(self-con)n(tained,)h(App)
r(endix)g(A)h(giv)n(es)d(a)i(brief)f(in)n(tro)r(duction)h(to)g(the)150
1187 y(logic)e(underlying)g(Esc)n(her,)g(App)r(endix)i(B)f(con)n(tains)
f(its)h(op)r(erational)e(seman)n(tics,)i(and)f(App)r(endix)i(C)f(con)n
(tains)150 1287 y(the)k Fi(Booleans)c Fl(mo)r(dule.)150
1559 y Fm(2)135 b(Elemen)l(ts)46 b(of)g(Esc)l(her)150
1741 y Fl(In)28 b(this)g(section,)f(the)h(basic)f(features)g(of)h(Esc)n
(her)e(are)g(outlined.)275 1841 y(First,)44 b(I)c(brie\015y)h(describ)r
(e)f(the)h(resources)e(pro)n(vided)h(b)n(y)g(the)h Fi(Booleans)d
Fl(mo)r(dule.)76 b(This)41 b(mo)r(dule)g(is)150 1940
y(presen)n(ted)19 b(here)g(separately)g(for)g(reasons)f(of)h(clarit)n
(y)g(in)h(the)g(exp)r(osition,)h(but)f(for)g(the)g(Esc)n(her)e
(implemen)n(tation)150 2040 y(the)29 b(in)n(ten)n(tion)g(is)f(to)h
(absorb)e(this)i(mo)r(dule)g(in)n(to)f(the)h(Hask)n(ell)f(Prelude.)39
b(The)29 b(data)f(constructors)f Fi(True)g Fl(and)150
2140 y Fi(False)32 b Fl(are)g(the)j(truth)f(v)-5 b(alues.)55
b(The)34 b(predicate)f Fi(==)g Fl(is)g(equalit)n(y)g(and)h
Fi(/=)f Fl(is)h(disequalit)n(y)-7 b(.)54 b(Next)34 b(come)g(the)150
2239 y(connectiv)n(es,)d(conjunction)g(\()p Fi(&&)p Fl(\),)g
(disjunction)h(\()p Fi(||)p Fl(\),)f(and)g(negation)f(\()p
Fi(not)p Fl(\).)46 b(Their)31 b(resp)r(ectiv)n(e)f(de\014nitions)150
2339 y(in)41 b Fi(Booleans)c Fl(capture)k(standard)e(prop)r(erties)h
(of)h(these)g(connectiv)n(es.)75 b(After)41 b(the)g(connectiv)n(es)f
(are)g(the)150 2439 y(\(generalized\))31 b(quan)n(ti\014ers,)i
Fi(sigma)d Fl(and)i Fi(pi)p Fl(.)50 b(In)32 b(fact,)i(these)e(nev)n(er)
f(app)r(ear)h(without)g(encompassing)f(a)h Fh(\025)p
Fl(-)150 2538 y(term)23 b(and)h(so)e(app)r(ear)h(only)g(in)g(disguised)
g(form)g(as)g Fi(exists)e Fl(and)i Fi(forall)p Fl(.)33
b(Consequen)n(tly)-7 b(,)24 b(the)g(de\014nition)g(for)150
2638 y Fi(sigma)h Fl(pro)n(vides)g(some)h(statemen)n(ts)g(with)h
Fi(exists)d Fl(in)j(the)g(head)f(and)h(the)g(de\014nition)g(for)f
Fi(pi)g Fl(pro)n(vides)f(some)150 2737 y(statemen)n(ts)30
b(with)h Fi(forall)d Fl(in)j(the)g(head.)46 b(A)30 b(v)-5
b(ariet)n(y)30 b(of)h(standard)e(set-pro)r(cessing)g(functions)i(is)f
(pro)n(vided.)150 2837 y(Because)20 b(the)h(underlying)g(logic)f(of)h
(Esc)n(her)e(is)i(higher)f(order,)h(sets)g(are)f(handled)h(in)g(a)g
(particularly)e(simple)i(and)150 2937 y(satisfying)26
b(w)n(a)n(y)-7 b(.)36 b(Essen)n(tially)-7 b(,)25 b(one)i(iden)n
(ti\014es)g(a)f(set)h(with)h(a)e(predicate.)36 b(More)26
b(precisely)-7 b(,)26 b(a)h(set)g(is)g(iden)n(ti\014ed)150
3036 y(with)e(the)g(predicate)f(\(on)h(the)g(same)f(domain)g(as)g(the)h
(set\))g(whic)n(h)g(maps)f(an)g(elemen)n(t)h(of)g(the)g(domain)f(to)h
Fi(True)150 3136 y Fl(if)31 b(and)f(only)g(if)h(the)g(elemen)n(t)f(is)g
(a)g(mem)n(b)r(er)h(of)f(the)h(set.)45 b(Ha)n(ving)29
b(made)i(this)f(iden)n(ti\014cation,)h(the)g(usual)f(set)150
3236 y(op)r(erations)c(suc)n(h)i(as)f(in)n(tersection)f(and)i(union)f
(are)g(simply)h(higher-order)d(functions)j(whose)f(argumen)n(ts)f(are)
150 3335 y(predicates.)275 3435 y(Next,)g(I)f(presen)n(t)f(an)h(Esc)n
(her)f(program)f(c)n(hosen)h(just)i(to)f(illustrate)f(the)i(basic)e
(concepts)h(of)g(the)h(language.)150 3535 y(The)e(application)g(is)g
(concerned)f(with)i(some)f(simple)g(list)h(pro)r(cessing.)34
b(There)24 b(are)f(t)n(w)n(o)h(basic)f(t)n(yp)r(es,)i
Fi(Person)p Fl(,)150 3634 y(the)h(t)n(yp)r(e)h(of)f(p)r(eople,)g(and)g
Fi(Day)p Fl(,)f(the)i(t)n(yp)r(e)f(of)g(da)n(ys)f(of)h(the)h(w)n(eek.)
35 b(In)27 b(addition,)f(lists)g(of)g(items)g(of)g(suc)n(h)g(t)n(yp)r
(es)150 3734 y(will)35 b(b)r(e)g(needed.)58 b(The)35
b(t)n(yp)r(e)g(of)g(lists)g(is)f(denoted)h(using)f Fi([)h
Fl(and)f Fi(])p Fl(.)58 b(Th)n(us,)36 b(for)f(this)g(application,)h(t)n
(ypical)150 3833 y(t)n(yp)r(es)f(are)f Fi(Bool)p Fl(,)i
Fi(Day)p Fl(,)g Fi([Day])p Fl(,)f Fi([[Person]])p Fl(,)e(and)i
Fi(\([\([a],)41 b([a]\)])g(->)i(Day\))f(->)g(Bool)p Fl(,)36
b(where)f Fi(a)f Fl(is)h(a)150 3933 y(parameter.)46 b(In)32
b(the)f(in)n(tended)h(in)n(terpretation)e(for)h(this)g(application,)h
(the)g(domain)e(corresp)r(onding)g(to)h(the)150 4033
y(t)n(yp)r(e)d Fi([Day])p Fl(,)d(for)j(example,)f(is)g(the)h(set)g(of)f
(all)h(lists)f(of)h(da)n(ys)e(of)i(the)g(w)n(eek.)275
4132 y(The)f(data)g(constructors)f(for)h(forming)g(lists)h(are)e
Fi([])h Fl(and)h Fi(:)p Fl(,)f(the)h(data)f(constructors)f(of)h(t)n(yp)
r(e)h Fi(Day)f Fl(are)150 4289 y Fi(Mon,)42 b(Tue,)g(Wed,)g(Thu,)g
(Fri,)g(Sat,)g(Sun)150 4446 y Fl(and)27 b(those)h(of)f(t)n(yp)r(e)h
Fi(Person)d Fl(are)150 4602 y Fi(Mary,)42 b(Bill,)f(Joe,)h(Fred.)275
4759 y Fl(F)-7 b(or)27 b(this)g(application,)g(there)h(are)e(three)i
(functions)g(with)g(the)g(follo)n(wing)e(signatures.)150
4916 y Fi(permute)41 b(::)h(\([a],)g([a]\))g(->)h(Bool;)150
5016 y(concatenate)c(::)k(\([a],)e([a]\))h(->)h([a];)150
5115 y(split)f(::)g(\([a],)g([a],)g([a]\))g(->)g(Bool;)150
5272 y Fl(The)22 b(in)n(tended)h(meaning)f(of)h(these)f(functions)h(is)
f(as)g(follo)n(ws.)34 b(The)22 b(predicate)g Fi(permute)e
Fl(maps)i Fi(\(s,t\))e Fl(to)j Fi(True)150 5372 y Fl(if)31
b Fi(s)e Fl(and)h Fi(t)g Fl(are)f(lists)h(suc)n(h)g(that)g
Fi(s)g Fl(is)g(a)f(p)r(erm)n(utation)h(of)g Fi(t)p Fl(;)h(otherwise,)f
Fi(permute)d Fl(maps)j Fi(\(s,t\))e Fl(to)i Fi(False)p
Fl(.)150 5471 y(Giv)n(en)g(lists)g Fi(s)f Fl(and)h Fi(t)p
Fl(,)g Fi(concatenate)c Fl(maps)j Fi(\(s,t\))f Fl(to)i(the)g(list)h
(obtained)e(b)n(y)h(concatenating)f Fi(s)g Fl(and)h Fi(t)g
Fl(\(in)150 5571 y(this)24 b(order\).)34 b(Giv)n(en)23
b(lists)g Fi(r)p Fl(,)h Fi(s)p Fl(,)g(and)f Fi(t)p Fl(,)h
Fi(split)d Fl(maps)i Fi(\(r,s,t\))e Fl(to)i Fi(True)e
Fl(if)j Fi(r)f Fl(is)g(the)h(result)f(of)g(concatenating)150
5670 y Fi(s)k Fl(and)h Fi(t)f Fl(\(in)h(this)g(order\);)f(otherwise,)f
Fi(split)g Fl(maps)h Fi(\(r,s,t\))e Fl(to)i Fi(False)p
Fl(.)p eop
%%Page: 4 4
4 3 bop 150 100 a Fk(2)83 b(ELEMENTS)26 b(OF)h(ESCHER)2376
b Fl(4)275 390 y(A)n(t)28 b(this)g(p)r(oin)n(t,)g(the)h(in)n(tended)f
(in)n(terpretation)f(has)h(b)r(een)g(de\014ned)g(and)g(I)g(can)g(no)n
(w)f(turn)h(to)g(writing)g(the)150 490 y(program.)34
b(This)25 b(consists)f(of)g(the)h(ab)r(o)n(v)n(e)f(declarations,)f
(plus)i(some)g(de\014nitions)f(for)h(the)g(functions)g
Fi(permute)p Fl(,)150 589 y Fi(concatenate)p Fl(,)f(and)29
b Fi(split)p Fl(,)d(and)j(is)f(giv)n(en)f(in)i(the)g(mo)r(dule)g
Fi(Permute)c Fl(b)r(elo)n(w.)39 b(Note)29 b(that)g(one)f(could)g
(easily)150 689 y(rewrite)34 b(the)g(functions)h(in)f(the)h(mo)r(dule)g
Fi(Permute)c Fl(in)k(a)f(curried)f(st)n(yle.)57 b(Throughout)33
b(the)h(pap)r(er,)i(except)150 789 y(where)18 b(compatibilit)n(y)h
(with)g(Hask)n(ell)f(forced)g(the)i(issue,)g(I)f(ha)n(v)n(e)f(delib)r
(erately)g(mixed)h(the)g(\(functional\))h(curried)150
888 y(and)27 b(\(logic\))h(uncurried)f(st)n(yles)g(to)g(sho)n(w)g(b)r
(oth)h(are)f(p)r(ossible.)p 150 1018 3511 10 v 150 1184
a Fi(module)41 b(Permute\(Day\(..\),)c(Person\(..\),)i(permute\))h
(where)i({)150 1383 y(data)g(Day)g(=)h(Mon)g(|)g(Tue)f(|)h(Wed)g(|)g
(Thu)f(|)i(Fri)e(|)h(Sat)f(|)i(Sun;)150 1583 y(data)e(Person)f(=)i
(Mary)f(|)h(Bill)f(|)h(Joe)g(|)g(Fred;)150 1782 y(permute)e(::)h
(\([a],)g([a]\))g(->)h(Bool;)150 1882 y(permute\([],)c(l\))k(=)324
1981 y(l)h(==)e([];)150 2081 y(permute\(h)e(:)j(t,)g(l\))g(=)324
2180 y(exists)e([u,)i(v,)g(r])f(\(permute\(t,)d(r\))k(&&)g(split\(r,)d
(u,)j(v\))g(&&)f(l)i(==)e(concatenate\(u,)c(h)43 b(:)g(v\)\);)150
2380 y(concatenate)c(::)k(\([a],)e([a]\))h(->)h([a];)150
2479 y(concatenate\([],)37 b(x\))43 b(=)324 2579 y(x;)150
2679 y(concatenate\(u)38 b(:)43 b(x,)g(y\))g(=)324 2778
y(u)h(:)f(concatenate\(x,)37 b(y\);)150 2977 y(split)42
b(::)g(\([a],)g([a],)g([a]\))g(->)g(Bool;)150 3077 y(split\([],)e(x,)j
(y\))f(=)324 3177 y(x)i(==)e([])h(&&)324 3276 y(y)h(==)e([];)150
3376 y(split\(x)f(:)i(y,)g(v,)f(w\))h(=)324 3476 y(\(v)g(==)g([])g(&&)f
(w)i(==)e(x)h(:)h(y\))e(||)324 3575 y(exists)f([z])i(\(v)g(==)f(x)h(:)h
(z)f(&&)g(split\(y,)d(z,)j(w\)\);)150 3774 y(})p 150
3941 V 275 4119 a Fl(A)27 b Fj(de\014nition)h Fl(of)g(a)f(function)h
(consists)e(of)i(one)f(or)f(more)h(equations,)f(whic)n(h)i(are)e
(called)h Fj(statements)p Fl(.)36 b(The)150 4219 y(top-lev)n(el)21
b(equalit)n(y)h(sym)n(b)r(ol)g(is)g(denoted)g(b)n(y)g
Fi(=)g Fl(to)g(distinguish)g(it)h(from)f(other)g(o)r(ccurrences)e(of)j
(equalit)n(y)e(whic)n(h)150 4318 y(are)27 b(denoted)g(b)n(y)h
Fi(==)p Fl(.)36 b(In)27 b(general,)g(statemen)n(ts)g(ha)n(v)n(e)f(the)i
(form)150 4418 y Fh(h)23 b Fl(=)g Fh(b)p Fl(.)150 4518
y(Here)k(the)h Fj(he)l(ad)h Fh(h)f Fl(is)f(a)g(term)h(of)f(the)h(form)
150 4617 y Fh(f)f(t)248 4629 y Fg(1)299 4617 y Fh(:)14
b(:)g(:)g(t)440 4629 y Ff(n)150 4717 y Fl(where)28 b
Fh(f)37 b Fl(is)28 b(a)g(function,)i(eac)n(h)d Fh(t)1190
4729 y Ff(i)1247 4717 y Fl(is)h(a)g(term,)h(and)f(the)h
Fj(b)l(o)l(dy)g Fh(b)f Fl(is)h(a)f(term.)39 b(Note)29
b(that)g(all)f(lo)r(cal)g(v)-5 b(ariables)27 b(in)150
4816 y(a)f(statemen)n(t)h(m)n(ust)g(b)r(e)g(explicitly)g(quan)n
(ti\014ed.)37 b(\(A)27 b Fj(lo)l(c)l(al)j(variable)f
Fl(is)e(a)f(v)-5 b(ariable)26 b(app)r(earing)g(in)h(the)g(b)r(o)r(dy)g
(of)150 4916 y(a)g(statemen)n(t)h(but)g(not)g(the)g(head.\))275
5016 y(Naturally)-7 b(,)29 b(it)h(m)n(ust)f(b)r(e)h(c)n(hec)n(k)n(ed)e
(that)i(the)f(in)n(tended)h(in)n(terpretation)e(is)i(a)f(mo)r(del)g(of)
h(the)f(theory)g(giv)n(en)150 5115 y(b)n(y)40 b(the)g(program.)73
b(F)-7 b(or)40 b(mo)r(dule)g Fi(Permute)p Fl(,)h(this)f(in)n(v)n(olv)n
(es)e(c)n(hec)n(king)h(that)i(eac)n(h)e(of)h(the)h(statemen)n(ts)f(in)
150 5215 y(the)28 b(de\014nitions)g(is)f(v)-5 b(alid)28
b(in)g(the)g(in)n(tended)g(in)n(terpretation)f(giv)n(en)f(ab)r(o)n(v)n
(e.)36 b(This)28 b(completes)f(the)h(design)f(and)150
5315 y(co)r(ding)22 b(phases)g(for)f(this)i(simple)g(application.)34
b(Assuming)22 b(that)h(the)g(pro)r(cess)e(of)h(c)n(hec)n(king)f(that)i
(the)g(in)n(tended)150 5414 y(in)n(terpretation)30 b(is)g(a)g(mo)r(del)
h(of)g(the)g(program)d(has)i(b)r(een)h(carried)f(out)g(correctly)-7
b(,)30 b(the)h(programmer)d(can)j(b)r(e)150 5514 y(no)n(w)36
b(sure)f(that)i(the)g(program)d(is)i(correct)f(\(that)i(is,)h
(satis\014es)e(the)h(sp)r(eci\014cation)e(giv)n(en)h(b)n(y)g(the)h(in)n
(tended)150 5613 y(in)n(terpretation\).)p eop
%%Page: 5 5
5 4 bop 150 100 a Fk(2)83 b(ELEMENTS)26 b(OF)h(ESCHER)2376
b Fl(5)275 390 y(Next)26 b(I)g(discuss)g(function)h(calls.)36
b(\(More)25 b(details)h(are)f(giv)n(en)h(in)g(App)r(endix)h(B.\))g(A)f
(redex)g(is)g(a)g(subterm)g(of)150 490 y(the)j(form)f
Fh(f)g(t)590 502 y Fg(1)641 490 y Fh(:)14 b(:)g(:)g(t)782
502 y Ff(n)827 490 y Fl(,)29 b(for)f(some)g(function)h
Fh(f)9 b Fl(.)40 b(Esc)n(her)27 b(selects)h(some)h(redex)e(in)i(the)g
(curren)n(t)f(term)h(on)f(whic)n(h)150 589 y(to)f(mak)n(e)g(the)h
(function)f(call.)37 b(In)27 b(a)g(function)h(call,)f(a)g(statemen)n(t)
h(is)f(view)n(ed)g(as)g(a)g(rewrite)f(whic)n(h)h(b)r(eha)n(v)n(es)g(as)
150 689 y(follo)n(ws.)35 b(Supp)r(ose)27 b(there)f(is)g(some)g
(instance)g Fh(h)d Fl(=)g Fh(b)j Fl(of)g(a)g(statemen)n(t)g(suc)n(h)g
(that)h Fh(h)f Fl(is)g(iden)n(tical)g(to)h(a)f(redex)f
Fh(r)r Fl(.)150 789 y(Then)30 b(the)g(redex)f Fh(r)j
Fl(in)e(the)g(curren)n(t)e(term)i(is)f(replaced)g(b)n(y)g
Fh(b)g Fl(to)h(giv)n(e)e(the)i(next)g(term)g(in)f(the)h(computation.)
150 888 y(In)e(fact,)g(Esc)n(her)e(ma)n(y)h(select)g(more)g(than)g(one)
h(redex)f(in)g(a)h(single)f(computation)g(step.)275 988
y(It)i(is)f(in)n(tended)h(that)g(Esc)n(her)f(will)h(ha)n(v)n(e)e(a)h
(do)r(cumen)n(tation)h(to)r(ol)f(whic)n(h)h(extracts)f(signature)f(and)
i(mo)r(de)150 1088 y(information)34 b(for)g(eac)n(h)g(function)i(exp)r
(orted)e(from)h(a)f(mo)r(dule)h(and)g(mak)n(es)e(this)j(information)e
(a)n(v)-5 b(ailable)33 b(to)150 1187 y(programmers.)g(The)26
b(mo)r(de)f(do)r(cumen)n(tation)g(should)g(indicate)g(the)h(exp)r
(ected)f(usage)f(of)i(eac)n(h)e(function.)37 b(F)-7 b(or)150
1287 y(example,)28 b(consider)f(the)i(predicate)f Fi(split)e
Fl(in)i(the)h(mo)r(dule)g Fi(Permute)p Fl(.)36 b(The)28
b(mo)r(de)g(do)r(cumen)n(tation)g(should)150 1386 y(indicate)33
b(that)h(it)g(is)f(in)n(tended)g(that)h(some)f(list)g(b)r(e)h(giv)n(en)
e(in)i(the)f(\014rst)g(argumen)n(t)g(and)g Fi(split)e
Fl(will)j(return)150 1486 y(all)c(p)r(ossible)g(w)n(a)n(ys)f(of)h
(splitting)g(the)h(list.)45 b(This)30 b(information)g(can)g(easily)f(b)
r(e)i(obtained)f(b)n(y)g(analysis)e(of)j(the)150 1586
y(de\014nition)d(of)g Fi(split)p Fl(.)275 1685 y(Here)g(are)g(some)g(t)
n(ypical)g(goal)g(terms)g(and)h(the)g(terms)f(to)h(they)g(reduce)f(for)
g(the)h(mo)r(dule)g Fi(Permute)p Fl(.)38 b(The)150 1785
y(term)150 1947 y Fi(concatenate\([Mon)o(,)g(Tue],)j([Wed]\))150
2109 y Fl(reduces)27 b(to)150 2271 y Fi([Mon,)42 b(Tue,)f(Wed].)150
2532 y Fl(The)28 b(term)150 2694 y Fi(split\([Mon,)39
b(Tue],)j(x,)g(y\))150 2856 y Fl(reduces)27 b(to)150
3018 y Fi(\(x)43 b(==)g([])f(&&)h(y)g(==)g([Mon,)e(Tue]\))h(||)150
3117 y(\(x)h(==)g([Mon])e(&&)i(y)g(==)g([Tue]\))e(||)150
3217 y(\(x)i(==)g([Mon,)e(Tue])h(&&)h(y)g(==)g([]\).)150
3479 y Fl(The)28 b(term)150 3641 y Fi(not)42 b(split\([Mon,)d(Tue],)j
([Tue],)f(y\))150 3802 y Fl(reduces)27 b(to)150 3964
y Fi(True.)150 4226 y Fl(Finally)-7 b(,)28 b(the)g(term)150
4388 y Fi(permute\([Mon,)38 b(Tue,)k(Wed],)g(x\))150
4550 y Fl(reduces)27 b(to)150 4711 y Fi(x)43 b(==)g([Mon,)e(Tue,)h
(Wed])86 b(||)150 4811 y(x)43 b(==)g([Tue,)e(Mon,)h(Wed])86
b(||)150 4911 y(x)43 b(==)g([Tue,)e(Wed,)h(Mon])86 b(||)150
5010 y(x)43 b(==)g([Mon,)e(Wed,)h(Tue])86 b(||)150 5110
y(x)43 b(==)g([Wed,)e(Mon,)h(Tue])86 b(||)150 5210 y(x)43
b(==)g([Wed,)e(Tue,)h(Mon].)275 5372 y Fl(Ho)n(w)29 b(do)r(es)i(Esc)n
(her)e(compute)h(these)h(answ)n(ers?)43 b(Esc)n(her)29
b(has)h(a)g(\\rewriting")f(computational)g(mo)r(del,)j(in)150
5471 y(whic)n(h)c(a)f(goal)f(term)i(is)f(reduced)h(to)f(an)h(equiv)-5
b(alen)n(t)27 b(term,)h(whic)n(h)g(is)f(then)h(giv)n(en)f(as)g(the)h
(answ)n(er.)36 b(F)-7 b(ormally)g(,)150 5571 y(if)41
b Fi(s)g Fl(is)f(the)i(goal)d(term)i(and)f Fi(t)h Fl(is)f(the)i(answ)n
(er)d(term,)44 b(then)d Fi(s)i(==)g(t)e Fl(is)f(a)h(logical)e
(consequence)h(of)h(the)150 5670 y(program.)f(So,)29
b(the)h(\014rst)f(goal)e(ab)r(o)n(v)n(e,)i Fi(concatenate\([Mo)o(n,)37
b(Tue],)42 b([Wed]\))p Fl(,)27 b(is)i(reduced)g(b)n(y)g(a)g(sequence)p
eop
%%Page: 6 6
6 5 bop 150 100 a Fk(2)83 b(ELEMENTS)26 b(OF)h(ESCHER)2376
b Fl(6)150 390 y(of)28 b(rewrites)e(to)i(the)g(term)g
Fi([Mon,)41 b(Tue,)h(Wed])p Fl(,)26 b(b)n(y)i(means)f(of)h(the)g
(computation)f(giv)n(en)g(in)h(Figure)f(1)g(b)r(elo)n(w.)150
490 y(The)g(computation)g(consists)f(of)h(the)g(successiv)n(e)f(terms)g
(pro)r(duced)h(b)n(y)g(function)g(calls,)g(the)g(\014rst)g(term)g(b)r
(eing)150 589 y(the)32 b(goal)f(and)h(the)g(last)g(the)g(answ)n(er.)49
b(The)32 b(second)f(and)h(third)g(terms)g(in)g(the)h(computation)e(are)
g(obtained)150 689 y(b)n(y)f(using)f(the)i(second)e(statemen)n(t)h(in)g
(the)g(de\014nition)h(of)e Fi(concatenate)p Fl(,)d(while)31
b(the)f(fourth)g(term,)g(whic)n(h)g(is)150 789 y(the)35
b(answ)n(er,)g(is)f(obtained)h(b)n(y)f(using)g(the)h(\014rst)g
(statemen)n(t)f(in)h(the)g(de\014nition)g(of)g Fi(concatenate)p
Fl(.)53 b(In)35 b(eac)n(h)150 888 y(term,)e(the)f(redex)f(is)g
(underlined.)49 b(The)32 b(other)f(three)g(goals)f(for)h(the)h(mo)r
(dule)g Fi(Permute)d Fl(require)i(the)h(use)f(of)150
988 y(statemen)n(ts)23 b(for)g(some)g(connectiv)n(es)f(and)h(existen)n
(tial)g(quan)n(ti\014cation)g(in)g(the)h(mo)r(dule)g
Fi(Booleans)p Fl(,)d(whic)n(h)i(will)150 1088 y(b)r(e)28
b(discussed)f(later.)1259 1245 y Fi(concatenate\([Mo)o(n,)37
b(Tue],)42 b([Wed]\))p 1259 1270 1308 4 v 1887 1344 a
Fe(+)1215 1444 y Fi(Mon)g(:)87 b(concatenate\([Tue])o(,)37
b([Wed]\))p 1520 1469 1090 4 v 1887 1544 a Fe(+)1128
1643 y Fi(Mon)42 b(:)87 b(Tue)42 b(:)87 b(concatenate\([],)38
b([Wed]\))p 1738 1668 959 4 v 1887 1743 a Fe(+)1586 1843
y Fi([Mon,)j(Tue,)h(Wed])1301 2108 y Fl(Figure)27 b(1:)36
b(An)28 b(Esc)n(her)e(computation)275 2324 y(Ultimately)-7
b(,)27 b(a)f(programmer)f(is)h(in)n(terested)g(in)h(computing)g(the)g
(v)-5 b(alues)26 b(of)h(expressions)e(in)i(the)g(in)n(tended)150
2423 y(in)n(terpretation.)47 b(Ho)n(w)31 b(do)r(es)g(Esc)n(her)f
(assist)h(in)g(this?)49 b(Since)32 b(Esc)n(her)e(has)h(no)g(direct)g
(kno)n(wledge)f(of)h(the)h(in-)150 2523 y(tended)26 b(in)n
(terpretation,)f(it)h(cannot)g(ev)-5 b(aluate)25 b(an)n(y)g(term)g(in)h
(the)g(in)n(tended)h(in)n(terpretation.)35 b(Ho)n(w)n(ev)n(er,)24
b(giv)n(en)150 2623 y(a)j(term,)g(it)h(can)f Fj(simplify)j
Fl(\(that)e(is,)f(reduce\))g(the)h(term,)f(so)g(that)h(the)f(ev)-5
b(aluation)27 b(in)h(the)f(in)n(tended)h(in)n(terpre-)150
2722 y(tation)23 b(can)g(then)h(b)r(e)g(easily)e(done)h(b)n(y)g(the)h
(programmer.)33 b(This)23 b(is)g(eviden)n(t)h(in)f(the)h(ab)r(o)n(v)n
(e)e(computation)h({)g(the)150 2822 y(term)33 b Fi(concatenate\([Mon)o
(,)k(Tue],)42 b([Wed]\))30 b Fl(is)j(simpli\014ed)g(to)g
Fi([Mon,)41 b(Tue,)h(Wed])32 b Fl(whic)n(h)g(can)h(b)r(e)g(easily)150
2921 y(ev)-5 b(aluated.)64 b(Strictly)36 b(sp)r(eaking,)i(this)f(view)g
(is)f(also)g(appropriate)e(for)i(arithmetic)h(terms.)63
b(F)-7 b(or)36 b(example,)150 3021 y(giv)n(en)25 b(the)g(term)h
Fi(3)43 b(+)g(4)p Fl(,)25 b(Esc)n(her)f(will)i(reply)f(with)h(the)f
(term)h Fi(7)p Fl(.)35 b(F)-7 b(ormally)g(,)25 b(it)h(hasn't)g(ev)-5
b(aluated)25 b Fi(3)43 b(+)g(4)p Fl(,)25 b(but)150 3121
y(instead)30 b(simpli\014ed)g(it)g(to)g Fi(7)p Fl(.)44
b(In)30 b(this)g(case,)g(the)g(distinction)g(b)r(et)n(w)n(een)g
(simpli\014cation)g(and)f(ev)-5 b(aluation)30 b(is)f(a)150
3220 y(bit)d(p)r(edan)n(tic.)36 b(But,)27 b(in)f(general,)e(it's)i(imp)
r(ortan)n(t)g(to)f(k)n(eep)g(in)h(mind)g(this)g(understanding)f(of)h
(what)f(Esc)n(her)f(is)150 3320 y(doing.)275 3420 y(The)f(reduction)f
(pro)r(cess)g(terminates)h(when)g(a)f(term)h(is)g(reac)n(hed)f(whic)n
(h)h(con)n(tains)f(no)h(redexes.)34 b(This)23 b(\014nal)150
3519 y(term,)k(the)g(answ)n(er,)f(is)g(then)h(in)g Fj(normal)j(form)p
Fl(.)37 b(T)n(ypically)-7 b(,)27 b(an)f(answ)n(er)f(ma)n(y)h(con)n
(tain)g(some)g(system-de\014ned)150 3619 y(functions,)35
b(suc)n(h)f(as)e Fi(==)p Fl(,)j Fi(&&)p Fl(,)f(or)f Fi(||)p
Fl(,)h(and)f(some)g(data)g(constructors,)h(suc)n(h)f(as)g
Fi([])g Fl(or)f Fi(:)p Fl(.)55 b(Ho)n(w)n(ev)n(er,)33
b(if)h(the)150 3718 y(answ)n(er)21 b(con)n(tains)h(a)g(user-de\014ned)g
(function,)i(an)e(error)f(has)h(o)r(ccurred)f(in)i(the)g(sense)f(that)h
(a)f(\(p)r(oten)n(tial\))h(redex)150 3818 y(con)n(taining)30
b(a)g(user-de\014ned)g(function)i(at)f(the)g(top)g(lev)n(el)f(has)g
(nev)n(er)g(b)r(ecome)h(su\016cien)n(tly)g(instan)n(tiated)g(for)150
3918 y(the)d(function)g(call)f(to)h(pro)r(ceed.)36 b(This)28
b(kind)f(of)h(programming)d(error)h(is)i(called)f(a)g
Fj(\015ounder)p Fl(.)275 4017 y(By)j(default,)i(Esc)n(her)d
(computations)h(for)g(logic)g(programming)e(examples)i(return)h(\\all)f
(answ)n(ers".)43 b(Also)150 4117 y(they)22 b(nev)n(er)f(fail.)36
b(In)22 b(Esc)n(her,)g(the)g(equiv)-5 b(alen)n(t)22 b(of)g(a)g(failure)
f(in)i(a)e(con)n(v)n(en)n(tional)g(logic)g(programming)f(language)150
4217 y(is)27 b(to)h(return)f(the)h(answ)n(er)e Fi(False)p
Fl(.)35 b(F)-7 b(or)27 b(example,)g(for)g(the)h(mo)r(dule)g
Fi(Permute)p Fl(,)d(the)j(term)150 4383 y Fi(concatenate\([Mon)o(],)37
b([Tue]\))k(==)i([Tue])150 4549 y Fl(reduces)27 b(to)150
4715 y Fi(False.)275 4881 y Fl(F)-7 b(rom)18 b(a)h(programming)e
(language)h(p)r(ersp)r(ectiv)n(e,)i(Esc)n(her)e(has)h(an)g(un)n(usual)f
(treatmen)n(t)h(of)g(v)-5 b(ariables,)20 b(whic)n(h)150
4980 y(are)33 b(regarded)f(as)i(syn)n(tactical)f(v)-5
b(ariables.)55 b(\(This)35 b(treatmen)n(t)f(is)g(common)f(in)i(the)f
(presen)n(tation)f(of)h(logics.)150 5080 y(F)-7 b(or)36
b(a)f(t)n(ypical)h(example)g(of)g(this,)j(see)c([1,)j(page)e(164].\))61
b(This)36 b(comes)g(ab)r(out)g(b)r(ecause)g(a)g(b)r(ound)g(v)-5
b(ariable)150 5180 y(can)36 b(app)r(ear)f(in)h(the)h(head)f(of)g(a)f
(statemen)n(t.)63 b(In)36 b(fact,)i(what)f(I)f(ha)n(v)n(e)f(called)g
(statemen)n(ts)h(up)h(to)f(no)n(w)f(are)150 5279 y(actually)29
b(statemen)n(t)g Fj(schemas)p Fl(.)44 b(In)30 b(statemen)n(t)g(sc)n
(hemas,)f(iden)n(ti\014ers)g(b)r(eginning)g(with)h(a)f(lo)n(w)n
(er-case)e(letter)150 5379 y(\(and)f(not)f(ha)n(ving)g(a)g(signature\))
g(are)f(syn)n(tactical)h(v)-5 b(ariables)24 b(ranging)g(o)n(v)n(er)g
(\(ob)5 b(ject\))26 b(terms.)36 b(An)26 b Fj(instanc)l(e)f
Fl(of)150 5479 y(a)h(statemen)n(t)h(sc)n(hema)f(is)h(an)f(\(ob)5
b(ject\))27 b(form)n(ula,)f(called)h(a)f(statemen)n(t,)h(whic)n(h)g(is)
g(obtained)f(b)n(y)h(instan)n(tiating)150 5578 y(syn)n(tactical)32
b(v)-5 b(ariables)31 b(b)n(y)h(\(ob)5 b(ject\))34 b(terms)e
(\(according)f(to)i(certain)f(restrictions)f(giv)n(en)h(b)r(elo)n(w\).)
52 b(One)32 b(can)p eop
%%Page: 7 7
7 6 bop 150 100 a Fk(3)83 b(PR)n(OGRAMMING)27 b(EXAMPLES)2184
b Fl(7)150 390 y(think)34 b(of)f(a)g(statemen)n(t)g(sc)n(hema)g(as)g
(an)g(expression)f(in)h(a)g(meta-language)e(whic)n(h)j(sp)r(eci\014es)f
(a)g(\(p)r(oten)n(tially)150 490 y(in\014nite\))c(collection)e(of)g
(statemen)n(ts,)h(eac)n(h)e(obtained)i(as)f(an)g(instance)g(of)h(the)g
(statemen)n(t)f(sc)n(hema.)275 589 y(There)g(are)f(some)h(con)n(v)n(en)
n(tions)f(regarding)g(the)i(use)f(of)h(syn)n(tactical)e(v)-5
b(ariables.)275 758 y Fe(\017)41 b Fl(Syn)n(tactical)30
b(v)-5 b(ariables)30 b(app)r(earing)g(immediately)h(after)g(a)f
Fh(\025)i Fl(are)e(restricted)h(to)g(range)e(o)n(v)n(er)h(\(ob)5
b(ject\))358 858 y(v)-5 b(ariables.)275 1018 y Fe(\017)41
b Fl(If)26 b(a)g(syn)n(tactical)f(v)-5 b(ariable)25 b(o)r(ccurs)g(b)r
(oth)i(inside)f(the)h(scop)r(e)f(of)g(some)f Fh(\025)16
b(x)27 b Fl(and)f(also)f(outside)h(it,)h(then)g(it)358
1118 y(cannot)22 b(b)r(e)i(instan)n(tiated)f(b)n(y)g(an)g(\(ob)5
b(ject\))24 b(term)f(con)n(taining)f(as)h(a)g(free)g(v)-5
b(ariable)22 b(the)h(\(ob)5 b(ject\))24 b(v)-5 b(ariable)358
1217 y(instan)n(tiating)27 b Fh(x)p Fl(.)275 1378 y Fe(\017)41
b(f)p Fh(t)430 1390 y Fg(1)466 1378 y Fh(;)14 b(:)g(:)g(:)g(;)g(t)681
1390 y Ff(n)726 1378 y Fe(g)45 b Fl(means)h Fe(f)p Fh(x)84
b Fl(:)h(\()p Fh(x)54 b Fl(=)f Fh(t)1648 1390 y Fg(1)1685
1378 y Fl(\))31 b Fe(_)g Fh(:)14 b(:)g(:)31 b Fe(_)g
Fl(\()p Fh(x)54 b Fl(=)f Fh(t)2329 1390 y Ff(n)2374 1378
y Fl(\))p Fe(g)p Fl(,)e(for)45 b(whic)n(h)h(an)g(\(ob)5
b(ject\))46 b(v)-5 b(ariable)358 1478 y(instan)n(tiating)27
b Fh(x)h Fl(cannot)f(b)r(e)h(free)f(in)h(the)g(\(ob)5
b(ject\))28 b(terms)f(instan)n(tiating)g(the)h Fh(t)2911
1490 y Ff(i)2939 1478 y Fl('s.)358 1577 y(In)f(particular,)g
Fe(fg)f Fl(means)i Fe(f)p Fh(x)41 b Fl(:)h Fh(F)12 b(al)r(se)p
Fe(g)26 b Fl(and)h Fe(f)p Fh(t)p Fe(g)g Fl(means)g Fe(f)p
Fh(x)41 b Fl(:)h Fh(x)23 b Fl(=)g Fh(t)p Fe(g)p Fl(.)275
1746 y(Here)k(are)f(some)h(examples)g(to)h(illustrate)f(these)h(con)n
(v)n(en)n(tions.)150 1901 y Fi(split\(x)41 b(:)i(y,)g(v,)f(w\))h(=)324
2000 y(\(v)g(==)g([])g(&&)f(w)i(==)e(x)h(:)h(y\))e(||)324
2100 y(exists)f([z])i(\(v)g(==)f(x)h(:)h(z)f(&&)g(split\(y,)d(z,)j
(w\)\);)150 2255 y Fl(The)28 b(syn)n(tactical)g(v)-5
b(ariable)27 b Fi(x)h Fl(o)r(ccurs)f(b)r(oth)i(inside)f(and)h(outside)f
(the)h(scop)r(e)e(of)i(the)f(\(implicit\))i Fh(\025)f
Fl(in)f Fi(exists)150 2354 y([z])p Fl(.)34 b(Consequen)n(tly)-7
b(,)24 b(the)g(\(ob)5 b(ject\))24 b(term)g(instan)n(tiating)f
Fi(x)h Fl(cannot)f(con)n(tain)g(as)g(a)g(free)h(v)-5
b(ariable)23 b(the)h(\(ob)5 b(ject\))150 2454 y(v)-5
b(ariable)27 b(instan)n(tiating)g Fi(z)p Fl(.)275 2554
y(The)g(statemen)n(t)h(sc)n(hema)150 2709 y Fi(card)42
b({t})g(=)324 2808 y(1;)150 2963 y Fl(means)150 3118
y Fi(card)g({x)h(|)g(x)g(==)g(t})g(=)324 3217 y(1;)150
3372 y Fl(Here)27 b(the)h(\(ob)5 b(ject\))28 b(v)-5 b(ariable)27
b(instan)n(tiating)g Fi(x)g Fl(cannot)g(b)r(e)h(free)g(in)f(the)h(\(ob)
5 b(ject\))28 b(term)g(instan)n(tiating)f Fi(t)p Fl(.)275
3472 y(Ha)n(ving)37 b(made)h(clear)f(the)h(meaning)g(of)g(statemen)n(t)
g(sc)n(hemas,)i(for)e(brevit)n(y)f(I)i(will)f(usually)g(call)g(them)150
3572 y(\\statemen)n(ts")26 b(in)i(what)g(follo)n(ws.)150
3844 y Fm(3)135 b(Programming)46 b(Examples)150 4026
y Fl(This)33 b(section)g(con)n(tains)f(a)h(v)-5 b(ariet)n(y)32
b(of)h(programs)e(to)i(illustrate)g(the)h(Esc)n(her)d(programming)g(st)
n(yle.)53 b(As)34 b(the)150 4125 y(Hask)n(ell)i(part)g(of)h(Esc)n(her)e
(is)i(tak)n(en)f(for)g(gran)n(ted)f(in)i(this)h(pap)r(er,)g(the)f
(examples)f(all)h(concen)n(trate)e(on)i(the)150 4225
y(extensions)i(that)h(Esc)n(her)e(pro)n(vides)g(o)n(v)n(er)g(Hask)n
(ell,)k(esp)r(ecially)d(the)h(treatmen)n(t)g(of)f(the)i(connectiv)n(es)
d(and)150 4324 y(quan)n(ti\014ers,)27 b(and)g(set-pro)r(cessing.)150
4554 y Fd(3.1)112 b(Set-pro)s(cessing)150 4708 y Fl(First)22
b(I)g(turn)f(to)h(the)g(set-pro)r(cessing)e(facilities)i(of)g(Esc)n
(her.)33 b(As)22 b(an)g(illustration)f(of)h(this,)h(consider)e(the)h
(mo)r(dule)150 4807 y Fi(SportsDB)h Fl(b)r(elo)n(w.)36
b(The)26 b(resources)d(of)j(the)h Fi(Booleans)22 b Fl(mo)r(dule)k(are)f
(made)h(a)n(v)-5 b(ailable)25 b(to)g Fi(SportsDB)e Fl(and)j(will)150
4907 y(b)r(e)i(needed)g(to)f(answ)n(er)f(the)i(queries)f(b)r(elo)n(w.)
275 5007 y(F)-7 b(or)27 b(the)g(mo)r(dule)h Fi(SportsDB)p
Fl(,)d(the)j(term)150 5161 y Fi(likes\(Mary,)39 b(x\))150
5316 y Fl(reduces)27 b(to)150 5471 y Fi(\(x)43 b(==)g(Cricket\))d(||)
150 5571 y(\(x)j(==)g(Tennis\).)p eop
%%Page: 8 8
8 7 bop 150 100 a Fk(3)83 b(PR)n(OGRAMMING)27 b(EXAMPLES)2184
b Fl(8)p 150 317 3511 10 v 150 483 a Fi(module)41 b(SportsDB\(Person\()
o(..\))o(,)c(Sport\(..\),)j(likes\))h(where)g({)150 682
y(data)h(Person)f(=)i(Mary)f(|)h(Bill)f(|)h(Joe)g(|)g(Fred;)150
881 y(data)f(Sport)f(=)j(Cricket)c(|)j(Football)e(|)i(Tennis;)150
1080 y(likes)f(::)g(\(Person,)f(Sport\))g(->)h(Bool;)150
1180 y(likes)g(=)412 1280 y({\(Mary,)e(Cricket\),)455
1379 y(\(Mary,)h(Tennis\),)455 1479 y(\(Bill,)g(Cricket\),)455
1579 y(\(Bill,)g(Tennis\),)455 1678 y(\(Joe,)h(Tennis\),)455
1778 y(\(Joe,)g(Football\)};)150 1977 y(})p 150 2143
V 150 2392 a Fl(The)28 b(term)150 2558 y Fi({s)43 b(|)g(likes\(Fred,)c
(s\)})150 2724 y Fl(reduces)27 b(to)150 2890 y Fi({},)150
3056 y Fl(since)g Fi(likes\(Fred,)39 b(s\))27 b Fl(reduces)g(to)h
Fi(False)p Fl(.)150 3281 y(The)g(term)150 3447 y Fi(Fred)42
b(`in`)g(\({Joe,)f(Fred})g(`union`)g(x\))150 3613 y Fl(reduces)27
b(to)150 3779 y Fi(True.)150 4044 y Fl(The)h(term)150
4210 y Fi(forall)41 b([y])h(\(y)h(`in`)f({Cricket,)e(Tennis})h(-->)h
(likes\(x,y\)\))150 4376 y Fl(reduces)27 b(to)150 4542
y Fi(\(x)43 b(==)g(Mary\))e(||)150 4642 y(\(x)i(==)g(Bill\).)150
4908 y Fl(The)28 b(term)150 5074 y Fi({Mary,)41 b(Joe})h(==)h({x,)f(y})
150 5240 y Fl(reduces)27 b(to)150 5406 y Fi(\(x)43 b(==)g(Mary)e(&&)i
(y)g(==)g(Joe\))f(||)150 5506 y(\(x)h(==)g(Joe)f(&&)h(y)g(==)g(Mary\).)
p eop
%%Page: 9 9
9 8 bop 150 100 a Fk(3)83 b(PR)n(OGRAMMING)27 b(EXAMPLES)2184
b Fl(9)150 390 y(The)28 b(term)150 551 y Fi(\(x)43 b(==)g({p)f(|)h
(likes\(p,)e(s\)}\))h(&&)86 b(\(s)43 b(==)g(Cricket)d(||)j(s)g(==)g
(Football\))150 712 y Fl(reduces)27 b(to)150 873 y Fi(\(\(x)42
b(==)h({Mary,)e(Bill}\))g(&&)i(\(s)g(==)g(Cricket\)\))c(||)150
973 y(\(\(x)j(==)h({Joe}\))e(&&)i(\(s)g(==)f(Football\)\).)150
1233 y Fl(The)28 b(term)150 1394 y Fi({Mary,)41 b(Bill})h(`inters`)e
({Joe,)h(Bill})150 1555 y Fl(reduces)27 b(to)150 1716
y Fi({Bill}.)150 1977 y Fl(The)h(term)150 2137 y Fi({Bill})41
b(`minus`)g({Joe,)g(Bill})150 2298 y Fl(reduces)27 b(to)150
2459 y Fi({}.)150 2720 y Fl(The)h(term)150 2881 y Fi({Mary,)41
b(x})i(`subset`)d({Joe,)i(Mary})150 3042 y Fl(reduces)27
b(to)150 3203 y Fi(\(x)43 b(==)g(Joe\))e(||)150 3302
y(\(x)i(==)g(Mary\).)150 3563 y Fl(The)28 b(term)150
3724 y Fi({Mary,)41 b(Joe})h(==)h({x})150 3885 y Fl(reduces)27
b(to)150 4046 y Fi(False.)150 4306 y Fl(The)h(term)150
4467 y Fi(power)42 b({x)g(|)h(likes\(Mary,)c(x\)})150
4628 y Fl(reduces)27 b(to)150 4789 y Fi({{},)42 b({Tennis},)e
({Cricket},)f({Tennis,)i(Cricket}}.)275 5050 y Fl(The)33
b(function)h Fi(mapset)d Fl(in)j Fi(Booleans)d Fl(is)i(the)h(analogue)e
(for)h(sets)g(of)h(the)f Fi(map)g Fl(function)h(for)f(lists.)55
b(F)-7 b(or)150 5149 y(example,)27 b(if)h(w)n(e)g(de\014ne)f(the)h
(function)h Fi(square)c Fl(b)n(y)150 5310 y Fi(square)41
b(::)i(Int)f(->)h(Int;)150 5410 y(square)e(x)i(=)324
5509 y(x)h(*)f(x;)150 5670 y Fl(then)28 b(a)f(goal)g(term)g(could)h(b)r
(e)p eop
%%Page: 10 10
10 9 bop 150 100 a Fk(3)83 b(PR)n(OGRAMMING)27 b(EXAMPLES)2143
b Fl(10)150 390 y Fi(mapset)41 b(square)g({1,)i(2,)f(-1})150
556 y Fl(for)27 b(whic)n(h)h(the)g(answ)n(er)e(is)150
722 y Fi({1,)42 b(4}.)275 888 y Fl(I)28 b(conclude)h(this)g(subsection)
f(on)h(set)g(pro)r(cessing)e(with)i(some)g(more)f(complicated)g
(examples.)40 b(Consider)150 988 y(the)35 b(problem)f(of)h(computing)g
(the)g(cardinalit)n(y)f(of)g(a)h(\(\014nite\))h(set.)58
b(As)35 b(a)g(\014rst)f(try)h(at)f(a)h(de\014nition)g(of)g(the)150
1088 y(appropriate)26 b(function)i Fi(card)p Fl(,)e(w)n(e)h(migh)n(t)h
(write)f(the)h(follo)n(wing)f(de\014nition.)150 1254
y Fi(card)42 b({})h(=)324 1353 y(0;)150 1453 y(card)f({t})g(=)324
1553 y(1;)150 1652 y(card)g({x)h(|)g(u)g(||)g(v})g(=)324
1752 y(card)f({x)h(|)g(u})g(+)g(card)f({x)h(|)g(v};)150
1918 y Fl(The)29 b(function)h Fi(card)e Fl(is)h(written)h(in)g(the)f
(same)g(st)n(yle)g(as)g(the)g(set-pro)r(cessing)f(functions)i(in)f
Fi(Booleans)p Fl(.)39 b(The)150 2017 y(\014rst)f(statemen)n(t)g(co)n(v)
n(ers)e(the)i(case)f(when)i(the)f(top-lev)n(el)f(function)i(in)f(the)h
(b)r(o)r(dy)f(of)g(the)g(set)g(abstraction)150 2117 y(is)g
Fi(False)p Fl(,)g(the)g(second)f(when)h(it)g(is)g Fi(==)p
Fl(,)h(and)f(the)g(third)g(when)g(it)g(is)f Fi(||)p Fl(.)67
b(Note)38 b(the)g(parallel)e(here)i(with)150 2217 y(list-pro)r(cessing)
26 b(functions)i(whic)n(h)f(t)n(ypically)g(ha)n(v)n(e)g(a)g(statemen)n
(t)h(for)f(the)h Fi([])f Fl(case)f(and)i(one)f(for)g(the)h
Fi(:)36 b Fl(case.)275 2316 y(Ho)n(w)n(ev)n(er,)i(this)g(de\014nition)g
(is)g(\015a)n(w)n(ed)e(as)h(it)h(do)r(esn't)g(cop)r(e)g(with)g
(\\duplicate")f(items.)67 b(F)-7 b(or)37 b(example,)150
2416 y Fi(card)42 b Fe(f)p Fi(1,)g(1)p Fe(g)26 b Fl(reduces)h(to)f(the)
i(answ)n(er)d Fi(2)p Fl(.)37 b(An)27 b(ob)n(vious)f(solution)g(to)h
(this)g(problem)g(leads)f(to)h(the)g(follo)n(wing)150
2516 y(mo)r(di\014cation)g(of)h(the)g(third)g(statemen)n(t.)150
2682 y Fi(card)42 b({x)h(|)g(u)g(||)g(v})g(=)324 2781
y(card)f({x)h(|)g(u})g(+)g(card)f({x)h(|)g(v)g(&&)g(\(not)f(u\)};)150
2947 y Fl(The)26 b(mo)r(di\014ed)g(de\014nition)g(w)n(orks)e(\014ne)i
(pro)n(vided)e(an)i(argumen)n(t)e(to)i Fi(card)e Fl(is)h(fully)h(ev)-5
b(aluated)26 b(b)r(efore)f Fi(card)f Fl(is)150 3047 y(called.)37
b(If)28 b(not,)f(this)h(third)g(statemen)n(t)f(can)h(b)r(e)g(used)f
(prematurely)g(and)g(the)h(computation)g(can)f(div)n(erge!)275
3147 y(Dela)n(ying)g(the)i(call)f(to)g Fi(card)f Fl(un)n(til)i(its)f
(argumen)n(t)f(is)i(fully)g(ev)-5 b(aluated)28 b(w)n(ould)g(b)r(e)g(a)g
(p)r(ossible)g(solution)g(of)150 3246 y(the)d(problem,)h(but)f(there)g
(is)g(another)f(w)n(a)n(y)g(whic)n(h)h(do)r(esn't)g(require)f(mo)r
(difying)i(the)f(op)r(erational)f(seman)n(tics.)150 3346
y(This)29 b(is)f(giv)n(en)g(in)g(the)h(mo)r(dule)g Fi(SetProcessing)24
b Fl(b)r(elo)n(w.)39 b(F)-7 b(or)28 b(this)h(v)n(ersion)e(of)h
Fi(card)p Fl(,)f(w)n(e)i(successiv)n(ely)e(pull)150 3445
y(out)j(the)g(items)g(in)f(the)h(set)g(while)g(incremen)n(ting)f(the)h
(v)-5 b(alue)29 b(of)h Fi(card)p Fl(.)41 b(The)30 b(third)g(statemen)n
(t)f(pro)n(vides)g(the)150 3545 y(asso)r(ciativ)n(e)j(la)n(w)h(for)g
(disjunction)h(to)g(this)f(function)i(so)e(that)h(the)g(\014rst)f(item)
h(can)g(b)r(e)g(lo)r(cated)f(b)n(y)g(pattern)150 3645
y(matc)n(hing.)j(This)25 b(v)n(ersion)e(w)n(orks)h(w)n(ell)h(without)h
(an)n(y)e(c)n(hange)g(to)h(the)h(computational)f(mo)r(del.)36
b(F)-7 b(or)24 b(example,)150 3744 y(for)j(the)h(mo)r(dule)g
Fi(SetProcessing)p Fl(,)22 b(the)28 b(term)150 3910 y
Fi(card)42 b({1,)g(2,)h(3})150 4076 y Fl(reduces)27 b(to)150
4242 y Fi(3.)150 4508 y Fl(Similarly)-7 b(,)27 b(the)h(function)g
Fi(sum)f Fl(returns)g(the)h(sum)f(of)h(the)g(items)g(in)g(a)f(set)g
(con)n(taining)g(in)n(tegers.)36 b(The)27 b(term)150
4674 y Fi(sum)42 b({1,)h(2,)f(3})150 4840 y Fl(reduces)27
b(to)150 5006 y Fi(6.)p eop
%%Page: 11 11
11 10 bop 150 100 a Fk(3)83 b(PR)n(OGRAMMING)27 b(EXAMPLES)2143
b Fl(11)p 150 317 3511 10 v 150 483 a Fi(module)41 b(SetProcessing\(ca)
o(rd,)c(sum\))42 b(where)f({)150 682 y(card)h(::)h(\(a)f(->)h(Bool\))f
(->)g(Int;)150 782 y(card)g({})h(=)324 881 y(0;)150 981
y(card)f({t})g(=)324 1080 y(1;)150 1180 y(card)g({x)h(|)g(\(u)g(||)f
(v\))h(||)g(w})g(=)324 1280 y(card)f({x)h(|)g(u)g(||)g(\(v)g(||)g
(w\)};)150 1379 y(card)f({x)h(|)g(\(x)g(==)f(t\))h(||)g(u})g(=)324
1479 y(1)h(+)f(card)f(\({x)g(|)h(u})g(`minus`)e({t}\);)150
1678 y(sum)h(::)h(\(Int)f(->)h(Bool\))e(->)i(Int;)150
1778 y(sum)f({})h(=)324 1877 y(0;)150 1977 y(sum)f({t})h(=)324
2077 y(t;)150 2176 y(sum)f({x)h(|)g(\(u)g(||)g(v\))g(||)f(w})h(=)324
2276 y(sum)g({x)f(|)i(u)f(||)g(\(v)f(||)h(w\)};)150 2376
y(sum)f({x)h(|)g(\(x)g(==)g(t\))g(||)f(u})h(=)324 2475
y(t)h(+)f(sum)f(\({x)g(|)i(u})e(`minus`)f({t}\);)150
2674 y(})p 150 2840 V 150 3077 a Fd(3.2)112 b(Queens)39
b(problem)150 3230 y Fl(The)26 b(next)g(program)e(is)i(a)f(solution)g
(of)h(the)g(queens)g(problem)f(\(for)h(5)f(queens\))h(in)g(traditional)
f(logic)g(program-)150 3329 y(ming)j(st)n(yle.)36 b(F)-7
b(or)27 b(the)h(mo)r(dule)g Fi(Queens)p Fl(,)d(the)j(term)150
3482 y Fi({x)43 b(|)g(queen\(x\)})150 3636 y Fl(reduces)27
b(to)150 3789 y Fi({[1,)42 b(3,)h(5,)f(2,)h(4],)g([1,)f(4,)h(2,)f(5,)h
(3],)g([2,)f(4,)h(1,)f(3,)h(5],)f([2,)h(5,)g(3,)f(1,)h(4],)f([3,)h(1,)g
(4,)f(2,)h(5],)150 3888 y([3,)f(5,)h(2,)g(4,)g(1],)f([4,)g(1,)h(3,)g
(5,)g(2],)f([4,)g(2,)h(5,)g(3,)g(1],)f([5,)g(2,)h(4,)g(1,)g(3],)f([5,)g
(3,)h(1,)g(4,)f(2]}.)150 4171 y Fd(3.3)112 b(List)37
b(Pro)s(cessing)150 4324 y Fl(The)30 b(mo)r(dule)h Fi(ListProcessing)24
b Fl(b)r(elo)n(w)30 b(con)n(tains)f(some)h(further)g(list)g(pro)r
(cessing)f(predicates)g(whic)n(h)h(sho)n(w)150 4424 y(ho)n(w)d(t)n
(ypical)g(logic)g(programming)e(predicates)i(are)g(de\014ned)h(in)f
(the)h(Esc)n(her)e(programming)g(st)n(yle.)150 4654 y
Fd(3.4)112 b(Conditionals)150 4807 y Fl(Esc)n(her)36
b(has)g(some)h(v)n(ery)f(useful)h(notational)g(sugar)e(for)i(a)g(form)f
(of)i(conditional)e(\014rst)h(made)g(a)n(v)-5 b(ailable)36
b(in)150 4907 y(NU-Prolog)25 b([18].)37 b(This)27 b(notation)g(has)g
(the)h(form)150 5048 y Fi(if)43 b(exists)25 b([)p Fh(x)661
5060 y Fg(1)698 5048 y Fh(;)14 b(:)g(:)g(:)g(;)g(x)930
5060 y Ff(n)975 5048 y Fi(])28 b Fj(Cond)g Fi(then)e
Fj(F)-6 b(orm1)29 b Fi(else)d Fj(F)-6 b(orm2)150 5189
y Fl(where)27 b Fj(Cond)p Fl(,)i Fj(F)-6 b(orm1)28 b
Fl(and)f Fj(F)-6 b(orm2)29 b Fl(are)d(form)n(ulas.)36
b(This)28 b(conditional)f(is)g(de\014ned)h(to)f(mean)150
5330 y Fi(\(exists)41 b([)p Fh(x)590 5342 y Fg(1)627
5330 y Fh(;)14 b(:)g(:)g(:)g(;)g(x)859 5342 y Ff(n)904
5330 y Fi(])43 b(\()p Fj(Cond)28 b Fi(&&)f Fj(F)-6 b(orm1)p
Fi(\)\))44 b(||)27 b(\(not)41 b(\(exists)g([)p Fh(x)2507
5342 y Fg(1)2544 5330 y Fh(;)14 b(:)g(:)g(:)g(;)g(x)2776
5342 y Ff(n)2822 5330 y Fi(])27 b Fj(Cond)p Fi(\))44
b(&&)27 b Fj(F)-6 b(orm2)p Fi(\))p Fl(.)150 5471 y(The)27
b(main)g(adv)-5 b(an)n(tages)25 b(of)i(using)f(the)h(notational)f
(sugar)g(\(instead)h(of)g(its)g(meaning\))f(are)g(that)h(the)h
(notation)150 5571 y(pro)n(vides)34 b(a)g(compact)h(and)f(expressiv)n
(e)g(notation)g(for)h(a)f(common)h(programming)d(idiom)j(and)g(the)h
(Esc)n(her)150 5670 y(system)27 b(a)n(v)n(oids)f(the)i(ine\016ciency)g
(of)f(computing)h(the)g(condition)f(t)n(wice.)p eop
%%Page: 12 12
12 11 bop 150 100 a Fk(3)83 b(PR)n(OGRAMMING)27 b(EXAMPLES)2143
b Fl(12)p 150 317 3511 10 v 150 483 a Fi(module)41 b(Queens\(queen\))d
(where)k({)150 682 y(queen)g(::)g([Int])g(->)h(Bool;)150
782 y(queen\(x\))d(=)324 881 y(safe\(x\))h(&&)324 981
y(permutation\([1,2,)o(3,)o(4,5)o(],)c(x\);)150 1180
y(safe)42 b(::)h([Int])e(->)i(Bool;)150 1280 y(safe\([]\))d(=)324
1379 y(True;)150 1479 y(safe\(x)h(:)i(y\))g(=)324 1579
y(noDiagonal\(x,)c(1,)j(y\))h(&&)324 1678 y(safe\(y\);)150
1877 y(noDiagonal)c(::)k(\(Int,)f(Int,)g([Int]\))f(->)i(Bool;)150
1977 y(noDiagonal\(_,)38 b(_,)43 b([]\))f(=)324 2077
y(True;)150 2176 y(noDiagonal\(x,)c(y,)43 b(z)g(:)g(w\))g(=)324
2276 y(y)h(/=)e(abs\(z)g(-)h(x\))g(&&)324 2376 y(noDiagonal\(x,)c(y+1,)
i(w\);)150 2575 y(})p 150 2741 V 275 2976 a Fl(Mo)r(dule)33
b Fi(AssocList)d Fl(b)r(elo)n(w)j(illustrates)g(the)h(use)g(of)f(this)h
(form)g(of)f(conditional.)54 b(In)34 b(this)g(mo)r(dule,)h(an)150
3076 y(asso)r(ciation)c(list)i(is)g(a)f(list)h(of)g(en)n(tries,)g(eac)n
(h)f(of)h(whic)n(h)g(is)g(a)f(tuple)h(consisting)f(of)h(an)f(in)n
(teger)g(whic)n(h)h(is)g(the)150 3175 y(k)n(ey)f(and)g(a)g(string)g
(whic)n(h)g(is)g(the)h(data.)51 b(The)32 b(function)h
Fi(lookup)d Fl(maps)i(a)g(quadruple)g(to)g Fi(True)f
Fl(if)i(the)f(\014rst)150 3275 y(argumen)n(t)f(is)h(an)g(in)n(teger,)h
(the)g(second)e(is)i(a)e(string,)i(the)g(third)f(is)h(an)f(asso)r
(ciation)e(list,)k(and)e(the)h(fourth)f(is)150 3374 y(the)26
b(asso)r(ciation)e(list)h(of)h(the)g(third)f(argumen)n(t,)g(augmen)n
(ted)g(with)h(the)g(en)n(try)e(consisting)h(of)g(the)h(tuple)g(of)g
(the)150 3474 y(\014rst)i(and)g(second)g(argumen)n(ts)f(if)h(and)g
(only)g(if)h(the)g(k)n(ey)e(of)h(this)h(en)n(try)f(is)g(not)g(in)g(the)
h(asso)r(ciation)e(list)h(in)h(the)150 3574 y(third)f(argumen)n(t;)e
(otherwise,)h Fi(lookup)e Fl(maps)j(a)f(quadruple)g(to)g
Fi(False)p Fl(.)275 3673 y(F)-7 b(or)27 b(the)g(mo)r(dule)h
Fi(AssocList)p Fl(,)c(the)k(term)150 3825 y Fi(lookup\(5,)40
b(value,)h([\(4,)h("How"\),)f(\(5,)h("You"\)],)e(list\))150
3977 y Fl(reduces)27 b(to)150 4129 y Fi(\(value)41 b(==)i("You"\))e(&&)
i(\(list)e(==)i([\(4,)f("How"\),)f(\(5,)h("You"\)]\))150
4281 y Fl(and)27 b(the)h(term)150 4433 y Fi(lookup\(5,)40
b(value,)h([\(4,)h("How"\),)f(\(5,)h("You"\),)f(\(5,)h("Then"\)],)e
(list\))150 4585 y Fl(reduces)27 b(to)150 4737 y Fi(\(\(value)41
b(==)h("You"\))g(&&)g(\(list)g(==)h([\(4,)f("How"\),)e(\(5,)j("You"\),)
d(\(5,)j("Then"\)]\)\))c(||)150 4837 y(\(\(value)i(==)h("Then"\))f(&&)i
(\(list)e(==)i([\(4,)f("How"\),)f(\(5,)h("You"\),)f(\(5,)h
("Then"\)]\)\).)275 4989 y Fl(The)27 b(G\177)-42 b(odel)28
b(b)r(o)r(ok)f([9)o(])h(con)n(tains)f(man)n(y)g(programs)e(whic)n(h)j
(use)f(conditionals.)150 5218 y Fd(3.5)112 b(Higher-Order)37
b(F)-9 b(acilities)150 5372 y Fl(The)35 b(mo)r(dule)h
Fi(Relational)31 b Fl(b)r(elo)n(w)k(is)g(the)g(Esc)n(her)f(v)n(ersion)f
(of)i(a)g Fh(\025)p Fl(Prolog)e(program)h([17)o(].)59
b(The)36 b(function)150 5471 y Fi(mappred)20 b Fl(is)i(a)g(relational)f
(v)n(ersion)g(of)i(the)f(usual)h Fi(map)e Fl(function.)36
b(The)22 b(function)h Fi(forevery)c Fl(maps)k(a)f(predicate)150
5571 y(and)j(a)g(list)h(to)f Fi(True)f Fl(if)i(the)g(predicate)f(is)g
(true)h(for)f(eac)n(h)f(elemen)n(t)i(of)f(the)h(list;)h(otherwise,)e
(it)h(maps)f(to)g Fi(False)p Fl(.)275 5670 y(F)-7 b(or)27
b(the)g(mo)r(dule)h Fi(Relational)p Fl(,)c(the)k(term)p
eop
%%Page: 13 13
13 12 bop 150 100 a Fk(3)83 b(PR)n(OGRAMMING)27 b(EXAMPLES)2143
b Fl(13)p 150 324 3511 10 v 150 490 a Fi(module)41 b(ListProcessing\(m)
o(emb)o(er)o(,)d(append,)i(permute,)h(delete,)f(sorted\))h(where)g({)
150 690 y(member)g(::)i(\(a,)f([a]\))g(->)h(Bool;)150
789 y(member\(x,)d([]\))i(=)324 889 y(False;)150 989
y(member\(x,)e(y)j(:)g(z\))g(=)324 1088 y(\(x)g(==)g(y\))g(||)f
(member\(x,)e(z\);)150 1287 y(append)h(::)i(\([a],)e([a],)h([a]\))g(->)
h(Bool;)150 1387 y(append\(u,)d(v,)j(w\))f(=)324 1487
y(\(u)h(==)g([])g(&&)f(v)i(==)e(w\))h(||)g(exists)e([r,x,y])g(\(u)h(==)
h(r)g(:)g(x)h(&&)e(w)i(==)e(r)i(:)f(y)g(&&)g(append\(x,)c(v,)k(y\)\);)
150 1686 y(permute)e(::)h(\([a],)g([a]\))g(->)h(Bool;)150
1786 y(permute\([],)c(x\))k(=)324 1885 y(x)h(==)e([];)150
1985 y(permute\(x)e(:)j(y,)g(w\))g(=)324 2084 y(exists)e([u,v,z])g(\(w)
i(==)g(u)g(:)g(v)g(&&)g(delete\(u,)d(x)j(:)g(y,)g(z\))g(&&)f
(permute\(z,)e(v\)\);)150 2284 y(delete)h(::)i(\(a,)f([a],)g([a]\))g
(->)h(Bool;)150 2383 y(delete\(x,)d([],)i(y\))h(=)324
2483 y(False;)150 2583 y(delete\(x,)d(y)j(:)g(z,)g(w\))g(=)324
2682 y(\(x)g(==)g(y)g(&&)g(w)g(==)g(z\))f(||)324 2782
y(exists)f([v])i(\(w)g(==)f(y)h(:)h(v)f(&&)g(delete\(x,)c(z,)k(v\)\);)
150 2981 y(sorted)e(::)i([Int])e(->)i(Bool;)150 3081
y(sorted\([]\))c(=)324 3180 y(True;)150 3280 y(sorted\(x)h(:)j(y\))g(=)
324 3380 y(if)g(y)g(==)g([])324 3479 y(then)412 3579
y(True)324 3678 y(else)412 3778 y(exists)e([u,)h(v])h(\(y)f(==)h(u)g(:)
h(v)f(&&)g(x)g(<=)f(u)i(&&)e(sorted\(y\)\);)150 3977
y(})p 150 4143 V 150 4235 V 150 4401 a(module)f(AssocList\(lookup)o(\))
d(where)j({)150 4600 y(lookup)g(::)i(\(Int,)e(String,)g([Int,)h
(String],)e([Int,)h(String]\))g(->)h(Bool;)150 4700 y(lookup\(key,)d
(value,)i(assoc_list,)e(new_assoc_list\))f(=)324 4799
y(if)43 b(exists)e([v])i(member\(\(key,)38 b(v\),)43
b(assoc_list\))324 4899 y(then)412 4998 y(value)e(==)i(v)g(&&)412
5098 y(new_assoc_list)37 b(==)43 b(assoc_list)324 5198
y(else)412 5297 y(new_assoc_list)37 b(==)43 b(\(\(key,)e(value\))g(:)i
(assoc_list\);)150 5497 y(})p 150 5663 V eop
%%Page: 14 14
14 13 bop 150 100 a Fk(3)83 b(PR)n(OGRAMMING)27 b(EXAMPLES)2143
b Fl(14)p 150 317 3511 10 v 150 483 a Fi(module)41 b(Relational\(Perso)
o(n\(.)o(.\))o(,)d(parent,)i(age,)i(mappred,)e(forevery\))g(where)i({)
150 682 y(data)g(Person)f(=)87 b(Bob)42 b(|)h(John)f(|)h(Mary)f(|)i
(Sue)e(|)h(Dick)f(|)h(Kate)f(|)h(Ned;)150 881 y(parent)e(::)i
(\(Person,)d(Person\))h(->)i(Bool;)150 981 y(parent)e(=)324
1080 y({\(Bob,)g(John\),)368 1180 y(\(Bob,)g(Dick\),)368
1280 y(\(John,)g(Mary\),)368 1379 y(\(Sue,)g(Dick\),)368
1479 y(\(Dick,)g(Kate\)};)150 1678 y(age)h(::)h(\(Person,)d(Int\))i(->)
h(Bool;)150 1778 y(age)f(=)324 1877 y({\(Bob,)f(24\),)368
1977 y(\(John,)g(7\),)368 2077 y(\(Mary,)g(13\),)368
2176 y(\(Sue,)g(23\),)368 2276 y(\(Dick,)g(53\),)368
2376 y(\(Kate,)g(11\),)368 2475 y(\(Ned,)g(23\)};)150
2674 y(mappred)g(::)h(\(\(\(a,)g(b\))h(->)f(Bool\),)g([a],)g([b]\))f
(->)i(Bool;)150 2774 y(mappred\(p,)c([],)k(z\))g(=)324
2874 y(z)h(==)e([];)150 2973 y(mappred\(p,)d(x)44 b(:)f(xs,)f(z\))h(=)
324 3073 y(exists)e([y,ys])h(\(p\(x,)f(y\))i(&&)g(mappred\(p,)c(xs,)j
(ys\))h(&&)f(z)i(==)e(y)i(:)f(ys\);)150 3272 y(forevery)d(::)j(\(\(a)f
(->)h(Bool\),)e([a]\))h(->)h(Bool;)150 3372 y(forevery\(p,)c([]\))j(=)
324 3471 y(True;)150 3571 y(forevery\(p,)d(x)k(:)g(y\))g(=)324
3671 y(p\(x\))f(&&)324 3770 y(forevery\(p,)d(y\);)150
3970 y(})p 150 4136 V 150 4383 a(mappred\(age,)g([Bob,)i(Sue],)h(x\))
150 4548 y Fl(reduces)27 b(to)150 4713 y Fi(x)43 b(==)g([24,)f(23].)150
4977 y Fl(The)28 b(term)150 5142 y Fi(mappred\(parent,)37
b([Bob,)42 b(Dick],)f(x\))150 5306 y Fl(reduces)27 b(to)150
5471 y Fi(\(x)43 b(==)g([John,)e(Kate]\))g(||)150 5571
y(\(x)i(==)g([Dick,)e(Kate]\).)p eop
%%Page: 15 15
15 14 bop 150 100 a Fk(3)83 b(PR)n(OGRAMMING)27 b(EXAMPLES)2143
b Fl(15)150 390 y(The)28 b(term)150 556 y Fi(mappred\(r,)39
b([Bob,)j(Sue],)f([24,)h(23]\))150 722 y Fl(reduces)27
b(to)150 888 y Fi(r\(Bob,)41 b(24\))h(&&)h(r\(Sue,)e(23\).)150
1154 y Fl(The)28 b(term)150 1320 y Fi(mappred\(\\z)39
b(->)k(\(exists)e([x,y])g(\(z)i(==)g(\(x,)f(y\))h(&&)g(age\(y,)e
(x\)\)\),)g([24,)h(23],)g(w\))150 1486 y Fl(reduces)27
b(to)150 1652 y Fi(\(w)43 b(==)g([Bob,)e(Sue]\))h(||)150
1752 y(\(w)h(==)g([Bob,)e(Ned]\).)150 2017 y Fl(The)28
b(term)150 2183 y Fi(\(\\x)42 b(->)h(age\(x,)e(24\)\)\(Bob\))150
2350 y Fl(reduces)27 b(to)150 2516 y Fi(True.)150 2781
y Fl(The)h(term)150 2947 y Fi(forevery\(\\x)39 b(->)k(age\(x,)e(y\),)h
([Ned,)g(Bob,)g(Sue]\))150 3113 y Fl(reduces)27 b(to)150
3279 y Fi(False.)150 3545 y Fl(The)h(term)150 3711 y
Fi(forevery\(\\x)39 b(->)k(age\(x,)e(y\),)h([Ned,)g(Sue]\))150
3877 y Fl(reduces)27 b(to)150 4043 y Fi(y)43 b(==)g(23.)150
4309 y Fl(The)28 b(term)150 4475 y Fi(forevery\(\\x)39
b(->)k(\(exists)d([y])j(age\(x,)e(y\)\),)h([Ned,)f(Bob,)h(Sue]\))150
4641 y Fl(reduces)27 b(to)150 4807 y Fi(True.)p eop
%%Page: 16 16
16 15 bop 150 100 a Fk(3)83 b(PR)n(OGRAMMING)27 b(EXAMPLES)2143
b Fl(16)150 390 y Fd(3.6)112 b(Databases)150 543 y Fl(The)35
b(next)f(example)h(illustrates)f(t)n(ypical)g(database)f(querying)h(in)
h(Esc)n(her.)56 b(The)35 b(mo)r(dule)g Fi(England)c Fl(b)r(elo)n(w)150
643 y(con)n(tains)c(an)g(\(incomplete\))h(database)f(ab)r(out)g(cities)
h(and)f(coun)n(ties)g(in)h(England.)p 131 842 3511 10
v 150 988 a Fi(module)41 b(England\(County\(.)o(.\),)c(City\(..\),)j
(neighbours,)f(distance,)h(isin\))h(where)h({)150 1187
y(data)86 b(County)41 b(=)i(Avon)f(|)h(Bedfordshire)c(|)k(Berkshire)d
(|)j(Buckinghamshire)37 b(|)804 1287 y(Cambridgeshire)h(|)43
b(Cornwall)d(|)j(Devon)f(|)h(Dorset)e(|)i(Essex)f(|)804
1386 y(Gloucestershire)37 b(|)43 b(Hampshire)d(|Herefordshire)e(|)43
b(Hertfordshire)38 b(|)804 1486 y(Kent)k(|)h(London)e(|)i
(Northamptonshire)37 b(|)43 b(Oxfordshire)c(|)44 b(Somerset)c(|)804
1586 y(Surrey)h(|)i(Sussex)e(|)i(Warwickshire)c(|)k(Wiltshire)d(|)j
(Worcestershire;)150 1785 y(data)f(City)g(=)h(Bath)f(|)h(Bournemouth)c
(|)k(Bristol)e(|)i(Cheltenham)d(|)j(Cirencester)c(|)673
1885 y(Dorchester)g(|)44 b(Exeter)d(|)i(Gloucester)c(|)44
b(Penzance)c(|)j(Plymouth)d(|)673 1984 y(Salisbury)g(|)j(Shaftesbury)c
(|)k(Sherbourne)d(|)j(Taunton)e(|)i(Torquay)d(|)673 2084
y(Truro)i(|)h(Winchester;)150 2383 y(neighbours)c(::)k(\(County,)d
(County\))h(->)i(Bool;)150 2582 y(neighbours)c(=)324
2682 y({\(Devon,)i(Cornwall\),)368 2781 y(\(Devon,)g(Dorset\),)368
2881 y(\(Devon,)g(Somerset\),)368 2980 y(\(Avon,)g(Somerset\),)368
3080 y(\(Avon,)g(Wiltshire\),)368 3180 y(\(Avon,)g(Gloucestershire\))o
(,)368 3279 y(\(Dorset,)f(Wiltshire\),)368 3379 y(\(Somerset,)f
(Wiltshire\),)368 3479 y(\(Gloucestershire)o(,)e(Wiltshire\),)368
3578 y(\(Dorset,)j(Somerset\),)368 3678 y(\(Dorset,)g(Hampshire\),)368
3778 y(\(Hampshire,)f(Wiltshire\),)368 3877 y(\(Hampshire,)g
(Berkshire\),)368 3977 y(\(Hampshire,)g(Sussex\),)368
4076 y(\(Hampshire,)g(Surrey\),)368 4176 y(\(Sussex,)h(Surrey\),)368
4276 y(\(Sussex,)g(Kent\),)368 4375 y(\(London,)g(Surrey\),)368
4475 y(\(London,)g(Kent\),)368 4575 y(\(London,)g(Essex\),)368
4674 y(\(London,)g(Hertfordshire\),)368 4774 y(\(London,)g
(Buckinghamshire\),)368 4873 y(\(Surrey,)g(Buckinghamshire\),)368
4973 y(\(Surrey,)g(Kent\),)368 5073 y(\(Surrey,)g(Berkshire\),)368
5172 y(\(Oxfordshire,)e(Berkshire\),)368 5272 y(\(Oxfordshire,)g
(Wiltshire\),)368 5372 y(\(Oxfordshire,)g(Gloucestershire\),)368
5471 y(\(Oxfordshire,)g(Warwickshire\),)368 5571 y(\(Oxfordshire,)g
(Northamptonshire\))o(,)368 5670 y(\(Oxfordshire,)g(Buckinghamshire\),)
p eop
%%Page: 17 17
17 16 bop 150 100 a Fk(3)83 b(PR)n(OGRAMMING)27 b(EXAMPLES)2143
b Fl(17)368 390 y Fi(\(Berkshire,)39 b(Wiltshire\),)368
490 y(\(Berkshire,)g(Buckinghamshire\))o(,)368 589 y(\(Gloucestershire)
o(,)e(Worcestershire\),)368 689 y(\(Worcestershire,)g(Herefordshire\),)
368 789 y(\(Worcestershire,)g(Warwickshire\),)368 888
y(\(Bedfordshire,)h(Buckinghamshire\))o(,)368 988 y(\(Bedfordshire,)g
(Northamptonshire)o(\),)368 1088 y(\(Bedfordshire,)g(Cambridgeshire\),)
368 1187 y(\(Bedfordshire,)g(Hertfordshire\),)368 1287
y(\(Hertfordshire,)f(Essex\),)368 1386 y(\(Hertfordshire,)g
(Cambridgeshire\),)368 1486 y(\(Hertfordshire,)g(Buckinghamshire\),)368
1586 y(\(Buckinghamshire)o(,)g(Northamptonshire\))o(};)150
1885 y(distance)j(::)j(\(City,)e(City,)h(Int\))g(->)g(Bool;)150
2084 y(distance)e(=)324 2183 y({\(Plymouth,)f(Exeter,)i(42\),)368
2283 y(\(Exeter,)f(Bournemouth,)f(82\),)368 2383 y(\(Bristol,)h
(Taunton,)g(43\),)368 2482 y(\(Bristol,)g(Gloucester,)f(35\),)368
2582 y(\(Torquay,)h(Exeter,)g(23\),)368 2682 y(\(Plymouth,)f(Torquay,)i
(24\),)368 2781 y(\(Bristol,)f(Bath,)h(13\),)368 2881
y(\(Exeter,)f(Taunton,)g(34\),)368 2980 y(\(Penzance,)f(Plymouth,)h
(78\),)368 3080 y(\(Taunton,)g(Bournemouth,)e(70\),)368
3180 y(\(Bournemouth,)g(Salisbury,)i(28\),)368 3279 y(\(Taunton,)g
(Salisbury,)f(64\),)368 3379 y(\(Salisbury,)g(Bath,)i(40\),)368
3479 y(\(Bath,)g(Gloucester,)e(39\),)368 3578 y(\(Bournemouth,)f(Bath,)
k(65\),)368 3678 y(\(Truro,)f(Penzance,)e(26\),)368 3778
y(\(Plymouth,)g(Truro,)i(52\),)368 3877 y(\(Shaftesbury,)d(Salisbury,)i
(20\),)368 3977 y(\(Sherbourne,)f(Shaftesbury,)f(16\),)368
4076 y(\(Dorchester,)h(Bournemouth,)f(28\),)368 4176
y(\(Salisbury,)h(Winchester,)g(24\),)368 4276 y(\(Exeter,)h
(Sherbourne,)f(53\),)368 4375 y(\(Sherbourne,)g(Taunton,)h(29\),)368
4475 y(\(Bath,)h(Cirencester,)e(32\),)368 4575 y(\(Cirencester,)f
(Cheltenham,)h(16\),)368 4674 y(\(Cheltenham,)g(Gloucester,)g(9\),)368
4774 y(\(Dorchester,)g(Sherbourne,)g(19\),)368 4873 y(\(Bath,)i
(Shaftesbury,)e(33\),)368 4973 y(\(Winchester,)g(Bournemouth,)f(41\),)
368 5073 y(\(Exeter,)i(Dorchester,)f(53\)};)150 5372
y(isin)j(::)h(\(City,)e(County\))f(->)j(Bool;)150 5571
y(isin)f(=)324 5670 y({\(Bristol,)e(Avon\),)p eop
%%Page: 18 18
18 17 bop 150 100 a Fk(3)83 b(PR)n(OGRAMMING)27 b(EXAMPLES)2143
b Fl(18)368 390 y Fi(\(Taunton,)40 b(Somerset\),)368
490 y(\(Salisbury,)f(Wiltshire\),)368 589 y(\(Bath,)i(Avon\),)368
689 y(\(Bournemouth,)d(Dorset\),)368 789 y(\(Gloucester,)h
(Gloucestershire)o(\),)368 888 y(\(Torquay,)h(Devon\),)368
988 y(\(Penzance,)f(Cornwall\),)368 1088 y(\(Plymouth,)g(Devon\),)368
1187 y(\(Exeter,)h(Devon\),)368 1287 y(\(Winchester,)f(Hampshire\),)368
1386 y(\(Dorchester,)g(Dorset\),)368 1486 y(\(Cirencester,)f
(Gloucestershire\),)368 1586 y(\(Truro,)j(Cornwall\),)368
1685 y(\(Cheltenham,)e(Gloucestershire)o(\),)368 1785
y(\(Shaftesbury,)f(Dorset\),)368 1885 y(\(Sherbourne,)h(Dorset\)};)150
2084 y(})p 150 2250 3511 10 v 275 2449 a Fl(The)28 b(predicates)g
Fi(neighbours)p Fl(,)c Fi(distance)p Fl(,)i(and)i Fi(isin)f
Fl(ha)n(v)n(e)g(b)r(een)i(written)g(in)f(the)h(most)f(general)f(form)
150 2549 y(p)r(ossible)f(to)h(allo)n(w)e(\015exible)i(querying)e(of)i
(the)g(database.)35 b(In)27 b(some)f(circumstances,)f(more)h(e\016cien)
n(t)h(v)n(ersions)150 2648 y(of)c(these)g(predicates)f(could)h(b)r(e)g
(used.)35 b(F)-7 b(or)23 b(example,)g(if)h(it)f(w)n(as)f(kno)n(wn)g
(that)i(queries)e(to)g(the)i(database)e(w)n(ould)150
2748 y(only)33 b(ev)n(er)g(in)n(v)n(olv)n(e)f(asking)h(ab)r(out)h
(distances)f(b)r(et)n(w)n(een)h(t)n(w)n(o)f(giv)n(en)g(cities,)j(then)e
(it)g(w)n(ould)f(b)r(e)i(p)r(ossible)e(to)150 2848 y(replace)27
b(the)h(predicate)f Fi(distance)d Fl(in)k(the)g(mo)r(dule)g
Fi(England)c Fl(b)n(y)k(a)f(\(more)g(e\016cien)n(t\))h(function)150
2947 y Fi(distance)40 b(::)j(\(City,)e(City\))h(->)g(Int)p
Fl(.)275 3047 y(Note)30 b(the)i(use)e(of)h(underscores)e(in)j(some)e
(queries.)46 b(An)31 b(underscore)e(\()p Fi(_)p Fl(\))j(stands)e(for)h
(a)f(unique)h(v)-5 b(ariable)150 3147 y(whic)n(h)41 b(is)f
(\(implicitly\))i(existen)n(tially)e(quan)n(ti\014ed)h(at)f(the)h(fron)
n(t)f(of)h(the)g(smallest)f(subterm)h(of)f(the)h(form)150
3246 y Fh(f)9 b Fl(\()p Fh(t)262 3258 y Fg(1)299 3246
y Fh(;)14 b(:)g(:)g(:)g(;)g(t)514 3258 y Ff(n)559 3246
y Fl(\))37 b(whic)n(h)h(has)f(t)n(yp)r(e)g Fi(Bool)f
Fl(and)h(con)n(tains)f(the)i(underscore.)65 b(So,)39
b(for)e(example,)i(the)f(subterm)150 3346 y Fi(isin\()p
375 3346 27 4 v 29 w(,)43 b(x\))25 b Fl(in)g(query)f(8)g(is)h(an)f
(abbreviation)f(for)i Fi(exists)41 b([w])h(isin\(w,)f(x\))p
Fl(,)25 b(where)f Fi(w)g Fl(is)h(a)f(new)h(v)-5 b(ariable.)150
3445 y(This)28 b(con)n(v)n(en)n(tion)e(can)h(simplify)h(database)e
(queries)h(considerably)-7 b(.)275 3545 y(In)27 b(eac)n(h)g(of)g(the)h
(follo)n(wing)e(queries,)g(I)i(\014rst)f(giv)n(e)f(the)i(query)f(in)g
(English)g(and)g(then)h(follo)n(w)e(this)i(with)g(the)150
3645 y(Esc)n(her)e(form)h(of)h(the)g(query)f(\(that)h(is,)f(the)h(goal)
f(term\).)150 3844 y(1.)36 b Fj(Find)31 b(al)t(l)g(cities)f(which)i(ar)
l(e)e(less)g(than)g(40)g(miles)h(fr)l(om)f(Bristol)p
Fl(.)150 4010 y Fi({x)43 b(|)g(exists)e([y])h(\(distance\(Bristol)o(,)c
(x,)k(y\))h(&&)g(y)g(<)g(40\)})150 4176 y Fl(reduces)27
b(to)150 4342 y Fi({Gloucester,)39 b(Bath}.)150 4608
y Fl(2.)d Fj(Find)31 b(al)t(l)g(p)l(airs)f(of)h(cities)g(which)g(ar)l
(e)f(less)g(than)g(20)g(miles)h(ap)l(art)p Fl(.)150 4774
y Fi({\(x,)42 b(y\))h(|)g(exists)e([z])h(\(distance\(x,)d(y,)k(z\))f
(&&)h(z)g(<)h(20\)})150 4940 y Fl(reduces)27 b(to)150
5106 y Fi({\(Bristol,)39 b(Bath\),)j(\(Sherbourne,)c(Shaftesbury\),)g
(\(Cirencester,)h(Cheltenham\),)194 5205 y(\(Cheltenham,)f
(Gloucester\),)h(\(Dorchester,)f(Sherbourne\)}.)150 5471
y Fl(3.)e Fj(Find)31 b(al)t(l)g(c)l(ounties)e(which)j(neighb)l(our)e
(Oxfor)l(dshir)l(e)p Fl(.)150 5637 y Fi({x)43 b(|)g(neighbours\(Oxfor)o
(ds)o(hir)o(e,)37 b(x\))43 b(||)g(neighbours\(x,)38 b(Oxfordshire\)})p
eop
%%Page: 19 19
19 18 bop 150 100 a Fk(3)83 b(PR)n(OGRAMMING)27 b(EXAMPLES)2143
b Fl(19)150 390 y(reduces)27 b(to)150 552 y Fi({Berkshire,)39
b(Wiltshire,)g(Gloucestershire,)e(Warwickshire,)i(Northamptonshir)o(e,)
194 652 y(Buckinghamshire)o(}.)150 913 y Fl(4.)d Fj(Find)31
b(al)t(l)g(cities)f(which)i(ar)l(e)e(not)f(in)h(Wiltshir)l(e.)150
1075 y Fi({x)43 b(|)g(exists)e([y])h(\(isin\(x,)f(y\))h(&&)h(y)g(/=)g
(Wiltshire\)})150 1237 y Fl(reduces)27 b(to)150 1399
y Fi({Bristol,)40 b(Taunton,)g(Bath,)i(Bournemouth,)c(Gloucester,)h
(Torquay,)i(Penzance,)e(Plymouth,)150 1499 y(Exeter,)i(Winchester,)e
(Dorchester,)g(Cirencester,)f(Truro,)j(Cheltenham,)f(Shaftesbury,)150
1598 y(Sherbourne}.)150 1860 y Fl(5.)c Fj(Find)31 b(al)t(l)g(cities)f
(which)i(ar)l(e)e(in)g(the)g(c)l(ounties)f(neighb)l(ouring)i(Oxfor)l
(dshir)l(e)p Fl(.)150 2022 y Fi({x)43 b(|)g(exists)e([y])h
(\(\(neighbours\(Oxfo)o(rds)o(hi)o(re)o(,)c(y\))k(||)h(neighbours\(y,)
38 b(Oxfordshire\)\))h(&&)891 2121 y(isin\(x,)i(y\)\)})150
2283 y Fl(reduces)27 b(to)150 2445 y Fi({Salisbury,)39
b(Gloucester,)g(Cirencester,)g(Cheltenham}.)150 2707
y Fl(6.)34 b Fj(Find)25 b(al)t(l)h(cities)e(which)i(ar)l(e)f(in)f(the)g
(West)g(Country)g(\(that)g(is,)i(in)f(Devon,)g(Cornwal)t(l,)j
(Somerset,)e(or)e(A)n(von\))p Fl(.)150 2868 y Fi({x)43
b(|)g(exists)e([y])h(\(y)h(`in`)f({Devon,)f(Cornwall,)f(Somerset,)f
(Avon})j(&&)h(isin\(x,)d(y\)\)})150 3030 y Fl(reduces)27
b(to)150 3192 y Fi({Torquay,)40 b(Plymouth,)g(Exeter,)g(Penzance,)g
(Truro,)h(Taunton,)g(Bristol,)f(Bath}.)150 3454 y Fl(7.)c
Fj(Find)31 b(al)t(l)g(c)l(ounties)e(which)j(have)f(at)e(le)l(ast)h(one)
g(city)g(in)g(them)g(less)g(than)g(50)g(miles)h(fr)l(om)f(Bristol)p
Fl(.)150 3616 y Fi({x)43 b(|)g(exists)e([y,z])h(\(\(distance\(Bris)o
(tol)o(,)37 b(y,)43 b(z\))g(||)g(distance\(y,)c(Bristol,)h(z\)\))i(&&)
978 3715 y(z)h(<)g(50)g(&&)g(isin\(y,)e(x\)\)})150 3877
y Fl(reduces)27 b(to)150 4039 y Fi({Somerset,)39 b(Gloucestershire,)e
(Avon}.)150 4301 y Fl(8.)f Fj(Do)30 b(al)t(l)h(c)l(ounties)f(neighb)l
(ouring)h(A)n(von)e(have)i(cities)g(in)e(them?)150 4462
y Fi(forall)41 b([x])h(\(\(neighbours\(Avon)o(,)c(x\))k(||)h
(neighbours\(x,)38 b(Avon\)\))j(-->)i(isin\(_,)d(x\)\))150
4624 y Fl(reduces)27 b(to)150 4786 y Fi(True.)150 5048
y Fl(9.)36 b Fj(A)n(r)l(e)30 b(al)t(l)h(cities)f(which)h(ar)l(e)g(less)
f(than)f(40)i(miles)f(fr)l(om)h(Bristol)f(in)g(the)g(same)g(c)l(ounty)g
(as)g(Bristol?)150 5210 y Fi(exists)41 b([x])h(\(isin\(Bristol,)c(x\))
43 b(&&)281 5309 y(forall)e([z])368 5409 y(\(exists)g([y])h
(\(\(\(distance\(Bris)o(tol)o(,)37 b(z,)43 b(y\))g(||)g(distance\(z,)c
(Bristol,)h(y\)\))i(&&)h(y)g(<)g(40\)\))1065 5509 y(-->)g(isin\(z,)d
(x\)\)\))150 5670 y Fl(reduces)27 b(to)p eop
%%Page: 20 20
20 19 bop 150 100 a Fk(4)83 b(PUTTING)27 b(IT)h(ALL)g(TOGETHER)2095
b Fl(20)150 390 y Fi(False.)150 650 y Fl(10.)36 b Fj(How)30
b(many)g(c)l(ounties)g(neighb)l(our)g(Oxfor)l(dshir)l(e?)150
809 y Fi(card\({x)41 b(|)i(neighbours\(Oxfor)o(ds)o(hir)o(e,)37
b(x\))43 b(||)f(neighbours\(x,)d(Oxfordshire\)}\))150
969 y Fl(reduces)27 b(to)150 1129 y Fi(6.)150 1502 y
Fm(4)135 b(Putting)45 b(It)g(All)g(T)-11 b(ogether)150
1684 y Fl(One)28 b(particularly)f(in)n(teresting)h(observ)-5
b(ation)28 b(concerning)f(the)i(Esc)n(her)e(programming)f(st)n(yle)j
(whic)n(h)f(b)r(ecame)150 1783 y(apparen)n(t)42 b(at)h(an)g(early)f
(stage)h(w)n(as)f(that)h(t)n(ypical)g(applications)g(naturally)f
(require)g(man)n(y)h(more)f(\(non-)150 1883 y(predicate\))36
b(functions)g(than)g(predicates.)62 b(I)36 b(b)r(eliev)n(e)g(this)g
(pro)n(vides)e(an)i(imp)r(ortan)n(t)g(motiv)-5 b(ation)36
b(for)f(in)n(te-)150 1982 y(gration.)53 b(The)34 b(p)r(oin)n(t)g(is)f
(that,)j(when)d(programming)f(with)i(t)n(ypical)f(logic)g(programming)e
(languages,)i(pro-)150 2082 y(grammers)j(naturally)h(mo)r(del)h
(applications)f(using)h(predicates)f(b)r(ecause)g(only)h(predicate)f
(de\014nitions)h(are)150 2182 y(allo)n(w)n(ed)24 b(b)n(y)i(suc)n(h)f
(languages.)34 b(Ho)n(w)n(ev)n(er,)24 b(when)i(programming)e(the)i
(same)f(application)g(with)h(an)f(in)n(tegrated)150 2281
y(language)33 b(suc)n(h)i(as)g(Esc)n(her,)g(it)h(b)r(ecomes)e(ob)n
(vious)g(that)h(man)n(y)g(of)g(the)g(predicates)g(are)f(rather)g
(unnatural)150 2381 y(and)28 b(w)n(ould)h(b)r(e)g(b)r(etter)g(o\013)f
(b)r(eing)h(replaced)f(b)n(y)g(\(non-predicate\))g(functions.)40
b(There)28 b(is)h(a)f(similar)g(e\013ect)h(for)150 2481
y(functional)e(languages.)35 b(Since)26 b(existen)n(tial)h(quan)n
(ti\014ers)e(and)i(predicate)f(calls)g(con)n(taining)g(v)-5
b(ariables)25 b(are)h(not)150 2580 y(normally)h(allo)n(w)n(ed)f(in)i
(functional)g(languages,)e(the)i(searc)n(h)f(capabilit)n(y)g(required)f
(in)i(some)g(applications)f(has)150 2680 y(to)k(b)r(e)h(captured)f(b)n
(y)g(v)-5 b(arious)30 b(programming)f(tric)n(ks)i(whic)n(h)g(can)g
(obscure)f(what)i(is)f(really)f(going)g(on.)48 b(Th)n(us)150
2779 y(Esc)n(her)26 b(pro)n(vides)g(greater)f(expressiv)n(e)h(p)r(o)n
(w)n(er)g(than)i(con)n(v)n(en)n(tional)d(functional)j(or)e(logic)h
(languages)e(b)r(ecause)150 2879 y(exactly)i(the)h(righ)n(t)f(kinds)g
(of)h(functions)g(can)f(b)r(e)h(emplo)n(y)n(ed)f(to)g(accurately)f(mo)r
(del)i(the)g(application.)275 2979 y(The)g(o)n(v)n(erall)e(structure)h
(of)h(a)g(t)n(ypical)g(Esc)n(her)e(program)g(is)i(similar)g(to)g(a)f
(Hask)n(ell)h(program.)36 b(A)n(t)29 b(the)f(top)150
3078 y(lev)n(el)h(there)h(is)f(monadic)h(IO)f(and)h(most)f(functions)h
(in)g(the)g(program)e(are)h(con)n(v)n(en)n(tional)f(Hask)n(ell)h
(functions.)150 3178 y(Ho)n(w)n(ev)n(er,)f(t)n(ypically)h(there)h(are)f
(also)f(a)i(few)g(crucial)f(predicates)f(programmed)g(in)i(the)g(logic)
f(programming)150 3278 y(st)n(yle.)61 b(Calls)35 b(to)h(these)g
(predicates,)h(suc)n(h)e(as)g Fi(permute)e Fl(and)j Fi(likes)p
Fl(,)g(are)f(made)g(at)h(a)f(lo)n(w)n(er)f(lev)n(el)i(in)g(the)150
3377 y(program)26 b(and)h(are)g(usually)g(encapsulated)h(in)g(a)f(set.)
37 b(As)28 b(a)f(simple)h(example)g(of)f(this,)i(consider)d(the)i
Fi(Queens)150 3477 y Fl(mo)r(dule)i(again)f(and)h(supp)r(ose)f(w)n(e)h
(w)n(an)n(t)f(to)h(prin)n(t)g(out)g(the)g(n)n(um)n(b)r(er)g(of)g
(solutions)f(to)h(the)g(queens)g(problem.)150 3576 y(A)e(suitable)f
(top-lev)n(el)g(function)h Fi(main)e Fl(to)i(implemen)n(t)g(this)g(is)f
(as)g(follo)n(ws.)150 3736 y Fi(main)42 b(::)h(IO)f(\(\);)150
3836 y(main)g(=)324 3935 y(print)g(\(card)f({x)i(|)g(queen\(x\)}\);)150
4095 y Fl(Here)30 b(the)g(answ)n(ers)e(to)i Fi(queen\(x\))d
Fl(are)i(returned)g(in)i(a)e(set,)i Fi(card)d Fl(computes)i(the)h(n)n
(um)n(b)r(er)e(of)h(items)h(in)f(this)150 4195 y(set,)e(and)f(then)h
Fi(print)e Fl(prin)n(ts)h(out)h(this)g(n)n(um)n(b)r(er.)275
4294 y(This)e(example)h(mak)n(es)e(it)j(clear)d(that)i(set)g(pro)r
(cessing)e(is)i(an)g(imp)r(ortan)n(t)f(comp)r(onen)n(t)h(of)f(the)i
(prop)r(osal)d(in)150 4394 y(this)k(pap)r(er.)39 b(In)29
b(essence,)f(existen)n(tial)g(quan)n(ti\014ers)f(allo)n(w)h
(computations)g(in)h(the)f(logic)g(programming)e(st)n(yle,)150
4494 y(while)i(sets)f(encapsulate)g(for)g(further)h(pro)r(cessing)e
(the)i(answ)n(ers)e(pro)r(duced)h(b)n(y)g(this)h(st)n(yle)f(of)h
(computation.)275 4593 y(As)i(a)g(second)f(example,)i(consider)e(the)i
(task)f(of)g(returning)f(a)h(single)g(solution)g(to)g(the)h(queens)f
(problem.)150 4693 y(F)-7 b(or)27 b(this,)h(one)f(can)g(use)h(the)g
(\(system\))g(function)g Fi(setToList)c Fl(with)k(signature)150
4853 y Fi(setToList)40 b(::)j(\(a)f(->)h(Bool\))f(->)g(IO)h([a];)150
5013 y Fl(whic)n(h)26 b(tak)n(es)g(a)g(set)g(as)g(its)g(argumen)n(t)g
(and)g(returns)g(an)g(IO)g(transformer)f(as)g(a)h(result.)36
b(This)27 b(IO)f(transformer)150 5112 y(returns)21 b(a)g(list)h(con)n
(taining)e(the)i(items)g(in)g(the)g(set.)34 b(The)22
b(idea)f(is)h(that)f(the)h(w)n(orld)f(argumen)n(t,)h(whic)n(h)f(is)g
(hidden,)150 5212 y(enco)r(des)g(the)g(information)g(for)g(c)n(ho)r
(osing)e(a)i(particular)f(list.)35 b(Then)21 b(an)g(appropriate)f
(top-lev)n(el)g(function)i Fi(main)150 5311 y Fl(is)27
b(as)g(follo)n(ws.)150 5471 y Fi(main)42 b(=)324 5571
y(setToList)e({x)j(|)g(queen\(x\)})d(>>=)324 5670 y(\(\\y)j(->)f(print)
g(\(head)f(y\)\);)p eop
%%Page: 21 21
21 20 bop 150 100 a Fk(5)83 b(THE)27 b Fi(BOOLEANS)d
Fk(MODULE)2360 b Fl(21)150 390 y(The)27 b(same)f(idea)g(can)h(b)r(e)g
(used)g(to)f(prin)n(t)h(a)f(set:)37 b(\014rst)26 b(con)n(v)n(ert)g(it)h
(to)g(a)f(list)h(with)g Fi(setToList)c Fl(and)k(then)g(prin)n(t)150
490 y(the)h(list)g(in)g(a)f(suitable)h(form.)37 b(More)27
b(generally)-7 b(,)26 b(a)i(computation)f(in)h(the)g(logic)f
(programming)e(st)n(yle)j(returns)150 589 y(a)c(set)h(whic)n(h)g(can)g
(then)g(b)r(e)g(further)g(pro)r(cessed)f(b)n(y)g(set)h(functions)g(or)f
(can)h(b)r(e)g(con)n(v)n(erted)f(to)g(a)h(list)g(for)f(further)150
689 y(pro)r(cessing)i(b)n(y)h(con)n(v)n(en)n(tional)f(Hask)n(ell)h
(functions.)150 964 y Fm(5)135 b(The)44 b Fc(Booleans)d
Fm(Mo)t(dule)150 1145 y Fl(In)28 b(this)g(section,)f(I)h(discuss)f(in)h
(more)e(detail)i(the)g(de\014nitions)g(in)g(the)g Fi(Booleans)c
Fl(mo)r(dule.)275 1245 y(The)38 b(\014rst)h(function)g(in)g
Fi(Booleans)d Fl(is)j(the)g(equalit)n(y)f(function)h
Fi(==)p Fl(,)i(whose)d(statemen)n(ts)h(ha)n(v)n(e)e(a)i(close)150
1345 y(connection)32 b(with)h(uni\014cation.)51 b(No)n(w)32
b(Esc)n(her)f(do)r(esn't)h(ha)n(v)n(e)g(uni\014cation)g(explicitly)g
(presen)n(t)g(in)h(the)g(com-)150 1444 y(putational)f(mo)r(del.)53
b(Instead,)34 b(matc)n(hing)e(is)h(carried)e(out)i(during)f(a)h
(function)g(call)g(and)f(the)h(remainder)f(of)150 1544
y(uni\014cation)g(is)g(handled)g(b)n(y)g(explicit)g(equalities)g(whic)n
(h)g(app)r(ear)f(in)h(the)h(b)r(o)r(dies)f(of)g(statemen)n(ts.)50
b(The)32 b(\014rst)150 1644 y(three)27 b(statemen)n(ts)g(in)g(the)g
(de\014nition)h(of)f Fi(==)f Fl(corresp)r(ond)g(exactly)g(to)h(three)g
(of)g(the)g(steps)g(in)h(the)f(equational)150 1743 y(v)n(ersion)h(of)h
(the)h(uni\014cation)g(algorithm)e(giv)n(en)h(in)g([11)o(].)43
b(The)30 b(step)f(in)h(the)g(uni\014cation)f(algorithm)f(in)i(whic)n(h)
150 1843 y(an)h(equation)f(of)h(the)h(form)e Fi(x)44
b(==)e(x)p Fl(,)32 b(where)f Fi(x)f Fl(is)h(a)g(v)-5
b(ariable,)31 b(is)g(deleted)g(from)g(the)g(set)g(of)g(equations)g
(isn't)150 1942 y(included)d(in)g(Esc)n(her)e(as)h(it)h(do)r(esn't)g
(seem)f(useful)h(for)g(programming.)34 b(The)28 b(remaining)f(step)h
(in)f(the)h(uni\014ca-)150 2042 y(tion)k(algorithm)e(where)h(the)h
(existence)f(of)h(an)f(equation)g(of)g(the)h(form)g Fi(x)43
b(==)g(t)31 b Fl(leads)g(to)g Fi(x)g Fl(b)r(eing)h(replaced)150
2142 y(b)n(y)g Fi(t)g Fl(throughout)f(the)i(equations,)f(where)g
Fi(x)g Fl(is)g(not)g(free)g(in)h Fi(t)p Fl(,)g(app)r(ears)e(in)h
(statemen)n(ts)g(in)h(v)-5 b(arious)31 b(other)150 2241
y(de\014nitions)25 b(in)h Fi(Booleans)p Fl(.)33 b(The)25
b(fourth)g(statemen)n(t)g(in)h(the)g(de\014nition)f(of)g
Fi(==)g Fl(giv)n(es)f(a)h(standard)f(prop)r(ert)n(y)g(of)150
2341 y(tuples.)38 b(The)28 b(\014nal)g(statemen)n(t)g(simply)f(states)h
(that)g(t)n(w)n(o)f(sets)h(are)f(equal)g(i\013)h(eac)n(h)f(is)h(a)g
(subset)g(of)f(the)i(other.)150 2441 y(The)f(de\014nition)g(of)f
(subset)h(app)r(ears)e(later.)275 2540 y(The)j(de\014nition)h(of)f
(disequalit)n(y)g(app)r(ears)f(in)i(the)f(Hask)n(ell)g(Prelude.)41
b(The)30 b(\014rst)f(four)g(statemen)n(ts)g(in)h(the)150
2640 y(de\014nition)i(of)f Fi(&&)g Fl(also)f(app)r(ear)h(there.)48
b(Next)32 b(follo)n(w)f(the)h(la)n(ws)e(for)h(distributing)h
Fi(&&)e Fl(o)n(v)n(er)g Fi(||)p Fl(.)48 b(These)31 b(la)n(ws)150
2739 y(are)d(crucial)f(since)i(they)f(force)g(disjunctions)h(to)f(the)h
(top)g(lev)n(el)f(of)g(b)r(o)r(olean)g(expressions.)38
b(They)28 b(are)g(needed)150 2839 y(in)h(Esc)n(her)e(as,)h(in)g(con)n
(trast)f(to)i(Hask)n(ell,)e(Esc)n(her)g(allo)n(ws)g(v)-5
b(ariables)27 b(in)i(expressions.)38 b(The)28 b(next)h(rule)f(is)g
(used)150 2939 y(to)37 b(widen)h(the)f(scop)r(e)g(of)g(an)g(existen)n
(tial)g(quan)n(ti\014er)f(and)h(the)h(last)f(statemen)n(t)g(is)g(part)g
(of)g(a)g(step)g(in)h(the)150 3038 y(uni\014cation)27
b(algorithm)g(referred)f(to)i(ab)r(o)n(v)n(e.)275 3138
y(The)i(\014rst)g(four)h(statemen)n(ts)f(in)h(the)g(de\014nition)f(of)h
Fi(||)f Fl(app)r(ear)f(in)i(the)g(Hask)n(ell)f(Prelude.)45
b(The)30 b(rewrites)150 3238 y(for)24 b(conditionals)f(ha)n(v)n(e)g(b)r
(een)h(added)g(to)g(this)g(de\014nition)h(since)f(a)f(conditional)h(is)
g(a)f(b)r(o)r(olean)h(expression)f(with)150 3337 y(a)k(disjunction)h
(at)g(the)g(top)f(lev)n(el.)37 b(The)27 b(de\014nition)h(of)g
Fi(not)e Fl(is)i(unremark)-5 b(able.)275 3437 y(Next)19
b(follo)n(ws)e(the)i(de\014nition)h(of)e(the)h(function)h
Fi(sigma)p Fl(,)e(whic)n(h)h(is)g(Ch)n(urc)n(h's)e(generalised)g
(existen)n(tial)i(quan-)150 3537 y(ti\014er.)41 b(Since)29
b Fi(sigma)e Fl(only)h(ev)n(er)g(o)r(ccurs)g(with)h(a)g(lam)n(b)r(da)f
(expression)g(inside,)h(this)g(de\014nition)g(is)g(essen)n(tially)150
3636 y(one)d(for)f(the)i(existen)n(tial)f(quan)n(ti\014er.)35
b(The)27 b(\014rst)f(three)g(statemen)n(ts)g(of)g(this)g(de\014nition)h
(are)e(straigh)n(tforw)n(ard.)150 3736 y(The)j(fourth)g(one)g(is)g(v)n
(ery)f(imp)r(ortan)n(t)h(for)g(the)h(whole)e(prop)r(osal.)38
b(De\014nitions)28 b(of)g(predicates)g(written)g(in)h(the)150
3835 y(logic)35 b(programming)f(st)n(yle)h(t)n(ypically)g(ha)n(v)n(e)g
(existen)n(tially)g(quan)n(ti\014ed)h(v)-5 b(ariables)34
b(in)i(their)g(b)r(o)r(dies.)62 b(What)150 3935 y(happ)r(ens)33
b(in)g(a)f(computation)h(is)g(that)g(reduction)f(is)h(done)g(inside)f
(the)i(scop)r(e)e(of)h(an)f(existen)n(tial)h(quan)n(ti\014er)150
4035 y(un)n(til)h(a)f(term)h(of)f(the)h(form)f Fi(x)43
b(==)g(u)33 b Fl(app)r(ears.)54 b(Then,)35 b(pro)n(vided)e(the)h(side)f
(conditions)g(are)g(met,)i(the)f(last)150 4134 y(statemen)n(t)28
b(in)f(the)h(de\014nition)g(of)g Fi(sigma)e Fl(is)h(used)h(to)f
(eliminate)h(the)g(lo)r(cal)f(v)-5 b(ariable)26 b Fi(x)p
Fl(.)275 4234 y(The)h(de\014nition)h(of)f Fi(pi)f Fl(exploits)h(the)h
(fact)f(that)h(the)f(most)g(common)g(use)g(of)g(a)g(univ)n(ersal)f
(quan)n(ti\014er)h(is)g(in)150 4334 y(an)i(expression)e(of)i(the)g
(form)g Fi(forall)41 b([x])i(\(u)f(-->)h(v\))p Fl(,)28
b(for)h(some)f(terms)h Fi(u)f Fl(and)h Fi(v)p Fl(.)41
b(There)28 b(are)g(3)h(cases)f(in)150 4433 y(the)k(de\014nition)h
(corresp)r(onding)d(to)i(when)g Fi(u)g Fl(is)g Fi(False)p
Fl(,)f(a)g(conjunction)h(of)g(terms)g(of)g(the)h(form)e
Fi(x)43 b(==)g(t)p Fl(,)33 b(or)150 4533 y(a)c(disjunction.)42
b(Note)29 b(the)h(close)e(parallel)g(here)h(with)h(the)f(form)g(of)g
(set-pro)r(cessing)f(functions.)42 b(This)29 b(comes)150
4632 y(ab)r(out)36 b(b)r(ecause)g(an)g(expression)f(of)h(the)g(form)g
Fi(forall)41 b([x])i(\(u)f(-->)h(v\))35 b Fl(can)h(b)r(e)h(rewritten)f
(as)f Fe(f)p Fi(x)43 b(|)g(u)p Fe(g)150 4732 y Fi(`subset`)d
Fe(f)p Fi(x)j(|)g(v)p Fe(g)p Fl(.)275 4832 y(The)27 b(de\014nitions)h
(of)f Fi(union)p Fl(,)e Fi(inters)p Fl(,)h(and)h Fi(minus)e
Fl(are)i(straigh)n(tforw)n(ard.)34 b(The)27 b(de\014nitions)h(of)f(the)
h(func-)150 4931 y(tions)35 b Fi(subset)p Fl(,)f Fi(superset)p
Fl(,)f Fi(power)p Fl(,)i(and)f Fi(mapset)f Fl(are)g(written)i(in)g(the)
g(st)n(yle)g(discussed)f(earlier)f(in)i(whic)n(h)150
5031 y(there)28 b(is)g(a)f(statemen)n(t)h(corresp)r(onding)e(to)i(eac)n
(h)f(of)h(the)g(cases,)f Fi(False)p Fl(,)f Fi(==)p Fl(,)i(and)g
Fi(||)f Fl(at)h(the)g(top)g(lev)n(el)f(in)i(the)150 5131
y(b)r(o)r(dy)-7 b(.)37 b(Set)28 b(mem)n(b)r(ership,)g
Fi(in)p Fl(,)f(is)g(just)h(function)h(application.)36
b(The)27 b(b)r(eta-reduction)g(rules)h(are)e(standard.)p
eop
%%Page: 22 22
22 21 bop 150 100 a Fk(6)83 b(CONCLUSION)2753 b Fl(22)150
390 y Fm(6)135 b(Conclusion)150 572 y Fl(This)34 b(pap)r(er)g(has)g
(pro)n(vided)g(an)g(in)n(tro)r(duction)g(to)h(the)f(Esc)n(her)f
(language,)i(concen)n(trating)e(on)h(the)h(issue)f(of)150
672 y(programming)21 b(st)n(yle)i(in)g(an)g(in)n(tegrated)f(functional)
i(and)f(logic)f(language.)34 b(The)23 b(pap)r(er)g(has)f(also)g(pro)n
(vided)g(an)150 771 y(answ)n(er)h(to)h(the)g(question:)35
b(What)24 b(has)g(to)g(b)r(e)g(added)g(to)g(Hask)n(ell)f(so)g(that)i
(it)f(can)g(pro)n(vide)f(the)h(facilities)g(made)150
871 y(a)n(v)-5 b(ailable)28 b(b)n(y)g(t)n(ypical)h(logic)f(programming)
f(languages?)39 b(I)30 b(ha)n(v)n(e)d(argued)h(that)h(this)h(question)e
(is)h(imp)r(ortan)n(t)150 971 y(b)r(ecause)24 b(Hask)n(ell)g(could)h(b)
r(ecome)f(the)i Fj(lingua)h(fr)l(anc)l(a)f Fl(of)f(b)r(oth)g
(functional)g(and)f(logic)g(programming)f(if)i(these)150
1070 y(facilities)j(could)f(b)r(e)h(successfully)f(added.)275
1170 y(T)-7 b(aking)31 b(for)g(gran)n(ted)g(that)i(it)f(is)g(w)n(orth)n
(while)g(adding)f(these)h(facilities)h(to)f(Hask)n(ell,)g(the)h
(question)f(then)150 1269 y(is)e(whether)g(these)h(extra)e(facilities)i
(can)f(b)r(e)g(e\016cien)n(tly)h(implemen)n(ted.)45 b(This)31
b(question)f(is)g(curren)n(tly)f(under)150 1369 y(in)n(v)n(estigation)
35 b(at)h(Bristol,)i(but)g(it)f(will)f(b)r(e)h(some)f(time)h(b)r(efore)
g(a)f(de\014nitiv)n(e)g(answ)n(er)g(can)g(b)r(e)h(giv)n(en.)63
b(An)150 1469 y(ideal)37 b(solution)g(w)n(ould)g(b)r(e)h(an)f(Esc)n
(her)e(system)i(whic)n(h)h(ran)e(\(standard\))h(Hask)n(ell)g(programs)e
(with)j(only)e(a)150 1568 y(v)n(ery)27 b(mo)r(dest)h(o)n(v)n(erhead)e
(compared)h(with)h(curren)n(t)f(Hask)n(ell)g(systems)h(and)g(also)e
(ran)i(programs)d(in)k(the)f(logic)150 1668 y(programming)d(st)n(yle)j
(with)g(nearly)e(the)i(e\016ciency)g(of)f(t)n(ypical)g(Prolog)f
(systems.)275 1768 y(I)k(b)r(eliev)n(e)f(that)i(the)f(curren)n(t)f
(divide)i(b)r(et)n(w)n(een)f(the)g(\014elds)g(of)g(functional)g
(programming)e(and)i(logic)f(pro-)150 1867 y(gramming)g(is)h(highly)g
(arti\014cial)f(and)h(that)g(the)h(future)f(lies)g(in)h(declarativ)n(e)
d(programming,)h(an)g(in)n(tegration)150 1967 y(of)i(the)h(b)r(est)g
(concepts)f(in)h(the)g(t)n(w)n(o)e(\014elds.)49 b(Researc)n(h)30
b(whic)n(h)h(addresses)f(implemen)n(tation)h(issues)g(for)g(in)n(te-)
150 2066 y(grated)22 b(languages)f(is)i(one)f(w)n(a)n(y)g(of)h
(bridging)f(this)h(divide.)36 b(I)23 b(hop)r(e)g(researc)n(hers)d(in)j
(b)r(oth)g(functional)g(and)g(logic)150 2166 y(programming)i(tak)n(e)i
(up)h(this)g(c)n(hallenge.)150 2439 y Fm(Ac)l(kno)l(wledgemen)l(ts)150
2621 y Fl(Man)n(y)e(p)r(eople)h(ha)n(v)n(e)e(con)n(tributed)i(to)f(m)n
(y)h(understanding)f(of)g(Esc)n(her)g(o)n(v)n(er)e(the)k(last)e(three)g
(y)n(ears.)35 b(Of)27 b(these,)150 2721 y(I)38 b(w)n(ould)f
(particularly)f(lik)n(e)i(to)f(men)n(tion)h(An)n(ton)n(y)f(Bo)n(w)n
(ers,)h(Kerstin)f(Eder,)j(and)d(Mic)n(hael)h(Han)n(us)f(whose)150
2820 y(commen)n(ts)f(and)f(criticisms)h(ha)n(v)n(e)f(b)r(een)h
(in\015uen)n(tial.)62 b(I)36 b(w)n(ould)f(also)g(lik)n(e)h(to)g(thank)f
(Elw)n(o)r(o)r(d)g(Wilkins)i(for)150 2920 y(some)27 b(observ)-5
b(ations)26 b(in)i([19)o(])g(whic)n(h)f(impro)n(v)n(ed)f(the)i(w)n(a)n
(y)f(set)g(pro)r(cessing)g(is)g(handled.)150 3193 y Fm(References)192
3375 y Fl([1])41 b(P)-7 b(.B.)28 b(Andrews.)41 b Fj(A)n(n)30
b(Intr)l(o)l(duction)g(to)h(Mathematic)l(al)i(L)l(o)l(gic)f(and)g(T)-6
b(yp)l(e)31 b(The)l(ory:)43 b(T)-6 b(o)31 b(T)-6 b(ruth)31
b(Thr)l(ough)321 3474 y(Pr)l(o)l(of)p Fl(.)38 b(Academic)27
b(Press,)f(1986.)192 3637 y([2])41 b(A.)27 b(Ch)n(urc)n(h.)36
b(A)27 b(form)n(ulation)g(of)g(the)g(simple)h(theory)e(of)h(t)n(yp)r
(es.)36 b Fj(Journal)30 b(of)g(Symb)l(olic)h(L)l(o)l(gic)p
Fl(,)d(5:56{68,)321 3736 y(1940.)192 3899 y([3])41 b(K.)30
b(Eder.)46 b(Implemen)n(ting)31 b(the)g(rewriting)f(computational)g(mo)
r(del)h(of)g(functional)g(logic)f(languages)f(on)321
3998 y(the)f(brisk)f(mac)n(hine.)36 b(In)28 b(preparation,)e(1997.)192
4161 y([4])41 b(J.H.)31 b(F)-7 b(asel,)32 b(P)-7 b(.)31
b(Hudak,)h(S.)f(P)n(eyton)f(Jones,)h(and)g(P)-7 b(.)31
b(W)-7 b(adler.)47 b(Sp)r(ecial)32 b(issue)e(on)h(the)h(functional)f
(pro-)321 4260 y(gramming)26 b(language)g(Hask)n(ell.)36
b Fj(A)n(CM)30 b(SIGPLAN)f(Notic)l(es)p Fl(,)f(27\(5\),)f(1992.)192
4423 y([5])41 b(M.)34 b(Han)n(us.)56 b(The)34 b(in)n(tegration)f(of)i
(functions)f(in)n(to)g(logic)f(programming:)48 b(F)-7
b(rom)34 b(theory)g(to)g(practice.)321 4523 y Fj(Journal)29
b(of)i(L)l(o)l(gic)f(Pr)l(o)l(gr)l(amming)p Fl(,)f(19&20:583{628,)22
b(1994.)192 4685 y([6])41 b(M.)30 b(Han)n(us.)44 b(A)30
b(uni\014ed)g(computation)g(mo)r(del)g(for)g(functional)g(and)g(logic)f
(programming.)42 b(In)30 b Fj(Pr)l(o)l(c.)j(of)321 4785
y(the)j(24th)i(A)n(CM)f(Symp)l(osium)g(on)g(Principles)h(of)g(Pr)l(o)l
(gr)l(amming)f(L)l(anguages)g(\(Paris\))p Fl(,)h(pages)c(80{93,)321
4884 y(1997.)192 5047 y([7])41 b(M.)63 b(Han)n(us)g(\(ed.\).)145
b(Curry:)108 b(An)64 b(in)n(tegrated)e(functional)i(logic)f(language.)
142 b(Av)-5 b(ailable)63 b(at)321 5146 y Fi(http://www-i2.i)o(nfo)o(rm)
o(ati)o(k.)o(rw)o(th-)o(aa)o(che)o(n.)o(de/)o(~h)o(an)o(us/)o(cu)o(rry)
o Fl(,)22 b(1997.)192 5309 y([8])41 b(L.)36 b(Henkin.)62
b(Completeness)35 b(in)i(the)f(theory)f(of)h(t)n(yp)r(es.)62
b Fj(Journal)37 b(of)i(Symb)l(olic)f(L)l(o)l(gic)p Fl(,)h
(15\(2\):81{91,)321 5408 y(1950.)192 5571 y([9])i(P)-7
b(.M.)38 b(Hill)h(and)f(J.W.)h(Llo)n(yd.)68 b Fj(The)40
b(G\177)-42 b(odel)41 b(Pr)l(o)l(gr)l(amming)g(L)l(anguage)p
Fl(.)69 b(MIT)39 b(Press,)g(1994.)67 b(Logic)321 5670
y(Programming)24 b(Series.)p eop
%%Page: 23 23
23 22 bop 150 100 a Fk(REFERENCES)2870 b Fl(23)150 390
y([10])41 b(I.)23 b(Holy)n(er)f(and)h(E.)f(Spiliop)r(oulou.)29
b(The)23 b(Brisk)f(mac)n(hine:)35 b(A)23 b(simpli\014ed)h(STG)f(mac)n
(hine.)29 b(Jan)n(uary)-7 b(,)22 b(1997.)150 556 y([11])41
b(J.-L.)27 b(Lassez,)g(M.J.)h(Maher,)g(and)g(K.)g(Marriot.)37
b(Uni\014cation)28 b(revisited.)38 b(In)28 b(J.)g(Mink)n(er,)g(editor,)
g Fj(F)-6 b(oun-)321 656 y(dations)31 b(of)g(De)l(ductive)g(Datab)l
(ases)g(and)g(L)l(o)l(gic)g(Pr)l(o)l(gr)l(amming)p Fl(,)e(pages)f
(587{625.)d(Morgan)h(Kaufmann,)321 756 y(1988.)150 922
y([12])41 b(J.W.)31 b(Llo)n(yd.)45 b(Com)n(bining)30
b(functional)g(and)h(logic)f(programming)e(languages.)44
b(In)31 b Fj(Pr)l(o)l(c)l(e)l(e)l(dings)i(of)h(the)321
1021 y(1994)d(International)f(L)l(o)l(gic)h(Pr)l(o)l(gr)l(amming)f
(Symp)l(osium,)h(ILPS'94)p Fl(,)e(pages)d(43{57.)g(MIT)h(Press,)f
(1994.)150 1187 y([13])41 b(J.W.)19 b(Llo)n(yd.)k(Declarativ)n(e)18
b(programming)f(in)j(Esc)n(her.)i(T)-7 b(ec)n(hnical)19
b(Rep)r(ort)g(CSTR-95-013,)f(Departmen)n(t)321 1287 y(of)j(Computer)h
(Science,)g(Univ)n(ersit)n(y)f(of)h(Bristol,)g(1995.)j(Also)c(a)n(v)-5
b(ailable)21 b(at)g(h)n(ttp://www.cs.bris.ac.uk/.)150
1453 y([14])41 b(J.W.)25 b(Llo)n(yd.)33 b(Debugging)24
b(for)h(a)g(declarativ)n(e)f(programming)f(language.)32
b(In)25 b(K.)h(F)-7 b(uruk)i(a)n(w)n(a,)24 b(D.)i(Mic)n(hie,)321
1553 y(and)19 b(S.)h(Muggleton,)h(editors,)g Fj(Machine)j(Intel)t
(ligenc)l(e)g(15)p Fl(.)c(Oxford)f(Univ)n(ersit)n(y)g(Press,)h(1997.)i
(T)-7 b(o)20 b(app)r(ear.)150 1719 y([15])41 b(J.W.)27
b(Llo)n(yd.)36 b(In)n(teraction)27 b(and)g(concurrency)f(in)i
(declarativ)n(e)e(programming.)35 b(In)28 b(preparation,)e(1997.)150
1885 y([16])41 b(G.)30 b(Nadath)n(ur.)44 b Fj(A)32 b(Higher-Or)l(der)h
(L)l(o)l(gic)g(as)g(the)f(Basis)i(for)f(L)l(o)l(gic)g(Pr)l(o)l(gr)l
(amming)p Fl(.)45 b(PhD)31 b(thesis,)g(Uni-)321 1984
y(v)n(ersit)n(y)26 b(of)h(P)n(ennsylv)-5 b(ania,)27 b(1987.)150
2150 y([17])41 b(G.)29 b(Nadath)n(ur)g(and)h(D.A.)g(Miller.)42
b(Higher-order)27 b(logic)i(programming.)40 b(T)-7 b(ec)n(hnical)29
b(Rep)r(ort)h(CS-1994-)321 2250 y(38,)i(Departmen)n(t)g(of)f(Computer)h
(Science,)h(Duk)n(e)f(Univ)n(ersit)n(y)-7 b(,)32 b(1994.)47
b(T)-7 b(o)32 b(app)r(ear)e(in)j(The)e(Handb)r(o)r(ok)321
2350 y(of)g(Logic)g(in)g(Arti\014cial)h(In)n(telligence)f(and)g(Logic)g
(Programming,)e(D.)j(Gabba)n(y)-7 b(,)32 b(C.)g(Hogger,)f(and)g(J.A.)
321 2449 y(Robinson)c(\(Eds.\),)g(Oxford)g(Univ)n(ersit)n(y)g(Press.)
150 2615 y([18])41 b(J.)23 b(A.)g(Thom)g(and)g(J.)g(Zob)r(el.)29
b(Nu-prolog)21 b(reference)h(man)n(ual,)i(v)n(ersion)d(1.3.)29
b(T)-7 b(ec)n(hnical)22 b(rep)r(ort,)i(Mac)n(hine)321
2715 y(In)n(telligence)j(Pro)5 b(ject,)26 b(Departmen)n(t)i(of)f
(Computer)h(Science,)f(Univ)n(ersit)n(y)g(of)g(Melb)r(ourne,)h(1988.)
150 2881 y([19])41 b(E.)27 b(Wilkins.)39 b(Programming)26
b(in)i(sets:)38 b(An)29 b(exploration)d(of)i(Esc)n(her.)37
b(Master's)28 b(thesis,)g(Departmen)n(t)g(of)321 2980
y(Computer)f(Science,)h(Univ)n(ersit)n(y)e(of)i(Bristol,)f(1997.)150
3147 y([20])41 b(D.A.)28 b(W)-7 b(olfram.)37 b Fj(The)30
b(Clausal)h(The)l(ory)g(of)g(T)-6 b(yp)l(es)p Fl(.)38
b(Cam)n(bridge)26 b(Univ)n(ersit)n(y)h(Press,)f(1993.)p
eop
%%Page: 24 24
24 23 bop 150 100 a Fk(A)83 b(TYPE)27 b(THEOR)-7 b(Y)2674
b Fl(24)150 390 y Fm(A)134 b(T)l(yp)t(e)44 b(Theory)150
572 y Fl(The)28 b(basic)g(logic)f(of)h(Esc)n(her)f(is)h(an)f(extension)
h(of)g(Ch)n(urc)n(h's)f(simple)i(theory)e(of)h(t)n(yp)r(es)g([2].)38
b(In)29 b(the)f(follo)n(wing,)150 672 y(I)f(shall)f(refer)g(to)g(Ch)n
(urc)n(h's)g(logic)g(as)g Fj(typ)l(e)j(the)l(ory)p Fl(.)37
b(There)27 b(are)e(sev)n(eral)g(accessible)h(accoun)n(ts)f(of)i(t)n(yp)
r(e)g(theory)-7 b(.)150 771 y(F)g(or)28 b(a)g(start,)h(one)f(can)h
(read)e(Ch)n(urc)n(h's)h(original)f(accoun)n(t)h([2],)h(a)f(more)g
(comprehensiv)n(e)g(accoun)n(t)f(of)i(higher-)150 871
y(order)23 b(logic)h(in)h([1],)g(a)g(more)f(recen)n(t)g(accoun)n(t,)g
(including)h(a)g(discussion)e(of)i(higher-order)e(uni\014cation,)i(in)g
([20)o(],)150 971 y(or)35 b(the)i(summaries)e(in)i([16)o(])f(and)g
([17].)63 b(A)36 b(more)g(detailed)g(accoun)n(t)f(of)i(\(the)g
(extension)e(of)6 b(\))37 b(t)n(yp)r(e)g(theory)150 1070
y(underlying)29 b(Esc)n(her)e(is)i(con)n(tained)f(in)i([13)o(].)41
b(F)-7 b(or)29 b(the)g(purp)r(oses)g(of)g(this)g(pap)r(er,)g(I)g
(simply)g(outline)h(the)f(main)150 1170 y(concepts)h(of)g(\(extended\))
h(t)n(yp)r(e)g(theory)f(in)g(a)g(few)h(paragraphs,)d(lea)n(ving)i(the)g
(reader)f(to)h(consult)h(the)f(ab)r(o)n(v)n(e)150 1269
y(accoun)n(ts)c(if)j(more)d(detail)i(is)f(needed.)275
1369 y(First,)g(I)h(assume)g(there)f(is)h(giv)n(en)f(a)g(set)h(of)g(t)n
(yp)r(e)g(constructors)e Fe(C)33 b Fl(of)28 b(v)-5 b(arious)26
b(arities.)37 b(Included)28 b(in)h Fe(C)j Fl(are)150
1469 y(the)d(t)n(yp)r(e)g(constructors)e Fb(1)i Fl(and)g
Fh(o)g Fl(b)r(oth)g(of)g(arit)n(y)f(0.)40 b(The)29 b(domain)f(corresp)r
(onding)f(to)i Fb(1)f Fl(is)h(some)f(canonical)150 1568
y(singleton)j(set)h(and)f(the)h(domain)f(corresp)r(onding)f(to)h
Fh(o)h Fl(is)f(the)h(set)g(con)n(taining)f(just)h Fj(T)-6
b(rue)31 b Fl(and)h Fj(F)-6 b(alse)p Fl(.)49 b(The)150
1668 y(main)23 b(purp)r(ose)f(of)g(ha)n(ving)g Fb(1)g
Fl(is)h(so)f(that)g(constan)n(ts)g(can)g(b)r(e)h(giv)n(en)f(t)n(yp)r
(es)h(in)g(a)f(uniform)g(w)n(a)n(y)g(as)g(for)g(functions.)150
1768 y(The)h(t)n(yp)r(e)f Fh(o)h Fl(is)g(the)g(t)n(yp)r(e)f(of)h(prop)r
(ositions.)34 b(The)22 b Fj(typ)l(es)h Fl(of)g(the)g(logic)e(are)h
(built)h(up)g(in)g(the)g(standard)e(w)n(a)n(y)g(from)150
1867 y(the)27 b(set)f(of)h(t)n(yp)r(e)g(constructors)d(and)j(a)f(set)g
(of)h(parameters)e(\(that)i(is,)f(t)n(yp)r(e)h(v)-5 b(ariables\),)26
b(using)g(the)h(sym)n(b)r(ol)f Fe(!)150 1967 y Fl(\(for)j(function)g(t)
n(yp)r(es\))g(and)g Fe(\002)f Fl(\(for)h(pro)r(duct)g(t)n(yp)r(es\).)41
b(Note)28 b(that)i(the)f(logic)f(is)g(p)r(olymorphic,)h(an)g(extension)
150 2066 y(not)f(considered)e(b)n(y)h(Ch)n(urc)n(h.)275
2166 y(The)f Fj(terms)g Fl(of)g(t)n(yp)r(e)g(theory)f(are)h(the)g
(terms)g(of)g(the)h(t)n(yp)r(ed)f Fh(\025)p Fl(-calculus,)g(whic)n(h)g
(are)g(formed)f(in)i(the)f(usual)150 2266 y(w)n(a)n(y)g(b)n(y)h
(abstraction)f(and)i(application)f(from)g(a)g(giv)n(en)f(set)i(of)f
(functions)h(ha)n(ving)e(t)n(yp)r(es)i(of)f(the)h(form)f
Fh(\013)d Fe(!)f Fh(\014)150 2365 y Fl(and)32 b(a)h(set)f(of)h(v)-5
b(ariables.)50 b(A)33 b(term)g(of)f(t)n(yp)r(e)h Fh(o)g
Fl(is)f(called)g(a)h Fj(formula)p Fl(.)52 b(In)33 b(t)n(yp)r(e)g
(theory)-7 b(,)33 b(one)f(can)g(in)n(tro)r(duce)150 2465
y(the)38 b(usual)f(connectiv)n(es)g(and)g(quan)n(ti\014ers)g(as)g
(functions)h(of)f(appropriate)f(t)n(yp)r(es.)67 b(Th)n(us)37
b(the)h(connectiv)n(es)150 2565 y(conjunction,)e Fe(^)p
Fl(,)g(and)f(disjunction,)h Fe(_)p Fl(,)g(are)e(functions)g(of)g(t)n
(yp)r(e)h Fh(o)f Fe(!)g Fh(o)h Fe(!)f Fh(o)h Fl(and)f(the)g
(\(generalized\))g(ex-)150 2664 y(isten)n(tial)j(quan)n(ti\014er,)h
(\006,)i(and)d(univ)n(ersal)e(quan)n(ti\014er,)k(\005,)h(ha)n(v)n(e)c
(t)n(yp)r(e)h(\()p Fh(\013)i Fe(!)g Fh(o)p Fl(\))g Fe(!)g
Fh(o)p Fl(.)65 b(\(The)38 b Fe(!)f Fl(is)g(righ)n(t)150
2764 y(asso)r(ciativ)n(e.\))54 b(T)-7 b(erms)34 b(of)f(the)i(form)e
(\006\()p Fh(\025x:t)p Fl(\))j(are)c(written)j(as)e Fe(9)p
Fh(x:t)h Fl(and)g(terms)g(of)g(the)g(form)f(\005\()p
Fh(\025x:t)p Fl(\))j(are)150 2863 y(written)29 b(as)f
Fe(8)p Fh(x:t)p Fl(.)40 b(In)28 b(addition,)h(if)h Fh(t)e
Fl(is)h(of)f(t)n(yp)r(e)h Fh(o)p Fl(,)h(the)f(abstraction)e
Fh(\025x:t)j Fl(is)e(written)h Fe(f)p Fh(x)c Fl(:)g Fh(t)p
Fe(g)j Fl(to)h(emphasize)150 2963 y(its)f(in)n(tended)g(meaning)g(as)f
(a)g(set.)38 b(The)28 b(notation)f Fe(fg)g Fl(means)g
Fe(f)p Fh(x)d Fl(:)f Fh(F)12 b(al)r(se)p Fe(g)p Fl(.)36
b(A)28 b(set)g(abstraction)e(of)i(the)g(form)150 3063
y Fe(f)p Fh(x)23 b Fl(:)g(\()p Fh(x)h Fl(=)f Fh(t)529
3075 y Fg(1)566 3063 y Fl(\))14 b Fe(_)h Fh(:)f(:)g(:)g
Fe(_)h Fl(\()p Fh(x)23 b Fl(=)g Fh(t)1083 3075 y Ff(n)1128
3063 y Fl(\))p Fe(g)j Fl(is)f(abbreviated)f(to)i Fe(f)p
Fh(t)1933 3075 y Fg(1)1970 3063 y Fh(;)14 b(:)g(:)g(:)f(;)h(t)2184
3075 y Ff(n)2229 3063 y Fe(g)p Fl(,)26 b(where)f Fh(x)h
Fl(is)f(not)h(free)f(in)h(an)n(y)e Fh(t)3294 3075 y Ff(i)3322
3063 y Fl(.)36 b(There)25 b(is)150 3162 y(also)e(a)h(tuple-forming)g
(notation)f Fh(<)g(:)14 b(:)g(:)23 b(>)p Fl(.)35 b(Th)n(us,)25
b(if)g Fh(t)1888 3174 y Fg(1)1925 3162 y Fh(;)14 b(:)g(:)g(:)f(;)h(t)
2139 3174 y Ff(n)2209 3162 y Fl(are)23 b(terms)h(of)g(t)n(yp)r(e)g
Fh(\034)2882 3174 y Fg(1)2920 3162 y Fh(;)14 b(:)g(:)g(:)f(;)h(\034)
3140 3174 y Ff(n)3186 3162 y Fl(,)25 b(resp)r(ectiv)n(ely)-7
b(,)150 3262 y(then)29 b Fh(<)c(t)460 3274 y Fg(1)498
3262 y Fh(;)14 b(:)g(:)g(:)f(;)h(t)712 3274 y Ff(n)783
3262 y Fh(>)28 b Fl(is)h(a)g(term)g(of)g(t)n(yp)r(e)g
Fh(\034)1552 3274 y Fg(1)1609 3262 y Fe(\002)19 b Fh(:)14
b(:)g(:)19 b Fe(\002)g Fh(\034)1929 3274 y Ff(n)1974
3262 y Fl(.)41 b(The)29 b(term)g Fh(f)9 b Fl(\()p Fh(<)25
b(t)2612 3274 y Fg(1)2649 3262 y Fh(;)14 b(:)g(:)g(:)g(;)g(t)2864
3274 y Ff(n)2934 3262 y Fh(>)p Fl(\))29 b(is)g(abbreviated)f(to)150
3362 y Fh(f)9 b Fl(\()p Fh(t)262 3374 y Fg(1)299 3362
y Fh(;)14 b(:)g(:)g(:)g(;)g(t)514 3374 y Ff(n)559 3362
y Fl(\),)35 b(where)e Fh(f)42 b Fl(is)33 b(a)g(function.)55
b(Th)n(us,)34 b(although)f(all)g(functions)h(are)e(unary)-7
b(,)34 b(one)f(can)g(e\013ectiv)n(ely)150 3461 y(use)f(the)h(more)f
(common)f(syn)n(tax)h(of)g Fh(n)p Fl(-ary)f(functions)i(and)f(I)g
(sometimes)g(refer)g(to)g(the)h(\\argumen)n(ts")d(of)i(a)150
3561 y(function)h(\(rather)e(than)h(the)g(argumen)n(t\).)50
b(F)-7 b(unctions)32 b(mapping)g(from)f(the)i(domain)e(of)h(t)n(yp)r(e)
g Fb(1)g Fl(ha)n(v)n(e)f(their)150 3660 y(argumen)n(t)c(omitted.)275
3760 y(T)n(yp)r(e)i(theory)h(has)f(an)h(elegan)n(t)f(and)h(useful)g(mo)
r(del)g(theory)-7 b(.)43 b(The)30 b(k)n(ey)g(idea,)g(in)n(tro)r(duced)g
(b)n(y)f(Henkin)i(in)150 3860 y(his)h(pap)r(er)f([8])h(whic)n(h)f(pro)n
(v)n(ed)g(the)h(completeness)f(of)h(t)n(yp)r(e)g(theory)-7
b(,)32 b(is)g(that)g(of)g(a)f Fj(gener)l(al)j(mo)l(del)p
Fl(.)51 b(General)150 3959 y(mo)r(dels)26 b(are)f(a)g(natural)g
(generalization)f(of)i(\014rst-order)e(in)n(terpretations.)35
b(V)-7 b(ery)25 b(sk)n(etc)n(hily)-7 b(,)26 b(lea)n(ving)e(aside)i(the)
150 4059 y(extension)f(to)h(handle)f(p)r(olymorphism,)h(the)g(mo)r(del)
g(theory)f(of)g(t)n(yp)r(e)h(theory)f(is)g(as)g(follo)n(ws.)36
b(The)25 b(domain)h(for)150 4159 y(a)k(n)n(ullary)f(t)n(yp)r(e)i
(constructor)d(in)j Fe(C)k Fl(is)30 b(some)g(set,)h(the)f(domain)g(for)
g(a)g(t)n(yp)r(e)g(of)g(the)h(form)f Fh(\013)e Fe(!)f
Fh(\014)35 b Fl(is)30 b(a)g(set)g(of)150 4258 y(functions)25
b(mapping)g(from)g(the)g(domain)g(of)g(t)n(yp)r(e)g Fh(\013)g
Fl(to)g(the)g(domain)g(of)g(t)n(yp)r(e)g Fh(\014)t Fl(,)h(and)f(the)g
(domain)g(for)f(a)h(t)n(yp)r(e)150 4358 y(of)g(the)h(form)f
Fh(\013)14 b Fe(\002)g Fh(\014)29 b Fl(is)c(the)g(cartesian)f(pro)r
(duct)h(of)g(the)h(domains)f(of)g(t)n(yp)r(e)g Fh(\013)h
Fl(and)f Fh(\014)t Fl(.)36 b(A)26 b(function)g(of)f(t)n(yp)r(e)g
Fh(\034)35 b Fl(is)150 4457 y(assigned)23 b(some)g(elemen)n(t)h(of)g
(the)g(domain)g(of)g(t)n(yp)r(e)g Fh(\034)34 b Fl(and)23
b(the)i(meaning)e(of)h(the)g(connectiv)n(es)f(and)h(quan)n(ti\014ers)
150 4557 y(is)31 b(what)h(one)f(w)n(ould)f(exp)r(ect.)49
b(F)-7 b(rom)31 b(this,)i(the)e(notions)g(of)g(general)f(mo)r(del,)j
(satisfaction,)f(v)-5 b(alidit)n(y)e(,)32 b(mo)r(del)150
4657 y(of)e(a)f(set)h(of)g(form)n(ulas,)g(and)f(so)h(on,)g(can)f(b)r(e)
i(giv)n(en)e(in)h(a)g(rather)f(straigh)n(tforw)n(ard)d(w)n(a)n(y)-7
b(.)43 b(\(See,)31 b(for)e(example,)150 4756 y([1],)k([8],)g([13)o(],)h
(or)d([20)o(])i(for)e(the)i(details.\))51 b(I)32 b(prop)r(ose)f(that)i
(Henkin's)f(concept)g(of)g(a)g(general)f(mo)r(del)h(b)r(e)h(the)150
4856 y(appropriate)26 b(one)h(for)g(capturing)g(the)h
Fj(intende)l(d)i(interpr)l(etation)e Fl(of)g(an)f(application.)275
4956 y(Finally)-7 b(,)29 b(here)g(is)g(a)g(table)h(whic)n(h)f(sho)n(ws)
f(the)i(corresp)r(ondence)d(b)r(et)n(w)n(een)i(v)-5 b(arious)29
b(sym)n(b)r(ols)f(and)h(expres-)150 5055 y(sions)c(of)h(t)n(yp)r(e)f
(theory)g(in)h(the)g(left)h(column)e(and)h(their)f(equiv)-5
b(alen)n(t)26 b(in)g(the)g(syn)n(tax)e(of)i(Hask)n(ell/Esc)n(her)d(in)j
(the)150 5155 y(righ)n(t)h(column.)p eop
%%Page: 25 25
25 24 bop 150 100 a Fk(A)83 b(TYPE)27 b(THEOR)-7 b(Y)2674
b Fl(25)p 1335 311 1155 4 v 1333 410 4 100 v 1385 380
a Fb(1)p 1866 410 V 484 w Fi(\(\))p 2488 410 V 1333 510
V 1385 480 a Fh(o)p 1866 510 V 492 w Fi(Bool)p 2488 510
V 1333 609 V 1385 579 a Fh(\033)26 b Fe(!)d Fh(\034)p
1866 609 V 317 w Fi(Sigma)42 b(->)g(Tau)p 2488 609 V
1333 709 V 1385 679 a Fh(\033)22 b Fe(\002)c Fh(\034)p
1866 709 V 344 w Fi(\(Sigma,)41 b(Tau\))p 2488 709 V
1333 809 V 1385 779 a Fl(=)p 1866 809 V 467 w Fi(==)p
2488 809 V 1333 908 V 1385 878 a Fe(:)p 1866 908 V 477
w Fi(not)p 2488 908 V 1333 1008 V 1385 978 a Fe(^)p 1866
1008 V 477 w Fi(&&)p 2488 1008 V 1333 1108 V 1385 1078
a Fe(_)p 1866 1108 V 477 w Fi(||)p 2488 1108 V 1333 1207
V 1385 1177 a Fe(!)p 1866 1207 V 449 w Fi(-->)p 2488
1207 V 1333 1307 V 1385 1277 a Fh(\025x:t)p 1866 1307
V 384 w Fi(\\x)i(->)g(t)p 2488 1307 V 1333 1406 V 1385
1377 a Fe(9)p Fh(x:t)p 1866 1406 V 386 w Fi(exists)e([x])i(t)p
2488 1406 V 1333 1506 V 1385 1476 a Fe(8)p Fh(x:t)p 1866
1506 V 385 w Fi(forall)e([x])i(t)p 2488 1506 V 1333 1606
V 1385 1576 a Fe(f)p Fh(x)23 b Fl(:)g Fh(t)p Fe(g)p 1866
1606 V 302 w Fi({x)43 b(|)g(t})p 2488 1606 V 1333 1705
V 1385 1675 a Fe(2)p 1866 1705 V 477 w Fi(in)p 2488 1705
V 1333 1805 V 1385 1775 a Fh(<)23 b(s;)32 b(t)23 b(>)p
1866 1805 V 232 w Fi(\(s,)42 b(t\))p 2488 1805 V 1335
1808 1155 4 v eop
%%Page: 26 26
26 25 bop 150 100 a Fk(B)83 b(OPERA)-7 b(TIONAL)26 b(SEMANTICS)2149
b Fl(26)150 390 y Fm(B)134 b(Op)t(erational)46 b(Seman)l(tics)150
572 y Fl(This)28 b(app)r(endix)f(con)n(tains)g(a)g(description)g(of)h
(the)g(op)r(erational)e(seman)n(tics)h(of)g(Esc)n(her.)275
713 y Fb(De\014nition)40 b Fl(A)c Fj(r)l(e)l(dex)g Fh(r)i
Fl(of)e(a)f(term)h Fh(t)g Fl(is)f(a)h(subterm)f(of)h
Fh(t)g Fl(whic)n(h)g(is)f(iden)n(tical)h(to)f(the)i(head)e(of)h(some)
150 813 y(instance)27 b(of)h(a)f(statemen)n(t)h(sc)n(hema.)275
995 y Fb(De\014nition)40 b Fl(A)28 b(term)g(is)f(in)h
Fj(normal)i(form)f Fl(if)f(it)g(do)r(es)f(not)h(con)n(tain)f(a)g
(redex.)275 1178 y Fb(De\014nition)40 b Fl(Let)c Fe(L)g
Fl(b)r(e)g(the)f(set)h(of)f(terms)h(constructed)f(from)g(the)h(alphab)r
(et)f(of)h(a)f(program)e(and)j(let)150 1278 y Fe(D)r(S)266
1290 y Fa(L)345 1278 y Fl(b)r(e)29 b(the)g(set)f(of)h(subterms)f(of)g
(terms)h(in)f Fe(L)h Fl(distinguished)g(b)n(y)f(their)g(p)r(osition.)39
b(A)29 b Fj(sele)l(ction)i(rule)e Fh(S)k Fl(is)28 b(a)150
1377 y(function)33 b(from)f Fe(L)g Fl(to)g(the)h(p)r(o)n(w)n(er)d(set)j
(of)f Fe(D)r(S)1620 1389 y Fa(L)1703 1377 y Fl(satisfying)f(the)i
(follo)n(wing)e(condition:)46 b(if)32 b Fh(t)g Fl(is)g(a)g(term)g(in)h
Fe(L)p Fl(,)150 1477 y(then)28 b Fh(S)5 b Fl(\()p Fh(t)p
Fl(\))28 b(is)g(a)f(subset)g(of)h(the)g(set)f(of)h(outermost)f
(subterms)g(of)h Fh(t)f Fl(eac)n(h)g(of)h(whic)n(h)f(is)h(a)f(redex.)
275 1618 y(T)n(ypical)22 b(selection)i(rules)f(are)f(the)i
(parallel-outermost)e(selection)h(rule)g(for)g(whic)n(h)h(all)f
(outermost)g(redexes)150 1718 y(are)k(selected)g(and)g(the)h(leftmost)g
(selection)f(rule)h(in)f(whic)n(h)h(the)g(leftmost)g(outermost)f(redex)
f(is)i(selected.)37 b(An)150 1817 y(implemen)n(tation)28
b(of)f(Esc)n(her)f(can)i(emplo)n(y)e(an)n(y)h(selection)g(rule.)275
1959 y Fb(De\014nition)40 b Fl(A)20 b(term)g Fh(s)g Fl(is)g(obtained)f
(from)h(a)f(term)h Fh(t)g Fl(b)n(y)g(a)f Fj(c)l(omputation)k(step)d
Fl(if)g(the)h(follo)n(wing)e(conditions)150 2058 y(are)27
b(satis\014ed:)251 2224 y(1.)42 b Fh(S)5 b Fl(\()p Fh(t)p
Fl(\))27 b(is)h(a)f(non-empt)n(y)g(set,)h Fe(f)p Fh(r)1335
2236 y Ff(\013)1382 2224 y Fe(g)p Fl(,)f(sa)n(y)-7 b(.)251
2390 y(2.)42 b(F)-7 b(or)24 b(eac)n(h)g Fh(\013)p Fl(,)i(the)f(redex)f
Fh(r)1188 2402 y Ff(\013)1261 2390 y Fl(is)g(iden)n(tical)h(to)g(the)g
(head)g Fh(h)2156 2402 y Ff(\013)2228 2390 y Fl(of)f(some)h(instance)f
Fh(h)2893 2402 y Ff(\013)2963 2390 y Fl(=)f Fh(b)3087
2402 y Ff(\013)3159 2390 y Fl(of)i(a)f(statemen)n(t)358
2490 y(sc)n(hema.)251 2656 y(3.)42 b Fh(s)27 b Fl(is)h(the)g(term)f
(obtained)g(from)h Fh(t)f Fl(b)n(y)h(replacing,)e(for)h(eac)n(h)g
Fh(\013)p Fl(,)h(the)g(redex)f Fh(r)2760 2668 y Ff(\013)2836
2656 y Fl(b)n(y)g Fh(b)2987 2668 y Ff(\013)3034 2656
y Fl(.)275 2905 y Fb(De\014nition)40 b Fl(A)23 b Fj(c)l(omputation)g
Fl(from)g(a)f(term)h Fh(t)f Fl(is)h(a)f(sequence)g Fe(f)p
Fh(t)2337 2917 y Ff(i)2365 2905 y Fe(g)2407 2875 y Ff(n)2407
2927 y(i)p Fg(=1)2541 2905 y Fl(of)g(terms)h(suc)n(h)f(that)h(the)g
(follo)n(wing)150 3005 y(conditions)k(are)g(satis\014ed.)251
3171 y(1.)42 b Fh(t)23 b Fl(=)f Fh(t)528 3183 y Fg(1)565
3171 y Fl(.)251 3337 y(2.)42 b Fh(t)388 3349 y Ff(i)p
Fg(+1)527 3337 y Fl(is)27 b(obtained)h(from)f Fh(t)1178
3349 y Ff(i)1233 3337 y Fl(b)n(y)h(a)f(computation)g(step,)h(for)f
Fh(i)c Fl(=)f(1)p Fh(;)14 b(:)g(:)g(:)f(;)h(n)k Fe(\000)h
Fl(1.)251 3503 y(3.)42 b Fh(t)388 3515 y Ff(n)460 3503
y Fl(is)28 b(in)g(normal)e(form.)150 3669 y(The)i(term)f
Fh(t)549 3681 y Fg(1)614 3669 y Fl(is)h(called)f(the)h
Fj(go)l(al)h Fl(of)e(the)h(computation)f(and)h Fh(t)2157
3681 y Ff(n)2230 3669 y Fl(is)f(called)g(the)h Fj(answer)p
Fl(.)p eop
%%Page: 27 27
27 26 bop 150 100 a Fk(C)83 b Fi(BOOLEANS)24 b Fk(MODULE)2548
b Fl(27)150 390 y Fm(C)135 b Fc(Booleans)41 b Fm(Mo)t(dule)p
150 572 3511 10 v 150 738 a Fi(module)g(Booleans)f(where)i({)150
937 y(data)g(Bool)g(=)h(True)f(|)h(False;)150 1236 y(\(==\))f(::)h(a)g
(->)g(a)g(->)g(Bool;)150 1435 y(f)g(x1)g(...)f(xn)h(==)g(f)g(y1)g(...)f
(yn)86 b(=)h(\(x1)43 b(==)f(y1\))h(&&)f(...)h(&&)f(\(xn)h(==)g(yn\);)
150 1535 y(--)150 1635 y(--)86 b(where)42 b(n)h(>=)g(0;)g(and)f(f)h(is)
g(a)g(data)f(constructor.)d(\(If)j(n=0,)g(then)g(the)g(RHS)g(is)h
(True.\))150 1834 y(f)g(x1)g(...)f(xn)h(==)g(g)g(y1)g(...)f(ym)86
b(=)h(False;)150 1934 y(--)150 2033 y(--)f(where)42 b(n)h(and)f(m)i(>=)
e(0;)h(f)g(and)g(g)g(are)f(data)g(constructors;)c(and)43
b(f)g(is)g(distinct)d(from)i(g.)150 2232 y(y)h(==)g(x)87
b(=)f(x)44 b(==)e(y;)150 2332 y(--)150 2432 y(--)86 b(where)42
b(x)h(is)g(a)g(variable;)d(and)i(y)h(is)g(not)f(a)i(variable.)150
2631 y(\(x1,...,xn\))39 b(==)k(\(y1,...,yn\))82 b(=)87
b(\(x1)43 b(==)f(y1\))h(&&)f(...)h(&&)f(\(xn)h(==)g(yn\);)150
2830 y({x)g(|)g(u})g(==)f({y)h(|)g(v})87 b(=)f(\({x)43
b(|)g(u})g(subset)e({y)i(|)g(v}\))f(&&)h(\({y)f(|)h(v})g(subset)e({x)i
(|)g(u}\);)150 3129 y(\(/=\))f(::)h(a)g(->)g(a)g(->)g(Bool;)150
3328 y(x)g(/=)g(y)87 b(=)f(not)43 b(\(x)g(==)f(y\);)150
3627 y(\(&&\))g(::)h(Bool)f(->)g(Bool)g(->)h(Bool;)150
3827 y(True)f(&&)h(x)86 b(=)h(x;)150 4026 y(x)43 b(&&)g(True)85
b(=)i(x;)150 4225 y(False)42 b(&&)g(x)87 b(=)g(False;)150
4424 y(x)43 b(&&)g(False)85 b(=)i(False;)150 4624 y(\(x)43
b(||)g(y\))f(&&)h(z)87 b(=)g(\(x)42 b(&&)h(z\))g(||)g(\(y)f(&&)h(z\);)
150 4823 y(x)g(&&)g(\(y)g(||)f(z\))87 b(=)g(\(x)42 b(&&)h(y\))g(||)g
(\(x)f(&&)h(z\);)150 5022 y(x)g(&&)g(\(exists)e([x1,...,xn])e(v\))j(&&)
h(y)87 b(=)g(exists)41 b([x1,...,xn])e(\(x)k(&&)f(v)i(&&)e(y\);)150
5122 y(--)150 5221 y(--)86 b(where)42 b(each)g(xi)h(is)f(not)h(free)f
(in)g(x)i(and)e(y;)h(and)f(x)h(or)g(y)g(may)f(be)h(absent.)150
5421 y(y)g(&&)g(\(x)g(==)f(u\))h(&&)g(z)87 b(=)f(y{x/u})42
b(&&)g(\(x)h(==)g(u\))g(&&)f(z{x/u};)150 5520 y(--)150
5620 y(--)86 b(where)42 b(x)h(is)g(a)g(variable;)d(x)j(is)g(not)f(free)
g(in)h(u;)g(x)g(is)f(free)g(in)h(y)g(or)g(z;)p eop
%%Page: 28 28
28 27 bop 150 100 a Fk(C)83 b Fi(BOOLEANS)24 b Fk(MODULE)2548
b Fl(28)150 390 y Fi(--)86 b(u)44 b(is)e(free)g(for)h(x)g(in)f(y)i(and)
e(z;)h(and)f(y)h(or)g(z)g(may)g(be)f(absent.)150 689
y(\(||\))g(::)h(Bool)f(->)g(Bool)g(->)h(Bool;)150 888
y(True)f(||)h(x)86 b(=)h(True;)150 1088 y(x)43 b(||)g(True)85
b(=)i(True;)150 1287 y(False)42 b(||)g(x)87 b(=)g(x;)150
1486 y(x)43 b(||)g(False)85 b(=)i(x;)150 1685 y(--)f(Rewrites)41
b(for)h(the)g(conditional)d(syntactic)h(sugar.)150 1885
y(if)j(exists)e([x1,...,xn])e(True)j(then)g(x)h(else)f(y)87
b(=)f(exists)41 b([x1,...,xn])f(x;)150 2084 y(if)j(exists)e
([x1,...,xn])e(False)i(then)h(x)i(else)d(y)87 b(=)g(y;)150
2283 y(if)43 b(exists)e([x1,...,xn])e(\(x)k(&&)f(\(xi)h(==)g(u\))f(&&)h
(y\))g(then)f(z)h(else)f(v)87 b(=)324 2383 y(if)43 b(exists)e
([x1,...,xi-1,xi+1)o(,.)o(..,)o(xn)o(])c(\(x{xi/u})k(&&)h(y{xi/u}\))f
(then)h(z{xi/u})e(else)i(v;)150 2482 y(--)150 2582 y(--)86
b(where)42 b(xi)h(is)f(not)h(free)f(in)g(u;)h(u)g(is)g(free)f(for)g(xi)
h(in)g(x,)g(y)g(and)f(z;)h(and)f(x)h(or)g(y)150 2682
y(--)86 b(\(or)43 b(both\))e(may)i(be)f(absent.)150 2881
y(if)h(exists)e([x1,...,xn])e(\(x)k(||)f(\(xi)h(==)g(u\))f(||)h(y\))g
(then)f(z)h(else)f(v)87 b(=)324 2980 y(exists)41 b([x1,...,xn])e(\(\(x)
k(||)g(\(xi)f(==)h(u\))f(||)h(y\))g(&&)g(z\);)150 3080
y(--)150 3180 y(--)86 b(where)42 b(x)h(or)g(y)g(\(or)f(both\))g(may)g
(be)h(absent.)150 3479 y(not)f(::)h(Bool)f(->)h(Bool;)150
3678 y(not)f(False)85 b(=)i(True;)150 3877 y(not)42 b(True)86
b(=)h(False;)150 4076 y(not)42 b(not)h(x)86 b(=)h(x;)150
4276 y(not)42 b(\(x)h(||)g(y\))86 b(=)h(\(not)42 b(x\))h(&&)f(\(not)g
(y\);)150 4475 y(not)g(\(x)h(&&)g(y\))86 b(=)h(\(not)42
b(x\))h(||)f(\(not)g(y\);)150 4774 y(sigma)g(::)g(\(a)h(->)g(Bool\))e
(->)i(Bool;)150 4973 y(exists)e([x1,...,xn])e(True)86
b(=)g(True;)150 5172 y(exists)41 b([x1,...,xn])e(False)85
b(=)i(False;)150 5372 y(exists)41 b([x1,...,xn])e(\(x)k(||)g(y\))86
b(=)h(\(exists)40 b([x1,...,xn])f(x\))k(||)g(\(exists)e([x1,...,xn])e
(y\);)150 5571 y(exists)i([x1,...,xn])e(\(x)k(&&)g(\(xi)f(==)h(u\))g
(&&)f(y\))87 b(=)324 5670 y(exists)41 b([x1,...,xi-1,xi+1)o(,..)o(.,)o
(xn])c(\(x{xi/u})j(&&)j(y{xi/u}\);)p eop
%%Page: 29 29
29 28 bop 150 100 a Fk(C)83 b Fi(BOOLEANS)24 b Fk(MODULE)2548
b Fl(29)150 390 y Fi(--)150 490 y(--)86 b(where)42 b(xi)h(is)f(not)h
(free)f(in)g(u;)h(u)g(is)g(free)f(for)g(xi)h(in)g(x)g(and)f(y;)h(and)g
(x)g(or)f(y)i(\(or)e(both\))150 589 y(--)86 b(may)43
b(be)f(absent.)f(If)i(both)f(x)h(and)f(y)i(are)e(absent,)f(then)g(the)i
(RHS)f(is)h(True.)150 888 y(pi)g(::)g(\(a)f(->)h(Bool\))f(->)g(Bool;)
150 1088 y(forall)f([x1,...,xn])e(\(False)i(-->)i(u\))86
b(=)h(True;)150 1287 y(forall)41 b([x1,...,xn])e(\(\(x1)j(==)h(t1\))f
(&&)h(...)f(&&)h(\(xn)f(==)h(tn\))f(-->)h(u\))86 b(=)h
(u{x1/t1,...,xn/t)o(n})o(;)150 1386 y(--)150 1486 y(--)f(where)42
b(xi)h(is)f(not)h(free)f(in)g(tj,)h(for)f(i,j=1,...,n.)150
1685 y(forall)f([x1,...,xn])e(\(\(v)j(||)h(w\))g(-->)f(u\))87
b(=)324 1785 y(forall)41 b([x1,...,xn])e(\(v)k(-->)g(u\))f(&&)h(forall)
e([x1,...,xn])e(\(w)k(-->)f(u\);)150 2084 y(union)g(::)g(\(a)h(->)g
(Bool\))e(->)i(\(a)g(->)g(Bool\))e(->)i(\(a)g(->)f(Bool\);)150
2283 y(s)h(`union`)e(t)87 b(=)f({x)43 b(|)g(\(x)g(`in`)f(s\))h(||)g
(\(x)f(`in`)g(t\)};)150 2383 y(--)150 2482 y(--)86 b(where)42
b(x)h(is)g(not)f(free)g(in)h(s)g(or)g(t.)150 2781 y(inters)e(::)i(\(a)g
(->)f(Bool\))g(->)h(\(a)f(->)h(Bool\))f(->)g(\(a)h(->)g(Bool\);)150
2980 y(s)g(`inters`)d(t)87 b(=)g({x)43 b(|)g(\(x)g(`in`)f(s\))g(&&)h
(\(x)g(`in`)f(t\)};)150 3080 y(--)150 3180 y(--)86 b(where)42
b(x)h(is)g(not)f(free)g(in)h(s)g(or)g(t.)150 3479 y(minus)f(::)g(\(a)h
(->)g(Bool\))e(->)i(\(a)g(->)g(Bool\))e(->)i(\(a)g(->)f(Bool\);)150
3678 y(s)h(`minus`)e(t)87 b(=)f({x)43 b(|)g(\(x)g(`in`)f(s\))h(&&)g
(\(not)e(\(x)i(`in`)f(t\)\)};)150 3778 y(--)150 3877
y(--)86 b(where)42 b(x)h(is)g(not)f(free)g(in)h(s)g(or)g(t.)150
4176 y(subset)e(::)i(\(a)g(->)f(Bool\))g(->)h(\(a)f(->)h(Bool\))f(->)g
(Bool;)150 4375 y({})h(`subset`)d(s)87 b(=)g(True;)150
4575 y({u})42 b(`subset`)f(s)86 b(=)h(u)43 b(`in`)f(s;)150
4774 y({x)h(|)g(u)g(||)g(v})g(`subset`)d(s)87 b(=)f(\({x)43
b(|)g(u})g(`subset`)d(s\))j(&&)f(\({x)h(|)g(v})g(`subset`)d(s\);)150
5073 y(superset)g(::)j(\(a)g(->)g(Bool\))e(->)i(\(a)g(->)f(Bool\))g(->)
h(Bool;)150 5272 y(s)g(`superset`)d({})86 b(=)h(True;)150
5471 y(s)43 b(`superset`)d({u})86 b(=)g(u)43 b(`in`)f(s;)150
5670 y(s)h(`superset`)d({x)i(|)i(u)f(||)f(v})87 b(=)g(\(s)42
b(`superset`)e({x)j(|)g(u}\))f(&&)h(\(s)g(`superset`)c({x)k(|)g(v}\);)p
eop
%%Page: 30 30
30 29 bop 150 100 a Fk(C)83 b Fi(BOOLEANS)24 b Fk(MODULE)2548
b Fl(30)150 589 y Fi(power)42 b(::)g(\(a)h(->)g(Bool\))e(->)i(\(a)g(->)
g(Bool\))e(->)i(Bool;)150 689 y(--)150 789 y(--)86 b(Power)42
b(set)g(function.)150 988 y(power)g({})86 b(=)h({{}};)150
1187 y(power)42 b({u})85 b(=)i({{},)42 b({u}};)150 1386
y(power)g({x)g(|)h(u)h(||)e(v})87 b(=)324 1486 y({s)43
b(|)g(exists)e([l,r])h(\(l)h(`in`)f(\(power)f({x)h(|)i(u}\))e(&&)h(r)g
(`in`)f(\(power)f({x)i(|)g(v}\))f(&&)629 1586 y(s)i(==)e(l)i(`union`)c
(r\)};)150 1885 y(mapset)h(::)i(\(a)g(->)f(b\))h(->)g(\(a)g(->)f
(Bool\))g(->)h(\(b)f(->)h(Bool\);)150 1984 y(--)150 2084
y(--)86 b(Analogue)41 b(of)h(map)h(for)f(set)g(processing.)150
2283 y(mapset)f(f)i({})87 b(=)f({};)150 2482 y(mapset)41
b(f)i({u})86 b(=)h({f)43 b(u};)150 2682 y(mapset)e(f)i({x)g(|)g(u)g(||)
g(v})86 b(=)h(\(mapset)41 b(f)i({x)g(|)g(u}\))f(`union`)f(\(mapset)g(f)
i({x)g(|)g(v}\);)150 2980 y(in)g(::)g(a)g(->)f(\(a)h(->)g(Bool\))e(->)i
(Bool;)150 3080 y(--)150 3180 y(--)g(Set)f(membership.)150
3379 y(y)h(`in`)f(s)87 b(=)g(s)43 b(y;)150 3479 y(--)150
3578 y(--)86 b(where)42 b(s)h(is)g(not)f(a)h(variable.)150
3877 y(--)86 b(Beta-reduction)150 4076 y(\(\\x)42 b(->)h(y\))g(z)87
b(=)f(y{x/z};)150 4176 y(--)150 4276 y(--)g(where)42
b(z)h(is)g(free)f(for)g(x)h(in)g(y.)150 4475 y({x)g(|)g(y})g(z)86
b(=)h(y{x/z};)150 4575 y(--)150 4674 y(--)f(where)42
b(z)h(is)g(free)f(for)g(x)h(in)g(y.)150 4873 y(})p 150
5039 3511 10 v eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF
Received on Di Jul 01 1997 - 17:53:00 CEST

This archive was generated by hypermail 2.3.0 : Do Feb 01 2024 - 07:15:04 CET