%!PS-Adobe-2.0 %%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software %%Title: smith.dvi %%CreationDate: Wed Jan 12 15:12:49 2000 %%Pages: 16 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips smith.dvi %DVIPSParameters: dpi=600, compressed %DVIPSSource: TeX output 2000.01.12:1512 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 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 IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/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 A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A 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/CharBuilder{save 3 1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]/id Ci N/rw Cw 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 A 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 A gp add/gp X adv}B/nd{ /cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy get A 0 eq{pop 128}{A 255 eq{pop 127}{A 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}]A{bind pop} forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 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/Rx 0 N/Ry 0 N/V{}B/RV/v{ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) (LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: special.pro %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState save N userdict maxlength dict begin/magscale true def normalscale currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{ psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR }{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N /@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X /yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet TeXDict begin 40258431 52099146 1000 600 600 (smith.dvi) @start %DVIPSBitmapFont: Fa cmex10 10 2 /Fa 2 20 df<160F161F163E167C16F8ED01F0ED03E0ED07C0150FED1F801600153E157E 5D4A5A5D14034A5A5D140F4A5AA24AC7FC143E147E5CA2495AA2495AA2495AA2130F5CA2 495AA2133F91C8FCA25B137E13FEA25B1201A25B1203A35B1207A35B120FA35BA2121FA4 5B123FA690C9FC5AAA12FEB3AC127FAA7E7FA6121F7FA4120FA27FA312077FA312037FA3 12017FA212007FA2137E137F7FA280131FA26D7EA2801307A26D7EA26D7EA26D7EA2147E 143E143F6E7EA26E7E1407816E7E1401816E7E157E153E811680ED0FC01507ED03E0ED01 F0ED00F8167C163E161F160F28C66E823D>18 D<12F07E127C7E7E6C7E6C7E6C7E7F6C7E 1200137C137E7F6D7E130F806D7E1303806D7EA26D7E147C147E80A26E7EA26E7EA26E7E A2811403A26E7EA2811400A281157E157FA2811680A2151F16C0A3150F16E0A3150716F0 A31503A216F8A4150116FCA6150016FEAA167FB3AC16FEAA16FC1501A616F81503A416F0 A21507A316E0150FA316C0151FA31680153FA216005DA2157E15FE5DA214015DA24A5AA2 14075DA24A5AA24A5AA24AC7FCA2147E147C14FC495AA2495A5C1307495A5C131F49C8FC 137E137C5B1201485A5B485A485A48C9FC123E5A5A5A28C67E823D>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fb cmsy6 6 2 /Fb 2 49 df0 D48 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fc cmti9 9 53 /Fc 53 122 df<923803FF80031F13F092383F00F803F8133C4A48133E4A48137E17FE4A 5A17FC17384A481300A3141F92C8FCA55C143E011FB612E0A217C09039007E0007147C16 0F1780A214FC4A131F1700A301015C4A133EA3167E0103147C5C1718EEFC1CEEF83C0107 15385C1778177016F0010F15F04AEBF8E01679EE3FC0011FEC0F0093C7FC91C9FCA3133E A21238EA7E3C137CEAFE7812FC485AEA79E0EA3FC0000FCAFC2F4582B42B>12 D39 D<1560EC01E0EC03C0EC0700140E5C143C5C5C495A495A13075C49 C7FC5B131E5B137C137813F85B12015B12035B1207A25B120FA290C8FC5AA2121E123EA3 123C127CA31278A212F8A35AAF12701278A21238A2123C121CA27EA27E6C7E12011B4A75 B71F>I<14301438A28080A2140F801580A2140315C0A4140115E0A81403A415C0A31407 A31580140FA315005CA3141E143EA2143C147CA25CA25C13015C13035C13075C130F91C7 FC131E133E133C5B5B485AA2485A485A48C8FC121E5A12705A5A1B4A7EB71F>I44 DI50 D<010614C090380FC00F91B51280160015FC 4913F015C0D91CFEC7FC91C8FC133C1338A313781370A313F0EBE0FE9038E3FF809038EF 03C03901FC01E001F87FEBF000497F485A5BC8FCA41401A4003C130300FC5CA34A5A5A00 E0495AA24A5A4AC7FC6C137E00705B387801F8383E07F0381FFFC06C90C8FCEA03F82234 78B127>53 D56 DI< 1370EA01FC1203A413F8EA00E01300B0121C127F5AA45A12380E20779F18>I<161C163C A2167C16FCA21501821503A2ED077E150F150E151CA21538A2157015F015E0EC01C0A291 3803807F82EC0700A2140E141E141C5CA25CA25C49B6FCA25B913880003F49C7EA1F80A2 130E131E131C133C13385B13F05B12011203D80FF0EC3FC0D8FFFE903807FFFEA32F367B B539>65 D67 D<0107B612C04915F017 FC903A003F8001FEEE007FEF1F8092C7EA0FC0EF07E05CEF03F0147E170102FE15F8A25C A21301A25CA2130317035CA2130718F04A1407A2130F18E04A140F18C0011F151F18805C EF3F00133F177E91C85AA2494A5A4C5A017E4A5A4C5A01FE4A5A047EC7FC49495A0001EC 0FF8007FB612E0B7C8FC15F835337BB23A>I<0107B712F05B18E0903A003F80001F1707 170392C7FC17015C18C0147EA214FEA24A130EA20101EC1E03041C13804A91C7FC163C13 035E9138F001F891B5FC5B5EECE0011500130F5E5C1707011F01015BEEC00E0280141E92 C7121C133F173C91C812381778495DA2017E14014C5A01FE14074C5A49141F00014AB45A 007FB7FCB8FC94C7FC34337CB234>I<0107B712E05B18C0903A003F80003F170F170792 C7FC17035C1880147EA214FEA25C161C0101EC3C07043813004A91C7FCA2010314781670 4A13F0150349B5FCA25EECE003130F6F5A14C0A2011F13035E1480A2013F90C9FCA291CA FCA25BA2137EA213FEA25B1201387FFFFCB5FCA233337CB232>I<010FB51280A2160090 38003FC05DA292C7FCA25CA2147EA214FEA25CA21301A25CA21303A25CA21307A25CA213 0FA25CA2131FA25CA2133FA291C8FCA25BA2137EA213FEA25B1201B512F8A25C21337BB2 1E>73 D<91381FFFFE5C16FC9138003F80A31600A25D157EA315FE5DA314015DA314035D A314075DA3140F5DA3141F5DA3143F92C7FCA2121C007E5B00FE137EA214FE485BEAF801 00E05B495A387007E038780FC06C48C8FCEA1FFCEA07F0273579B228>I<0107B512C05B A29026003FC0C7FC5DA292C8FCA25CA2147EA214FEA25CA21301A25CA21303A25CA21307 A25CA2130FA25C17E0011F140117C05C1603013F1580160791C7FCEE0F005B5E017E143E A201FE5CED01FC4913030001EC1FF8007FB6FCB7FC5E2B337CB230>76 D<902607FFC0ED7FFC4917FF81D9003F4B1300611803023BED077CA2027BED0EFC610273 151C1838DAF1F01439F071F014E118E10101ED01C36102C1EC0383EF070301031607050E 5BEC80F8171C0107ED380F6102001470A249EDE01FDC01C090C7FC130EEE0380011E017C 5C933807003E011C140EA2013C4A137E187C01385C5E017816FC6F485B1370ED3FC001F0 EC80016000011500D807F81503277FFF803E90B512C0B5EB3C01151C46337BB245>I<90 2607FF8090383FFFC0496D5BA2D9001F913803F8004A6C6D5A6060EC3BF0027B140360EC 71F8A202F11407DAF0FC91C7FC14E0A20101017E5B170E14C0810103151EEE801CEC801F A20107ECC03C030F1338140016E049010713781770010E14F01503011E15F0705A011C13 01A2013C14FD03005B133816FF0178147F5F0170143FA213F070C8FC1201EA07F8267FFF 807FB5140EA23A337BB239>II<0107B6 12C04915F883903A003F8001FEEE003FEF1F8092C713C0170F5C18E0147EA214FEEF1FC0 5CA201011680173F4A1500177E010315FE5F4AEB03F8EE07E00107EC3FC091B6C7FC16F8 02E0C9FC130FA25CA2131FA25CA2133FA291CAFCA25BA2137EA213FEA25B1201387FFFF0 B5FCA233337CB234>I<0107B512FE49ECFFC017F0903A003F8007F8EE01FCEE007E92C7 127F835C1880147EA214FEEF7F005CA2010115FE5F4A13015F01034A5AEE0FC04A495A04 FEC7FC49B512F016C09138E003E0ED01F8010F6D7E167C4A137EA2131FA25CA2013F14FE A291C7FCA24913015E137EEF01C001FE150318805B00011607277FFFF0001400B5ECFE0E EE7E1CC9EA1FF8EE07E032357BB238>82 D<913901FC018091380FFF03023F13C791387E 07EF903A01F801FF0049487E4A7F495A4948133E131F91C7FC5B013E143CA3137E1638A2 93C7FC137FA26D7E14E014FE90381FFFC06D13F86D7F01017F6D6C7E020F7F1400153F6F 7E150FA4120EA2001E5D121CA2151F003C92C7FCA2003E143E5D127E007F5C6D485A9038 C007E039F3F80FC000F0B5C8FC38E03FFC38C00FF029377AB42B>I<0003B812C05A1880 903AF800FC003F260FC001141F0180150F01005B001EEE07001403121C003C4A5BA20038 0107140E127800705CA2020F141E00F0161CC74990C7FCA2141FA25DA2143FA292C9FCA2 5CA2147EA214FEA25CA21301A25CA21303A25CA21307A25C497E001FB512F05AA2323374 B237>I86 DI97 D<137EEA0FFE121F5B1200A35B A21201A25BA21203A25BA21207A2EBC3E0EBCFF8380FDC3EEBF81F497E01E01380EA1FC0 138015C013005AA2123EA2007E131F1580127CA2143F00FC14005AA2147EA25CA2387801 F85C495A6C485A495A6C48C7FCEA0FFCEA03F01A3578B323>I<14FCEB07FF90381F0780 90383E03C0EBFC013801F8033803F0073807E00F13C0120F391F80070091C7FC48C8FCA3 5A127EA312FE5AA4007C14C0EC01E0A2EC03C06CEB0F80EC1F006C137C380F81F03803FF C0C648C7FC1B2278A023>II I<151FED7FC0EDF0E0020113F0EC03E3A2EC07C316E0EDC1C091380FC0005DA4141F92C7 FCA45C143E90381FFFFEA3D9007EC7FC147CA414FC5CA513015CA413035CA413075CA313 0FA25CA3131F91C8FCA35B133E1238EA7E3CA2EAFE7812FC485AEA78E0EA3FC0000FC9FC 244582B418>I<143FECFF80903803E1E6903807C0FF90380F807FEB1F00133E017E133F 49133EA24848137EA24848137CA215FC12074913F8A21401A2D80FC013F0A21403120715 E01407140F141F3903E03FC00001137FEBF0FF38007FCF90381F0F801300141FA21500A2 5C143E1238007E137E5C00FE5B48485A387803E0387C0F80D81FFFC7FCEA07F820317CA0 23>III<1538157C15FCA315701500AB143EEC FF80903801E3C090380383E0EB0701130FEB0E03131C133C133814071378013013C01300 140FA21580A2141FA21500A25CA2143EA2147EA2147CA214FCA25CA21301A25CA213035C 1238387E07C0A238FE0F804848C7FCEAF83EEA787CEA3FF0EA0F801E4283B118>II<133FEA07FF5A13 FEEA007EA3137CA213FCA213F8A21201A213F0A21203A213E0A21207A213C0A2120FA213 80A2121FA21300A25AA2123EA2127EA2127C1318EAFC1C133CEAF838A21378137012F013 F0EAF8E01279EA3FC0EA0F00103579B314>I<2703C003F8137F3C0FF00FFE01FFC03C1E 783C1F07C1E03C1C7CF00F8F01F03B3C3DE0079E0026383FC001FC7FD97F805B00700100 5B5E137ED8F0FC90380FC00100E05FD860F8148012000001021F130360491400A200034A 13076049013E130FF081800007027EEC83C0051F138049017C1403A2000F02FC1407053E 130049495CEF1E0E001F01015D183C010049EB0FF0000E6D48EB03E03A227AA03F>I<39 03C007F0390FF01FFC391E787C1E391C7CF01F393C3DE00F26383FC01380EB7F80007813 00EA707EA2D8F0FC131F00E01500EA60F8120000015C153E5BA20003147E157C4913FCED F8180007153C0201133801C013F0A2000F1578EDE070018014F016E0001FECE1C015E390 C7EAFF00000E143E26227AA02B>I<14FCEB07FF90381F07C090383E03E09038FC01F0EA 01F83903F000F8485A5B120F484813FCA248C7FCA214014814F8127EA2140300FE14F05A A2EC07E0A2007CEB0FC01580141FEC3F006C137E5C381F01F0380F83E03803FF80D800FC C7FC1E2278A027>I<011E137C90387F81FF9039F3C387C09039E3EF03E03901E1FE01D9 C1FC13F0EBC3F8000313F0018314F814E0EA07871307000313C01200010F130316F01480 A2011F130716E01400A249EB0FC0A2013EEB1F80A2017EEB3F00017F133E5D5D9038FF81 F09038FDC3E09038F8FF80027EC7FC000190C8FCA25BA21203A25BA21207A25BB5FCA325 307FA027>I<903803F01890380FF83890383E1C7890387C0EF89038F807F0EA01F0EA03 E000071303D80FC013E0A2EA1F801407D83F0013C0A348130F007E1480A300FE131F4814 00A35C143E147E127C14FE495AEA3C03EA3E07EA1F0E3807FCF8EA01F0C7FC13015CA313 035CA21307A25C48B5FCA25C1D3078A023>I<3903C00FC0390FF03FF0391E78F078391C 7DE03C393C3FC0FC00381380EB7F00007814F8D8707E13701500EAF0FC12E0EA60F81200 1201A25BA21203A25BA21207A25BA2120FA25BA2121FA290C8FC120E1E227AA020>II<1303EB0F80A3131FA21400A2 5BA2133EA2137EA2137C387FFFF8A2B5FC3800F800A21201A25BA21203A25BA21207A25B A2120FA25B1460001F13F014E01300130114C01303001E1380EB07005BEA0F1EEA07F8EA 01E015307AAE19>II<01F01338D803FC13FCEA0F1E120E121C12 3C0038147CEA783E0070143CA2137ED8F07C1338EA60FCC65A1578000114705BA215F000 0314E05BA2EC01C0A2EBC003158014071500EBE00EA26C6C5A3800F878EB7FE0EB1F801E 227AA023>II<01 1F137C90387FC1FF3A01E1E787803A03C0F703C0903880FE0FEA07004813FC000E158000 1E9038F80700001C91C7FC1301003C5B1218120013035CA31307A25C1506010F130F150E 14800038141ED87C1F131C00FC143C1538013F5B39F07FC0E03970F3C3C0393FE1FF8026 0F807EC7FC22227CA023>I<13F0D803FC1307D80F1E130F000E141F121C123C0038143F D8783E133E1270A2017E137ED8F07C137CEA60FCC65A15FC000114F85BA21401000314F0 13E0A2140315E0EA07C0A20003130715C0EBE00F141F0001133F9038F07F8038007FEFEB 1F8FEB001F1500A25C003E133E007E137E147C5C007C5BEA7001495A38380780D83C1FC7 FCEA0FFCEA07F020317AA025>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fd cmsy9 9 16 /Fd 16 107 df<007FB712FCB812FEA26C16FC2F047A943C>0 D<123C127E12FFA4127E 123C08087A9615>I8 D<171C177EEE01FEEE07FCEE1FF0EE7FC0923801FF00ED07FC ED1FF0ED7FC04A48C7FCEC07FCEC1FF0EC7FC04948C8FCEB07FCEB1FF0EB7FC04848C9FC EA07FCEA1FF0EA7FC048CAFCA2EA7FC0EA1FF0EA07FCEA01FF38007FC0EB1FF0EB07FCEB 01FF9038007FC0EC1FF0EC07FCEC01FF9138007FC0ED1FF0ED07FCED01FF9238007FC0EE 1FF0EE07FCEE01FEEE007E171C1700AC007FB712FCB812FEA26C16FC2F3E7AB03C>20 D<187018F0A2841878A2187C183C183E84A2727E727E85727E727E727E197F007FBA12C0 BB12F0A26C19C0CCEA7F0019FC4E5A4E5A4E5A614E5A4EC7FCA2183E183C187C1878A218 F860A2187044287CA64D>33 D<91383FFFF849B512FC1307011F14F8D93FE0C7FC01FFC8 FCEA01FCEA03F0485A485A5B48C9FC5A123E5AA21278A212F8A25AB712F816FCA216F800 F0C9FC7EA21278A2127CA27E123F7E6C7E7F6C7E6C7EEA01FC6CB4FCEB3FE06DB512F801 0714FC1301D9003F13F8262E7AA933>50 D<1630167816F8A2ED01F0A2ED03E0A2ED07C0 A2ED0F80A2ED1F00A2153EA25DA25DA24A5AA24A5AA24A5AA24A5AA24AC7FCA2143EA25C A25CA2495AA2495AA2495AA2495AA249C8FCA2133EA25BA25BA2485AA2485AA2485AA248 5AA248C9FCA2123EA25AA25AA25A1260254675B500>54 D<12F0AC12F812FCA212F812F0 AC061C7CA000>I<0060ED018000F0ED03C06C1507A200781680007C150FA2003C160000 3E5DA26C153EA26C153C6D147CA26C6C5CA200035D90B6FCA26C5DA29038F000036C6C49 5AA201785C017C130FA2013C91C7FC013E5BA26D133EA26D133CEC807CA201071378ECC0 F8A2903803E1F0A201015B14F3A26DB45AA26E5AA36EC8FCA3141E140C2A3680B32B>I< EC0180EC03C0A21407EB0FE790383FFF80EBF83F3801E00FEA03C0D8078013C0390F001F E0A24814F0001E133E003E14F8143CA248EB7C7CA2147814F8A200FCEBF07EA21301A214 E01303A214C0A21307A21480A2130FA214005BA2131EA2D87C3E137CA2133C137C007E14 FCD83E7813F8A213F8001E14F0381FF001000F14E01403D807E013C00003EB0780EC0F00 EBF83EEBFFFC3807CFE001C0C7FC5BA26CC8FC1F407DB926>59 D<126012F0B3A5B712F8 16FCA216F800F0C9FCB3A5126026347CB32F>96 D102 D<12FCEAFFC0EA07F0EA01FC6C7E137F7F80131FB3A580130F6D7E6D7EEB01FC9038007F C0EC1FE0EC7FC0903801FC00EB03F0495A495A131F5CB3A5133F91C7FC5B13FE485AEA07 F0EAFFC000FCC8FC1B4B7BB726>II<126012F07EA212 78127CA27EA2121E121FA26C7EA212077FA26C7EA212017FA26C7EA21378137CA27FA213 1E131FA2EB0F80A2130714C0A41480130FA2EB1F00A2131E133EA25BA2137813F8A2485A A25B1203A2485AA25B120FA248C7FCA2121E123EA25AA2127812F8A25A1260124A7CB71E >I<126012F0B3B3B3B31260044B78B715>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fe cmmi9 9 23 /Fe 23 121 df<010FB712F0A218E0903A003FC0001F170317015D1700147F18C092C8FC A25CA25CA20101150118804A91C7FCA21303A25CA21307A25CA2130FA25CA2131FA25CA2 133FA25CA2137FA291CAFCA25BA25B487EB6FCA334337DB22F>0 D<17C04C7E16031607160F83161F163F167FEE67F816C7ED01871503EE03FC1506150C15 1C92381801FE1530156015E04B6C7E4A5A4AC7FC4A80020615805C5C0238143F023015C0 5C5C0101151F4A15E049C8FC1306010E150F010C16F05B5B01701507016016F85B485A00 03160390C913FC12065A001FB8FC18FE5A5AB9FC18FF38367CB540>I12 D<903801FF80130F013F130001FFC7FCEA01F8485A485A485A485A48C8FCA2127E387FFF F880B5FC00FCC8FCA9127CA27EA26C1307380F800E3803E07C3801FFF038003F8019217D 9F1F>15 D<3903E001FC390FF807FF3A1C7C1E0FC0001890387807E039383EE00338303F C0D97F8013F0127000601300137E00E01407D8C0FE14E0EA40FC1200150F12014914C0A2 151F1203491480A2153F1207491400A25D120F49137EA215FE121F495B0007C7FCC71201 A25DA21403A25DA21407A25DA2140FA25DEC038024327EA026>17 D<137013FC1201A25BA212035BA312075BA3120F5BA2121F5BA2123FEB00101438481330 127E147014E04813C0EA7C01EB0380EB0F00EA3C3CEA1FF8EA07C015227DA01B>19 D26 D<017FB512F048B612F85A5A4815E0261F0070C7FC123C1238485B126012E0EA0001A349 5AA31307A25C130FA3131FA291C8FC5BA35BA2137E133C25217E9F22>28 D<123C127E12FFA4127E123C08087A8715>58 D<123C127EB4FCA21380A2127F123D1201 A412031300A25A1206120E120C121C5A5A126009177A8715>I<1530157815F8A215F014 01A215E01403A215C01407A21580140FA215005CA2143EA2143C147CA2147814F8A25C13 01A25C1303A25C1307A2495AA291C7FC5BA2131E133EA2133C137CA2137813F8A25B1201 A25B1203A2485AA25B120FA290C8FC5AA2121E123EA2123C127CA2127812F8A25A12601D 4B7CB726>61 D67 D<010FB612F017FE83903B003FC0007FC0EF1FE0EF07F05DEF03F8147FA292C713FCA25C EF07F85CA2010116F0170F4A15E0EF1FC00103ED3F80EF7F004A14FEEE03FC0107EC1FF0 91B612C04CC7FC02F0C9FC130FA25CA2131FA25CA2133FA25CA2137FA291CAFCA25BA25B 1201B512FCA336337DB231>80 D<03FF13180207EBE038021FEBF87891397F00FCF802FC EB1FF0D901F0130F4948130749481303494814E0A249C71201A2013E15C0A3137E1780A2 017F91C7FC8080EB3FF014FF15F06D13FE6D6D7E6D806D80010080020F7F1400150F6F7E 150315011500A2120CA2001C5D1218A2150100385D003C14035E4B5A007E4A5A007F141F 6D49C7FCD87BE0137C39F9FC03F839F07FFFE0D8E01F138026C003FEC8FC2D377CB42F> 83 D<0103B539C007FFFC5BA29026000FFCC713804BECFC00020715F0606E6C495A4D5A 02014AC7FC6F130E5F6E6C5B5F92387F80605F92383F818004C3C8FC16C6ED1FEC16F86F 5AA2150782A282150FED1DFE153915704B7E4A5A4A486C7E150002066D7E5C4A131F4A80 5C4A6D7E495A49C76C7E1306010E1403013C81137CD803FE4A7EB500C090387FFFFCA260 3E337EB23F>88 D96 D<147F903803FFC090380FC0F090383F0038137C4913F83801F0013803E0031207EA 0FC090388001F0001F90C7FC123F90C8FCA25A127EA45AA3127C150C151C15386C147015 E06CEB03C0390F800F003807C07E3801FFF038007F801E227EA021>99 D102 D105 D110 D116 D<01F0130ED803FC131F D8071EEB3F80EA0E1F121C0038EB801F0030140F013F130700701300006014035BD8E07E 14001240EA00FE495B000114065BA2150E0003140C5B151C15181538491330157015606D 13E04A5A0001495A6D48C7FC3800FC1EEB3FF8EB07E021227EA025>118 D<90391F801F8090397FE07FE09039E0F0E0703A01C0F9C0F83903807D833807007F000E 1403000C15F0001C137E0018EC01C002FEC7FC00385B1210C7FC13015CA31303A25C1640 010714E016C0001C5B007E1401010F148000FE1403011FEB0700011B130E39F839F01C39 7070F878393FE07FE0390F801F8025227EA02C>120 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Ff cmbx10 10 36 /Ff 36 122 df<141C143C14F8EB01F0EB03E01307EB0FC0EB1F8014005B137E13FE5B12 015B1203A2485AA2120F5B121FA25B123FA4485AA512FFB1127FA56C7EA4121F7FA2120F 7F1207A26C7EA212017F12007F137E7F7F1480EB0FC0EB07E01303EB01F0EB00F8143C14 1C165377BD25>40 D<12E07E127C7E7E7F6C7E6C7E12037F6C7E7F12007F137E137FA2EB 3F80A214C0131F14E0A2130F14F0A4EB07F8A514FCB114F8A5EB0FF0A414E0131FA214C0 133F1480A2EB7F00A2137E13FE5B12015B485A5B1207485A485A90C7FC123E5A12F05A16 537BBD25>I44 DII<141E143E14FE1307133FB5FCA313CFEA000FB3B3A6007FB61280A42137 79B630>49 DI< EB03FF011F13F0017F13FC3901FC07FF2603F003138048486C13C0496C13E0EA0FF001FC 14F0121F7FA56C4814E0A23803F001C714C04A138016004A5A4A5AEC3FF090380FFFC092 C7FC15F090380007FE913801FF806E13C016E0ED7FF016F816FC153FA216FEEA1FC0487E 487E487EA416FCA249EB7FF8127F01C0EBFFF06C4814E06C6C4813C0260FFC0713806CB6 1200000114FC6C6C13F0010790C7FC27387CB630>II67 DI73 D76 D 78 D80 D83 D<003FB91280A4D9F800EBF003D87FC09238007FC049161F 007EC7150FA2007C1707A200781703A400F818E0481701A4C892C7FCB3AE010FB7FCA43B 387DB742>III97 D<903801FFC0010F13FC 017F13FFD9FF8013802603FE0013C048485AEA0FF8121F13F0123F6E13804848EB7F0015 1C92C7FC12FFA9127FA27F123FED01E06C7E15036C6CEB07C06C6C14806C6C131FC69038 C07E006DB45A010F13F00101138023257DA42A>99 DI<903803FF80011F13F0017F13FC3901FF83FE3A 03FE007F804848133F484814C0001FEC1FE05B003FEC0FF0A2485A16F8150712FFA290B6 FCA301E0C8FCA4127FA36C7E1678121F6C6C14F86D14F000071403D801FFEB0FE06C9038 C07FC06DB51200010F13FC010113E025257DA42C>I<161FD907FEEBFFC090387FFFE348 B6EAEFE02607FE07138F260FF801131F48486C138F003F15CF4990387FC7C0EEC000007F 81A6003F5DA26D13FF001F5D6C6C4890C7FC3907FE07FE48B512F86D13E0261E07FEC8FC 90CAFCA2123E123F7F6C7E90B512F8EDFF8016E06C15F86C816C815A001F81393FC0000F 48C8138048157F5A163FA36C157F6C16006D5C6C6C495AD81FF0EB07FCD807FEEB3FF000 01B612C06C6C91C7FC010713F02B377DA530>103 D<13FFB5FCA412077EAFED7FC09138 03FFF8020F13FE91381F03FFDA3C01138014784A7E4A14C05CA25CA291C7FCB3A3B5D8FC 3F13FFA4303A7DB935>II<13FFB5FCA412077EB3B3ACB512FCA4163A 7DB91B>108 D<01FED97FE0EB0FFC00FF902601FFFC90383FFF80020701FF90B512E0DA 1F81903983F03FF0DA3C00903887801F000749DACF007F00034914DE6D48D97FFC6D7E4A 5CA24A5CA291C75BB3A3B5D8FC1FB50083B512F0A44C257DA451>I<01FEEB7FC000FF90 3803FFF8020F13FE91381F03FFDA3C011380000713780003497E6D4814C05CA25CA291C7 FCB3A3B5D8FC3F13FFA430257DA435>I<903801FFC0010F13F8017F13FFD9FF807F3A03 FE003FE048486D7E48486D7E48486D7EA2003F81491303007F81A300FF1680A9007F1600 A3003F5D6D1307001F5DA26C6C495A6C6C495A6C6C495A6C6C6CB45A6C6CB5C7FC011F13 FC010113C029257DA430>I<9039FF01FF80B5000F13F0023F13FC9138FE07FFDAF00113 800007496C13C06C0180EB7FE091C713F0EE3FF8A2EE1FFCA3EE0FFEAA17FC161FA217F8 163F17F06E137F6E14E06EEBFFC0DAF00313809139FC07FE0091383FFFF8020F13E00203 90C7FC91C9FCACB512FCA42F357EA435>I<9038FE03F000FFEB0FFEEC3FFF91387C7F80 9138F8FFC000075B6C6C5A5CA29138807F80ED3F00150C92C7FC91C8FCB3A2B512FEA422 257EA427>114 D<90383FF0383903FFFEF8000F13FF381FC00F383F0003007E1301007C 130012FC15787E7E6D130013FCEBFFE06C13FCECFF806C14C06C14F06C14F81203C614FC 131F9038007FFE140700F0130114007E157E7E157C6C14FC6C14F8EB80019038F007F090 B512C000F8140038E01FF81F257DA426>I<130FA55BA45BA25B5BA25A1207001FEBFFE0 B6FCA3000390C7FCB21578A815F86CEB80F014816CEBC3E090383FFFC06D1380903803FE 001D357EB425>I<01FFEC3FC0B5EB3FFFA4000714016C80B3A35DA25DA26C5C6E4813E0 6CD9C03E13FF90387FFFFC011F13F00103138030257DA435>I121 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fg cmsy7 7 2 /Fg 2 49 df0 D<13E0EA01F0EA03F8A3EA07F0A313E0A2120F 13C0A3EA1F80A21300A25A123EA35AA3127812F8A25A12100D1E7D9F13>48 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fh cmtt9 9 24 /Fh 24 121 df<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A728927>46 D<1538157C15FCA2140115F8140315F0140715E0140F15C0141F1580143F1500A25C147E 14FE5C13015C13035C13075C130F5CA2131F5C133F91C7FC5B137E13FE5B12015B12035B A212075B120F5B121F5B123F90C8FC5A127E12FE5AA25A12781E3A7CB327>II<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCAC121EEA7F80A2EAFFC0A4 EA7F80A2EA1E000A20729F27>58 D<3803FFC0000F13F04813FC4813FF811380EC1FC038 1F000F000480C71207A2EB0FFF137F0003B5FC120F5A383FFC07EA7FC0130012FE5AA46C 130F007F131FEBC0FF6CB612806C15C07E000313F1C69038807F8022207C9F27>97 D99 DIII104 D<130F497E497EA46D5A6DC7FC90 C8FCA7383FFF80487FA37EEA000FB3A4007FB512F0B6FC15F815F07E1D2F7BAE27>I<14 3C147E14FFA4147E143C1400A73801FFFE4813FFA37EC7123FB3B0147E1238007C13FE38 FE01FC1303B512F814F06C13E06C13803807FE0018407CAE27>II<387FFF80B57EA37EEA000FB3B200 7FB512F8B612FCA36C14F81E2E7CAD27>I<397F07C01F3AFF9FF07FC09039FFF9FFE091 B57E7E3A0FFC7FF1F89038F03FC001E0138001C01300A3EB803EB03A7FF0FFC3FF486C01 E3138001F913E701F813E36C4801C313002920819F27>I<387FE07F39FFF1FFC001F713 F090B5FC6C80000313C1EC01FCEBFE005B5BA25BB03A7FFF83FFE0B500C713F0A36C0183 13E024207F9F27>II<387F E0FFD8FFF313C090B512F0816C800003EB81FE49C67E49EB3F8049131F16C049130FA216 E01507A6150F16C07F151F6DEB3F80157F6DEBFF009038FF83FEECFFFC5D5D01F313C0D9 F0FEC7FC91C8FCAC387FFF80B57EA36C5B23317F9F27>I<397FFC03FC39FFFE0FFF023F 13804A13C0007F90B5FC39007FFE1F14F89138F00F809138E002004AC7FC5CA291C8FCA2 137EAD007FB57EB67EA36C5C22207E9F27>114 D<9038FFF3800007EBFFC0121F5A5AEB 803F38FC000F5AA2EC07806C90C7FCEA7F8013FC383FFFF06C13FC000713FF00011480D8 000F13C09038003FE014070078EB03F000FC1301A27E14036CEB07E0EBE01F90B512C015 80150000FB13FC38707FF01C207B9F27>I<133C137EA8007FB512F0B612F8A36C14F0D8 007EC7FCAE1518157EA415FE6D13FC1483ECFFF86D13F06D13E0010313C0010013001F29 7EA827>I<397FE01FF8486C487EA3007F131F00031300B21401A21403EBFC0F6CB612E0 16F07EEB3FFE90390FF87FE024207F9F27>I<3A7FFE07FFE000FF15F06D5A497E007F15 E03A0F80001F00A36D5B0007143EA414F0EBC1F83903E3FC7CA4EBE79EA200011478A301 F713F8A2EBFF0F6C5CA3EBFE0790387C03E024207F9F27>119 D<393FFC1FFF486C5A16 8016006C487E3901F807E06C6C485A4A5A017E90C7FC6D5AEB1F7E5C6D5A13076D5A5C80 497E130F497E143EEB3E3FEB7E1F90387C0F8001F87F00016D7E3803F0033A7FFE1FFF80 A2B54813C06C486C1380A222207E9F27>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fi cmr6 6 5 /Fi 5 53 df<1438B2B712FEA3C70038C7FCB227277C9F2F>43 D<13E01201120712FF12 F91201B3A7487EB512C0A212217AA01E>49 D I<13FF000313C0380F03E0381C00F014F8003E13FC147CA2001E13FC120CC712F8A2EB01 F0EB03E0EB0FC03801FF00A2380003E0EB00F01478147C143E143F1230127812FCA2143E 48137E0060137C003813F8381E03F0380FFFC00001130018227DA01E>I<14E01301A213 031307A2130D131D13391331136113E113C1EA01811203EA07011206120C121C12181230 127012E0B6FCA2380001E0A6EB03F0EB3FFFA218227DA11E>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fj cmmi7 7 10 /Fj 10 120 df19 D<1403A21406A45CA45CA4903807FF 80011F13E090387C30F0D801F0133C3803C060D80780131ED80F00131F48140F003E13C0 A25AA239F801801FA3151E903803003E153C157C1578D8780613F0EC01E0003CEB03C000 1EEB0F80390F0C3E003807FFF8000113E0D8000CC7FC5BA45BA45BA220347CA728>30 D<16E00003140148EC03F0120E000C1401001C14005A003015701660481330147014F048 15C0A25C0101EB018014C015031600D8E0035B903807E00E39F01FF03E39FFFEFFFC6C48 6C5AD83FF85B391FE03FE0390F800F80241B7E992A>33 D102 D<130E131F5BA2133E131C90C7FCA7EA03E0487EEA0C78EA187C1230A2 12605B12C0A2EA01F0A3485AA2485AA2EBC180EA0F81A2381F0300A213066C5A131CEA07 F06C5A11287DA617>105 D<3907801FC0390FE07FF03918F0E0F83930F1807CEBFB00D8 60FE133C5B5B00C1147C5B1201A248485BA34A5AEA07C01660EC03E0A23A0F8007C0C0A2 EDC180913803C300D81F0013C7EC01FE000EEB00F8231B7D9929>110 DI115 D<3903E001C03907F003E0380C7807 EA187C0030130314011260EBF80000C014C0A2EA01F0A2EC0180EA03E0A2EC0300EA07C0 A21406A25CA200035B6D5A3801F0E06CB45A013FC7FC1B1B7D9921>118 D I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fk cmr7 7 5 /Fk 5 53 df<140EB3A2B812E0A3C7000EC8FCB3A22B2B7DA333>43 D<13381378EA01F8121F12FE12E01200B3AB487EB512F8A215267BA521>49 D<13FF000313E0380E03F0381800F848137C48137E00787F12FC6CEB1F80A4127CC7FC15 005C143E147E147C5C495A495A5C495A010EC7FC5B5B903870018013E0EA018039030003 0012065A001FB5FC5A485BB5FCA219267DA521>I<13FF000313E0380F01F8381C007C00 30137E003C133E007E133FA4123CC7123E147E147C5C495AEB07E03801FF8091C7FC3800 01E06D7E147C80143F801580A21238127C12FEA21500485B0078133E00705B6C5B381F01 F03807FFC0C690C7FC19277DA521>I<1438A2147814F81301A2130313071306130C131C 131813301370136013C012011380EA03005A120E120C121C5A12305A12E0B612E0A2C7EA F800A7497E90383FFFE0A21B277EA621>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fl cmti10 10 27 /Fl 27 122 df<387FFFF8A2B5FCA214F0150579941E>45 D<120EEA3F80127F12FFA313 00127E123C0909778819>I<0107B712FEA3903A000FF000074B1300187C021F153CA25D A2143FA25D1838147FA292C8FCEE03804A130718004A91C7FCA201015CA24A131E163E01 0314FE91B5FC5EA2903807F800167C4A1378A2130FA24A1370A2011F14F0A24A90C8FCA2 133FA25CA2137FA291CAFCA25BA25B487EB6FCA337397BB836>70 D<0103B512F8A390390007F8005DA2140FA25DA2141FA25DA2143FA25DA2147FA292C7FC A25CA25CA21301A25CA21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA25CA213 7FA291C8FC497EB6FCA25C25397CB820>73 D<92383FC00E913901FFF01C020713FC9139 1FC07E3C91393F001F7C027CEB0FF84A130749481303495A4948EB01F0A2495AA2011F15 E091C7FCA34915C0A36E90C7FCA2806D7E14FCECFF806D13F015FE6D6D7E6D14E0010080 023F7F14079138007FFC150F15031501A21500A2167C120EA3001E15FC5EA3003E4A5AA2 4B5AA2007F4A5A4B5A6D49C7FC6D133ED8F9F013FC39F8FC03F839F07FFFE0D8E01F1380 26C003FCC8FC2F3D7ABA2F>83 D<0007B812E0A25AD9F800EB001F01C049EB07C0485AD9 00011403121E001C5C003C17801403123800785C00701607140700F01700485CA2140FC7 92C7FC5DA2141FA25DA2143FA25DA2147FA292C9FCA25CA25CA21301A25CA21303A25CA2 1307A25CA2130FA25CEB3FF0007FB512F8B6FCA2333971B83B>I<14F8EB07FE90381F87 1C90383E03FE137CEBF801120148486C5A485A120FEBC001001F5CA2EA3F801403007F5C 1300A21407485C5AA2140F5D48ECC1C0A2141F15831680143F1587007C017F1300ECFF07 6C485B9038038F8E391F0F079E3907FE03FC3901F000F0222677A42A>97 D<147F903803FFC090380FC1E090381F0070017E13784913383901F801F83803F0031207 13E0120FD81FC013F091C7FC485AA2127F90C8FCA35A5AA45AA3153015381578007C14F0 007EEB01E0003EEB03C0EC0F806CEB3E00380F81F83803FFE0C690C7FC1D2677A426>99 DI<147F903803FFC090380FC1E090383F00F0017E13785B485A485A485A120F4913 F8001F14F0383F8001EC07E0EC1F80397F81FF00EBFFF891C7FC90C8FC5A5AA55AA21530 007C14381578007E14F0003EEB01E0EC03C06CEB0F806CEB3E00380781F83803FFE0C690 C7FC1D2677A426>IIIII<150E153F157FA3157E151C 1500ABEC1F80EC7FC0ECF1F0EB01C090380380F813071401130F130E131EEB1C03133C01 3813F0A2EB0007A215E0A2140FA215C0A2141FA21580A2143FA21500A25CA2147EA214FE A25CA21301A25CA213035C121C387E07E0A238FE0FC05C49C7FCEAF83EEA787CEA3FF0EA 0FC0204883B619>IIII I<147F903803FFC090380FC1F090381F00F8017E137C5B4848137E4848133E0007143F5B 120F485AA2485A157F127F90C7FCA215FF5A4814FEA2140115FC5AEC03F8A2EC07F015E0 140F007C14C0007EEB1F80003EEB3F00147E6C13F8380F83F03803FFC0C648C7FC202677 A42A>I<9039078007C090391FE03FF090393CF0787C903938F8E03E9038787FC0017049 7EECFF00D9F0FE148013E05CEA01E113C15CA2D80003143FA25CA20107147FA24A1400A2 010F5C5E5C4B5A131F5EEC80035E013F495A6E485A5E6E48C7FC017F133EEC70FC90387E 3FF0EC0F8001FEC9FCA25BA21201A25BA21203A25B1207B512C0A3293580A42A>I<3903 C003F0390FF01FFC391E783C0F381C7C703A3C3EE03F8038383FC0EB7F80007815000070 1300151CD8F07E90C7FCEAE0FE5BA2120012015BA312035BA312075BA3120F5BA3121F5B A3123F90C9FC120E212679A423>114 D<14FE903807FF8090380F83C090383E00E04913 F00178137001F813F00001130313F0A215E00003EB01C06DC7FC7FEBFFC06C13F814FE6C 7F6D13807F010F13C01300143F141F140F123E127E00FE1480A348EB1F0012E06C133E00 705B6C5B381E03E06CB45AD801FEC7FC1C267AA422>II<13F8D803FEEB01C0D8078FEB03E0390E0F8007121E121C 0038140F131F007815C01270013F131F00F0130000E015805BD8007E133FA201FE14005B 5D120149137EA215FE120349EBFC0EA20201131E161C15F813E0163CD9F0031338140700 01ECF07091381EF8F03A00F83C78E090393FF03FC090390FC00F00272679A42D>I<01F0 130ED803FC133FD8071EEB7F80EA0E1F121C123C0038143F49131F0070140FA25BD8F07E 140000E08013FEC6485B150E12015B151E0003141C5BA2153C000714385B5DA35DA24A5A 140300035C6D48C7FC0001130E3800F83CEB7FF8EB0FC0212679A426>I<13F0D803FCEB 01C0D8071EEB03E0D80E1F1307121C123C0038140F4914C01270A249131FD8F07E148012 E013FEC648133F160012015B5D0003147E5BA215FE00075C5BA214015DA314035D140700 03130FEBF01F3901F87FE038007FF7EB1FC7EB000F5DA2141F003F5C48133F92C7FC147E 147C007E13FC387001F8EB03E06C485A383C1F80D80FFEC8FCEA03F0233679A428>121 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fm cmmi6 6 10 /Fm 10 120 df<1203EA0780A3EA0F00A4121EA35AA3EA78041306130C12F013181330EA 70E0EA7FC0EA1F000F177C9517>19 D<140C5CA45CA45CA4EB0FFE90387FFF809038F0C3 C03903C0C1E039078180F0D80F011370001E1478123CEB03001278A3D8F00613F0A215E0 140139700C03C0007814800038EB0700003C131E381E187C3807FFF06C13C0D80018C7FC 5BA45BA45B1D2E7DA225>30 D<150E0007141F1206120E48140F121848140714C0D86001 13061303A3EC800CEAE007EC0018153838F00F8039701FC0F0007FB512E001F913C0EA3F F1D81FE01300380F803E20177E9527>33 D<1308A4131CA500C0EB0180397FBEFF00381F FFFC000713F0000113C06C6CC7FCA2497E13F73801E3C013C1380380E0EB006000067F00 041310487F19197D9820>63 D<140FEC3FC0EC71E014E3A2010113C0ECE180ECE000495A A5495AA2EBFFFEA2EB0780A249C7FCA5131EA65BA55BA31370A2EA38F0EA78E012F8EAF9 C0EA7180007FC8FC121E1B2F7CA31E>102 D<1338137CA2137813701300A7EA0780EA1F C0EA38E01230EA60F0EAC1E0A3EA03C0A3EA0780A2EA0F0013041306EA1E0CA21318121C EA1E70EA0FE0EA07800F237DA116>105 D<000F017E13FC3A1F81FF83FF3B31C383C707 803A61EE03CC039026EC01F813C0D8C1F813F013F001E013E00003903903C0078013C0A2 EE0F003907800780A2EE1E041706270F000F00130C163C1718A2001E011EEB1C70EE1FE0 000C010CEB07802F177D9536>109 D<000F13FC381FC3FF3931C707803861EC0301F813 C0EAC1F0A213E03903C00780A3EC0F00EA0780A2EC1E041506D80F00130C143C15181538 001EEB1C70EC1FE0000CEB07801F177D9526>I<3807800E380FE01FEA38F01230006013 0F12C01407EAC1E000011306EA03C0A33807800CA214081418A21430146014C0EA03C138 01FF00EA007E18177D951F>118 DI E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fn cmsy10 10 15 /Fn 15 106 df<007FB81280B912C0A26C17803204799641>0 D<121C127FEAFF80A5EA 7F00121C0909799917>I8 D20 D<181EA4181F84A285180785727EA2727E727E85197E85F11F80F10FC0F107F0007FBA12 FCBCFCA26C19FCCCEA07F0F10FC0F11F80F13F00197E61614E5A4E5AA24E5A61180F96C7 FCA260181EA4482C7BAA53>33 D<91381FFFFE91B6FC1303010F14FED91FF0C7FCEB7F80 01FEC8FCEA01F8485A485A485A5B48C9FCA2123EA25AA2127812F8A25AA2B712FE16FFA2 16FE00F0C9FCA27EA21278127CA27EA27EA26C7E7F6C7E6C7E6C7EEA00FEEB7F80EB1FF0 6DB512FE010314FF1300021F13FE283279AD37>50 D54 D<126012F0AD12FCA412F0AD126006207BA400>I<0060161800F0163C6C167CA2 00781678007C16F8A2003C16F0003E1501A26CED03E0A26C16C06D1407A2000716806D14 0FA26C6CEC1F00A26CB612FEA36C5D01F8C7127CA2017C5CA2013C5C013E1301A2011E5C 011F1303A26D6C485AA201075CECC00FA2010391C7FC6E5AA2903801F03EA20100133CEC F87CA2EC7878EC7CF8A2EC3FF0A26E5AA36E5AA36E5A6EC8FC2E3C80B92F>I<156015F0 A21401EB07F190383FFFE0EB7C1FEBF00748486C5AD803C07F4848487ED80F007FA24849 7E001E14BC153C003E143E141FA248EB1E1F143EA2143CA2147C00FC1580147814F8A214 F0A21301A214E01303A214C0A21307A21480A2130FA214005B007C1500131EA2D87E3E5B A2D83E3C133E137CA21378001F5C13F8000F14784913F800075C0003495AEBE0033901F0 07802603FC1FC7FCEBFFFEEBC7F0D807C0C8FCA25BA26CC9FC21477CBF2A>59 D<126012F0B3A8B712FE16FFA216FE00F0C9FCB3A81260283A7BB933>96 D102 D<12FCEAFFC0EA07F0EA01FCEA007E7F80131F 80130FB3A7801307806D7E6D7EEB007EEC1FF0EC07F8EC1FF0EC7E00495A495A495A5C13 0F5CB3A7131F5C133F91C7FC137E485AEA07F0EAFFC000FCC8FC1D537ABD2A>I<14C0EB 01E01303A214C01307A21480130FA2EB1F00A2131E133EA25BA2137813F8A2485AA25B12 03A25B1207A2485AA290C7FC5AA2123EA2123C127CA2127812F8A41278127CA2123C123E A27EA27E7FA26C7EA212037FA212017FA26C7EA21378137CA27FA2131E131FA2EB0F80A2 130714C0A2130314E0A21301EB00C0135278BD20>I<126012F07EA21278127CA2123C12 3EA27EA27E7FA26C7EA212037FA26C7EA212007FA21378137CA27FA2131E131FA2EB0F80 A2130714C0A2130314E0A414C01307A21480130FA2EB1F00A2131E133EA25BA2137813F8 A25B1201A2485AA25B1207A2485AA290C7FC5AA2123EA2123C127CA2127812F8A25A1260 13527CBD20>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fo cmtt10 10 31 /Fo 31 123 df<143814FC13011303EB07F8EB0FF0EB1FC0EB3F80EB7F0013FE485A485A 5B12075B120F5B485AA2123F90C7FCA25A127EA312FE5AAC7E127EA3127F7EA27F121FA2 6C7E7F12077F12037F6C7E6C7E137FEB3F80EB1FC0EB0FF0EB07F8EB03FC130113001438 164272B92C>40 D<127012FC7E7E6C7E6C7EEA0FE06C7E6C7E6C7E6C7E137F7F1480131F 14C0130FEB07E0A214F01303A214F81301A314FC1300AC130114F8A3130314F0A2130714 E0A2EB0FC0131F1480133F14005B13FE485A485A485A485AEA3FC0485A48C7FC5A5A1270 164279B92C>II44 D<1507ED0F80151FA2153F16005D157E15 FE5D14015D14035DA214075D140F5D141F5D143F92C7FC5C147E14FE5CA213015C13035C 13075C130F5C131F5CA2133F91C8FC5B137E13FE5B12015B12035B12075BA2120F5B121F 5B123F90C9FC5A127E12FE5AA25A127821417BB92C>47 DI<1307497EA2131FA2133F137F13FF5A1207127FB5FC13DF139FEA7C 1F1200B3AE007FB512E0B612F0A36C14E01C3477B32C>II<3801FFF0000713FE001F6D7E15 E048809038C01FF81407EC01FC381F80000006C77EC8127EA3ECFFFE131F90B5FC120312 0F48EB807E383FF800EA7FC090C7FC12FE5AA47E007F14FEEB8003383FE01F6CB612FC6C 15FE6C14BF0001EBFE1F3A003FF007FC27247CA32C>97 DI<903803FFE0011F13F8 017F13FE48B5FC48804848C6FCEA0FF0485A49137E4848131890C9FC5A127EA25AA8127E A2127F6C140F6DEB1F806C7E6D133F6C6CEB7F003907FE03FF6CB55A6C5C6C6C5B011F13 E0010390C7FC21247AA32C>IIIIII<1307EB1FC0A2497EA36D5AA20107C7 FC90C8FCA7387FFFC080B5FC7EA2EA0007B3A8007FB512FCB612FEA36C14FC1F3479B32C >I<140EEC3F80A2EC7FC0A3EC3F80A2EC0E0091C7FCA748B512804814C0A37EC7120FB3 B3A2141F003C1480007E133FB414005CEB01FEEBFFFC6C5B5C001F5B000790C7FC1A467C B32C>II<387FFFE0B57EA37EEA0003B3B3A5007FB61280B712C0A36C158022337BB22C> I<3A7F83F007E09039CFFC1FF83AFFDFFE3FFCD87FFF13FF91B57E3A07FE1FFC3E01FCEB F83F496C487E01F013E001E013C0A301C01380B33B7FFC3FF87FF0027F13FFD8FFFE6D13 F8D87FFC4913F0023F137F2D2481A32C>I<397FF01FE039FFF87FFC9038F9FFFE01FB7F 6CB6FC00019038F03F80ECC01F02807FEC000F5B5BA25BB3267FFFE0B5FCB500F11480A3 6C01E0140029247FA32C>II<397FF01FE039FFF8FFF801FB13FE90B6FC6C158000 019038F07FC09138801FE091380007F049EB03F85BED01FC491300A216FE167EA816FE6D 14FCA2ED01F86D13036DEB07F0150F9138801FE09138E07FC091B51280160001FB5B01F8 13F8EC3FC091C8FCAD387FFFE0B57EA36C5B27367FA32C>I114 D<90387FF8700003B512F8120F5A5A38 7FC00F387E00034813015AA36CEB00F0007F140013F0383FFFC06C13FE6CEBFF80000314 E0C66C13F8010113FCEB0007EC00FE0078147F00FC143F151F7EA26C143F6D133E6D13FE 9038F007FC90B5FC15F815E000F8148039701FFC0020247AA32C>I<131E133FA9007FB6 FCB71280A36C1500D8003FC8FCB1ED03C0ED07E0A5EC800F011FEB1FC0ECE07F6DB51280 160001035B6D13F89038003FE0232E7EAD2C>I<3A7FF003FF80486C487FA3007F7F0001 EB000FB3A3151FA2153F6D137F3900FE03FF90B7FC6D15807F6D13CF902603FE07130029 247FA32C>I119 D<3A3FFF03FFF048018713F8A36C010313F03A00FC007E005D90387E01F8013F5BEB1F83 EC87E090380FCFC0903807EF80EB03FF6D90C7FC5C6D5A147C14FE130180903803EF8090 3807CFC0EB0FC7EC83E090381F01F0013F7FEB7E00017C137C49137E0001803A7FFF01FF FC1483B514FE6C15FC140127247EA32C>I<003FB612E04815F0A4007EC7EA1FE0ED3FC0 ED7F80EDFF004A5A003C495AC7485A4A5A4A5A4A5A4A5A4AC7FCEB01FC495AEB0FF0495A 495A495A49C8FC4848EB01E04848EB03F0485A485A485A485A485AB7FCA46C15E024247D A32C>122 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fp cmmi10 10 32 /Fp 32 123 df<0103B812805BA290260007F8C7FC4B141FF00F00140F845DA2141FA25D 1806143FA25DA2147F95C7FC92CAFCA25CA25CA21301A25CA21303A25CA21307A25CA213 0FA25CA2131FA25CA2133FA25CA2137FA291CBFC497EB612C0A339397DB833>0 D<170C171C173E177EA217FE4C7E5EA2EE067F040C7F161C1618EE303F04607F16E016C0 923801801FDB03007F5D15064B130F4B80153815305D4B6D7E14015D4AC7FC4A14030206 815C5C023814010230815C5C010115004A8149C9FC1306010E82010C17805B5B0170163F 016017C05B485A0003171F90CA13E012065A001FB9FC19F05A5AA2BAFC3C3C7CBB45>I< EC3FC0ECFFF8903807E07C90380F801FD93F00EB800C017E130F49903807C01C4848ECE0 18485A484801031338000FEDF0305B001F16704848156017E0007F16C090C713F1178016 F34816004815F716FE5EA2485D5EA4007E1407150F003E91381DF818003F14796C02E113 38270F8007C013303B07E03F007CF02601FFF8EB3FC026003FC0EB0F802E267DA435>11 D15 D17 D<137013FC1201A25BA212035BA312075BA3120F5BA2121F5BA3123F 90C7FCA2481318127E143800FE133048137014604813E0EB01C0EB0380EB0700130EEA78 3CEA3FF0EA0FC015267BA41D>19 D<15FE913803FF8091380F83E091383E01F091387C00 F85C494813FC0103147C4948137E5C130F495AA249C7FC16FE5B137EA2150113FE4914FC A20001140316F85BED07F01203ED0FE04914C0151F000715806DEB3F00157E6D5B390FEE 01F09038E707E09038C3FF80D9C0FCC7FC001F90C8FCA25BA2123FA290C9FCA25AA2127E A212FEA25AA2127027377EA42B>26 D<013FB512FE90B7FC5A5A4815FE260F801CC7FCEA 1E005A00385B5A5A481378C7FC147014F0A4495AA31303A3495AA3130FA25C131FA3133F A291C8FC131E28257EA324>28 D<1503A35DA21506A2150EA2150CA2151CA21518A21538 A21530A21570A2EC07FE91383FFFC0903901FCE3F0903907E0E0F890391F80C03ED93E00 7FEB7C01D801F8EC0F80D803F0018013C0D807E014071403D80FC015E0D81F801300A248 485AA2007E1306A2020E130F12FE48010C14C0A2021CEB1F80A20218EB3F00A20238137E 007C5D1430007E4A5A003E90387003F06CEC07C09138600F80D80F80013FC7FC3903E0E0 FC3901F8E7F039007FFF80D90FFCC8FCEB01C0A25CA21303A291C9FCA25BA21306A2130E A2130CA22B4B7CB931>30 D<0140151E01E0153F00015E484816805B120790C9123F000E 161F170F5A1707481700A2003014C014010070010314061260A2170E00E04948130C5A17 1C92C7FC5FA26C495C4A14F04A7E6C017F495A4A6C485A3AF801F7E00F3BFE0FF3F83F80 267FFFE3B5FC02C191C7FC6C01815B02005BD80FFCEB7FF0D803F0EB0FC031267FA434> 33 D<121C127FEAFF80A5EA7F00121C0909798817>58 D<121C127FEAFF80A213C0A312 7F121C1200A412011380A2120313005A1206120E5A5A5A12600A19798817>I<9339FF80 01C0030F13E0037F9038F80380913A01FF807E07913A07F8000F0FDA1FE0EB079FDA3F80 903803BF0002FFC76CB4FCD901FC80495A4948157E495A495A4948153E017F163C49C9FC 5B1201484816385B1207485A1830121F4993C7FCA2485AA3127F5BA312FF90CCFCA41703 A25F1706A26C160E170C171C5F6C7E5F001F5E6D4A5A6C6C4A5A16076C6C020EC8FC6C6C 143C6C6C5C6CB4495A90393FE00FC0010FB5C9FC010313FC9038007FC03A3D7CBA3B>67 D<92391FE00380DBFFFC130002036D5A91390FE01F8F91393F0007DF027EEB01FE02F813 00495A4948147E177C4948143C495AA2011F153891C8FCA3491530A28094C7FC80806D7E 14FEECFFE06D13FE6DEBFFC06D14F06D806D80021F7F02037FEC003F03037F1500167F16 3F161FA3120C160FA2001C151F94C7FCA3003C153EA25E003E5D127E007F4A5A6D495A6D EB0FC0D8F9F0495AD8F0FE01FEC8FC39E03FFFF8010F13E0D8C00190C9FC313D7CBA33> 83 D<1578EC01FEEC07C6EC0F861507EC1E03143E147C1507ECF806A2EB01F00103130E ECE00C1307A2ECC01C010F1318153890381F80301570156090383F00E015C01401017F13 80EB7E03EC07001406EBFE0E495A5C143000011370495AEBF9C0EBFB8001FFC7FC5B5B48 5AA25BA4485A120F121DEA39F0127100E1140C0080143C0000147015E090387801C0EC07 8090383C1E00EB1FF8EB07E0203C7FBA23>96 D<133FEA1FFFA3C67E137EA313FE5BA312 015BA312035BA31207EBE0FCEBE3FF9038E707C0390FFE03E09038F801F001F013F8EBE0 00485A15FC5BA2123F90C7FCA214015A127EA2140312FE4814F8A2140715F05AEC0FE0A2 15C0EC1F80143F00781400007C137E5C383C01F86C485A380F07C06CB4C7FCEA01FC1E3B 7CB924>98 DI<163FED1FFFA3ED007F167EA216FEA216FCA21501A216F8A21503A216F0 A21507A2027E13E0903803FF8790380FC1CF90381F00EF017EEB7FC049133F485A484813 1F000715805B000F143F485A1600485A5D127F90C7127EA215FE5A485CA21401A248ECF8 0CA21403161CEDF0181407007C1538007E010F1330003E131F027B13706C01E113E03A0F 83C0F9C03A03FF007F80D800FCEB1F00283B7DB92B>II<16F8ED03FEED0F8792 381F0F80ED3E3F167F157CA215FC1700161C4A48C7FCA414035DA414075DA20107B512F0 A39026000FE0C7FC5DA4141F5DA4143F92C8FCA45C147EA514FE5CA413015CA4495AA45C 1307A25C121E123F387F8F80A200FF90C9FC131E12FEEA7C3CEA7878EA1FF0EA07C0294C 7CBA29>I<14E0EB03F8A21307A314F0EB01C090C7FCAB13F8EA03FEEA070F000E138012 1C121812381230EA701F1260133F00E0130012C05BEA007EA213FE5B1201A25B12035BA2 0007131813E01438000F133013C01470EB806014E014C01381EB838038078700EA03FEEA 00F815397EB71D>105 D108 D110 DI<90390F8003F090391FE00FFC903939F03C1F903A70F8700F8090 3AE0FDE007C09038C0FF80030013E00001491303018015F05CEA038113015CA2D8000314 07A25CA20107140FA24A14E0A2010F141F17C05CEE3F80131FEE7F004A137E16FE013F5C 6E485A4B5A6E485A90397F700F80DA383FC7FC90387E1FFCEC07E001FEC9FCA25BA21201 A25BA21203A25B1207B512C0A32C3583A42A>I<3903E001F83907F807FE390E3C1E0739 1C3E381F3A183F703F800038EBE07F0030EBC0FF00705B00601500EC007E153CD8E07F90 C7FCEAC07EA2120013FE5BA312015BA312035BA312075BA3120F5BA3121F5B0007C9FC21 267EA425>114 D<14FF010313C090380F80F090383E00380178131C153C4913FC000113 0113E0A33903F000F06D13007F3801FFE014FC14FF6C14806D13C0011F13E01303903800 3FF014071403001E1301127FA24814E0A348EB03C012F800E0EB07800070EB0F006C133E 001E13F83807FFE0000190C7FC1E267CA427>II<01F8EB03C0D803FEEB07E0D8070F130F000E018013F0121C1218 0038140700301403D8701F130112601500D8E03F14E000C090C7FC5BEA007E16C013FE5B 1501000115805B150316001203495B1506150E150C151C151815385D00015C6D485A6C6C 485AD97E0FC7FCEB1FFEEB07F024267EA428>118 D<903907E001F090391FF807FC9039 783E0E0F9039E01F1C1FD801C09038383F803A03800FF07F0100EBE0FF5A000E4A130000 0C157E021F133C001C4AC7FC1218A2C7123FA292C8FCA25CA2147EA214FEA24A130CA201 01141C001E1518003F5BD87F81143801835C00FF1560010714E03AFE0E7C01C0D87C1C49 5A2778383E0FC7FC391FF00FFC3907C003F029267EA42F>120 D<13F8D803FE1470D807 0F14F8000EEB8001121C121800381403003015F0EA701F1260013F130700E0010013E012 C05BD8007E130F16C013FE5B151F000115805BA2153F000315005BA25D157EA315FE5D14 01000113033800F80790387C1FF8EB3FF9EB0FE1EB00035DA2000E1307D83F805B007F49 5AA24A5A92C7FCEB003E007C5B00705B6C485A381E07C06CB4C8FCEA01FC25367EA429> II E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fq cmbx12 12 35 /Fq 35 120 df45 D49 DII<163FA25E5E5D5DA25D5D5D5DA25D92B5FCEC01F7EC03E7140715C7EC0F 87EC1F07143E147E147C14F8EB01F0EB03E0130714C0EB0F80EB1F00133E5BA25B485A48 5A485A120F5B48C7FC123E5A12FCB91280A5C8000F90C7FCAC027FB61280A531417DC038 >I<0007150301E0143F01FFEB07FF91B6FC5E5E5E5E5E16804BC7FC5D15E092C8FC01C0 C9FCAAEC3FF001C1B5FC01C714C001DF14F09039FFE03FFC9138000FFE01FC6D7E01F06D 13804915C0497F6C4815E0C8FC6F13F0A317F8A4EA0F80EA3FE0487E12FF7FA317F05B5D 6C4815E05B007EC74813C0123E003F4A1380D81FC0491300D80FF0495AD807FEEBFFFC6C B612F0C65D013F1480010F01FCC7FC010113C02D427BC038>I65 D67 D70 D73 D76 D78 D<923807FFC092B512FE0207ECFFC0021F15F0 91267FFE0013FC902601FFF0EB1FFF01070180010313C04990C76C7FD91FFC6E6C7E4948 6F7E49486F7E01FF8348496F7E48496F1380A248496F13C0A24890C96C13E0A24819F049 82003F19F8A3007F19FC49177FA400FF19FEAD007F19FC6D17FFA3003F19F8A26D5E6C19 F0A26E5D6C19E0A26C6D4B13C06C19806E5D6C6D4B13006C6D4B5A6D6C4B5A6D6C4B5A6D 6C4A5B6D01C001075B6D01F0011F5B010101FE90B5C7FC6D90B65A023F15F8020715C002 004AC8FC030713C047467AC454>I82 D<003FBA12E0A59026FE000FEB8003D87FE09338003FF0 49171F90C71607A2007E1803007C1801A300781800A400F819F8481978A5C81700B3B3A2 0107B8FCA545437CC24E>84 D87 D<903801FFE0011F13FE017F6D7E48B612E03A03FE007FF84848EB1FFC6D6D7E486C6D7E A26F7FA36F7F6C5A6C5AEA00F090C7FCA40203B5FC91B6FC1307013F13F19038FFFC0100 0313E0000F1380381FFE00485A5B127F5B12FF5BA35DA26D5B6C6C5B4B13F0D83FFE013E EBFFC03A1FFF80FC7F0007EBFFF86CECE01FC66CEB8007D90FFCC9FC322F7DAD36>97 D99 DIIIII<137C48B4FC4813804813C0A24813E0A56C13C0A26C 13806C1300EA007C90C7FCAAEB7FC0EA7FFFA512037EB3AFB6FCA518467CC520>I107 DI<90277F8007FEEC0FFCB590 263FFFC090387FFF8092B5D8F001B512E002816E4880913D87F01FFC0FE03FF8913D8FC0 0FFE1F801FFC0003D99F009026FF3E007F6C019E6D013C130F02BC5D02F86D496D7EA24A 5D4A5DA34A5DB3A7B60081B60003B512FEA5572D7CAC5E>I<90397F8007FEB590383FFF 8092B512E0028114F8913987F03FFC91388F801F000390399F000FFE6C139E14BC02F86D 7E5CA25CA35CB3A7B60083B512FEA5372D7CAC3E>II<90387F807FB53881FFE0028313F0028F13F8ED8FFC91389F1F FE000313BE6C13BC14F8A214F0ED0FFC9138E007F8ED01E092C7FCA35CB3A5B612E0A527 2D7DAC2E>114 D<90391FFC038090B51287000314FF120F381FF003383FC00049133F48 C7121F127E00FE140FA215077EA27F01E090C7FC13FE387FFFF014FF6C14C015F06C14FC 6C800003806C15806C7E010F14C0EB003F020313E0140000F0143FA26C141F150FA27EA2 6C15C06C141FA26DEB3F8001E0EB7F009038F803FE90B55A00FC5CD8F03F13E026E007FE C7FC232F7CAD2C>IIIII E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fr cmbx9 9 16 /Fr 16 117 df<120FEA3FC0EA7FE0EAFFF0A6EA7FE0EA3FC0EA0F000C0C7A8B19>46 D<147814F81303131FEA03FFB5FCA3EAFC1F1200B3B2007FB512FEA41F317AB02C>49 DII<151F5D5DA25D5C5C5C5CA25C143D14 7D14F9EB01F114E1EB03C1EB0781130FEB1F01133E133C137813F01201EA03E0EA07C013 80EA0F00121E123E5A5AB712FEA4C700031300A80103B512FEA427317EB02C>I<000C14 0ED80FE013FE90B5FC5D5D5D5D5D92C7FC14FC14F091C8FC1380A6EB87FE9038BFFFC090 B512F09038FC0FF89038E003FE01C07F497E01001480000E6D13C0C8FCA216E0A3121FEA 7F807F487EA316C05B5CD87F801480D87C0014006C5B393F8007FE391FE01FFC0007B512 F06C14C0C691C7FCEB1FF823327CB02C>I65 D 70 D 97 D I<903807FF80013F13F090B512FC3903FE01FE4848487EEA0FF8EA1FF0EA3FE0A2007F6D 5A496C5A153000FF91C7FCA9127F7FA2003FEC07807F6C6C130F000FEC1F00D807FE133E 3903FF80FCC6EBFFF8013F13E0010790C7FC21217DA027>I<16F890390FFC07FE90387F FF9F48B6127F3907FC0FFC380FF003001F14FED9E001133E003FECFF1C1600A6001F5CEB F003000F5C3907FC0FF890B512E0486C1380D90FFCC7FC48C9FCA37F7F90B512F015FE6C ECFF8016E06C15F06C15F84815FC121F393F80001F48C7EA03FE481401481400A46C1401 6C6CEB03FC6C6CEB07F86C6CEB0FF0D80FFCEB7FE00003B61280C6ECFE00010F13E02832 7EA12C>103 D105 D<3901F81F8000FFEB7FF0ECFFF89038F9E3FC9038FB C7FE380FFF876C1307A213FEEC03FCEC01F8EC0060491300B1B512F0A41F217EA024> 114 D<9038FFE1C0000713FF5A383F803F387E000F14075A14037EA26C6CC7FC13FCEBFF E06C13FC806CEBFF80000F14C06C14E0C6FC010F13F0EB007F140F00F0130714037EA26C 14E06C13076CEB0FC09038C01F8090B5120000F913FC38E03FE01C217DA023>I<133CA5 137CA313FCA21201A212031207001FB51280B6FCA3D807FCC7FCB0EC03C0A79038FE0780 12033901FF0F006C13FEEB3FFCEB0FF01A2F7EAE22>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fs cmr9 9 81 /Fs 81 124 df<91393FE00FE0903A01FFF83FF8903A07E01EF83C903A1F800FF07E903A 3F001FE0FE017E133F4914C0485A1738484890381F8000ACB812C0A33B03F0001F8000B3 A7486C497EB50083B5FCA32F357FB42D>11 DII16 D<137813FCA212011203EA07F813E0EA0FC0EA1F801300123C5A5A12400E0E71B326>19 D<123C127E12FFA8127EAB123E123CAB1218A61200A7123C127E12FFA4127E123C08367A B515>33 D<14C01301EB0380EB0F00130E5B133C5B5BA2485A485AA212075B120F90C7FC 5AA2121E123EA3123C127CA55AB0127CA5123C123EA3121E121FA27E7F12077F1203A26C 7E6C7EA213787F131C7F130FEB0380EB01C01300124A79B71E>40 D<12C07E1270123C121C7E120F6C7E6C7EA26C7E6C7EA27F1378137C133C133EA2131E13 1FA37F1480A5EB07C0B0EB0F80A514005BA3131E133EA2133C137C137813F85BA2485A48 5AA2485A48C7FC120E5A123C12705A5A124A7CB71E>I<123C127EB4FCA21380A2127F12 3D1201A412031300A25A1206120E120C121C5A5A126009177A8715>44 DI<123C127E12FFA4127E123C08087A8715>I<1530157815F8A2 15F01401A215E01403A215C01407A21580140FA215005CA2143EA2143C147CA2147814F8 A25C1301A25C1303A25C1307A2495AA291C7FC5BA2131E133EA2133C137CA2137813F8A2 5B1201A25B1203A2485AA25B120FA290C8FC5AA2121E123EA2123C127CA2127812F8A25A 12601D4B7CB726>II<13 075B5B137FEA07FFB5FC13BFEAF83F1200B3B3A2497E007FB51280A319327AB126>IIII<000C14C0380FC00F90B5128015005C5C14F014C0D80C18C7FC90C8FCA9EB0F C0EB7FF8EBF07C380FC03F9038001F80EC0FC0120E000CEB07E0A2C713F01403A215F8A4 1218127E12FEA315F0140712F8006014E01270EC0FC06C131F003C14806CEB7F00380F80 FE3807FFF8000113E038003F801D347CB126>I<14FE903807FF80011F13E090383F00F0 017C13703901F801F8EBF003EA03E01207EA0FC0EC01F04848C7FCA248C8FCA35A127EEB 07F0EB1FFC38FE381F9038700F809038E007C039FFC003E0018013F0EC01F8130015FC14 00A24814FEA5127EA4127F6C14FCA26C1301018013F8000F14F0EBC0030007EB07E03903 E00FC03901F81F806CB51200EB3FFCEB0FE01F347DB126>I<1230123C003FB6FCA34814 FEA215FC0070C7123800601430157015E04814C01401EC0380C7EA07001406140E5C1418 14385CA25CA2495A1303A3495AA2130FA3131F91C7FCA25BA55BA9131C20347CB126>I< EB0FE0EB7FFC90B5FC3903F01F803907C007C0390F0003E0000EEB01F0001E1300001C14 F8003C1478A3123EA2003F14F86D13F0EBC001D81FF013E09038F803C0390FFE07803907 FF0F006C13DE6C13F87EEB3FFE8001F713C0D803E313E0D8078013F0390F007FF8001E13 1F003EEB07FC003C1303481301EC007E12F848143EA2151EA37E153C1278007C14787E6C 14F0390F8003E03907F01FC00001B5120038007FFCEB1FE01F347DB126>II< 123C127E12FFA4127E123C1200B0123C127E12FFA4127E123C08207A9F15>I<123C127E 12FFA4127E123C1200B0123C127E12FE12FFA3127F123F1203A412071206A3120E120C12 1C1238123012701260082F7A9F15>I<007FB812C0B912E0A26C17C0CCFCAC007FB812C0 B912E0A26C17C033147C9C3C>61 D63 D<15E0A34A7EA24A7EA34A7EA3EC0DFE140CA2EC187FA34A6C7EA202707FEC601FA202E0 7FECC00FA2D901807F1507A249486C7EA301066D7EA2010E80010FB5FCA249800118C77E A24981163FA2496E7EA3496E7EA20001821607487ED81FF04A7ED8FFFE49B512E0A33336 7DB53A>65 DIIIIIIII<017FB5FCA3 9038003FE0EC1FC0B3B1127EB4FCA4EC3F805A0060140000705B6C13FE6C485A380F03F0 3803FFC0C690C7FC20357DB227>IIIIIIIII<90381FE00390387FFC0748B5FC3907 F01FCF390F8003FF48C7FC003E80814880A200788000F880A46C80A27E92C7FC127F13C0 EA3FF013FF6C13F06C13FF6C14C06C14F0C680013F7F01037F9038003FFF140302001380 157F153FED1FC0150F12C0A21507A37EA26CEC0F80A26C15006C5C6C143E6C147E01C05B 39F1FC03F800E0B512E0011F138026C003FEC7FC22377CB42B>I<007FB712FEA3903980 07F001D87C00EC003E0078161E0070160EA20060160600E01607A3481603A6C71500B3AB 4A7E011FB512FCA330337DB237>IIII<267FFF FC90B512C0A3000101E090381FF80026007F80EB0FC0013F6E5A6E91C7FC6D6C130E010F 140C6E5B6D6C133801035C6E13606D6C13E06D6C485A5EDA7F83C8FCEC3FC715C6EC1FEC EC0FFC5D14076E7EA26E7E815C6F7E9138063FC0140E4A6C7E9138180FF0EC380702707F 91386003FCECC0010101804A6C7E49C77E4981010E6E7E010C6E7E131C496E7E01786E7E 13FCD807FEEC1FFEB56C90B512F8A335337EB23A>II<003FB612FCA39039 F80007F813C090C7EA0FF0003EEC1FE0123C0038EC3FC00078EC7F801270EDFF004A5AA2 0060495AA24A5A4A5AC7FC4A5A4A5AA24A5A4AC7FCA2495A495AA2495A495AA24948130C 495AA2495A49C7FCA24848141CA2485A485A1638485A4848147816F84848130148481307 153FB7FCA326337CB22F>II93 D97 DII<153FEC0FFFA3EC007F81AEEB07F0EB 3FFCEBFC0F3901F003BF3907E001FF48487E48487F8148C7FCA25A127E12FEAA127E127F A27E6C6C5BA26C6C5B6C6C4813803A03F007BFFC3900F81E3FEB3FFCD90FE0130026357D B32B>III<151F90391FC07F809039FFF8E3C03901F07FC7 3907E03F033A0FC01F83809039800F8000001F80EB00074880A66C5CEB800F000F5CEBC0 1F6C6C48C7FCEBF07C380EFFF8380C1FC0001CC9FCA3121EA2121F380FFFFEECFFC06C14 F06C14FC4880381F0001003EEB007F4880ED1F8048140FA56C141F007C15006C143E6C5C 390FC001F83903F007E0C6B51280D91FFCC7FC22337EA126>IIIIII<2703F01FE013FF00FF90267FF8 0313C0903BF1E07C0F03E0903BF3803E1C01F02807F7003F387FD803FE1470496D486C7E A2495CA2495CB3486C496C487EB53BC7FFFE3FFFF0A33C217EA041>I<3903F01FC000FF EB7FF09038F1E0FC9038F3807C3907F7007EEA03FE497FA25BA25BB3486CEB7F80B538C7 FFFCA326217EA02B>II<39 03F03F8000FFEBFFE09038F3C0F89038F7007ED807FE7F6C48EB1F804914C049130F16E0 ED07F0A3ED03F8A9150716F0A216E0150F16C06D131F6DEB3F80160001FF13FC9038F381 F89038F1FFE0D9F07FC7FC91C8FCAA487EB512C0A325307EA02B>I<903807F00390383F FC07EBFC0F3901F8038F3807E001000F14DF48486CB4FC497F123F90C77E5AA25A5AA912 7FA36C6C5B121F6D5B000F5B3907E003BF3903F0073F3800F81EEB3FF8EB0FE090C7FCAA ED7F8091380FFFFCA326307DA029>I<3803E07C38FFE1FF9038E38F809038E71FC0EA07 EEEA03ECA29038FC0F8049C7FCA35BB2487EB512E0A31A217FA01E>II<1330A51370A313F0A21201A212031207381FFF FEB5FCA23803F000AF1403A814073801F806A23800FC0EEB7E1CEB1FF8EB07E0182F7FAD 1E>IIIII<3A7FFF807FF8A33A07F8001FC00003EC0F800001EC0700 15066C6C5BA26D131C017E1318A26D5BA2EC8070011F1360ECC0E0010F5BA2903807E180 A214F3010390C7FC14FBEB01FEA26D5AA31478A21430A25CA214E05CA2495A1278D8FC03 C8FCA21306130EEA701CEA7838EA1FF0EA0FC025307F9F29>I<003FB512F0A2EB000F00 3C14E00038EB1FC00030EB3F800070137F1500006013FE495A13035CC6485A495AA2495A 495A49C7FC153013FE485A12035B48481370485A001F14604913E0485A387F000348130F 90B5FCA21C207E9F22>II E %EndDVIPSBitmapFont %DVIPSBitmapFont: Ft cmr10 10 80 /Ft 80 123 df11 DIII<121C127FEAFF80A8EA7F00AB123EAB121CABC7FCA8121C12 7FEAFF80A5EA7F00121C093C79BB17>33 D<001C131C007F137F39FF80FF80A26D13C0A3 007F137F001C131C00001300A40001130101801380A20003130301001300485B00061306 000E130E485B485B485B006013601A197DB92A>I<121C127FEAFF80A213C0A3127F121C 1200A412011380A2120313005A1206120E5A5A5A12600A1979B917>39 D<146014E0EB01C0EB0380EB0700130E131E5B5BA25B485AA2485AA212075B120F90C7FC A25A121EA2123EA35AA65AB2127CA67EA3121EA2121F7EA27F12077F1203A26C7EA26C7E 1378A27F7F130E7FEB0380EB01C0EB00E01460135278BD20>I<12C07E12707E7E7E120F 6C7E6C7EA26C7E6C7EA21378A2137C133C133E131EA2131F7FA21480A3EB07C0A6EB03E0 B2EB07C0A6EB0F80A31400A25B131EA2133E133C137C1378A25BA2485A485AA2485A48C7 FC120E5A5A5A5A5A13527CBD20>I<15301578B3A6007FB812F8B912FCA26C17F8C80078 C8FCB3A6153036367BAF41>43 D<121C127FEAFF80A213C0A3127F121C1200A412011380 A2120313005A1206120E5A5A5A12600A19798817>II<121C127F EAFF80A5EA7F00121C0909798817>I<150C151E153EA2153C157CA2157815F8A215F014 01A215E01403A215C01407A21580140FA215005CA2141E143EA2143C147CA2147814F8A2 5C1301A25C1303A2495AA25C130FA291C7FC5BA2131E133EA2133C137CA2137813F8A25B 1201A25B1203A25B1207A25B120FA290C8FC5AA2121E123EA2123C127CA2127812F8A25A 12601F537BBD2A>IIIII<1538A2157815F8A2140114031407A2140F141F141B14331473146314C313011483EB 030313071306130C131C131813301370136013C01201EA038013005A120E120C5A123812 305A12E0B712F8A3C73803F800AB4A7E0103B512F8A325397EB82A>I<0006140CD80780 133C9038F003F890B5FC5D5D158092C7FC14FC38067FE090C9FCABEB07F8EB3FFE903878 0F803907E007E090388003F0496C7E12066E7EC87EA28181A21680A4123E127F487EA490 C71300485C12E000605C12700030495A00385C6C1303001E495A6C6C485A3907E03F8000 01B5C7FC38007FFCEB1FE0213A7CB72A>II<123012 38123E003FB612E0A316C05A168016000070C712060060140E5D151800E01438485C5D5D C712014A5A92C7FC5C140E140C141C5CA25CA214F0495AA21303A25C1307A2130FA3495A A3133FA5137FA96DC8FC131E233B7BB82A>III<121C127FEAFF80A5EA7F00121CC7FCB2121C127FEAFF80A5EA7F00121C09 2479A317>I<121C127FEAFF80A5EA7F00121CC7FCB2121C127F5A1380A4127F121D1201 A412031300A25A1206A2120E5A121812385A1260093479A317>I<007FB812F8B912FCA2 6C17F8CCFCAE007FB812F8B912FCA26C17F836167B9F41>61 D63 D<1538A3157CA315FEA34A7E A34A6C7EA202077FEC063FA2020E7FEC0C1FA2021C7FEC180FA202387FEC3007A202707F EC6003A202C07F1501A2D901807F81A249C77F167FA20106810107B6FCA24981010CC712 1FA2496E7EA3496E7EA3496E7EA213E0707E1201486C81D80FFC02071380B56C90B512FE A3373C7DBB3E>65 DI<913A01FF800180020FEBE003027F13F8903A 01FF807E07903A03FC000F0FD90FF0EB039F4948EB01DFD93F80EB00FF49C8127F01FE15 3F12014848151F4848150FA248481507A2485A1703123F5B007F1601A35B00FF93C7FCAD 127F6DED0180A3123F7F001F160318006C7E5F6C7E17066C6C150E6C6C5D00001618017F 15386D6C5CD91FE05C6D6CEB03C0D903FCEB0F80902701FF803FC7FC9039007FFFFC020F 13F002011380313D7BBA3C>IIIIIII<013FB512E0A39039001FFC00EC07F8B3B3A3123FEA7F80EAFFC0 A44A5A1380D87F005B0070131F6C5C6C495A6C49C7FC380781FC3801FFF038007F80233B 7DB82B>IIIIIII82 DI<003FB812E0A3D9C003EB001F273E0001FE130348EE01F00078160000 701770A300601730A400E01738481718A4C71600B3B0913807FF80011FB612E0A335397D B83C>IIII<003FB7FCA39039FC0001FE01C0130349495A003EC7FC003C4A 5A5E0038141F00784A5A12704B5A5E006014FF4A90C7FCA24A5A5DC712074A5AA24A5A5D 143F4A5AA24A5A92C8FC5B495AA2495A5C130F4948EB0180A2495A5C137F495A16034890 C7FC5B1203485AEE0700485A495C001F5D48485C5E4848495A49130FB8FCA329397BB833 >90 DI<39018001800003130339 07000700000E130E485B0018131800381338003013300070137000601360A200E013E048 5BA400CE13CE39FF80FF806D13C0A3007F137FA2393F803F80390E000E001A1974B92A> II97 DIIII<147E903803FF8090380FC1E0EB1F8790383F0FF0137EA213 FCA23901F803C091C7FCADB512FCA3D801F8C7FCB3AB487E387FFFF8A31C3B7FBA19>I< ED03F090390FF00FF890393FFC3C3C9039F81F707C3901F00FE03903E007C03A07C003E0 10000FECF000A248486C7EA86C6C485AA200075C6C6C485A6D485A6D48C7FC38073FFC38 060FF0000EC9FCA4120FA213C06CB512C015F86C14FE6CECFF804815C03A0F80007FE048 C7EA0FF0003E140348140116F8481400A56C1401007C15F06CEC03E0003F1407D80F80EB 0F80D807E0EB3F003901FC01FC39007FFFF0010790C7FC26387EA52A>IIIIII<2703F00FF0EB1FE000FFD93FFCEB7FF8913AF03F01E07E903BF1C01F8380 3F3D0FF3800FC7001F802603F70013CE01FE14DC49D907F8EB0FC0A2495CA3495CB3A348 6C496CEB1FE0B500C1B50083B5FCA340257EA445>I<3903F00FF000FFEB3FFCECF03F90 39F1C01F803A0FF3800FC03803F70013FE496D7EA25BA35BB3A3486C497EB500C1B51280 A329257EA42E>II<3903F01FE000FFEB7FF89038F1E07E9039F3801F 803A0FF7000FC0D803FEEB07E049EB03F04914F849130116FC150016FEA3167FAA16FEA3 ED01FCA26DEB03F816F06D13076DEB0FE001F614C09039F7803F009038F1E07E9038F0FF F8EC1FC091C8FCAB487EB512C0A328357EA42E>II<3807E01F00FFEB7FC09038E1E3 E09038E387F0380FE707EA03E613EE9038EC03E09038FC0080491300A45BB3A2487EB512 F0A31C257EA421>II<1318A51338A31378A313F8120112031207001FB5FCB6FCA2D801F8C7FCB215 C0A93800FC011580EB7C03017E13006D5AEB0FFEEB01F81A347FB220>IIIIII<003FB5 12FCA2EB8003D83E0013F8003CEB07F00038EB0FE012300070EB1FC0EC3F800060137F15 0014FE495AA2C6485A495AA2495A495A495AA290387F000613FEA2485A485A0007140E5B 4848130C4848131CA24848133C48C7127C48EB03FC90B5FCA21F247EA325>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fu cmmib10 10 1 /Fu 1 64 df<14035CA34A7EA54A7EA60070496C1370D8FFF0EC7FF890B7FC003F16E06C 16C000071600000115FC6C6C14F0011F14C0010791C7FC010113FCA2497FA3497F14FDD9 0FF87FECF07F49486C7EECC01F49486C7EEC0007017E6D7E017C130101F0EB0078491438 014014102D2B7FA930>63 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fv cmbx12 14.4 9 /Fv 9 122 df<171F4D7E4D7EA24D7EA34C7FA24C7FA34C7FA34C7FA24C7FA34C808304 7F80167E8304FE804C7E03018116F8830303814C7E03078116E083030F814C7E031F8116 8083033F8293C77E4B82157E8403FE824B800201835D840203834B800207835D844AB87E A24A83A3DA3F80C88092C97E4A84A2027E8202FE844A82010185A24A820103854A820107 85A24A82010F855C011F717FEBFFFCB600F8020FB712E0A55B547BD366>65 D<003FBC1280A59126C0003F9038C0007F49C71607D87FF8060113C001E08449197F4919 3F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C994C7FCB3B3AC91B912F0A5 53517BD05E>84 D97 D<913803FFC0023F13FC49B6FC010715C04901817F903A3FFC007FF849486D7E4948 6D7E4849130F48496D7E48178048497F18C0488191C7FC4817E0A248815B18F0A212FFA4 90B8FCA318E049CAFCA6127FA27F7EA218E06CEE01F06E14037E6C6DEC07E0A26C6DEC0F C06C6D141F6C6DEC3F806D6CECFF00D91FFEEB03FE903A0FFFC03FF8010390B55A010015 C0021F49C7FC020113F034387CB63D>101 D<137F497E000313E0487FA2487FA76C5BA2 6C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017EB3B3A6B612E0A51B547BD325>105 D108 D<903A3FF001FFE0B501 0F13FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FFE0EB1FFFC602806D 7F92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A0060A36118FFA2615F 616E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE075B02F8B612E06F 1480031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>112 D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF81307D81FE0130148487F4980 127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13FF15F86C14FF16C06C15F06C 816C816C81C681013F1580010F15C01300020714E0EC003F030713F015010078EC007F00 F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001F8EC7F0001FEEB01FE9039FF C00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C387CB635>115 D121 D E %EndDVIPSBitmapFont end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin letter %%EndSetup %%Page: 1 1 1 0 bop 1569 448 a Fv(Alias)46 b(T)l(yp)t(es)2307 405 y Fu(?)961 737 y Ft(F)-7 b(rederic)n(k)26 b(Smith)195 b(Da)n(vid)27 b(W)-7 b(alk)n(er)193 b(Greg)26 b(Morrisett)1657 911 y Fs(Cornell)h(Univ)n(ersit)n(y)759 1234 y Fr(Abstract.)43 b Fs(Linear)22 b(t)n(yp)r(e)e(systems)h(allo)n(w)j(destructiv)n(e)d(op) r(erations)i(suc)n(h)e(as)h(ob-)759 1325 y(ject)31 b(deallo)r(cation)h (and)e(imp)r(erativ)n(e)f(up)r(dates)h(of)h(functional)g(data)f (structures.)759 1416 y(These)37 b(op)r(erations)h(and)e(others,)h(suc) n(h)f(as)h(the)e(abilit)n(y)i(to)g(reuse)f(memory)e(at)759 1508 y(di\013eren)n(t)26 b(t)n(yp)r(es,)f(are)i(essen)n(tial)g(in)f(lo) n(w-lev)n(el)h(t)n(yp)r(ed)e(languages.)j(Ho)n(w)n(ev)n(er,)e(tra-)759 1599 y(ditional)k(linear)f(t)n(yp)r(e)e(systems)h(are)h(to)r(o)g (restrictiv)n(e)g(for)g(use)g(in)f(lo)n(w-lev)n(el)h(co)r(de)759 1690 y(where)24 b(it)f(is)h(necessary)g(to)f(exploit)g(p)r(oin)n(ter)h (aliasing.)h(W)-6 b(e)23 b(presen)n(t)g(a)g(new)h(t)n(yp)r(ed)759 1781 y(language)f(that)e(allo)n(ws)i(functions)e(to)g(sp)r(ecify)h(the) f(shap)r(e)g(of)h(the)f(store)h(that)e(they)759 1873 y(exp)r(ect)f(and)g(to)g(trac)n(k)g(the)g(\015o)n(w)h(of)g(p)r(oin)n (ters)g(through)e(a)i(computation.)f(Our)f(t)n(yp)r(e)759 1964 y(system)27 b(is)h(expressiv)n(e)f(enough)h(to)f(represen)n(t)h(p) r(oin)n(ter)f(aliasing)j(and)d(y)n(et)g(safely)759 2055 y(p)r(ermit)e(destructiv)n(e)g(op)r(erations.)523 2329 y Fq(1)112 b(In)m(tro)s(duction)523 2522 y Ft(Linear)28 b(t)n(yp)r(e)g(systems)g([26,)13 b(25])28 b(giv)n(e)f(programmers)f (explicit)j(con)n(trol)e(o)n(v)n(er)f(memory)i(re-)523 2622 y(sources.)g(The)h(critical)f(in)n(v)-5 b(arian)n(t)28 b(of)h(a)g(linear)f(t)n(yp)r(e)h(system)g(is)g(that)g(ev)n(ery)f (linear)g(v)-5 b(alue)523 2722 y(is)30 b(used)f(exactly)g(once.)h (After)g(its)g(single)f(use,)h(a)f(linear)g(v)-5 b(alue)30 b(is)f(dead)h(and)f(the)h(system)523 2821 y(can)h(immediately)g (reclaim)g(its)g(space)g(or)f(reuse)h(it)h(to)f(store)f(another)h(v)-5 b(alue.)31 b(Although)523 2921 y(this)26 b(single-use)f(in)n(v)-5 b(arian)n(t)25 b(enables)h(compile-time)g(garbage)d(collection)j(and)g (imp)r(erativ)n(e)523 3021 y(up)r(dates)h(to)g(functional)h(data)e (structures,)h(it)g(also)f(limits)i(the)f(use)g(of)g(linear)g(v)-5 b(alues.)27 b(F)-7 b(or)523 3120 y(example,)26 b Fp(x)h Ft(is)f(used)g(t)n(wice)g(in)g(the)h(follo)n(wing)e(expression:)g Fo(let)35 b Fp(x)24 b Ft(=)e Fn(h)p Ft(1)p Fp(;)14 b Ft(2)p Fn(i)37 b Fo(in)f(let)g Fp(y)25 b Ft(=)523 3220 y Fp(f)9 b(st)p Ft(\()p Fp(x)p Ft(\))37 b Fo(in)g(let)e Fp(z)26 b Ft(=)d Fp(snd)p Ft(\()p Fp(x)p Ft(\))38 b Fo(in)e Fp(y)16 b Ft(+)d Fp(z)t Ft(.)24 b(Therefore,)g Fp(x)h Ft(cannot)g(b)r(e)g(giv)n(en)f(a)h(linear)f(t)n(yp)r(e,)523 3319 y(and)j(consequen)n(tly)-7 b(,)27 b(cannot)g(b)r(e)h(deallo)r (cated)f(early)-7 b(.)648 3419 y(Sev)n(eral)37 b(authors)g([26,)13 b(9,)h(3])38 b(ha)n(v)n(e)f(extended)i(pure)f(linear)g(t)n(yp)r(e)h (systems)f(to)g(allo)n(w)523 3519 y(greater)23 b(\015exibilit)n(y)-7 b(.)26 b(Ho)n(w)n(ev)n(er,)d(most)i(of)g(these)g(e\013orts)g(ha)n(v)n (e)f(fo)r(cused)h(on)g(high-lev)n(el)f(user)523 3618 y(programming)35 b(languages)g(and)h(as)h(a)f(result,)h(they)g(ha)n(v)n (e)f(emphasized)g(simple)h(t)n(yping)523 3718 y(rules)24 b(that)g(programmers)e(can)h(understand)h(and/or)f(t)n(yping)h(rules)f (that)i(admit)f(e\013ectiv)n(e)523 3818 y(t)n(yp)r(e)37 b(inference)f(tec)n(hniques.)h(These)f(issues)g(are)f(less)h(imp)r (ortan)n(t)h(for)f(lo)n(w-lev)n(el)f(t)n(yp)r(ed)523 3917 y(languages)25 b(designed)i(as)g(compiler)g(in)n(termediate)g (languages)e([22,)13 b(18])27 b(or)f(as)h(secure)g(mo-)523 4017 y(bile)d(co)r(de)f(platforms,)f(suc)n(h)h(as)g(the)h(Ja)n(v)-5 b(a)22 b(Virtual)h(Mac)n(hine)g([10],)f(Pro)r(of-Carrying)e(Co)r(de)523 4116 y(\(PCC\))31 b([13])g(or)f(T)n(yp)r(ed)h(Assem)n(bly)g(Language)e (\(T)-7 b(AL\))32 b([12].)f(These)g(languages)e(are)h(de-)523 4216 y(signed)f(for)g(mac)n(hine,)g(not)h(h)n(uman,)f(consumption.)h (On)f(the)h(other)f(hand,)h(b)r(ecause)f(sys-)523 4316 y(tems)i(suc)n(h)g(as)g(PCC)g(and)g(T)-7 b(AL)31 b(mak)n(e)f(ev)n(ery)g (mac)n(hine)h(op)r(eration)f(explicit)i(and)f(v)n(erify)523 4415 y(that)19 b(eac)n(h)g(is)f(safe,)h(the)g(implemen)n(tation)g(of)g (these)g(systems)g(requires)f(new)h(t)n(yp)r(e-theoretic)523 4515 y(mec)n(hanisms)27 b(to)g(mak)n(e)g(e\016cien)n(t)h(use)f(of)h (computer)f(resources.)p 523 4565 473 4 v 544 4619 a Fm(?)606 4650 y Fs(This)h(material)f(is)g(based)g(on)g(w)n(ork)g(supp)r (orted)g(in)f(part)h(b)n(y)f(the)h(AF)n(OSR)e(gran)n(t)i(F49620-97-)606 4742 y(1-0013)32 b(and)f(the)f(National)i(Science)f(F)-6 b(oundation)31 b(under)f(Gran)n(t)g(No.)h(EIA)g(97-03470.)i(An)n(y)606 4833 y(opinions,)21 b(\014ndings,)g(and)e(conclusions)j(or)f (recommendations)e(expressed)h(in)g(this)g(publication)606 4924 y(are)26 b(those)g(of)h(the)e(authors)h(and)f(do)h(not)f (re\015ect)h(the)f(views)i(of)f(these)g(agencies.)p eop %%Page: 2 2 2 1 bop 648 448 a Ft(In)43 b(existing)f(high-lev)n(el)g(t)n(yp)r(ed)i (languages,)d(ev)n(ery)g(lo)r(cation)i(is)g(stamp)r(ed)g(with)g(a)523 548 y(single)35 b(t)n(yp)r(e)h(for)f(the)i(lifetime)f(of)g(the)g (program.)e(F)-7 b(ailing)35 b(to)h(main)n(tain)f(this)h(in)n(v)-5 b(arian)n(t)523 648 y(has)37 b(resulted)g(in)h(unsound)g(t)n(yp)r(e)f (systems)h(or)e(misfeatures)h(\(witness)h(the)g(in)n(teraction)523 747 y(b)r(et)n(w)n(een)c(parametric)e(p)r(olymorphism)h(and)g (references)f(in)i(ML)g([23,)13 b(27]\).)33 b(In)h(lo)n(w-lev)n(el)523 847 y(languages)29 b(that)h(aim)h(to)f(exp)r(ose)g(the)h(resources)e (of)h(the)h(underlying)f(mac)n(hine,)g(this)h(in-)523 946 y(v)-5 b(arian)n(t)30 b(is)h(un)n(tenable.)g(F)-7 b(or)31 b(instance,)f(b)r(ecause)h(mac)n(hines)f(con)n(tain)h(a)f (limited)i(n)n(um)n(b)r(er)523 1046 y(of)39 b(registers,)e(eac)n(h)h (register)f(cannot)h(b)r(e)h(stamp)r(ed)g(with)h(a)e(single)g(t)n(yp)r (e.)h(Also,)g(when)523 1146 y(t)n(w)n(o)25 b(stac)n(k-allo)r(cated)e (ob)5 b(jects)25 b(ha)n(v)n(e)f(disjoin)n(t)h(lifetimes,)h(compilers)f (naturally)f(reuse)h(the)523 1245 y(stac)n(k)31 b(space,)h(ev)n(en)f (when)h(the)h(t)n(w)n(o)e(ob)5 b(jects)32 b(ha)n(v)n(e)f(di\013eren)n (t)h(t)n(yp)r(es.)g(Finally)-7 b(,)32 b(in)g(a)g(lo)n(w-)523 1345 y(lev)n(el)22 b(language)f(exp)r(osing)h(initialization,)h(ev)n (en)f(the)i(simplest)f(ob)5 b(jects)22 b(c)n(hange)g(t)n(yp)r(e.)h(F)-7 b(or)523 1445 y(example,)27 b(a)g(pair)g Fp(x)h Ft(of)g(t)n(yp)r(e)g Fn(h)p Fp(int;)14 b(int)o Fn(i)28 b Ft(ma)n(y)f(b)r(e)h(created)e(as)h (follo)n(ws:)1157 1663 y Fo(malloc)21 b Fp(x;)14 b Ft(2)23 b(;)46 b Fo(\(*)d Fp(x)28 b Ft(has)f(t)n(yp)r(e)h Fn(h)p Fl(junk)p Fp(;)14 b Fl(junk)p Fn(i)28 b Fo(*\))1157 1762 y Fp(x)p Ft([1]:=1)23 b(;)192 b Fo(\(*)43 b Fp(x)28 b Ft(has)f(t)n(yp)r(e)h Fn(h)p Fp(int;)14 b Fl(junk)o Fn(i)75 b Fo(*\))1157 1862 y Fp(x)p Ft([2]:=2)23 b(;)192 b Fo(\(*)43 b Fp(x)28 b Ft(has)f(t)n(yp)r(e)h Fn(h)p Fp(int;)14 b(int)o Fn(i)121 b Fo(*\))1157 1951 y Ft(.)1157 1984 y(.)1157 2017 y(.)648 2141 y(A)n(t)24 b(eac)n(h)f(step)h(in)g(this)h (computation,)e(the)i(storage)d(b)r(ound)i(to)g Fp(x)h Ft(tak)n(es)e(on)g(a)h(di\013eren)n(t)523 2240 y(t)n(yp)r(e)d(ranging)f (from)g(nonsense)h(\(indicated)g(b)n(y)g(the)g(t)n(yp)r(e)g Fl(junk)p Ft(\))h(to)e(a)h(fully)g(initialized)h(pair)523 2340 y(of)j(in)n(tegers.)f(In)i(this)g(simple)f(example,)g(there)g(are) f(no)h(aliases)f(of)i(the)f(pair)g(and)g(therefore)523 2440 y(w)n(e)i(migh)n(t)g(b)r(e)h(able)f(to)g(use)g(linear)f(t)n(yp)r (es)i(to)f(v)n(erify)f(that)i(the)f(co)r(de)g(is)h(safe.)e(Ho)n(w)n(ev) n(er,)g(in)523 2539 y(a)f(more)f(complex)h(example,)g(a)f(compiler)h (migh)n(t)g(generate)f(co)r(de)h(to)g(compute)g(the)h(initial)523 2639 y(v)-5 b(alues)37 b(of)h(the)g(tuple)g(\014elds)g(b)r(et)n(w)n (een)g(allo)r(cation)e(and)i(the)g(initializing)f(assignmen)n(ts.)523 2739 y(During)30 b(the)h(computation,)f(a)f(register)g(allo)r(cator)f (ma)n(y)i(b)r(e)h(forced)e(to)h(mo)n(v)n(e)f(the)i(unini-)523 2838 y(tialized)24 b(or)e(partially)h(initialized)g(v)-5 b(alue)24 b Fp(x)g Ft(b)r(et)n(w)n(een)f(stac)n(k)g(slots)g(and)g (registers,)f(creating)523 2938 y(aliases:)778 2993 y 18945146 3789028 0 0 38942801 8091156 startTexFig 778 2993 a %%BeginDocument: register_move.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: register_move.eps %%Creator: fig2dev Version 3.2 Patchlevel 1a %%CreationDate: Fri Oct 15 15:08:31 1999 %%For: walker@twinkie.cs.cornell.edu (David Walker,,,,phd Grad F95) %%Orientation: Portrait %%BoundingBox: 0 0 592 123 %%Pages: 0 %%BeginSetup %%EndSetup %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -66.0 240.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def %%EndProlog $F2psBegin 10 setmiterlimit n -1000 4987 m -1000 -1000 l 11962 -1000 l 11962 4987 l cp clip n 0.06000 0.06000 sc % Arc 7.500 slw gs clippath 9574 2886 m 9525 3000 l 9515 2877 l 9493 3010 l 9552 3020 l cp clip n 10189.3 3029.5 664.9 -46.1 -177.5 arcn gs col0 s gr gr % arrowhead n 9574 2886 m 9525 3000 l 9515 2877 l 9544 2882 l 9574 2886 l cp gs 0.00 setgray ef gr col0 s % Arc gs clippath 2536 3611 m 2625 3525 l 2586 3643 l 2658 3528 l 2608 3496 l cp clip n 1975.4 3202.9 725.1 139.4 26.4 arcn gs col0 s gr gr % arrowhead n 2536 3611 m 2625 3525 l 2586 3643 l 2561 3627 l 2536 3611 l cp gs 0.00 setgray ef gr col0 s % Arc gs clippath 8911 3611 m 9000 3525 l 8961 3643 l 9033 3528 l 8983 3496 l cp clip n 8350.4 3202.9 725.1 139.4 26.4 arcn gs col0 s gr gr % arrowhead n 8911 3611 m 9000 3525 l 8961 3643 l 8936 3627 l 8911 3611 l cp gs 0.00 setgray ef gr col0 s % Ellipse n 3000 3300 525 300 0 360 DrawEllipse gs col0 s gr % Ellipse n 9375 3300 525 300 0 360 DrawEllipse gs col0 s gr % Polyline n 5700 3000 m 6300 3000 l gs col0 s gr % Polyline n 5700 3150 m 6300 3150 l gs col0 s gr % Polyline n 6300 2850 m 6300 3300 l 6675 3075 l 6300 2850 l cp gs col0 s gr % Polyline n 5700 3000 m 5700 3150 l gs col0 s gr % Polyline n 1125 3450 m 1725 3450 l gs col0 s gr % Polyline n 1125 2925 m 1725 2925 l gs col0 s gr % Polyline n 3975 2325 m 4575 2325 l 4575 2850 l 3975 2850 l cp gs col0 s gr % Polyline n 1125 2400 m 1725 2400 l 1725 3975 l 1125 3975 l cp gs col0 s gr % Polyline n 7500 3450 m 8100 3450 l gs col0 s gr % Polyline n 7500 2925 m 8100 2925 l gs col0 s gr % Polyline n 10350 2325 m 10950 2325 l 10950 2850 l 10350 2850 l cp gs col0 s gr % Polyline n 7500 2400 m 8100 2400 l 8100 3975 l 7500 3975 l cp gs col0 s gr /Times-Bold ff 180.00 scf sf 9075 3375 m gs 1 -1 sc (OBJECT) col0 sh gr /Times-Bold ff 180.00 scf sf 2700 3375 m gs 1 -1 sc (OBJECT) col0 sh gr /Times-Bold ff 180.00 scf sf 7500 2100 m gs 1 -1 sc (STACK) col0 sh gr /Times-Bold ff 180.00 scf sf 1125 2100 m gs 1 -1 sc (STACK) col0 sh gr /Times-Bold ff 180.00 scf sf 4125 2100 m gs 1 -1 sc (R1) col0 sh gr /Times-Bold ff 180.00 scf sf 10500 2100 m gs 1 -1 sc (R1) col0 sh gr /Times-Bold ff 180.00 scf sf 5550 3600 m gs 1 -1 sc (Copy To Register) col0 sh gr $F2psEnd rs %%EndDocument endTexFig 648 3601 a Ft(If)38 b Fp(x)h Ft(is)g(a)f(linear)f(v)-5 b(alue,)39 b(one)f(of)g(the)h(p)r(oin)n(ters)e(sho)n(wn)h(ab)r(o)n(v)n (e)f(w)n(ould)h(ha)n(v)n(e)f(to)i(b)r(e)523 3701 y(\\in)n(v)-5 b(alidated")23 b(in)h(some)g(w)n(a)n(y)f(after)g(eac)n(h)h(mo)n(v)n(e.) f(Unfortunately)-7 b(,)24 b(assuming)f(the)h(p)r(oin)n(ter)523 3800 y(on)i(the)h(stac)n(k)e(is)i(in)n(v)-5 b(alidated,)26 b(future)h(register)e(pressure)g(ma)n(y)g(force)h Fp(x)h Ft(to)f(b)r(e)h(ph)n(ysically)523 3900 y(copied)21 b(bac)n(k)f(on)n(to) g(the)h(stac)n(k.)f(Although)h(this)h(additional)e(cop)n(y)g(is)h (unnecessary)e(b)r(ecause)523 4000 y(the)31 b(register)e(allo)r(cator)f (can)i(easily)g(remem)n(b)r(er)f(that)i(a)f(p)r(oin)n(ter)g(to)g(the)h (data)f(structure)523 4099 y(remains)d(on)g(the)h(stac)n(k,)f(the)h (limitations)f(of)h(a)f(pure)g(linear)g(t)n(yp)r(e)h(system)f(require)g (it.)648 4227 y(P)n(oin)n(ter)17 b(aliasing)i(and)g(data)g(sharing)f (also)h(o)r(ccur)f(naturally)h(in)h(other)f(data)g(structures)523 4327 y(in)n(tro)r(duced)h(b)n(y)g(a)g(compiler.)g(F)-7 b(or)19 b(example,)h(compilers)f(often)i(use)f(a)g(top-of-stac)n(k)e(p) r(oin)n(ter)523 4426 y(and)25 b(a)g(frame)g(p)r(oin)n(ter,)g(b)r(oth)g (of)h(whic)n(h)f(p)r(oin)n(t)g(to)g(the)h(same)f(data)g(structure.)f (Compiling)523 4526 y(a)32 b(language)e(lik)n(e)h(P)n(ascal)f(using)i (displa)n(ys)f([1])h(generalizes)e(this)i(problem)g(to)f(ha)n(ving)g (an)523 4625 y(arbitrary)18 b(\(but)j(statically)e(kno)n(wn\))g(n)n(um) n(b)r(er)h(of)g(p)r(oin)n(ters)f(in)n(to)h(the)g(same)f(data)g (structure.)523 4725 y(In)30 b(eac)n(h)g(of)g(these)g(examples,)f(a)h (\015exible)g(t)n(yp)r(e)h(system)f(will)g(allo)n(w)f(aliasing)g(but)i (ensure)523 4825 y(that)37 b(no)f(inconsistencies)g(arise.)f(T)n(yp)r (e)h(systems)g(for)g(lo)n(w-lev)n(el)f(languages,)g(therefore,)523 4924 y(should)27 b(supp)r(ort)h(v)-5 b(alues)27 b(whose)g(t)n(yp)r(es)h (c)n(hange)e(ev)n(en)h(when)h(those)f(v)-5 b(alues)27 b(are)g(aliased.)p eop %%Page: 3 3 3 2 bop 648 448 a Ft(W)-7 b(e)24 b(ha)n(v)n(e)f(devised)g(a)h(new)g(t)n (yp)r(e)g(system)g(that)g(uses)f(linear)g(reasoning)f(to)i(allo)n(w)f (mem-)523 548 y(ory)i(reuse)g(at)h(di\013eren)n(t)h(t)n(yp)r(es,)f(ob)5 b(ject)26 b(initialization,)g(safe)f(deallo)r(cation,)h(and)g(trac)n (king)523 648 y(of)33 b(sharing)g(in)g(data)g(structures.)g(This)h(pap) r(er)f(formalizes)f(the)i(t)n(yp)r(e)g(system)f(and)g(pro-)523 747 y(vides)21 b(a)g(theoretical)g(foundation)g(for)g(safely)g(in)n (tegrating)g(op)r(erations)f(that)i(dep)r(end)g(up)r(on)523 847 y(p)r(oin)n(ter)27 b(aliasing)f(with)h(t)n(yp)r(e)g(systems)g(that) h(include)f(p)r(olymorphism)f(and)h(higher-order)523 946 y(functions.)648 1050 y(W)-7 b(e)33 b(ha)n(v)n(e)g(extended)g(the)h (T)-7 b(AL)34 b(implemen)n(tation)g(with)g(the)g(features)e(describ)r (ed)i(in)523 1149 y(this)25 b(pap)r(er.)911 1119 y Fk(1)973 1149 y Ft(It)h(w)n(as)e(quite)h(straigh)n(tforw)n(ard)d(to)j(augmen)n (t)f(the)i(existing)e(F)2941 1119 y Fj(!)2990 1149 y Ft(-based)g(t)n(yp)r(e)523 1249 y(system)39 b(b)r(ecause)g(man)n(y)g (of)g(the)h(basic)f(mec)n(hanisms,)g(including)g(p)r(olymorphism)g(and) 523 1349 y(singleton)23 b(t)n(yp)r(es,)g(w)n(ere)f(already)g(presen)n (t)g(in)i(the)f(t)n(yp)r(e)g(constructor)f(language.)g(P)n(op)r(corn,) 523 1448 y(an)34 b(optimizing)g(compiler)g(for)g(a)g(safe)f(C-lik)n(e)h (language,)f(generates)f(co)r(de)j(for)e(the)i(new)523 1548 y(T)-7 b(AL)28 b(t)n(yp)r(e)g(system)f(and)g(uses)h(the)g(alias)e (trac)n(king)g(features)h(of)h(our)f(t)n(yp)r(e)h(system.)648 1651 y(The)e(P)n(op)r(corn)g(compiler)g(and)g(T)-7 b(AL)27 b(implemen)n(tation)g(demonstrate)f(that)h(the)h(ideas)523 1751 y(presen)n(ted)35 b(in)h(this)g(pap)r(er)g(can)f(b)r(e)h(in)n (tegrated)f(with)i(a)e(practical)g(and)g(complete)h(pro-)523 1851 y(gramming)e(language.)g(Ho)n(w)n(ev)n(er,)f(for)h(the)i(sak)n(e)e (of)h(clarit)n(y)-7 b(,)34 b(w)n(e)h(only)g(presen)n(t)g(a)f(small)523 1950 y(fragmen)n(t)f(of)h(our)f(t)n(yp)r(e)h(system)g(and,)g(rather)f (than)h(formalizing)f(it)h(in)g(the)h(con)n(text)e(of)523 2050 y(T)-7 b(AL,)23 b(w)n(e)f(presen)n(t)f(our)h(ideas)g(in)g(terms)g (of)g(a)g(more)g(familiar)f(lam)n(b)r(da)h(calculus.)g(Section)g(2)523 2149 y(giv)n(es)h(an)h(informal)g(o)n(v)n(erview)e(of)j(ho)n(w)e(to)i (use)f Fl(aliasing)k(c)l(onstr)l(aints)p Ft(,)c(a)g(notion)g(whic)n(h)h (ex-)523 2249 y(tends)39 b(con)n(v)n(en)n(tional)e(linear)h(t)n(yp)r(e) h(systems,)g(to)f(admit)i(destructiv)n(e)e(op)r(erations)f(suc)n(h)523 2349 y(as)c(ob)5 b(ject)33 b(deallo)r(cation)f(in)i(the)g(presence)e (of)i(aliasing.)e(Section)h(3)g(describ)r(es)g(the)h(core)523 2448 y(language)d(formally)-7 b(,)32 b(with)h(emphasis)g(on)f(the)h (rules)g(for)f(manipulating)g(linear)g(aliasing)523 2548 y(constrain)n(ts.)25 b(Section)g(4)h(extends)g(the)g(language)e(with)i (non-linear)f(aliasing)f(constrain)n(ts.)523 2648 y(Finally)-7 b(,)28 b(Section)f(5)g(discusses)g(future)h(and)g(related)f(w)n(ork.) 523 2932 y Fq(2)112 b(Informal)37 b(Ov)m(erview)523 3150 y Ft(The)29 b(main)f(feature)h(of)f(our)g(new)h(t)n(yp)r(e)f(system)h (is)f(a)g(collection)g(of)h Fl(aliasing)j(c)l(onstr)l(aints)p Ft(.)523 3249 y(Aliasing)21 b(constrain)n(ts)g(describ)r(e)h(the)g (shap)r(e)g(of)g(the)g(store)f(and)h(ev)n(ery)e(function)j(uses)e(them) 523 3349 y(to)27 b(sp)r(ecify)g(the)g(store)e(that)i(it)h(exp)r(ects.)e (If)h(the)h(curren)n(t)d(store)h(do)r(es)g(not)h(conform)f(to)h(the)523 3448 y(constrain)n(ts)38 b(sp)r(eci\014ed,)j(then)f(the)g(t)n(yp)r(e)g (system)g(ensures)f(that)h(the)g(function)g(cannot)523 3548 y(b)r(e)c(called.)f(T)-7 b(o)35 b(illustrate)g(ho)n(w)g(our)g (constrain)n(ts)f(abstract)g(a)h(concrete)g(store,)g(w)n(e)g(will)523 3648 y(consider)27 b(the)h(follo)n(wing)e(example:)1184 3719 y 12314374 4310026 0 0 23812997 8354283 startTexFig 1184 3719 a %%BeginDocument: store1.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: store1.eps %%Creator: fig2dev Version 3.2 Patchlevel 1a %%CreationDate: Fri Oct 15 14:57:23 1999 %%For: walker@twinkie.cs.cornell.edu (David Walker,,,,phd Grad F95) %%Orientation: Portrait %%BoundingBox: 0 0 362 127 %%Pages: 0 %%BeginSetup %%EndSetup %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -314.0 240.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def %%EndProlog $F2psBegin 10 setmiterlimit n -1000 4987 m -1000 -1000 l 12262 -1000 l 12262 4987 l cp clip n 0.06000 0.06000 sc % Arc 7.500 slw gs clippath 7668 2290 m 7725 2400 l 7623 2330 l 7712 2431 l 7757 2392 l cp clip n 6737.5 3166.7 1250.2 -150.4 -37.8 arc gs col0 s gr gr % arrowhead n 7668 2290 m 7725 2400 l 7623 2330 l 7646 2310 l 7668 2290 l cp gs 0.00 setgray ef gr col0 s % Polyline n 7500 2925 m 8250 2925 l gs col0 s gr % Polyline n 7500 3450 m 8250 3450 l gs col0 s gr % Polyline n 7500 2400 m 8250 2400 l 8250 3975 l 7500 3975 l cp gs col0 s gr % Polyline n 10421 2025 m 10429 2025 l gs col7 s gr % Polyline n 10421 2025 m 10429 2025 l gs col7 s gr % Polyline n 10421 2025 m 10429 2025 l gs col7 s gr % Polyline n 10421 2025 m 10429 2025 l gs col7 s gr % Polyline n 10421 2025 m 10429 2025 l gs col7 s gr % Polyline n 10421 2025 m 10429 2025 l gs col7 s gr /Times-Bold ff 180.00 scf sf 10725 2025 m gs 1 -1 sc (R1) col0 sh gr % Polyline n 10500 2325 m 11250 2325 l 11250 2850 l 10500 2850 l cp gs col0 s gr % Polyline n 5250 2400 m 6000 2400 l 6000 2925 l 5250 2925 l cp gs col0 s gr /Times-Bold ff 180.00 scf sf 7575 2100 m gs 1 -1 sc (STACK) col0 sh gr /Times-Bold ff 180.00 scf sf 5475 2100 m gs 1 -1 sc (SP) col0 sh gr /Times-Bold ff 180.00 scf sf 7725 2700 m gs 1 -1 sc (577) col0 sh gr /Times-Bold ff 180.00 scf sf 7575 3225 m gs 1 -1 sc (TRUE) col0 sh gr /Times-Bold ff 180.00 scf sf 9300 3375 m gs 1 -1 sc (42) col0 sh gr % Arc gs clippath 8907 3607 m 9000 3525 l 8957 3641 l 9033 3530 l 8984 3496 l cp clip n 8282.9 3122.0 822.6 117.7 29.3 arcn gs col0 s gr gr % arrowhead n 8907 3607 m 9000 3525 l 8957 3641 l 8932 3624 l 8907 3607 l cp gs 0.00 setgray ef gr col0 s % Arc gs clippath 9574 2886 m 9525 3000 l 9515 2877 l 9493 3010 l 9552 3020 l cp clip n 10189.3 3029.5 664.9 -46.1 -177.5 arcn gs col0 s gr gr % arrowhead n 9574 2886 m 9525 3000 l 9515 2877 l 9544 2882 l 9574 2886 l cp gs 0.00 setgray ef gr col0 s % Ellipse n 9375 3300 525 300 0 360 DrawEllipse gs col0 s gr $F2psEnd rs %%EndDocument endTexFig 523 4369 a Ft(Here,)g Fp(sp)g Ft(is)g(a)g(p)r(oin)n(ter)g(to)g(a)g (stac)n(k)f(frame,)h(whic)n(h)g(has)g(b)r(een)g(allo)r(cated)g(on)g (the)g(heap)g(\(as)523 4468 y(migh)n(t)g(b)r(e)g(done)f(in)h(the)g (SML/NJ)f(compiler)g([2],)g(for)g(instance\).)h(This)g(frame)f(con)n (tains)f(a)523 4568 y(p)r(oin)n(ter)j(to)h(a)f(second)g(ob)5 b(ject,)27 b(whic)n(h)h(is)f(also)g(p)r(oin)n(ted)h(to)f(b)n(y)g (register)g Fp(r)2860 4580 y Fk(1)2897 4568 y Ft(.)648 4671 y(In)41 b(our)g(program)f(mo)r(del,)i(ev)n(ery)e(heap-allo)r (cated)g(ob)5 b(ject)42 b(o)r(ccupies)f(a)g(particular)523 4771 y(memory)21 b(lo)r(cation.)g(F)-7 b(or)21 b(example,)g(the)h(stac) n(k)f(frame)g(migh)n(t)h(o)r(ccup)n(y)f(lo)r(cation)g Fp(`)3077 4783 y Fj(s)3134 4771 y Ft(and)h(the)p 523 4839 473 4 v 546 4893 a Fi(1)606 4924 y Fs(See)k Fh (http://www.cs.cornell.edu/talc)32 b Fs(for)27 b(the)e(latest)h(soft)n (w)n(are)i(release.)p eop %%Page: 4 4 4 3 bop 523 448 a Ft(second)25 b(ob)5 b(ject)25 b(migh)n(t)g(o)r(ccup)n (y)g(lo)r(cation)g Fp(`)1899 460 y Fj(o)1936 448 y Ft(.)g(In)h(order)e (to)h(trac)n(k)f(the)i(\015o)n(w)f(of)g(p)r(oin)n(ters)g(to)523 548 y(these)31 b(lo)r(cations)g(accurately)-7 b(,)30 b(w)n(e)g(re\015ect)h(lo)r(cations)g(in)n(to)g(the)g(t)n(yp)r(e)h (system:)f(A)g(p)r(oin)n(ter)523 648 y(to)h(a)f(lo)r(cation)g Fp(`)h Ft(is)g(giv)n(en)f(the)h(singleton)f(t)n(yp)r(e)h Fl(ptr)p Ft(\()p Fp(`)p Ft(\).)g(Eac)n(h)f(singleton)g(t)n(yp)r(e)h (con)n(tains)523 747 y(exactly)f(one)f(v)-5 b(alue)31 b(\(the)h(p)r(oin)n(ter)f(in)g(question\).)g(This)g(prop)r(ert)n(y)f (allo)n(ws)g(the)i(t)n(yp)r(e)f(sys-)523 847 y(tem)e(to)f(reason)f(ab)r (out)h(p)r(oin)n(ters)g(in)h(a)f(v)n(ery)f(\014ne-grained)g(w)n(a)n(y) -7 b(.)28 b(In)g(fact,)h(it)g(allo)n(ws)e(us)h(to)523 946 y(represen)n(t)e(the)i(graph)f(structure)g(of)g(our)g(example)g (store)g(precisely:)1198 1018 y 12314374 4310026 0 0 23812997 8354283 startTexFig 1198 1018 a %%BeginDocument: store2.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: store2.eps %%Creator: fig2dev Version 3.2 Patchlevel 1a %%CreationDate: Fri Oct 15 14:58:08 1999 %%For: walker@twinkie.cs.cornell.edu (David Walker,,,,phd Grad F95) %%Orientation: Portrait %%BoundingBox: 0 0 362 127 %%Pages: 0 %%BeginSetup %%EndSetup %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -314.0 240.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def %%EndProlog $F2psBegin 10 setmiterlimit n -1000 4987 m -1000 -1000 l 12262 -1000 l 12262 4987 l cp clip n 0.06000 0.06000 sc % Polyline 7.500 slw n 10500 2325 m 11250 2325 l 11250 2850 l 10500 2850 l cp gs col0 s gr % Arc gs clippath 7668 2290 m 7725 2400 l 7623 2330 l 7712 2431 l 7757 2392 l cp clip [15 45] 45 sd n 6737.5 3166.7 1250.2 -150.4 -37.8 arc gs col0 s gr gr [] 0 sd % arrowhead n 7668 2290 m 7725 2400 l 7623 2330 l 7646 2310 l 7668 2290 l cp gs 0.00 setgray ef gr col0 s % Polyline n 5250 2400 m 6000 2400 l 6000 2925 l 5250 2925 l cp gs col0 s gr /Times-Bold ff 180.00 scf sf 10725 2025 m gs 1 -1 sc (R1) col0 sh gr % Polyline n 10421 2025 m 10429 2025 l gs col7 s gr % Polyline n 10421 2025 m 10429 2025 l gs col7 s gr % Polyline n 10421 2025 m 10429 2025 l gs col7 s gr % Polyline n 10421 2025 m 10429 2025 l gs col7 s gr % Polyline n 10421 2025 m 10429 2025 l gs col7 s gr % Polyline n 10421 2025 m 10429 2025 l gs col7 s gr % Polyline n 7500 2925 m 8250 2925 l gs col0 s gr % Polyline n 7500 3450 m 8250 3450 l gs col0 s gr % Polyline n 7500 2400 m 8250 2400 l 8250 3975 l 7500 3975 l cp gs col0 s gr /Times-Bold ff 180.00 scf sf 7575 2100 m gs 1 -1 sc (STACK) col0 sh gr /Times-Bold ff 180.00 scf sf 7650 3225 m gs 1 -1 sc (BOOL) col0 sh gr /Times-Bold ff 180.00 scf sf 5475 2100 m gs 1 -1 sc (SP) col0 sh gr /Times-Bold ff 180.00 scf sf 7575 3750 m gs 1 -1 sc (PTR\(lo\)) col0 sh gr /Times-Bold ff 180.00 scf sf 8550 3375 m gs 1 -1 sc (lo:) col0 sh gr /Times-Bold ff 180.00 scf sf 9225 3375 m gs 1 -1 sc (INT) col0 sh gr /Times-Bold ff 180.00 scf sf 7725 2700 m gs 1 -1 sc (INT) col0 sh gr /Times-Bold ff 180.00 scf sf 7200 2700 m gs 1 -1 sc (ls:) col0 sh gr /Times-Bold ff 180.00 scf sf 10575 2625 m gs 1 -1 sc (PTR\(lo\)) col0 sh gr /Times-Bold ff 180.00 scf sf 5325 2700 m gs 1 -1 sc (PTR\(ls\)) col0 sh gr % Arc gs clippath 8907 3607 m 9000 3525 l 8957 3641 l 9033 3530 l 8984 3496 l cp clip [15 45] 45 sd n 8282.9 3122.0 822.6 117.7 29.3 arcn gs col0 s gr gr [] 0 sd % arrowhead n 8907 3607 m 9000 3525 l 8957 3641 l 8932 3624 l 8907 3607 l cp gs 0.00 setgray ef gr col0 s % Arc gs clippath 9574 2886 m 9525 3000 l 9515 2877 l 9493 3010 l 9552 3020 l cp clip [15 45] 45 sd n 10189.3 3029.5 664.9 -46.1 -177.5 arcn gs col0 s gr gr [] 0 sd % arrowhead n 9574 2886 m 9525 3000 l 9515 2877 l 9544 2882 l 9574 2886 l cp gs 0.00 setgray ef gr col0 s % Ellipse n 9375 3300 525 300 0 360 DrawEllipse gs col0 s gr $F2psEnd rs %%EndDocument endTexFig 523 1688 a Ft(W)-7 b(e)23 b(represen)n(t)e(this)h(picture)g(in)h(our)e (formal)h(syn)n(tax)f(b)n(y)h(declaring)f(the)i(program)d(v)-5 b(ariable)523 1788 y Fp(sp)27 b Ft(to)g(ha)n(v)n(e)f(t)n(yp)r(e)h Fl(ptr)p Ft(\()p Fp(`)1281 1800 y Fj(s)1316 1788 y Ft(\))h(and)f Fp(r)1574 1800 y Fk(1)1639 1788 y Ft(to)g(ha)n(v)n(e)f(t)n(yp)r(e)h Fl(ptr)p Ft(\()p Fp(`)2289 1800 y Fj(o)2326 1788 y Ft(\).)g(The)g (store)g(itself)g(is)g(describ)r(ed)523 1887 y(b)n(y)37 b(the)h(constrain)n(ts)e Fn(f)p Fp(`)1311 1899 y Fj(s)1385 1887 y Fn(7!)j(h)p Fp(int;)14 b(bool)q(;)g Fl(ptr)p Ft(\()p Fp(`)2036 1899 y Fj(o)2073 1887 y Ft(\))p Fn(ig)25 b(\010)g(f)p Fp(`)2371 1899 y Fj(o)2446 1887 y Fn(7!)39 b(h)p Fp(int)p Fn(ig)p Ft(,)e(where)g(the)h(t)n(yp)r(e)523 1987 y Fn(h)p Fp(\034)591 1999 y Fk(1)629 1987 y Fp(;)14 b(:)g(:)g(:)f(;)h(\034)849 1999 y Fj(n)895 1987 y Fn(i)24 b Ft(denotes)g(a)g(memory)f(blo)r(c)n(k) h(con)n(taining)f(v)-5 b(alues)24 b(with)g(t)n(yp)r(es)g Fp(\034)2928 1999 y Fk(1)2990 1987 y Ft(through)f Fp(\034)3336 1999 y Fj(n)3382 1987 y Ft(.)648 2111 y(Constrain)n(ts)40 b(of)i(the)g(form)f Fn(f)p Fp(`)k Fn(7!)i Fp(\034)9 b Fn(g)42 b Ft(are)f(a)g(reasonable)f(starting)g(p)r(oin)n(t)i(for)f(an) 523 2210 y(abstraction)e(of)h(the)h(store.)e(Ho)n(w)n(ev)n(er,)g(they)h (are)f(actually)h Fl(to)l(o)i(pr)l(e)l(cise)f Ft(to)f(b)r(e)h(useful) 523 2310 y(for)27 b(general-purp)r(ose)e(programs.)g(Consider,)i(for)f (example,)i(the)f(simple)h(function)g Fl(der)l(ef)p Ft(,)523 2410 y(whic)n(h)g(retriev)n(es)e(an)h(in)n(teger)g(from)g(a)h (reference)e(cell.)i(There)f(are)g(t)n(w)n(o)g(immediate)h(prob-)523 2509 y(lems)35 b(if)g(w)n(e)f(demand)h(that)g(co)r(de)g(call)f Fl(der)l(ef)i Ft(when)f(the)g(store)f(has)g(a)h(shap)r(e)f(describ)r (ed)523 2609 y(b)n(y)f Fn(f)p Fp(`)e Fn(7!)h(h)p Fp(int)p Fn(ig)p Ft(.)h(First,)g Fl(der)l(ef)h Ft(can)f(only)f(b)r(e)i(used)f (to)g(derefence)g(the)g(lo)r(cation)f Fp(`)p Ft(,)h(and)523 2708 y(not,)27 b(for)g(example,)g(the)h(lo)r(cations)e Fp(`)1694 2678 y Fg(0)1744 2708 y Ft(or)g Fp(`)1880 2678 y Fg(00)1922 2708 y Ft(.)i(This)f(problem)g(is)g(easily)f(solv)n(ed)h (b)n(y)f(adding)523 2808 y Fl(lo)l(c)l(ation)i(p)l(olymorphism)p Ft(.)f(The)d(exact)g(name)g(of)g(a)g(lo)r(cation)f(is)h(usually)g (unimp)r(ortan)n(t;)g(w)n(e)523 2908 y(need)34 b(only)f(establish)h(a)f (dep)r(endence)h(b)r(et)n(w)n(een)g(p)r(oin)n(ter)g(t)n(yp)r(e)g(and)f (constrain)n(t.)g(Hence)523 3007 y(w)n(e)g(could)f(sp)r(ecify)i(that)f Fl(der)l(ef)h Ft(requires)e(a)g(store)g Fn(f)p Fp(\032)g Fn(7!)g(h)p Fp(int)p Fn(ig)h Ft(where)f Fp(\032)h Ft(is)g(a)g(lo)r (cation)523 3107 y(v)-5 b(ariable)29 b(instead)h(of)g(some)g(sp)r (eci\014c)g(lo)r(cation)f Fp(`)p Ft(.)h(Second,)g(the)h(constrain)n(t)e Fn(f)p Fp(`)d Fn(7!)h(h)p Fp(int)p Fn(ig)523 3207 y Ft(sp)r(eci\014es) 22 b(a)f(store)g(with)i(exactly)e(one)g(lo)r(cation)h Fp(`)f Ft(although)g(w)n(e)h(ma)n(y)f(w)n(an)n(t)g(to)h(dereference)523 3306 y(a)33 b(single)f(in)n(teger)g(reference)g(amongst)g(a)g(sea)h(of) f(other)h(heap-allo)r(cated)e(ob)5 b(jects.)33 b(Since)523 3406 y Fl(der)l(ef)i Ft(do)r(es)f(not)g(use)f(or)g(mo)r(dify)i(an)n(y)e (of)h(these)g(other)f(references,)g(w)n(e)g(should)h(b)r(e)g(able)523 3505 y(to)27 b(abstract)f(a)n(w)n(a)n(y)e(the)j(size)g(and)g(shap)r(e)f (of)h(the)g(rest)g(of)f(the)i(store.)d(W)-7 b(e)28 b(accomplish)e(this) 523 3605 y(task)g(using)g Fl(stor)l(e)j(p)l(olymorphism)p Ft(.)g(An)e(appropriate)e(constrain)n(t)g(for)h(the)h(function)g Fl(der)l(ef)523 3705 y Ft(is)32 b Fp(\017)21 b Fn(\010)g(f)p Fp(\032)30 b Fn(7!)h(h)p Fp(int)p Fn(ig)h Ft(where)f Fp(\017)h Ft(is)g(a)g(constrain)n(t)f(v)-5 b(ariable)31 b(that)h(ma)n(y)g(instan)n(tiated)f(with)523 3804 y(an)n(y)c(other)g (constrain)n(t.)648 3928 y(The)e(third)g(main)g(feature)g(of)h(our)e (constrain)n(t)g(language)g(is)h(the)g(capabilit)n(y)g(to)g(distin-)523 4028 y(guish)j(b)r(et)n(w)n(een)h(linear)e(constrain)n(ts)g Fn(f)p Fp(\032)d Fn(7!)h Fp(\034)9 b Fn(g)29 b Ft(and)f(non-linear)f (constrain)n(ts)g Fn(f)p Fp(\032)d Fn(7!)h Fp(\034)9 b Fn(g)3334 3998 y Fj(!)3382 4028 y Ft(.)523 4127 y(Linear)28 b(constrain)n(ts)f(come)h(with)i(the)f(additional)f(guaran)n(tee)f (that)i(the)g(lo)r(cation)f(on)h(the)523 4227 y(left-hand)38 b(side)g(of)h(the)f(constrain)n(t)f(\()p Fp(\032)p Ft(\))i(is)f(not)g (aliased)f(b)n(y)h(an)n(y)f(other)h(lo)r(cation)f(\()p Fp(\032)3326 4197 y Fg(0)3350 4227 y Ft(\).)523 4327 y(This)26 b(in)n(v)-5 b(arian)n(t)25 b(is)g(main)n(tained)h(despite)g (the)g(presence)f(of)h(lo)r(cation)f(p)r(olymorphism)g(and)523 4426 y(store)f(p)r(olymorphism.)g(In)n(tuitiv)n(ely)-7 b(,)26 b(b)r(ecause)e Fp(\032)h Ft(is)g(unaliased,)f(w)n(e)h(can)f (safely)h(deallo)r(cate)523 4526 y(its)36 b(memory)f(or)f(c)n(hange)h (the)h(t)n(yp)r(es)f(of)h(the)g(v)-5 b(alues)35 b(stored)g(there.)h (The)f(k)n(ey)g(prop)r(ert)n(y)523 4625 y(that)e(mak)n(es)e(our)g (system)h(more)g(expressiv)n(e)e(than)j(traditional)e(linear)h(systems) g(is)g(that)523 4725 y(although)38 b(the)h(aliasing)e(constrain)n(ts)g (ma)n(y)h(b)r(e)h(linear,)f(the)h(p)r(oin)n(ter)g(v)-5 b(alues)38 b(that)h(\015o)n(w)523 4825 y(through)23 b(a)g(computation)h (are)e(not.)i(Hence,)g(there)f(is)h(no)f Fl(dir)l(e)l(ct)h Ft(restriction)f(on)g(the)h(cop)n(y-)523 4924 y(ing)j(and)h(reuse)f(of) g(p)r(oin)n(ters.)p eop %%Page: 5 5 5 4 bop 648 448 a Ft(The)39 b(follo)n(wing)g(example)g(illustrates)g (ho)n(w)g(the)h(t)n(yp)r(e)g(system)f(uses)g(aliasing)g(con-)523 548 y(strain)n(ts)26 b(and)h(singleton)f(t)n(yp)r(es)h(to)f(trac)n(k)g (the)h(ev)n(olution)f(of)h(the)g(store)f(across)f(a)h(series)g(of)523 648 y(instructions)k(that)g(allo)r(cate,)f(initialize,)h(and)g(then)h (deallo)r(cate)e(storage.)f(In)i(this)h(exam-)523 747 y(ple,)26 b(the)g(instruction)g Fo(malloc)20 b Fp(x;)14 b(\032;)g(n)26 b Ft(allo)r(cates)f(n)h(w)n(ords)e(of)i(storage.)d(The)j (new)g(storage)523 847 y(is)34 b(allo)r(cated)f(at)g(a)h(fresh)f(lo)r (cation)h Fp(`)f Ft(in)h(the)g(heap)g(and)g Fp(`)f Ft(is)h(substituted) g(for)g Fp(\032)g Ft(in)g(the)523 946 y(remaining)j(instructions.)g(A)h (p)r(oin)n(ter)g(to)f Fp(`)h Ft(is)g(substitued)g(for)f Fp(x)p Ft(.)i(Both)e Fp(\032)h Ft(and)g Fp(x)g Ft(are)523 1046 y(considered)27 b(b)r(ound)h(b)n(y)f(this)h(instruction.)g(The)g Fo(free)e Ft(instruction)h(deallo)r(cates)g(storage.)523 1146 y(Deallo)r(cated)h(storage)e(has)i(t)n(yp)r(e)g Fl(junk)h Ft(and)f(the)g(t)n(yp)r(e)h(system)f(prev)n(en)n(ts)f(an)n(y) g(future)i(use)523 1245 y(of)f(that)f(space.)710 1342 y(Instructions)p 710 1355 433 4 v 376 w(Constrain)n(ts)g(\(Initially)g (the)h(constrain)n(ts)f Fp(\017)p Ft(\))p 1519 1376 1425 4 v 523 1449 a(1.)122 b Fo(malloc)20 b Fp(sp;)14 b(\032)1155 1461 y Fk(1)1192 1449 y Fp(;)g Ft(2;)225 b Fp(\017)18 b Fn(\010)g(f)p Fp(\032)1739 1461 y Fk(1)1799 1449 y Fn(7!)23 b(h)p Fl(junk)p Fp(;)14 b Fl(junk)p Fn(ig)593 b Fp(sp)23 b Ft(:)g Fl(ptr)p Ft(\()p Fp(\032)3281 1461 y Fk(1)3319 1449 y Ft(\))523 1549 y(2.)122 b Fp(sp)p Ft([1]:=)o(1;)488 b Fp(\017)18 b Fn(\010)g(f)p Fp(\032)1739 1561 y Fk(1)1799 1549 y Fn(7!)23 b(h)p Fp(int;)14 b Fl(junk)p Fn(ig)523 1649 y Ft(3.)122 b Fo(malloc)20 b Fp(r)1031 1661 y Fk(1)1069 1649 y Fp(;)14 b(\032)1149 1661 y Fk(2)1186 1649 y Fp(;)g Ft(1;)231 b Fp(\017)18 b Fn(\010)g(f)p Fp(\032)1739 1661 y Fk(1)1799 1649 y Fn(7!)23 b(h)p Fp(int;)14 b Fl(junk)p Fn(i)p Fp(;)g(\032)2350 1661 y Fk(2)2410 1649 y Fn(7!)23 b(h)p Fl(junk)p Fn(ig)174 b Fp(r)2988 1661 y Fk(1)3049 1649 y Ft(:)23 b Fl(ptr)p Ft(\()p Fp(\032)3275 1661 y Fk(2)3313 1649 y Ft(\))523 1748 y(4.)122 b Fp(sp)p Ft([2]:=)o Fp(r)1003 1760 y Fk(1)1040 1748 y Ft(;)456 b Fp(\017)18 b Fn(\010)g(f)p Fp(\032)1739 1760 y Fk(1)1799 1748 y Fn(7!)23 b(h)p Fp(int;)14 b Fl(ptr)p Ft(\()p Fp(\032)2263 1760 y Fk(2)2300 1748 y Ft(\))p Fn(i)p Fp(;)g(\032)2444 1760 y Fk(2)2505 1748 y Fn(7!)23 b(h)p Fl(junk)p Fn(ig)523 1848 y Ft(5.)122 b Fp(r)747 1860 y Fk(1)785 1848 y Ft([1]:=)o(2;)494 b Fp(\017)18 b Fn(\010)g(f)p Fp(\032)1739 1860 y Fk(1)1799 1848 y Fn(7!)23 b(h)p Fp(int;)14 b Fl(ptr)p Ft(\()p Fp(\032)2263 1860 y Fk(2)2300 1848 y Ft(\))p Fn(i)p Fp(;)g(\032)2444 1860 y Fk(2)2505 1848 y Fn(7!)23 b(h)p Fp(int)p Fn(ig)523 1948 y Ft(6.)122 b Fo(free)21 b Fp(r)944 1960 y Fk(1)982 1948 y Ft(;)514 b Fp(\017)18 b Fn(\010)g(f)p Fp(\032)1739 1960 y Fk(1)1799 1948 y Fn(7!)23 b(h)p Fp(int;)14 b Fl(ptr)p Ft(\()p Fp(\032)2263 1960 y Fk(2)2300 1948 y Ft(\))p Fn(i)p Fp(;)g(\032)2444 1960 y Fk(2)2505 1948 y Fn(7!)23 b Fl(junk)p Fn(g)523 2047 y Ft(7.)122 b Fo(free)21 b Fp(sp)p Ft(;)508 b Fp(\017)18 b Fn(\010)g(f)p Fp(\032)1739 2059 y Fk(1)1799 2047 y Fn(7!)23 b Fl(junk)p Fp(;)14 b(\032)2140 2059 y Fk(2)2200 2047 y Fn(7!)23 b Fl(junk)p Fn(g)648 2146 y Ft(Again,)h(w)n(e)g(can)g(in)n(tuitiv)n(ely)g(think)h (of)f Fp(sp)g Ft(as)g(the)h(stac)n(k)e(p)r(oin)n(ter)h(and)h Fp(r)2910 2158 y Fk(1)2972 2146 y Ft(as)f(a)f(register)523 2246 y(that)30 b(holds)g(an)f(alias)g(of)h(an)g(ob)5 b(ject)29 b(on)h(the)g(stac)n(k.)f(Notice)h(that)g(on)g(line)g(5,)g (the)g(initial-)523 2345 y(ization)d(of)g Fp(r)926 2357 y Fk(1)991 2345 y Ft(up)r(dates)g(the)g(t)n(yp)r(e)h(of)f(the)g(memory) g(at)g(lo)r(cation)f Fp(\032)2647 2357 y Fk(2)2684 2345 y Ft(.)h(This)g(has)g(the)h(e\013ect)523 2445 y(of)h(sim)n(ultaneously) f(up)r(dating)h(the)g(t)n(yp)r(e)g(of)g Fp(r)2003 2457 y Fk(1)2070 2445 y Ft(and)g(of)f Fp(sp)p Ft([1].)h(Both)f(of)h(these)g (paths)g(are)523 2544 y(similarly)f(a\013ected)g(when)h Fp(r)1426 2556 y Fk(1)1492 2544 y Ft(is)f(freed)h(in)f(the)h(next)g (instruction.)f(Despite)h(the)g(presence)523 2644 y(of)h(the)h (dangling)e(p)r(oin)n(ter)h(at)g Fp(sp)p Ft([1],)g(the)g(t)n(yp)r(e)h (system)f(will)g(not)h(allo)n(w)e(that)h(p)r(oin)n(ter)g(to)523 2744 y(b)r(e)e(derefenced.)648 2846 y(By)20 b(using)g(singleton)f(t)n (yp)r(es)h(to)h(accurately)e(trac)n(k)g(p)r(oin)n(ters,)g(and)h (aliasing)f(constrain)n(ts)523 2946 y(to)39 b(mo)r(del)g(the)g(shap)r (e)g(of)g(the)g(store,)f(our)g(t)n(yp)r(e)i(system)e(can)h(represen)n (t)f(sharing)f(and)523 3045 y(sim)n(ultaneously)27 b(ensure)g(safet)n (y)g(in)h(the)f(presence)g(of)h(destructiv)n(e)f(op)r(erations.)523 3325 y Fq(3)112 b(The)38 b(Language)h(of)f(Lo)s(cations)523 3539 y Ft(This)31 b(section)f(describ)r(es)h(our)f(new)h(t)n(yp)r (e-safe)f(\\language)f(of)h(lo)r(cations")g(formally)-7 b(.)30 b(The)523 3639 y(syn)n(tax)d(for)g(the)h(language)e(app)r(ears)g (in)i(Figure)f(1.)523 3902 y Ff(3.1)95 b(V)-8 b(alues,)30 b(Instructions,)i(and)g(Programs)523 4082 y Ft(A)c(program)d(is)i(a)g (pair)f(of)h(a)g(store)g(\()p Fl(S)10 b Ft(\))27 b(and)g(a)g(list)g(of) h(instructions)e(\()p Fp(\023)p Ft(\).)j(The)e(store)f(maps)523 4182 y(lo)r(cations)32 b(\()p Fp(`)p Ft(\))i(to)f(v)-5 b(alues)33 b(\()p Fp(v)s Ft(\).)h(Normally)-7 b(,)32 b(the)i(v)-5 b(alues)33 b(held)g(in)h(the)f(store)g(are)f(memory)523 4282 y(blo)r(c)n(ks)e(\()p Fn(h)p Fp(\034)878 4294 y Fk(1)916 4282 y Fp(;)14 b(:)g(:)g(:)g(;)g(\034)1137 4294 y Fj(n)1182 4282 y Fn(i)p Ft(\),)32 b(but)f(after)g(the)g(memory)f(at)h (a)g(lo)r(cation)f(has)g(b)r(een)i(deallo)r(cated,)523 4381 y(that)25 b(lo)r(cation)f(will)h(p)r(oin)n(t)g(to)f(the)h(un)n (usable)f(v)-5 b(alue)25 b Fo(junk)n Ft(.)g(Other)f(v)-5 b(alues)24 b(include)h(in)n(teger)523 4481 y(constan)n(ts)i(\()p Fp(i)p Ft(\),)h(v)-5 b(ariables)26 b(\()p Fp(x)i Ft(or)f Fp(f)9 b Ft(\),)28 b(and,)f(of)h(course,)e(p)r(oin)n(ters)h(\()p Fo(ptr)o Ft(\()p Fp(`)p Ft(\)\).)648 4583 y(Figure)35 b(2)g(formally)g(de\014nes)h(the)h(op)r(erational)d(seman)n(tics)h(of)h (the)g(language.)3190 4553 y Fk(2)3262 4583 y Ft(The)523 4683 y(main)18 b(instructions)g(of)h(in)n(terest)f(manipulate)g(memory) f(blo)r(c)n(ks.)h(The)h(instruction)f Fo(malloc)i Fp(x;)14 b(\032;)g(n)p 523 4748 473 4 v 546 4801 a Fi(2)606 4833 y Fs(Here)26 b(and)g(elsewhere,)j(the)d(notation)h Fe(X)6 b Fs([)p Fe(c)1867 4841 y Fi(1)1902 4833 y Fe(;)13 b(:)g(:)g(:)h(;)f(c) 2106 4841 y Fm(n)2148 4833 y Fe(=x)2230 4841 y Fi(1)2265 4833 y Fe(;)g(:)g(:)g(:)h(;)f(x)2480 4841 y Fm(n)2522 4833 y Fs(])26 b(denotes)h(capture-a)n(v)n(oiding)606 4924 y(substitution)f(of)g Fe(c)1154 4932 y Fi(1)1189 4924 y Fe(;)13 b(:)g(:)g(:)g(;)h(c)1393 4932 y Fm(n)1461 4924 y Fs(for)26 b(v)l(ariables)h Fe(x)1941 4932 y Fi(1)1975 4924 y Fe(;)13 b(:)g(:)g(:)g(;)h(x)2190 4932 y Fm(n)2257 4924 y Fs(in)26 b Fe(X)6 b Fs(.)p eop %%Page: 6 6 6 5 bop 523 369 2882 4 v 673 531 a Fe(`)21 b Fd(2)h Fs(Lo)r(cations)155 b Fe(\032)21 b Fd(2)g Fs(Lo)r(cationV)-6 b(ar)155 b Fe(\017)21 b Fd(2)h Fs(Constrain)n(tV)-6 b(ar)154 b Fe(x;)12 b(f)30 b Fd(2)22 b Fs(V)-6 b(alueV)g(ar)591 688 y Fc(lo)l(c)l(ations)208 b Fe(\021)26 b Fs(::=)e Fe(`)d Fd(j)h Fe(\032)591 779 y Fc(c)l(onstr)l(aints)117 b Fe(C)28 b Fs(::=)c Fd(;)e(j)f Fe(\017)h Fd(j)f(f)p Fe(\021)k Fd(7!)c Fe(\034)9 b Fd(g)21 b(j)h Fe(C)1872 787 y Fi(1)1923 779 y Fd(\010)17 b Fe(C)2055 787 y Fi(2)591 870 y Fc(typ)l(es)331 b Fe(\034)31 b Fs(::=)24 b Fe(int)d Fd(j)h Fc(junk)g Fd(j)f Fc(ptr)q Fs(\()p Fe(\021)s Fs(\))g Fd(j)h(h)p Fe(\034)1973 878 y Fi(1)2007 870 y Fe(;)13 b(:)h(:)f(:)g(;)g(\034)2212 878 y Fm(n)2254 870 y Fd(i)21 b(j)h(8)p Fs([)p Fe(\001)p Fs(;)13 b Fe(C)5 b Fs(])p Fe(:)p Fs(\()p Fe(\034)2676 878 y Fi(1)2711 870 y Fe(;)13 b(:)h(:)f(:)g(;)g(\034)2916 878 y Fm(n)2958 870 y Fs(\))p Fd(!)p Fh(0)591 962 y Fc(value)28 b(ctxts)129 b Fe(\000)34 b Fs(::=)24 b Fd(\001)d(j)h Fe(\000)r(;)13 b(x)p Fs(:)p Fe(\034)591 1053 y Fc(typ)l(e)29 b(ctxts)160 b Fe(\001)23 b Fs(::=)h Fd(\001)d(j)h Fe(\001;)13 b(\032)21 b Fd(j)h Fe(\001;)13 b(\017)591 1144 y Fc(values)295 b Fe(v)26 b Fs(::=)e Fe(x)d Fd(j)g Fe(i)h Fd(j)g Fh(junk)g Fd(j)g Fh(ptr)p Fs(\()p Fe(`)p Fs(\))f Fd(j)h(h)p Fe(v)2035 1152 y Fi(1)2069 1144 y Fe(;)14 b(:)f(:)g(:)g(;)g(v)2277 1152 y Fm(n)2320 1144 y Fd(i)21 b(j)h Fh(fix)13 b Fe(f)8 b Fs([)p Fe(\001)p Fs(;)14 b Fe(C)5 b Fs(;)13 b Fe(\000)e Fs(])p Fe(:\023)22 b Fd(j)g Fe(v)s Fs([)p Fe(\021)s Fs(])g Fd(j)f Fe(v)s Fs([)p Fe(C)5 b Fs(])591 1236 y Fc(instructions)116 b Fe(\023)23 b Fs(::=)h Fh(malloc)f Fe(x;)12 b(\032;)h(n)p Fs(;)g Fe(\023)22 b Fd(j)g Fe(x)p Fs(=)o Fe(v)s Fs([)p Fe(i)p Fs(];)14 b Fe(\023)21 b Fd(j)h Fe(v)s Fs([)p Fe(i)p Fs(]:=)q Fe(v)2423 1204 y Fb(0)2445 1236 y Fs(;)13 b Fe(\023)22 b Fd(j)g Fh(free)g Fe(v)s Fs(;)13 b Fe(\023)22 b Fd(j)1276 1327 y Fe(v)s Fs(\()p Fe(v)1383 1335 y Fi(1)1418 1327 y Fe(;)13 b(:)g(:)g(:)g(;)g(v)1625 1335 y Fm(n)1668 1327 y Fs(\))21 b Fd(j)h Fh(halt)591 1418 y Fc(stor)l(es)295 b(S)32 b Fs(::=)24 b Fd(f)p Fe(`)1346 1426 y Fi(1)1402 1418 y Fd(7!)d Fe(v)1537 1426 y Fi(1)1572 1418 y Fe(;)13 b(:)g(:)g(:)g(;)h(`)1775 1426 y Fm(n)1838 1418 y Fd(7!)21 b Fe(v)1973 1426 y Fm(n)2016 1418 y Fd(g)591 1510 y Fc(pr)l(o)l(gr)l (ams)178 b Fe(P)34 b Fs(::=)24 b(\()p Fc(S)9 b Fe(;)k(\023)p Fs(\))p 523 1614 V 1316 1749 a Fr(Fig.)i(1.)25 b Fs(Language)i(of)g(Lo) r(cations:)g(Syn)n(tax)523 2017 y Ft(allo)r(cates)e(an)h(unitialized)g (memory)g(blo)r(c)n(k)f(\(\014lled)i(with)f Fo(junk)o Ft(\))g(of)g(size)g Fp(n)g Ft(at)g(a)g(new)g(lo)r(ca-)523 2116 y(tion)f Fp(`)p Ft(,)g(and)f(binds)h Fp(x)h Ft(to)e(the)i(p)r(oin) n(ter)e Fo(ptr)o Ft(\()p Fp(`)p Ft(\).)h(The)g(lo)r(cation)f(v)-5 b(ariable)24 b Fp(\032)p Ft(,)h(b)r(ound)g(b)n(y)g(this)523 2216 y(instruction,)k(is)h(the)g(static)f(represen)n(tation)f(of)h(the) h(dynamic)g(lo)r(cation)f Fp(`)p Ft(.)g(The)g(instruc-)523 2315 y(tion)g Fp(x)p Ft(=)p Fp(v)s Ft([)p Fp(i)p Ft(])f(binds)h Fp(x)h Ft(to)e(the)h Fp(i)p Ft(th)g(comp)r(onen)n(t)f(of)h(the)g (memory)f(blo)r(c)n(k)g(p)r(oin)n(ted)h(to)f(b)n(y)h Fp(v)523 2415 y Ft(in)f(the)h(remaining)e(instructions.)h(The)g (instruction)g Fp(v)s Ft([)p Fp(i)p Ft(]:=)p Fp(v)2470 2385 y Fg(0)2522 2415 y Ft(stores)f Fp(v)2802 2385 y Fg(0)2853 2415 y Ft(in)i(the)f Fp(i)p Ft(th)h(com-)523 2515 y(p)r(onen)n(t)h(of)f(the)h(blo)r(c)n(k)g(p)r(oin)n(ted)f(to)h(b)n (y)f Fp(v)s Ft(.)h(The)g(\014nal)g(memory)e(managemen)n(t)h(primitiv)n (e,)523 2614 y Fo(free)d Fp(v)s Ft(,)31 b(deallo)r(cates)e(the)h (storage)f(p)r(oin)n(ted)h(to)g(b)n(y)g Fp(v)s Ft(.)h(If)g Fp(v)i Ft(is)e(the)f(p)r(oin)n(ter)g Fo(ptr)o Ft(\()p Fp(`)p Ft(\))g(then)523 2714 y(deallo)r(cation)g(is)i(mo)r(deled)f(b)n (y)g(up)r(dating)h(the)g(store)e(\()p Fp(S)5 b Ft(\))32 b(so)f(that)h(the)f(lo)r(cation)g Fp(`)g Ft(maps)523 2814 y(to)d Fo(junk)n Ft(.)648 2913 y(The)44 b(program)f(\()p Fn(fg)p Fp(;)14 b Fo(malloc)48 b Fp(x;)14 b(\032;)g Ft(2;)g Fp(x)p Ft([1]:=)o(3;)g Fp(x)p Ft([2]:=)o(5;)g Fo(free)50 b Fp(x)p Ft(;)14 b Fo(halt)e Ft(\))45 b(allo)r(cates,)523 3013 y(initializes)21 b(and)g(\014nally)g(deallo)r(cates)g(a)f(pair)h (of)g(in)n(tegers.)g(Its)g(ev)-5 b(aluation)21 b(is)g(sho)n(wn)f(b)r (elo)n(w:)523 3172 y(Store)p 523 3185 190 4 v 620 w(Instructions)p 1333 3185 433 4 v 523 3271 a Fn(f)14 b(g)712 b Fo(malloc)20 b Fp(x;)14 b(\032;)g(n)124 b Fo(\(*)43 b(allocate)d(new)j(location)d Fp(`)p Fo(,)139 b(*\))1955 3371 y(\(*)43 b(substitute)c(ptr)o Ft(\()p Fp(`)p Ft(\))p Fp(;)14 b(`)43 b Fo(for)g Fp(x;)14 b(\032)51 b Fo(*\))523 3470 y Fn(f)p Fp(`)22 b Fn(7!)h(h)p Fo(junk)o Fp(;)14 b Fo(junk)n Fn(ig)113 b Fo(ptr)n Ft(\()p Fp(`)p Ft(\)[1]:=3)175 b Fo(\(*)43 b(initialize)c(field)j(1)392 b(*\))523 3570 y Fn(f)p Fp(`)22 b Fn(7!)h(h)p Ft(3)p Fp(;)14 b Fo(junk)n Fn(ig)246 b Fo(ptr)n Ft(\()p Fp(`)p Ft(\)[2]:=5)175 b Fo(\(*)43 b(initialize)c(field)j(2)392 b(*\))523 3670 y Fn(f)p Fp(`)22 b Fn(7!)h(h)p Ft(3)p Fp(;)14 b Ft(5)p Fn(ig)378 b Fo(free)21 b(ptr)o Ft(\()p Fp(`)p Ft(\))195 b Fo(\(*)43 b(free)f(storage)651 b(*\))523 3769 y Fn(f)p Fp(`)22 b Fn(7!)h Fo(junk)o Fn(g)648 3928 y Ft(A)j(sequence)f(of)h(instructions)g(\()p Fp(\023)p Ft(\))h(ends)f(in)g(either)g(a)f Fo(halt)39 b Ft(instruction,)26 b(whic)n(h)g(stops)523 4028 y(computation)j(immediately)-7 b(,)30 b(or)f(a)g(function)h(application)f(\()p Fp(v)s Ft(\()p Fp(v)2580 4040 y Fk(1)2619 4028 y Fp(;)14 b(:)g(:)g(:)f(;)h(v) 2843 4040 y Fj(n)2889 4028 y Ft(\)\).)30 b(In)g(order)e(to)523 4127 y(simplify)22 b(the)f(language)f(and)h(its)g(t)n(yping)g (constructs,)f(our)g(functions)i(nev)n(er)e(return.)h(Ho)n(w-)523 4227 y(ev)n(er,)d(a)g(higher-lev)n(el)f(language)g(that)i(con)n(tains)f (call)g(and)h(return)f(statemen)n(ts)g(can)h(b)r(e)g(com-)523 4327 y(piled)31 b(in)n(to)g(our)f(language)f(of)i(lo)r(cations)f(b)n(y) h(p)r(erforming)f(a)g Fl(c)l(ontinuation-p)l(assing)k(style)523 4426 y Ft(\(CPS\))23 b(transformation)d([14,)13 b(15].)22 b(It)g(is)h(p)r(ossible)f(to)g(de\014ne)g(a)g(direct-st)n(yle)g (language,)e(but)523 4526 y(doing)33 b(so)g(w)n(ould)g(force)g(us)h(to) g(adopt)f(an)g(a)n(wkw)n(ard)f(syn)n(tax)h(that)h(allo)n(ws)e (functions)i(to)523 4625 y(return)21 b(p)r(ortions)g(of)h(the)g(store.) f(In)h(a)g(CPS)f(st)n(yle,)h(all)f(con)n(trol-\015o)n(w)f(transfers)g (are)h(handled)523 4725 y(symmetrically)27 b(b)n(y)g(calling)g(a)g(con) n(tin)n(uation.)648 4825 y(F)-7 b(unctions)36 b(are)e(de\014ned)i (using)g(the)g(form)f Fo(fix)13 b Fp(f)c Ft([)p Fp(\001)p Ft(;)14 b Fp(C)6 b Ft(;)14 b Fp(\000)e Ft(])p Fp(:\023)p Ft(.)36 b(These)f(functions)h(are)523 4924 y(recursiv)n(e)c(\()p Fp(f)42 b Ft(ma)n(y)32 b(app)r(ear)h(in)g Fp(\023)p Ft(\).)h(The)f(con) n(text)g(\()p Fp(\001)p Ft(;)14 b Fp(C)6 b Ft(;)14 b Fp(\000)e Ft(\))34 b(sp)r(eci\014es)f(a)g(pre-condition)p eop %%Page: 7 7 7 6 bop 523 448 a Ft(that)31 b(m)n(ust)f(b)r(e)h(satis\014ed)e(b)r (efore)h(the)h(function)g(can)f(b)r(e)g(in)n(v)n(ok)n(ed.)f(The)h(t)n (yp)r(e)h(con)n(text)f Fp(\001)523 548 y Ft(binds)e(the)g(set)f(of)h(t) n(yp)r(e)f(v)-5 b(ariables)26 b(that)i(can)f(o)r(ccur)g(free)g(in)h (the)g(term;)f Fp(C)34 b Ft(is)28 b(a)f(collection)523 648 y(of)d(aliasing)g(constrain)n(ts)f(that)i(statically)e(appro)n (ximates)g(a)h(p)r(ortion)g(of)g(the)h(store;)f(and)g Fp(\000)523 747 y Ft(assigns)i(t)n(yp)r(es)i(to)f(free)h(v)-5 b(ariables)26 b(in)i Fp(\023)p Ft(.)648 858 y(T)-7 b(o)23 b(call)g(a)h(p)r(olymorphic)f(function,)h(co)r(de)g(m)n(ust)f(\014rst)h (instan)n(tiate)f(the)h(t)n(yp)r(e)g(v)-5 b(ariables)523 958 y(in)21 b Fp(\001)h Ft(using)f(the)g(v)-5 b(alue)21 b(form:)g Fp(v)s Ft([)p Fp(\021)s Ft(])h(or)e Fp(v)s Ft([)p Fp(C)6 b Ft(].)22 b(These)f(forms)f(are)g(treated)h(as)g(v)-5 b(alues)20 b(b)r(ecause)523 1058 y(t)n(yp)r(e)g(application)f(has)h(no) f(computational)h(e\013ect)g(\(t)n(yp)r(es)g(and)g(constrain)n(ts)f (are)g(only)g(used)523 1157 y(for)27 b(compile-time)h(c)n(hec)n(king;)e (they)i(can)f(b)r(e)h(erased)e(b)r(efore)i(executing)f(a)g(program\).)p 523 1393 2882 4 v 535 1536 a Fs(\()p Fe(S;)13 b Fh(malloc)22 b Fe(x;)13 b(\032;)g(n)p Fs(;)g Fe(\023)p Fs(\))263 b Fd(7\000)-13 b(!)23 b Fs(\()p Fe(S)t Fd(f)p Fe(`)e Fd(7!)g(h)p Fh(junk)2058 1557 y Fi(1)2093 1536 y Fe(;)13 b(:)g(:)g(:)g(;)g Fh(junk)2420 1557 y Fm(n)2463 1536 y Fd(ig)p Fe(;)g(\023)p Fs([)p Fe(`=\032)p Fs(][)p Fh(ptr)r Fs(\()p Fe(`)p Fs(\))p Fe(=x)p Fs(]\))688 1627 y(where)26 b Fe(`)21 b Fd(62)h Fe(S)535 1719 y Fs(\()p Fe(S)t Fd(f)p Fe(`)f Fd(7!)g Fe(v)s Fd(g)p Fe(;)14 b Fh(free)f(ptr)q Fs(\()p Fe(`)p Fs(\);)g Fe(\023)p Fs(\))66 b Fd(7\000)-13 b(!)23 b Fs(\()p Fe(S)t Fd(f)p Fe(`)e Fd(7!)g Fh(junk)q Fd(g)p Fe(;)14 b(\023)p Fs(\))688 1810 y(if)27 b Fe(v)d Fs(=)d Fd(h)p Fe(v)968 1818 y Fi(1)1003 1810 y Fe(;)13 b(:)g(:)g(:)g(;)g(v)1210 1818 y Fm(n)1253 1810 y Fd(i)535 1901 y Fs(\()p Fe(S)t Fd(f)p Fe(`)21 b Fd(7!)g Fe(v)s Fd(g)p Fe(;)14 b Fh(ptr)p Fs(\()p Fe(`)p Fs(\)[)p Fe(i)p Fs(]:=)q Fe(v)1317 1870 y Fb(0)1339 1901 y Fs(;)f Fe(\023)p Fs(\))24 b Fd(7\000)-13 b(!)23 b Fs(\()p Fe(S)t Fd(f)p Fe(`)e Fd(7!)g(h)p Fe(v)1938 1909 y Fi(1)1973 1901 y Fe(;)13 b(:)g(:)g(:)h(;)f(v)2181 1909 y Fm(i)p Fb(\000)p Fi(1)2286 1901 y Fe(;)g(v)2360 1870 y Fb(0)2382 1901 y Fe(;)g(v)2453 1909 y Fm(i)p Fi(+1)2557 1901 y Fe(;)g(:)g(:)g(:)h(;)f(v)2765 1909 y Fm(n)2807 1901 y Fd(ig)p Fe(;)h(\023)p Fs(\))688 1993 y(if)27 b Fe(v)d Fs(=)d Fd(h)p Fe(v)968 2001 y Fi(1)1003 1993 y Fe(;)13 b(:)g(:)g(:)g(;)g(v)1210 2001 y Fm(n)1253 1993 y Fd(i)26 b Fs(and)f(1)d Fd(\024)f Fe(i)g Fd(\024)g Fe(n)535 2084 y Fs(\()p Fe(S)t Fd(f)p Fe(`)g Fd(7!)g Fe(v)s Fd(g)p Fe(;)14 b(x)p Fs(=)o Fh(ptr)q Fs(\()p Fe(`)p Fs(\)[)p Fe(i)p Fs(];)f Fe(\023)p Fs(\))64 b Fd(7\000)-13 b(!)23 b Fs(\()p Fe(S)t Fd(f)p Fe(`)e Fd(7!)g Fe(v)s Fd(g)p Fe(;)14 b(\023)p Fs([)p Fe(v)2069 2092 y Fm(i)2096 2084 y Fe(=x)p Fs(]\))688 2175 y(if)27 b Fe(v)d Fs(=)d Fd(h)p Fe(v)968 2183 y Fi(1)1003 2175 y Fe(;)13 b(:)g(:)g(:)g(;)g(v)1210 2183 y Fm(n)1253 2175 y Fd(i)26 b Fs(and)f(1)d Fd(\024)f Fe(i)g Fd(\024)g Fe(n)535 2267 y Fs(\()p Fe(S;)13 b(v)s Fs(\()p Fe(v)753 2275 y Fi(1)787 2267 y Fe(;)g(:)h(:)f(:)g(;)g(v)995 2275 y Fm(n)1038 2267 y Fs(\)\))356 b Fd(7\000)-13 b(!)23 b Fs(\()p Fe(S;)13 b(\023)p Fs([)p Fe(c)1793 2275 y Fi(1)1828 2267 y Fe(;)g(:)g(:)g(:)g(;)h(c)2032 2275 y Fm(m)2090 2267 y Fe(=\014)2171 2275 y Fi(1)2207 2267 y Fe(;)f(:)g(:)g(:)g(;)g (\014)2420 2275 y Fm(m)2479 2267 y Fs(][)p Fe(v)2561 2235 y Fb(0)2584 2267 y Fe(;)g(v)2655 2275 y Fi(1)2690 2267 y Fe(;)g(:)h(:)f(:)g(;)g(v)2898 2275 y Fm(n)2941 2267 y Fe(=f)t(;)g(x)3098 2275 y Fi(1)3133 2267 y Fe(;)g(:)g(:)g(:)g(;) g(x)3347 2275 y Fm(n)3389 2267 y Fs(]\))688 2358 y(if)27 b Fe(v)d Fs(=)d Fe(v)941 2326 y Fb(0)963 2358 y Fs([)p Fe(c)1017 2366 y Fi(1)1053 2358 y Fe(;)13 b(:)g(:)g(:)g(;)g(c)1256 2366 y Fm(m)1315 2358 y Fs(])688 2449 y(and)26 b Fe(v)878 2417 y Fb(0)921 2449 y Fs(=)21 b Fh(fix)14 b Fe(f)8 b Fs([)p Fe(\001)p Fs(;)14 b Fe(C)5 b Fs(;)13 b Fe(x)1436 2457 y Fi(1)1470 2449 y Fs(:)p Fe(\034)1525 2457 y Fi(1)1560 2449 y Fe(;)g(:)g(:)g(:)g(;)g(x)1774 2457 y Fm(n)1816 2449 y Fs(:)p Fe(\034)1871 2457 y Fm(n)1914 2449 y Fs(])p Fe(:\023)688 2541 y Fs(and)26 b Fc(Dom)5 b Fs(\()p Fe(\001)p Fs(\))21 b(=)g Fe(\014)1272 2549 y Fi(1)1307 2541 y Fe(;)13 b(:)h(:)f(:)g(;)g(\014)1521 2549 y Fm(m)1733 2541 y Fs(\(where)26 b Fe(\014)k Fs(ranges)d(o)n(v)n(er)e Fe(\032)g Fs(and)h Fe(\017)p Fs(\))p 523 2682 V 1053 2817 a Fr(Fig.)14 b(2.)26 b Fs(Language)g(of)h(Lo)r(cations:)g(Op)r(erational)g(Seman)n(tics)523 3318 y Ff(3.2)95 b(T)m(yp)s(e)32 b(Constructors)523 3541 y Ft(There)22 b(are)f(three)h(kinds)g(of)g(t)n(yp)r(e)h(constructors:)d (lo)r(cations)2394 3511 y Fk(3)2453 3541 y Ft(\()p Fp(\021)s Ft(\),)j(t)n(yp)r(es)f(\()p Fp(\034)9 b Ft(\),)23 b(and)f(aliasing)523 3641 y(constrain)n(ts)32 b(\()p Fp(C)6 b Ft(\).)34 b(The)f(simplest)g (t)n(yp)r(es)g(are)f(the)i(base)e(t)n(yp)r(es,)h(whic)n(h)g(w)n(e)g(ha) n(v)n(e)f(c)n(hosen)523 3740 y(to)26 b(b)r(e)h(in)n(tegers)f(\()p Fp(int)o Ft(\).)h(A)g(p)r(oin)n(ter)f(to)h(a)f(lo)r(cation)g Fp(\021)j Ft(is)e(giv)n(en)f(the)g(singleton)g(t)n(yp)r(e)h Fl(ptr)p Ft(\()p Fp(\021)s Ft(\).)523 3840 y(The)d(only)f(v)-5 b(alue)24 b(in)g(the)g(t)n(yp)r(e)g Fl(ptr)p Ft(\()p Fp(\021)s Ft(\))g(is)g(the)g(p)r(oin)n(ter)f Fo(ptr)o Ft(\()p Fp(\021)s Ft(\),)i(so)e(if)h Fp(v)2729 3852 y Fk(1)2790 3840 y Ft(and)g Fp(v)2988 3852 y Fk(2)3049 3840 y Ft(b)r(oth)g(ha)n(v)n(e)523 3940 y(t)n(yp)r(e)j Fl(ptr)p Ft(\()p Fp(\021)s Ft(\),)h(then)g(they)f(m)n(ust)g(b)r(e)h (aliases.)e(Memory)g(blo)r(c)n(ks)g(ha)n(v)n(e)g(t)n(yp)r(es)h(\()p Fn(h)p Fp(\034)3036 3952 y Fk(1)3074 3940 y Fp(;)14 b(:)g(:)g(:)g(;)g (\034)3295 3952 y Fj(n)3340 3940 y Fn(i)p Ft(\))523 4039 y(that)28 b(describ)r(e)f(their)h(con)n(ten)n(ts.)648 4150 y(A)c(collection)g(of)g(constrain)n(ts,)e Fp(C)6 b Ft(,)25 b(establishes)e(the)i(connection)e(b)r(et)n(w)n(een)i(p)r (oin)n(ters)e(of)523 4250 y(t)n(yp)r(e)g Fl(ptr)p Ft(\()p Fp(\021)s Ft(\))h(and)f(the)g(con)n(ten)n(ts)g(of)g(the)g(memory)g(blo) r(c)n(ks)f(they)h(p)r(oin)n(t)g(to.)g(The)g(main)g(form)523 4350 y(of)e(constrain)n(t,)g(written)g Fn(f)p Fp(\021)26 b Fn(7!)d Fp(\034)9 b Fn(g)p Ft(,)22 b(mo)r(dels)f(a)g(store)f(with)i (a)f(single)g(lo)r(cation)f Fp(\021)25 b Ft(con)n(taining)523 4449 y(a)f(v)-5 b(alue)24 b(of)g(t)n(yp)r(e)h Fp(\034)9 b Ft(.)25 b(Collections)e(of)h(constrain)n(ts)f(are)g(constructed)h (from)g(more)f(primitiv)n(e)523 4549 y(constrain)n(ts)29 b(using)g(the)i(join)f(op)r(erator)e(\()p Fn(\010)p Ft(\).)i(The)g (empt)n(y)g(constrain)n(t)f(is)h(denoted)g(b)n(y)f Fn(;)p Ft(.)523 4649 y(W)-7 b(e)28 b(often)g(abbreviate)e Fn(f)p Fp(\021)g Fn(7!)d Fp(\034)9 b Fn(g)19 b(\010)f(f)p Fp(\021)1774 4618 y Fg(0)1820 4649 y Fn(7!)23 b Fp(\034)1971 4618 y Fg(0)1995 4649 y Fn(g)k Ft(with)h Fn(f)p Fp(\021)e Fn(7!)d Fp(\034)5 b(;)14 b(\021)2590 4618 y Fg(0)2637 4649 y Fn(7!)23 b Fp(\034)2788 4618 y Fg(0)2812 4649 y Fn(g)p Ft(.)p 523 4748 473 4 v 546 4801 a Fi(3)606 4833 y Fs(W)-6 b(e)27 b(use)g(the)g(meta-v)l(ariable)f Fe(`)h Fs(to)h(denote)f(concrete)g(lo)r(cations,)i Fe(\032)e Fs(to)g(denote)g(lo)r(cation)i Fc(vari-)606 4924 y(ables)p Fs(,)e(and)e Fe(\021)k Fs(to)d(denote)f(either.)p eop %%Page: 8 8 8 7 bop 523 448 a Ff(3.3)95 b(Static)32 b(Seman)m(tics)523 612 y Fl(Stor)l(e)i(T)-6 b(yping)48 b Ft(The)32 b(cen)n(tral)f(in)n(v) -5 b(arian)n(t)31 b(main)n(tained)h(b)n(y)g(the)g(t)n(yp)r(e)g(system)g (is)g(that)h(the)523 711 y(curren)n(t)26 b(constrain)n(ts)f Fp(C)34 b Ft(are)25 b(a)i(faithful)g(description)g(of)f(the)i(curren)n (t)e(store)f Fp(S)5 b Ft(.)27 b(W)-7 b(e)27 b(write)523 811 y(this)36 b Fl(stor)l(e-typing)i(invariant)f Ft(as)f(the)g (judgemen)n(t)h Fn(`)f Fp(S)42 b Ft(:)c Fp(C)6 b Ft(.)36 b(In)n(tuitiv)n(ely)-7 b(,)36 b(whenev)n(er)f(a)523 911 y(lo)r(cation)18 b Fp(`)g Ft(con)n(tains)g(a)g(v)-5 b(alue)18 b Fp(v)k Ft(of)d(t)n(yp)r(e)f Fp(\034)9 b Ft(,)20 b(the)f(constrain)n (ts)e(should)h(sp)r(ecify)h(that)g(lo)r(cation)523 1010 y Fp(`)27 b Ft(maps)h(to)f Fp(\034)37 b Ft(\(or)27 b(an)h(equiv)-5 b(alen)n(t)27 b(t)n(yp)r(e)h Fp(\034)1853 980 y Fg(0)1877 1010 y Ft(\).)g(F)-7 b(ormally:)1288 1177 y Fn(\001)p Ft(;)14 b Fn(\001)23 b(`)1445 1189 y Fj(v)1508 1177 y Fp(v)1548 1189 y Fk(1)1608 1177 y Ft(:)g Fp(\034)1690 1189 y Fk(1)1908 1177 y Fn(\001)14 b(\001)g(\001)179 b(\001)p Ft(;)14 b Fn(\001)23 b(`)2341 1189 y Fj(v)2404 1177 y Fp(v)2444 1189 y Fj(n)2512 1177 y Ft(:)g Fp(\034)2594 1189 y Fj(n)p 1056 1213 1816 4 v 1056 1292 a Fn(`)g(f)p Fp(`)1207 1304 y Fk(1)1266 1292 y Fn(7!)g Fp(v)1412 1304 y Fk(1)1450 1292 y Fp(;)14 b(:)g(:)g(:)f(;)h(`)1669 1304 y Fj(n)1737 1292 y Fn(7!)23 b Fp(v)1883 1304 y Fj(n)1929 1292 y Fn(g)f Ft(:)h Fn(f)p Fp(`)2116 1304 y Fk(1)2176 1292 y Fn(7!)g Fp(\034)2318 1304 y Fk(1)2355 1292 y Fp(;)14 b(:)g(:)g(:)g(;)g(`)2575 1304 y Fj(n)2643 1292 y Fn(7!)23 b Fp(\034)2785 1304 y Fj(n)2830 1292 y Fn(g)523 1471 y Ft(where)k(for)g(1)c Fn(\024)f Fp(i)h Fn(\024)g Fp(n)p Ft(,)k(the)h(lo)r(cations)f Fp(`)1809 1483 y Fj(i)1864 1471 y Ft(are)f(all)i(distinct.)g(And,)1545 1637 y Fn(`)23 b Fp(S)28 b Ft(:)23 b Fp(C)1809 1607 y Fg(0)1998 1637 y Fn(\001)h(`)e Fp(C)2183 1607 y Fg(0)2230 1637 y Ft(=)h Fp(C)p 1545 1657 838 4 v 1832 1732 a Fn(`)g Fp(S)28 b Ft(:)23 b Fp(C)523 1928 y Fl(Instruction)42 b(T)-6 b(yping)62 b Ft(Instructions)42 b(are)f(t)n(yp)r(e)h(c)n(hec)n(k)n(ed)f(in)h(a)g (con)n(text)g Fp(\001)p Ft(;)14 b Fp(C)6 b Ft(;)14 b Fp(\000)e Ft(.)42 b(The)523 2028 y(judgemen)n(t)35 b Fp(\001)p Ft(;)14 b Fp(C)6 b Ft(;)14 b Fp(\000)46 b Fn(`)1292 2040 y Fj(\023)1354 2028 y Fp(\023)35 b Ft(states)f(that)h(the)f (instruction)g(sequence)g(is)g(w)n(ell-formed.)g(A)523 2127 y(related)f(judgemen)n(t,)h Fp(\001)p Ft(;)14 b Fp(\000)44 b Fn(`)1493 2139 y Fj(v)1565 2127 y Fp(v)36 b Ft(:)d Fp(\034)9 b Ft(,)34 b(ensures)f(that)h(the)f(v)-5 b(alue)34 b Fp(v)i Ft(is)e(w)n(ell-formed)e(and)523 2227 y(has)27 b(t)n(yp)r(e)h Fp(\034)9 b Ft(.)954 2197 y Fk(4)648 2327 y Ft(Our)22 b(presen)n(tation)f(of)i(the)g(t)n(yping)g(rules)f (for)g(instructions)g(fo)r(cuses)h(on)f(ho)n(w)g(eac)n(h)g(rule)523 2426 y(main)n(tains)30 b(the)h(store-t)n(yping)e(in)n(v)-5 b(arian)n(t.)29 b(With)i(this)g(in)n(v)-5 b(arian)n(t)29 b(in)i(mind,)g(consider)f(the)523 2526 y(rule)d(for)g(pro)5 b(jection:)1396 2700 y Fp(\001)p Ft(;)14 b Fp(\000)35 b Fn(`)1639 2712 y Fj(v)1701 2700 y Fp(v)26 b Ft(:)d Fl(ptr)p Ft(\()p Fp(\021)s Ft(\))738 2799 y Fp(\001)g Fn(`)g Fp(C)30 b Ft(=)22 b Fp(C)1145 2769 y Fg(0)1187 2799 y Fn(\010)c(f)p Fp(\021)26 b Fn(7!)d(h)p Fp(\034)1553 2811 y Fk(1)1591 2799 y Fp(;)14 b(:)g(:)g(:)g(;)g(\034)1812 2811 y Fj(n)1857 2799 y Fn(ig)166 b Fp(\001)p Ft(;)14 b Fp(C)6 b Ft(;)14 b Fp(\000)r(;)g(x)p Ft(:)p Fp(\034)2501 2811 y Fj(i)2553 2799 y Fn(`)2604 2811 y Fj(\023)2655 2799 y Fp(\023)p 727 2849 1970 4 v 1365 2928 a(\001)p Ft(;)g Fp(C)6 b Ft(;)14 b Fp(\000)35 b Fn(`)1710 2940 y Fj(\023)1762 2928 y Fp(x)p Ft(=)p Fp(v)s Ft([)p Fp(i)p Ft(];)14 b Fp(\023)2738 2753 y Fa(\022)2864 2819 y Fp(x)23 b Fn(62)h Fp(\000)2799 2919 y Ft(1)f Fn(\024)f Fp(i)h Fn(\024)f Fp(n)3140 2753 y Fa(\023)523 3107 y Ft(The)28 b(\014rst)g(pre-condition)f(ensures)g(that)h Fp(v)k Ft(is)c(a)f(p)r (oin)n(ter.)h(The)g(second)g(uses)f Fp(C)35 b Ft(to)28 b(deter-)523 3207 y(mine)23 b(the)f(con)n(ten)n(ts)g(of)g(the)h(lo)r (cation)f(p)r(oin)n(ted)g(to)g(b)n(y)g Fp(v)s Ft(.)h(More)e(precisely) -7 b(,)22 b(it)h(requires)e(that)523 3307 y Fp(C)31 b Ft(equal)24 b(a)h(store)f(description)g Fp(C)1584 3277 y Fg(0)1620 3307 y Fn(\010)13 b(f)p Fp(\021)26 b Fn(7!)d(h)p Fp(\034)1981 3319 y Fk(1)2018 3307 y Fp(;)14 b(:)g(:)g(:)g(;)g(\034) 2239 3319 y Fj(n)2284 3307 y Fn(ig)p Ft(.)25 b(\(Constrain)n(t)f (equalit)n(y)g(uses)h Fp(\001)523 3406 y Ft(to)k(denote)f(the)h(free)g (t)n(yp)r(e)f(v)-5 b(ariables)28 b(that)h(ma)n(y)f(app)r(ear)f(on)i (the)g(righ)n(t-hand)e(side.\))i(The)523 3506 y(store)e(is)h(unc)n (hanged)g(b)n(y)g(the)g(op)r(eration)g(so)f(the)i(\014nal)f (pre-condition)f(requires)g(that)i(the)523 3606 y(rest)e(of)h(the)g (instructions)f(b)r(e)h(w)n(ell-formed)e(under)i(the)g(same)f (constrain)n(ts)f Fp(C)6 b Ft(.)648 3705 y(Next,)28 b(examine)f(the)h (rule)f(for)g(the)h(assignmen)n(t)f(op)r(eration:)1087 3891 y Fp(\001)p Ft(;)14 b Fp(\000)35 b Fn(`)1330 3903 y Fj(v)1392 3891 y Fp(v)26 b Ft(:)d Fl(ptr)p Ft(\()p Fp(\021)s Ft(\))167 b Fp(\001)p Ft(;)14 b Fp(\000)35 b Fn(`)2127 3903 y Fj(v)2189 3891 y Fp(v)2232 3861 y Fg(0)2279 3891 y Ft(:)23 b Fp(\034)2370 3861 y Fg(0)553 3990 y Fp(\001)g Fn(`)g Fp(C)29 b Ft(=)23 b Fp(C)960 3960 y Fg(0)1002 3990 y Fn(\010)18 b(f)p Fp(\021)26 b Fn(7!)d(h)p Fp(\034)1368 4002 y Fk(1)1406 3990 y Fp(;)14 b(:)g(:)g(:)f(;)h(\034)1626 4002 y Fj(n)1672 3990 y Fn(ig)166 b Fp(\001)p Ft(;)14 b Fp(C)2083 3960 y Fg(0)2125 3990 y Fn(\010)k(f)p Fp(\021)25 b Fn(7!)f Fp(\034)2459 4019 y Ft(after)2632 3990 y Fn(g)p Ft(;)14 b Fp(\000)34 b Fn(`)2847 4002 y Fj(\023)2898 3990 y Fp(\023)p 541 4040 2398 4 v 1373 4119 a(\001)p Ft(;)14 b Fp(C)6 b Ft(;)14 b Fp(\000)35 b Fn(`)1718 4131 y Fj(\023)1769 4119 y Fp(v)s Ft([)p Fp(i)p Ft(]:=)p Fp(v)2018 4089 y Fg(0)2041 4119 y Ft(;)14 b Fp(\023)2981 4061 y Ft(\(1)23 b Fn(\024)f Fp(i)h Fn(\024)f Fp(n)p Ft(\))1170 4302 y(where)27 b Fp(\034)1446 4331 y Ft(after)1646 4302 y(is)h Fn(h)p Fp(\034)1798 4314 y Fk(1)1836 4302 y Fp(;)14 b(:)g(:)g(:)f(;)h(\034) 2056 4314 y Fj(i)p Fg(\000)p Fk(1)2169 4302 y Fp(;)g(\034)2251 4272 y Fg(0)2275 4302 y Fp(;)g(\034)2348 4314 y Fj(i)p Fk(+1)2460 4302 y Fp(;)g(:)g(:)g(:)g(;)g(\034)2681 4314 y Fj(n)2726 4302 y Fn(i)523 4397 y Ft(Once)29 b(again,)g(the)h(v)-5 b(alue)30 b Fp(v)j Ft(m)n(ust)d(b)r(e)g(a)f(p)r(oin)n(ter)h(to)g(some)f (lo)r(cation)g Fp(\021)s Ft(.)h(The)g(t)n(yp)r(e)g(of)g(the)523 4496 y(con)n(ten)n(ts)i(of)h Fp(\021)k Ft(are)32 b(giv)n(en)g(in)h Fp(C)40 b Ft(and)32 b(m)n(ust)i(b)r(e)f(a)g(blo)r(c)n(k)f(with)i(t)n (yp)r(e)f Fn(h)p Fp(\034)2851 4508 y Fk(1)2889 4496 y Fp(;)14 b(:)g(:)g(:)f(;)h(\034)3109 4508 y Fj(n)3155 4496 y Fn(i)p Ft(.)33 b(This)523 4596 y(time)g(the)h(store)e(has)g(c)n (hanged,)g(and)h(the)g(remaining)f(instructions)h(are)e(c)n(hec)n(k)n (ed)h(under)523 4696 y(the)c(appropriately)e(mo)r(di\014ed)i(constrain) n(t)e Fp(C)1975 4666 y Fg(0)2017 4696 y Fn(\010)18 b(f)p Fp(\021)26 b Fn(7!)d Fp(\034)2351 4725 y Ft(after)2524 4696 y Fn(g)p Ft(.)p 523 4748 473 4 v 546 4801 a Fi(4)606 4833 y Fs(The)33 b(subscripts)f(on)h Fd(`)1298 4841 y Fm(v)1367 4833 y Fs(and)f Fd(`)1570 4841 y Fm(\023)1630 4833 y Fs(are)g(used)h(to)f(distinguish)h(judgemen)n(t)e(forms)i(and)f (for)h(no)606 4924 y(other)26 b(purp)r(ose.)p eop %%Page: 9 9 9 8 bop 648 448 a Ft(Ho)n(w)25 b(can)h(the)h(t)n(yp)r(e)f(system)g (ensure)f(that)i(the)f(new)h(constrain)n(ts)d Fp(C)2820 418 y Fg(0)2859 448 y Fn(\010)16 b(f)p Fp(\021)25 b Fn(7!)e Fp(\034)3190 477 y Ft(after)3363 448 y Fn(g)523 548 y Ft(correctly)31 b(describ)r(e)g(the)i(store?)e(If)i Fp(v)1723 518 y Fg(0)1779 548 y Ft(has)e(t)n(yp)r(e)i Fp(\034)2168 518 y Fg(0)2224 548 y Ft(and)f(the)g(con)n(ten)n(ts)g(of)g(the)h(lo)r (cation)523 648 y Fp(\021)k Ft(originally)32 b(has)h(t)n(yp)r(e)h Fn(h)p Fp(\034)1389 660 y Fk(1)1426 648 y Fp(;)14 b(:)g(:)g(:)g(;)g (\034)1647 660 y Fj(n)1692 648 y Fn(i)p Ft(,)34 b(then)g Fn(f)p Fp(\021)i Fn(7!)d Fp(\034)2247 677 y Ft(after)2420 648 y Fn(g)g Ft(describ)r(es)g(the)h(con)n(ten)n(ts)f(of)523 747 y(the)d(lo)r(cation)f Fp(\021)k Ft(after)c(the)h(up)r(date)h (accurately)-7 b(.)28 b(Ho)n(w)n(ev)n(er,)g(w)n(e)h(m)n(ust)h(a)n(v)n (oid)e(a)h(situation)523 847 y(in)f(whic)n(h)g Fp(C)923 817 y Fg(0)975 847 y Ft(con)n(tin)n(ues)f(to)g(hold)h(an)g(outdated)g (t)n(yp)r(e)g(for)f(the)h(con)n(ten)n(ts)g(of)f(the)i(lo)r(cation)523 946 y Fp(\021)s Ft(.)36 b(This)f(task)f(ma)n(y)h(app)r(ear)f(trivial:)g (Searc)n(h)g Fp(C)2093 916 y Fg(0)2152 946 y Ft(for)h(all)g(o)r (ccurrences)e(of)i(a)g(constrain)n(t)523 1046 y Fn(f)p Fp(\021)i Fn(7!)d Fp(\034)9 b Fn(g)34 b Ft(and)g(up)r(date)h(all)f(of)g (the)h(mappings)e(appropriately)-7 b(.)33 b(Unfortunately)-7 b(,)34 b(in)h(the)523 1146 y(presence)e(of)g(lo)r(cation)g(p)r (olymorphism,)g(this)h(approac)n(h)e(will)h(fail.)h(Supp)r(ose)g(a)f(v) -5 b(alue)33 b(is)523 1245 y(stored)k(in)g(lo)r(cation)g Fp(\032)1258 1257 y Fk(1)1333 1245 y Ft(and)g(the)h(curren)n(t)f (constrain)n(ts)f(are)h Fn(f)p Fp(\032)2623 1257 y Fk(1)2699 1245 y Fn(7!)i Fp(\034)5 b(;)14 b(\032)2942 1257 y Fk(2)3019 1245 y Fn(7!)40 b Fp(\034)9 b Fn(g)p Ft(.)38 b(W)-7 b(e)523 1345 y(cannot)34 b(determine)g(whether)g(or)f(not)h Fp(\032)1826 1357 y Fk(1)1898 1345 y Ft(and)g Fp(\032)2109 1357 y Fk(2)2180 1345 y Ft(are)f(aliases)g(and)h(therefore)f(whether)523 1445 y(the)28 b(\014nal)g(constrain)n(t)e(set)i(should)f(b)r(e)h Fn(f)p Fp(\032)1832 1457 y Fk(1)1892 1445 y Fn(7!)23 b Fp(\034)2043 1414 y Fg(0)2067 1445 y Fp(;)14 b(\032)2147 1457 y Fk(2)2207 1445 y Fn(7!)23 b Fp(\034)2358 1414 y Fg(0)2382 1445 y Fn(g)k Ft(or)g Fn(f)p Fp(\032)2638 1457 y Fk(1)2698 1445 y Fn(7!)c Fp(\034)2849 1414 y Fg(0)2873 1445 y Fp(;)14 b(\032)2953 1457 y Fk(2)3013 1445 y Fn(7!)23 b Fp(\034)9 b Fn(g)p Ft(.)648 1544 y(Our)37 b(solution)g(uses)h(a)f (tec)n(hnique)h(from)f(the)i(literature)e(on)g(linear)g(t)n(yp)r(e)h (systems.)523 1644 y(Linear)31 b(t)n(yp)r(e)h(systems)g(prev)n(en)n(t)f (duplication)h(of)g(assumptions)f(b)n(y)h(disallo)n(wing)e(uses)i(of) 523 1743 y(the)i(con)n(traction)f(rule.)g(W)-7 b(e)35 b(use)e(an)h(analogous)d(restriction)i(in)h(the)h(de\014nition)f(of)g (con-)523 1843 y(strain)n(t)d(equalit)n(y:)g(The)h(join)g(op)r(erator)e Fn(\010)i Ft(is)f(asso)r(ciativ)n(e,)f(and)i(comm)n(utativ)n(e,)f(but)h Fl(not)523 1943 y Ft(idemp)r(oten)n(t.)j(By)e(ensuring)g(that)h(linear) f(constrain)n(ts)g(cannot)g(b)r(e)i(duplicated,)f(w)n(e)f(can)523 2042 y(pro)n(v)n(e)21 b(that)h Fp(\032)959 2054 y Fk(1)1019 2042 y Ft(and)g Fp(\032)1218 2054 y Fk(2)1278 2042 y Ft(from)g(the)h(example)f(ab)r(o)n(v)n(e)f(cannot)h(b)r(e)h(aliases.)e (The)h(other)g(equal-)523 2142 y(it)n(y)29 b(rules)f(are)f (unsurprising.)h(The)g(empt)n(y)h(constrain)n(t)e(collection)h(is)h (the)g(iden)n(tit)n(y)f(for)g Fn(\010)523 2242 y Ft(and)i(equalit)n(y)e (on)i(t)n(yp)r(es)f Fp(\034)40 b Ft(is)29 b(syn)n(tactic)g(up)h(to)g Fp(\013)p Ft(-con)n(v)n(ersion)d(of)j(b)r(ound)g(v)-5 b(ariables)28 b(and)523 2341 y(mo)r(dulo)g(equalit)n(y)e(on)i (constrain)n(ts.)e(Therefore:)759 2483 y Fp(\001)e Fn(`)e(f)p Fp(\032)1010 2495 y Fk(1)1070 2483 y Fn(7!)h(h)p Fp(int)p Fn(ig)18 b(\010)g(f)p Fp(\032)1577 2495 y Fk(2)1637 2483 y Fn(7!)23 b(h)p Fp(bool)r Fn(ig)g Ft(=)f Fn(f)p Fp(\032)2187 2495 y Fk(2)2247 2483 y Fn(7!)h(h)p Fp(bool)r Fn(ig)18 b(\010)g(f)p Fp(\032)2788 2495 y Fk(1)2848 2483 y Fn(7!)23 b(h)p Fp(int)p Fn(ig)523 2625 y Ft(but,)523 2767 y Fp(\001)g Fn(6`)g(f)p Fp(\032)774 2779 y Fk(1)834 2767 y Fn(7!)g(h)p Fp(int)p Fn(ig)s(\010)r(f)p Fp(\032)1310 2779 y Fk(2)1369 2767 y Fn(7!)g(h)p Fp(bool)r Fn(ig)g Ft(=)g Fn(f)p Fp(\032)1920 2779 y Fk(1)1979 2767 y Fn(7!)g(h)p Fp(int)p Fn(ig)s(\010)r(f)p Fp(\032)2455 2779 y Fk(1)2515 2767 y Fn(7!)g(h)p Fp(int)p Fn(ig)s(\010)q(f)p Fp(\032)2990 2779 y Fk(2)3050 2767 y Fn(7!)g(h)p Fp(bool)r Fn(ig)648 2909 y Ft(Giv)n(en)33 b(these)i(equalit)n(y)e(rules,)g(w)n(e)h(can)g(pro)n(v)n(e)e(that)j (after)e(an)h(up)r(date)h(of)f(the)g(store)523 3009 y(with)28 b(a)f(v)-5 b(alue)28 b(with)g(a)f(new)h(t)n(yp)r(e,)g(the)g(store)e(t)n (yping)i(in)n(v)-5 b(arian)n(t)26 b(is)h(preserv)n(ed:)523 3142 y Ff(Lemma)j(1)41 b(\(Store)c(Up)s(date\).)g Fl(If)d Fn(`)c Fp(S)5 b Fn(f)p Fp(`)30 b Fn(7!)g Fp(v)s Fn(g)g Ft(:)h Fp(C)c Fn(\010)21 b(f)p Fp(`)30 b Fn(7!)g Fp(\034)9 b Fn(g)34 b Fl(and)g Fn(\001)p Ft(;)14 b Fn(\001)31 b(`)3116 3154 y Fj(v)3186 3142 y Fp(v)3229 3112 y Fg(0)3282 3142 y Ft(:)g Fp(\034)3381 3112 y Fg(0)523 3242 y Fl(then)f Fn(`)22 b Fp(S)5 b Fn(f)p Fp(`)22 b Fn(7!)h Fp(v)1085 3212 y Fg(0)1109 3242 y Fn(g)f Ft(:)i Fp(C)g Fn(\010)18 b(f)p Fp(`)k Fn(7!)i Fp(\034)1637 3212 y Fg(0)1661 3242 y Fn(g)29 b Fl(.)523 3375 y Ft(where)21 b Fp(S)5 b Fn(f)p Fp(`)22 b Fn(7!)h Fp(v)s Fn(g)e Ft(denotes)g(the)h(store)e Fp(S)26 b Ft(extended)c(with)g(the)f(mapping)g Fp(`)i Fn(7!)g Fp(v)i Ft(\(pro)n(vided)523 3475 y Fp(`)i Ft(do)r(es)h(not)f (already)f(app)r(ear)h(on)g(the)h(left-hand)g(side)g(of)f(an)n(y)g (elemen)n(ts)g(in)h Fp(S)5 b Ft(\).)523 3642 y Fl(F)-6 b(unction)31 b(T)-6 b(yping)46 b Ft(The)30 b(rule)g(for)f(function)i (application)e Fp(v)s Ft(\()p Fp(v)2510 3654 y Fk(1)2548 3642 y Fp(;)14 b(:)g(:)g(:)g(;)g(v)2773 3654 y Fj(n)2818 3642 y Ft(\))30 b(is)g(the)h(rule)e(one)523 3741 y(w)n(ould)35 b(exp)r(ect.)h(In)g(general,)e Fp(v)39 b Ft(will)c(b)r(e)h(a)f(v)-5 b(alue)36 b(of)f(the)h(form)f Fp(v)2660 3711 y Fg(0)2684 3741 y Ft([)p Fp(c)2743 3753 y Fk(1)2780 3741 y Ft(])14 b Fn(\001)g(\001)g(\001)g Ft([)p Fp(c)2987 3753 y Fj(n)3032 3741 y Ft(])35 b(where)g Fp(v)3381 3711 y Fg(0)523 3841 y Ft(is)f(a)f(function)i(p)r(olymorphic)e(in)h(lo)r(cations)g(and)f (constrain)n(ts)g(and)h(the)g(t)n(yp)r(e)g(construc-)523 3941 y(tors)f Fp(c)732 3953 y Fk(1)803 3941 y Ft(through)g Fp(c)1159 3953 y Fj(n)1238 3941 y Ft(instan)n(tiate)h(its)g(p)r (olymorphic)f(v)-5 b(ariables.)33 b(After)h(substituting)h Fp(c)3368 3953 y Fk(1)523 4040 y Ft(through)h Fp(c)882 4052 y Fj(n)964 4040 y Ft(for)g(the)h(p)r(olymorphic)f(v)-5 b(ariables,)35 b(the)i(curren)n(t)f(constrain)n(ts)f(m)n(ust)i(equal) 523 4140 y(the)30 b(constrain)n(ts)f(exp)r(ected)h(b)n(y)g(the)g (function)g Fp(v)s Ft(.)h(This)e(c)n(hec)n(k)g(guaran)n(tees)f(that)i (the)h(no-)523 4239 y(duplication)c(prop)r(ert)n(y)e(is)i(preserv)n(ed) e(across)f(function)k(calls.)e(T)-7 b(o)26 b(see)g(wh)n(y)-7 b(,)27 b(consider)f(the)523 4339 y(p)r(olymorphic)34 b(function)h Fl(fo)l(o)g Ft(where)f(the)h(t)n(yp)r(e)f(con)n(text)g Fp(\001)h Ft(is)f(\()p Fp(\032)2643 4351 y Fk(1)2680 4339 y Fp(;)14 b(\032)2760 4351 y Fk(2)2798 4339 y Fp(;)g(\017)p Ft(\))34 b(and)g(the)h(con-)523 4439 y(strain)n(ts)27 b Fp(C)34 b Ft(are)26 b Fp(\017)18 b Fn(\010)g(f)p Fp(\032)1273 4451 y Fk(1)1333 4439 y Fn(7!)23 b(h)p Fp(int)p Fn(i)p Fp(;)14 b(\032)1692 4451 y Fk(2)1752 4439 y Fn(7!)23 b(h)p Fp(int)p Fn(ig)p Ft(:)648 4537 y Fo(fix)12 b Fl(fo)l(o)q Ft([)p Fp(\001)p Ft(;)i Fp(C)6 b Ft(;)14 b Fp(x)p Ft(:)p Fl(ptr)q Ft(\()p Fp(\032)1380 4549 y Fk(1)1418 4537 y Ft(\))p Fp(;)g(y)s Ft(:)p Fl(ptr)p Ft(\()p Fp(\032)1734 4549 y Fk(2)1771 4537 y Ft(\))p Fp(;)g(cont)p Ft(:)p Fn(8)p Ft([)p Fn(\001)p Ft(;)g Fp(\017)p Ft(])p Fp(:)p Ft(\()p Fp(int)o Ft(\))p Fn(!)p Fo(0)p Ft(])p Fp(:)834 4637 y Fo(free)22 b Fp(x)p Ft(;)168 b Fo(\(*)43 b(constraints)c Ft(=)23 b Fp(\017)18 b Fn(\010)g(f)p Fp(\032)2232 4649 y Fk(2)2292 4637 y Fn(7!)23 b(h)p Fp(int)o Fn(ig)339 b Fo(*\))834 4737 y Fp(z)t Ft(=)o Fp(y)s Ft([0];)174 b Fo(\(*)43 b(ok)g(because)d Fp(y)26 b Ft(:)d Fl(ptr)p Ft(\()p Fp(\032)2173 4749 y Fk(2)2211 4737 y Ft(\))44 b Fo(and)e Fn(f)p Fp(\032)2546 4749 y Fk(2)2606 4737 y Fn(7!)23 b(h)p Fp(int)p Fn(ig)h Fo(*\))834 4836 y(free)e Fp(y)s Ft(;)171 b Fo(\(*)43 b(constraints)c Ft(=)23 b Fp(\017)905 b Fo(*\))834 4936 y Fp(cont)p Ft(\()p Fp(z)t Ft(\))173 b Fo(\(*)43 b(return/continue)890 b(*\))p eop %%Page: 10 10 10 9 bop 523 448 a Ft(This)27 b(function)g(deallo)r(cates)f(its)h(t)n (w)n(o)f(argumen)n(ts,)f Fp(x)j Ft(and)e Fp(y)s Ft(,)h(b)r(efore)g (calling)f(its)h(con)n(tin)n(u-)523 548 y(ation)j(with)g(the)h(con)n (ten)n(ts)e(of)h Fp(y)s Ft(.)g(It)g(is)g(easy)f(to)h(c)n(hec)n(k)f (that)h(this)h(function)f(t)n(yp)r(e-c)n(hec)n(ks,)523 648 y(but)f(should)g(it?)g(If)g Fl(fo)l(o)h Ft(is)e(called)h(in)g(a)f (state)g(where)h Fp(\032)2261 660 y Fk(1)2326 648 y Ft(and)g Fp(\032)2532 660 y Fk(2)2598 648 y Ft(are)e(aliases,)h(a)g(run-time)523 747 y(error)33 b(will)h(result)h(when)f(the)h(second)f(instruction)h (is)f(executed)h(b)r(ecause)f(the)h(lo)r(cation)523 847 y(p)r(oin)n(ted)24 b(to)f(b)n(y)g Fp(y)j Ft(will)d(already)f(ha)n(v)n (e)g(b)r(een)i(deallo)r(cated.)e(F)-7 b(ortunately)g(,)23 b(our)g(t)n(yp)r(e)g(system)523 946 y(guaran)n(tees)j(that)h Fl(fo)l(o)i Ft(can)e(nev)n(er)g(b)r(e)h(called)f(from)g(suc)n(h)h(a)f (state.)648 1046 y(Supp)r(ose)35 b(that)h(the)h(store)d(curren)n(tly)h (con)n(tains)g(a)g(single)g(in)n(teger)g(reference:)g Fn(f)p Fp(`)h Fn(7!)523 1146 y(h)p Ft(3)p Fn(ig)p Ft(.)23 b(This)g(store)f(can)h(b)r(e)h(describ)r(ed)f(b)n(y)g(the)g(constrain)n (ts)f Fn(f)p Fp(`)g Fn(7!)h(h)p Fp(int)p Fn(ig)p Ft(.)g(If)h(the)f (program-)523 1245 y(mer)28 b(attempts)h(to)f(instan)n(tiate)g(b)r(oth) h Fp(\032)1798 1257 y Fk(1)1863 1245 y Ft(and)f Fp(\032)2068 1257 y Fk(2)2134 1245 y Ft(with)h(the)g(same)e(lab)r(el)i Fp(`)p Ft(,)f(the)g(function)523 1345 y(call)c Fl(fo)l(o)p Ft([)p Fp(`;)14 b(`;)g Fn(;)p Ft(]\()p Fo(ptr)o Ft(\()p Fp(`)p Ft(\)\))25 b(will)f(fail)h(to)f(t)n(yp)r(e)h(c)n(hec)n(k)e(b)r (ecause)h(the)h(constrain)n(ts)e Fn(f)p Fp(`)f Fn(7!)h(h)p Fp(int)p Fn(ig)523 1445 y Ft(do)k(not)h(equal)f(the)h(pre-condition)f Fn(;)18 b(\010)g(f)p Fp(`)k Fn(7!)h(h)p Fp(int)p Fn(i)p Fp(;)14 b(`)22 b Fn(7!)h(h)p Fp(int)p Fn(ig)p Ft(.)648 1544 y(Figure)j(3)g(con)n(tains)g(the)i(t)n(yping)f(rules)f(for)g(v)-5 b(alues)27 b(and)g(instructions.)f(Note)h(that)h(the)523 1644 y(judgemen)n(t)g Fp(\001)23 b Fn(`)1072 1656 y Fj(w)r(f)1188 1644 y Fp(\034)37 b Ft(indicates)27 b(that)h Fp(\001)g Ft(con)n(tains)f(the)h(free)f(t)n(yp)r(e)h(v)-5 b(ariables)26 b(in)i Fp(\034)9 b Ft(.)523 1860 y Ff(3.4)95 b(Soundness)523 1993 y Ft(Our)36 b(t)n(yping)f(rules)h(enforce)g(the)g(prop)r(ert)n(y)f (that)i(w)n(ell-t)n(yp)r(ed)f(programs)e(cannot)i(en)n(ter)523 2093 y Fl(stuck)26 b(states)p Ft(.)d(A)h(state)g(\()p Fp(S;)14 b(\023)p Ft(\))24 b(is)g(stuc)n(k)f(when)h(no)g(reductions)f (of)g(the)i(op)r(erational)d(seman-)523 2192 y(tics)28 b(apply)f(and)g Fp(\023)d Fn(6)p Ft(=)f Fo(halt)12 b Ft(.)27 b(The)h(follo)n(wing)f(theorem)g(captures)g(this)g(idea)h (formally:)523 2334 y Ff(Theorem)i(1)i(\(Soundness\))41 b Fl(If)d Fn(`)g Fp(S)43 b Ft(:)38 b Fp(C)44 b Fl(and)38 b Fn(\001)p Ft(;)14 b Fp(C)6 b Ft(;)14 b Fn(\001)38 b(`)2441 2346 y Fj(\023)2508 2334 y Fp(\023)g Fl(and)h Ft(\()p Fp(S;)14 b(\023)p Ft(\))39 b Fn(7\000)-15 b(!)38 b Fp(:)14 b(:)g(:)38 b Fn(7\000)-14 b(!)523 2433 y Ft(\()p Fp(S)611 2403 y Fg(0)634 2433 y Fp(;)14 b(\023)700 2403 y Fg(0)724 2433 y Ft(\))30 b Fl(then)f Ft(\()p Fp(S)1058 2403 y Fg(0)1082 2433 y Fp(;)14 b(\023)1148 2403 y Fg(0)1171 2433 y Ft(\))30 b Fl(is)g(not)g(a)g(stuck)f(state.)648 2574 y Ft(W)-7 b(e)33 b(pro)n(v)n(e)f(soundness)h(syn)n(tactically)f (in)i(the)f(st)n(yle)g(of)h(W)-7 b(righ)n(t)33 b(and)g(F)-7 b(elleisen)34 b([28].)523 2674 y(The)28 b(pro)r(of)f(app)r(ears)f(in)i (the)g(companion)f(tec)n(hnical)g(rep)r(ort)g([19].)523 2907 y Fq(4)112 b(Non-linear)37 b(Constrain)m(ts)523 3073 y Ft(Most)31 b(linear)g(t)n(yp)r(e)g(systems)g(con)n(tain)f(a)h (class)g(of)g(non-linear)f(v)-5 b(alues)31 b(that)g(can)g(b)r(e)h(used) 523 3173 y(in)38 b(a)f(completely)h(unrestricted)f(fashion.)h(Our)f (system)g(is)h(similar)f(in)h(that)g(it)g(admits)523 3272 y(non-linear)26 b(constrain)n(ts,)f(written)i Fn(f)p Fp(\021)f Fn(7!)d Fp(\034)9 b Fn(g)1952 3242 y Fj(!)2000 3272 y Ft(.)27 b(They)g(are)e(c)n(haracterized)g(b)n(y)i(the)g(axiom:) 1250 3414 y Fp(\001)c Fn(`)g(f)p Fp(\021)j Fn(7!)d Fp(\034)9 b Fn(g)1718 3379 y Fj(!)1789 3414 y Ft(=)23 b Fn(f)p Fp(\021)i Fn(7!)e Fp(\034)9 b Fn(g)2178 3379 y Fj(!)2245 3414 y Fn(\010)18 b(f)p Fp(\021)26 b Fn(7!)d Fp(\034)9 b Fn(g)2630 3379 y Fj(!)523 3555 y Ft(Unlik)n(e)38 b(the)h(constrain)n (ts)e(of)h(the)g(previous)g(section,)f(non-linear)g(constrain)n(ts)g (ma)n(y)h(b)r(e)523 3655 y(duplicated.)32 b(Therefore,)e(it)i(is)g(not) f(sound)g(to)h(deallo)r(cate)e(memory)h(describ)r(ed)g(b)n(y)g(non-)523 3754 y(linear)26 b(constrain)n(ts)f(or)g(to)h(use)h(it)f(at)h (di\013eren)n(t)f(t)n(yp)r(es.)h(Because)e(there)h(are)f(strictly)i (few)n(er)523 3854 y(op)r(erations)k(on)h(non-linear)f(constrain)n(ts)g (than)i(linear)e(constrain)n(ts,)g(there)i(is)f(a)g(natural)523 3953 y(subt)n(yping)39 b(relation)f(b)r(et)n(w)n(een)h(the)h(t)n(w)n (o:)e Fn(f)p Fp(\021)46 b Fn(7!)c Fp(\034)9 b Fn(g)43 b(\024)e(f)p Fp(\021)46 b Fn(7!)c Fp(\034)9 b Fn(g)2743 3923 y Fj(!)2791 3953 y Ft(.)40 b(W)-7 b(e)39 b(extend)h(the)523 4053 y(subt)n(yping)e(relationship)f(on)h(single)f(constrain)n(ts)g(to) h(collections)f(of)h(constrain)n(ts)e(with)523 4153 y(rules)30 b(for)g(re\015exivit)n(y)-7 b(,)30 b(transitivit)n(y)-7 b(,)30 b(and)h(congruence.)e(F)-7 b(or)30 b(example,)h(assume)e Fl(add)k Ft(has)523 4252 y(t)n(yp)r(e)39 b Fn(8)p Ft([)p Fp(\032)834 4264 y Fk(1)870 4252 y Fp(;)14 b(\032)950 4264 y Fk(2)987 4252 y Fp(;)g(\017)p Ft(;)g Fn(f)p Fp(\032)1180 4264 y Fk(1)1257 4252 y Fn(7!)41 b(h)p Fp(int)p Fn(ig)1596 4222 y Fj(!)1670 4252 y Fn(\010)25 b(f)p Fp(\032)1845 4264 y Fk(2)1923 4252 y Fn(7!)41 b(h)p Fp(int)o Fn(ig)2261 4222 y Fj(!)2335 4252 y Fn(\010)25 b Fp(\017)p Ft(])p Fp(:)p Ft(\()p Fl(ptr)p Ft(\()p Fp(\032)2717 4264 y Fk(1)2755 4252 y Ft(\))p Fp(;)14 b Fl(ptr)p Ft(\()p Fp(\032)3004 4264 y Fk(2)3041 4252 y Ft(\)\))p Fn(!)q Fo(0)38 b Ft(and)523 4352 y(consider)27 b(this)g(co)r(de:)523 4485 y(Instructions)p 523 4498 433 4 v 439 w(Constrain)n(ts)f(\(Initially)i Fn(;)p Ft(\))p 1395 4519 866 4 v 523 4592 a Fo(malloc)21 b Fp(x;)14 b(\032;)g Ft(1;)358 b Fp(C)1454 4604 y Fk(1)1514 4592 y Ft(=)23 b Fn(f)p Fp(\032)g Fn(7!)g(h)p Fl(junk)p Fn(ig)p Fo(,)43 b Fp(x)23 b Ft(:)g Fl(ptr)p Ft(\()p Fp(\032)p Ft(\))523 4692 y Fp(x)p Ft([0]:=3;)584 b Fp(C)1454 4704 y Fk(2)1514 4692 y Ft(=)23 b Fn(f)p Fp(\032)g Fn(7!)g(h)p Fp(int)o Fn(ig)523 4791 y Fl(add)q Ft([)p Fp(\032;)14 b(\032;)g Fn(;)p Ft(]\()p Fp(x;)g(x)p Ft(\))302 b Fp(C)1454 4803 y Fk(2)1514 4791 y Fn(\024)23 b(f)p Fp(\032)g Fn(7!)g(h)p Fp(int)o Fn(ig)2030 4761 y Fj(!)2101 4791 y Ft(=)g Fn(f)p Fp(\032)f Fn(7!)h(h)p Fp(int)p Fn(ig)2617 4761 y Fj(!)2683 4791 y Fn(\010)18 b(f)p Fp(\032)23 b Fn(7!)g(h)p Fp(int)p Fn(ig)3195 4761 y Fj(!)3261 4791 y Fn(\010)18 b(;)648 4924 y Ft(T)n(yping)27 b(rules)g(for)g(non-linear)f(constrain)n(ts)g (are)h(presen)n(ted)g(in)h(Figure)f(4.)p eop %%Page: 11 11 11 10 bop 523 466 2882 4 v 523 492 486 4 v 523 609 4 117 v 551 569 a Fe(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)775 577 y Fm(v)834 569 y Fe(v)24 b Fs(:)e Fe(\034)p 1005 609 V 523 612 486 4 v 975 715 473 4 v 975 783 a(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)1199 791 y Fm(v)1258 783 y Fe(i)21 b Fs(:)h Fe(int)p 1602 711 551 4 v 154 w(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)1826 791 y Fm(v)1884 783 y Fe(x)21 b Fs(:)h Fe(\000)11 b Fs(\()p Fe(x)p Fs(\))p 2306 715 647 4 v 152 w Fe(\001)p Fs(;)i Fe(\000)32 b Fd(`)2530 791 y Fm(v)2589 783 y Fh(junk)22 b Fs(:)f Fc(junk)1041 1003 y Fe(\001)h Fd(`)1174 1012 y Fm(w)q(f)1281 1003 y Fe(\021)p 800 1042 763 4 v 800 1115 a(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)1024 1123 y Fm(v)1083 1115 y Fh(ptr)p Fs(\()p Fe(\021)s Fs(\))21 b(:)h Fc(ptr)q Fs(\()p Fe(\021)s Fs(\))1716 1007 y Fe(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)1940 1015 y Fm(v)1999 1007 y Fe(v)2036 1015 y Fi(1)2092 1007 y Fs(:)22 b Fe(\034)2169 1015 y Fi(1)2369 1007 y Fd(\001)14 b(\001)f(\001)166 b Fe(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)2849 1015 y Fm(v)2908 1007 y Fe(v)2945 1015 y Fm(n)3009 1007 y Fs(:)22 b Fe(\034)3086 1015 y Fm(n)p 1716 1042 1412 4 v 1870 1115 a Fe(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)2094 1123 y Fm(v)2153 1115 y Fd(h)p Fe(v)2220 1123 y Fi(1)2254 1115 y Fe(;)14 b(:)f(:)g(:)g(;)g(v)2462 1123 y Fm(n)2505 1115 y Fd(i)21 b Fs(:)h Fd(h)p Fe(\034)2663 1123 y Fi(1)2697 1115 y Fe(;)13 b(:)g(:)g(:)h(;)f(\034)2902 1123 y Fm(n)2944 1115 y Fd(i)1124 1347 y Fe(\001)21 b Fd(`)1256 1356 y Fm(w)q(f)1363 1347 y Fd(8)p Fs([)p Fe(\001)1491 1315 y Fb(0)1513 1347 y Fs(;)14 b Fe(C)5 b Fs(])p Fe(:)p Fs(\()p Fe(\034)1714 1355 y Fi(1)1749 1347 y Fe(;)13 b(:)g(:)g(:)g(;)g(\034)1953 1355 y Fm(n)1996 1347 y Fs(\))p Fd(!)o Fh(0)662 1438 y Fe(\001;)g(\001)824 1406 y Fb(0)846 1438 y Fs(;)g Fe(C)5 b Fs(;)14 b Fe(\000)r(;)f(f)8 b Fs(:)p Fd(8)p Fs([)p Fe(\001)1252 1406 y Fb(0)1275 1438 y Fs(;)13 b Fe(C)5 b Fs(])p Fe(:)p Fs(\()p Fe(\034)1475 1446 y Fi(1)1510 1438 y Fe(;)13 b(:)g(:)h(:)f(;)g(\034)1715 1446 y Fm(n)1757 1438 y Fs(\))p Fd(!)p Fh(0)p Fe(;)g(x)1981 1446 y Fi(1)2015 1438 y Fs(:)p Fe(\034)2070 1446 y Fi(1)2105 1438 y Fe(;)g(:)g(:)g(:)g(;)h(x)2320 1446 y Fm(n)2362 1438 y Fs(:)p Fe(\034)2417 1446 y Fm(n)2481 1438 y Fd(`)2528 1446 y Fm(\023)2576 1438 y Fe(\023)p 568 1485 2129 4 v 568 1561 a(\001)p Fs(;)f Fe(\000)32 b Fd(`)792 1569 y Fm(v)851 1561 y Fh(fix)13 b Fe(f)8 b Fs([)p Fe(\001)1111 1530 y Fb(0)1134 1561 y Fs(;)13 b Fe(C)5 b Fs(;)14 b Fe(x)1307 1569 y Fi(1)1341 1561 y Fs(:)p Fe(\034)1396 1569 y Fi(1)1430 1561 y Fe(;)g(:)f(:)g(:)g(;)g(x)1645 1569 y Fm(n)1687 1561 y Fs(:)p Fe(\034)1742 1569 y Fm(n)1785 1561 y Fs(])p Fe(:\023)22 b Fs(:)g Fd(8)p Fs([)p Fe(\001)2047 1530 y Fb(0)2069 1561 y Fs(;)13 b Fe(C)5 b Fs(])p Fe(:)p Fs(\()p Fe(\034)2269 1569 y Fi(1)2304 1561 y Fe(;)13 b(:)g(:)h(:)f(;)g(\034)2509 1569 y Fm(n)2551 1561 y Fs(\))p Fd(!)p Fh(0)2738 1504 y Fs(\()p Fe(f)t(;)h(x)2888 1512 y Fi(1)2922 1504 y Fe(;)f(:)g(:)g(:)g(;)g(x)3136 1512 y Fm(n)3200 1504 y Fd(62)21 b Fe(\000)11 b Fs(\))1128 1789 y Fe(\001)21 b Fd(`)1260 1798 y Fm(w)q(f)1367 1789 y Fe(\021)157 b(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)1786 1797 y Fm(v)1844 1789 y Fe(v)24 b Fs(:)e Fd(8)p Fs([)p Fe(\032;)13 b(\001)2150 1757 y Fb(0)2172 1789 y Fs(;)g Fe(C)5 b Fs(])p Fe(:)p Fs(\()p Fe(\034)2372 1797 y Fi(1)2407 1789 y Fe(;)13 b(:)h(:)f(:)g(;)g(\034)2612 1797 y Fm(n)2654 1789 y Fs(\))p Fd(!)p Fh(0)p 1128 1827 1673 4 v 1259 1903 a Fe(\001)p Fs(;)g Fe(\000)32 b Fd(`)1483 1911 y Fm(v)1541 1903 y Fe(v)s Fs([)p Fe(\021)s Fs(])22 b(:)g Fd(8)p Fs([)p Fe(\001)1857 1872 y Fb(0)1879 1903 y Fs(;)13 b Fe(C)5 b Fs(])p Fe(:)p Fs(\()p Fe(\034)2079 1911 y Fi(1)2115 1903 y Fe(;)13 b(:)g(:)g(:)g(;)g(\034)2319 1911 y Fm(n)2361 1903 y Fs(\))p Fd(!)p Fh(0)p Fs([)p Fe(\021)s(=\032)p Fs(])562 2131 y Fe(\001)21 b Fd(`)694 2140 y Fm(w)q(f)801 2131 y Fe(C)159 b(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)1239 2139 y Fm(v)1297 2131 y Fe(v)24 b Fs(:)e Fd(8)p Fs([)p Fe(\017;)13 b(\001)p Fs(;)g Fe(C)1688 2099 y Fb(0)1711 2131 y Fs(])p Fe(:)p Fs(\()p Fe(\034)1817 2139 y Fi(1)1852 2131 y Fe(;)g(:)g(:)g(:)g(;)h(\034)2057 2139 y Fm(n)2099 2131 y Fs(\))p Fd(!)p Fh(0)p 562 2170 1683 4 v 684 2246 a Fe(\001)p Fs(;)g Fe(\000)31 b Fd(`)908 2254 y Fm(v)967 2246 y Fe(v)s Fs([)p Fe(C)5 b Fs(])22 b(:)g Fd(8)p Fs([)p Fe(\001)p Fs(;)13 b Fe(C)1396 2214 y Fb(0)1418 2246 y Fs(])p Fe(:)p Fs(\()p Fe(\034)1524 2254 y Fi(1)1559 2246 y Fe(;)g(:)g(:)h(:)f(;)g(\034)1764 2254 y Fm(n)1806 2246 y Fs(\))p Fd(!)p Fh(0)p Fs([)p Fe(C)s(=\017)p Fs(])2398 2143 y Fe(\001)p Fs(;)g Fe(\000)32 b Fd(`)2622 2151 y Fm(v)2681 2143 y Fe(v)24 b Fs(:)e Fe(\034)2828 2111 y Fb(0)3003 2143 y Fe(\001)f Fd(`)h Fe(\034)3200 2111 y Fb(0)3243 2143 y Fs(=)f Fe(\034)p 2398 2177 968 4 v 2668 2246 a(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)2892 2254 y Fm(v)2950 2246 y Fe(v)25 b Fs(:)c Fe(\034)p 523 2346 451 4 v 523 2463 4 117 v 551 2423 a(\001)p Fs(;)13 b Fe(C)5 b Fs(;)14 b Fe(\000)32 b Fd(`)870 2431 y Fm(\023)918 2423 y Fe(\023)p 970 2463 V 523 2466 451 4 v 865 2601 a(\001;)14 b(\032)p Fs(;)e Fe(C)22 b Fd(\010)17 b(f)p Fe(\032)22 b Fd(7!)f(h)p Fc(junk)1562 2620 y Fi(1)1596 2601 y Fe(;)13 b(:)g(:)h(:)f(;)g Fc(junk)1910 2620 y Fm(n)1952 2601 y Fd(ig)p Fs(;)h Fe(\000)r(;)f(x)p Fs(:)p Fc(ptr)q Fs(\()p Fe(\032)p Fs(\))21 b Fd(`)2468 2609 y Fm(\023)2516 2601 y Fe(\023)p 865 2640 1678 4 v 1263 2708 a(\001)p Fs(;)13 b Fe(C)5 b Fs(;)13 b Fe(\000)32 b Fd(`)1581 2716 y Fm(\023)1630 2708 y Fh(malloc)23 b Fe(x;)12 b(\032;)h(n)p Fs(;)h Fe(\023)2585 2658 y Fs(\()p Fe(x)21 b Fd(62)g Fe(\000)r(;)13 b(\032)21 b Fd(62)h Fe(\001)p Fs(\))1672 2936 y Fe(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)1896 2944 y Fm(v)1954 2936 y Fe(v)25 b Fs(:)c Fc(ptr)q Fs(\()p Fe(\021)s Fs(\))889 3027 y Fe(\001)h Fd(`)f Fe(C)26 b Fs(=)c Fe(C)1266 2996 y Fb(0)1305 3027 y Fd(\010)17 b(f)p Fe(\021)25 b Fd(7!)c(h)p Fe(\034)1645 3035 y Fi(1)1679 3027 y Fe(;)13 b(:)g(:)g(:)h(;)f(\034)1884 3035 y Fm(n)1926 3027 y Fd(ig)154 b Fe(\001)p Fs(;)13 b Fe(C)2306 2996 y Fb(0)2346 3027 y Fd(\010)j(f)p Fe(\021)25 b Fd(7!)c Fc(junk)p Fd(g)p Fs(;)14 b Fe(\000)32 b Fd(`)2963 3035 y Fm(\023)3011 3027 y Fe(\023)p 878 3075 2173 4 v 1641 3143 a(\001)p Fs(;)13 b Fe(C)5 b Fs(;)13 b Fe(\000)32 b Fd(`)1959 3151 y Fm(\023)2008 3143 y Fh(free)22 b Fe(v)s Fs(;)13 b Fe(\023)834 3371 y(\001)p Fs(;)g Fe(\000)32 b Fd(`)1058 3379 y Fm(v)1117 3371 y Fe(v)24 b Fs(:)e Fc(ptr)q Fs(\()p Fe(\021)s Fs(\))153 b Fe(\001)21 b Fd(`)h Fe(C)k Fs(=)21 b Fe(C)1948 3339 y Fb(0)1988 3371 y Fd(\010)16 b(f)p Fe(\021)25 b Fd(7!)c(h)p Fe(\034)2327 3379 y Fi(1)2362 3371 y Fe(;)13 b(:)g(:)g(:)g(;)g(\034)2566 3379 y Fm(n)2608 3371 y Fd(ig)646 3462 y Fe(\001)p Fs(;)g Fe(\000)32 b Fd(`)870 3470 y Fm(v)929 3462 y Fe(v)969 3431 y Fb(0)1012 3462 y Fs(:)22 b Fe(\034)1098 3431 y Fb(0)1162 3462 y Fe(\001)p Fs(;)14 b Fe(C)1321 3431 y Fb(0)1360 3462 y Fd(\010)j(f)p Fe(\021)25 b Fd(7!)c(h)p Fe(\034)1700 3470 y Fi(1)1734 3462 y Fe(;)13 b(:)g(:)g(:)h(;)f(\034)1939 3470 y Fm(i)p Fb(\000)p Fi(1)2043 3462 y Fe(;)g(\034)2120 3431 y Fb(0)2142 3462 y Fe(;)g(\034)2210 3470 y Fm(i)p Fi(+1)2313 3462 y Fe(;)h(:)f(:)g(:)g(;)g(\034)2518 3470 y Fm(n)2560 3462 y Fd(ig)p Fs(;)h Fe(\000)32 b Fd(`)2789 3470 y Fm(\023)2837 3462 y Fe(\023)p 635 3510 2242 4 v 1415 3586 a(\001)p Fs(;)13 b Fe(C)5 b Fs(;)14 b Fe(\000)31 b Fd(`)1733 3594 y Fm(\023)1782 3586 y Fe(v)s Fs([)p Fe(i)p Fs(]:=)q Fe(v)2012 3554 y Fb(0)2034 3586 y Fs(;)14 b Fe(\023)2918 3528 y Fs(\(1)21 b Fd(\024)g Fe(i)h Fd(\024)f Fe(n)p Fs(\))1421 3818 y Fe(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)1645 3826 y Fm(v)1703 3818 y Fe(v)25 b Fs(:)c Fc(ptr)q Fs(\()p Fe(\021)1975 3786 y Fb(0)1998 3818 y Fs(\))811 3909 y Fe(\001)h Fd(`)f Fe(C)27 b Fs(=)21 b Fe(C)1188 3877 y Fb(0)1227 3909 y Fd(\010)c(f)p Fe(\021)1383 3877 y Fb(0)1427 3909 y Fd(7!)k(h)p Fe(\034)1589 3917 y Fi(1)1623 3909 y Fe(;)14 b(:)f(:)g(:)g(;)g(\034)1828 3917 y Fm(n)1870 3909 y Fd(ig)154 b Fe(\001)p Fs(;)13 b Fe(C)5 b Fs(;)14 b Fe(\000)r(;)f(x)p Fs(:)p Fe(\034)2467 3917 y Fm(i)2514 3909 y Fd(`)2561 3917 y Fm(\023)2610 3909 y Fe(\023)p 800 3956 1849 4 v 1404 4029 a(\001)p Fs(;)g Fe(C)5 b Fs(;)13 b Fe(\000)32 b Fd(`)1722 4037 y Fm(\023)1771 4029 y Fe(x)p Fs(=)o Fe(v)s Fs([)p Fe(i)p Fs(];)14 b Fe(\023)2690 3860 y Fa(\022)2812 3929 y Fe(x)21 b Fd(62)g Fe(\000)2751 4020 y Fs(1)h Fd(\024)f Fe(i)h Fd(\024)f Fe(n)3067 3860 y Fa(\023)776 4269 y Fe(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)1000 4277 y Fm(v)1058 4269 y Fe(v)25 b Fs(:)c Fd(8)p Fs([)p Fd(\001)p Fs(;)14 b Fe(C)1342 4238 y Fb(0)1364 4269 y Fs(])p Fe(:)p Fs(\()p Fe(\034)1470 4277 y Fi(1)1505 4269 y Fe(;)f(:)g(:)h(:)f(;)g(\034)1710 4277 y Fm(n)1752 4269 y Fs(\))p Fd(!)p Fh(0)154 b Fe(\001)21 b Fd(`)g Fe(C)27 b Fs(=)21 b Fe(C)2428 4238 y Fb(0)907 4361 y Fe(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)1131 4369 y Fm(v)1190 4361 y Fe(v)1227 4369 y Fi(1)1283 4361 y Fs(:)22 b Fe(\034)1360 4369 y Fi(1)1560 4361 y Fd(\001)13 b(\001)h(\001)166 b Fe(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)2040 4369 y Fm(v)2099 4361 y Fe(v)2136 4369 y Fm(n)2200 4361 y Fs(:)21 b Fe(\034)2276 4369 y Fm(n)p 776 4408 1686 4 v 1224 4481 a Fe(\001)p Fs(;)13 b Fe(C)5 b Fs(;)14 b Fe(\000)32 b Fd(`)1543 4489 y Fm(\023)1591 4481 y Fe(v)s Fs(\()p Fe(v)1698 4489 y Fi(1)1733 4481 y Fe(;)13 b(:)g(:)g(:)h(;)f(v) 1941 4489 y Fm(n)1983 4481 y Fs(\))p 2615 4412 537 4 v 602 w Fe(\001)p Fs(;)h Fe(C)5 b Fs(;)13 b Fe(\000)32 b Fd(`)2934 4489 y Fm(\023)2982 4481 y Fh(halt)p 523 4678 2882 4 v 934 4813 a Fr(Fig.)15 b(3.)25 b Fs(Language)i(of)f(Lo)r (cations:)i(V)-6 b(alue)25 b(and)h(Instruction)f(T)n(yping)p eop %%Page: 12 12 12 11 bop 523 369 2882 4 v 1432 535 a Fe(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)1656 543 y Fm(v)1715 535 y Fe(v)24 b Fs(:)d Fc(ptr)r Fs(\()p Fe(\021)s Fs(\))800 626 y Fe(\001)h Fd(`)f Fe(C)26 b Fs(=)21 b Fe(C)1176 595 y Fb(0)1216 626 y Fd(\010)c(f)p Fe(\021)24 b Fd(7!)e(h)p Fe(\034)1556 634 y Fi(1)1590 626 y Fe(;)13 b(:)g(:)g(:)g(;)h(\034)1795 634 y Fm(n)1837 626 y Fd(ig)1905 595 y Fm(!)2103 626 y Fe(\001)p Fs(;)g Fe(C)5 b Fs(;)13 b Fe(\000)r(;)g(x)p Fs(:)p Fe(\034)2478 634 y Fm(i)2525 626 y Fd(`)2572 634 y Fm(\023)2621 626 y Fe(\023)p 789 674 1872 4 v 1404 746 a(\001)p Fs(;)g Fe(C)5 b Fs(;)13 b Fe(\000)32 b Fd(`)1722 754 y Fm(\023)1771 746 y Fe(x)p Fs(=)o Fe(v)s Fs([)p Fe(i)p Fs(];)14 b Fe(\023)2701 577 y Fa(\022)2823 646 y Fe(x)21 b Fd(62)g Fe(\000)2762 738 y Fs(1)h Fd(\024)f Fe(i)h Fd(\024)f Fe(n)3078 577 y Fa(\023)1150 987 y Fe(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)1374 995 y Fm(v)1432 987 y Fe(v)25 b Fs(:)c Fc(ptr)q Fs(\()p Fe(\021)s Fs(\))154 b Fe(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)2112 995 y Fm(v)2170 987 y Fe(v)2210 955 y Fb(0)2254 987 y Fs(:)21 b Fe(\034)2339 955 y Fb(0)640 1078 y Fe(\001)g Fd(`)g Fe(C)27 b Fs(=)21 b Fe(C)1016 1046 y Fb(0)1055 1078 y Fd(\010)c(f)p Fe(\021)25 b Fd(7!)c(h)p Fe(\034)1395 1086 y Fi(1)1429 1078 y Fe(;)13 b(:)g(:)h(:)f(;)g(\034)1634 1086 y Fm(n)1676 1078 y Fd(ig)1744 1046 y Fm(!)1943 1078 y Fe(\001)21 b Fd(`)g Fe(\034)2139 1046 y Fb(0)2182 1078 y Fs(=)h Fe(\034)2298 1086 y Fm(i)2477 1078 y Fe(\001)p Fs(;)13 b Fe(C)5 b Fs(;)14 b Fe(\000)32 b Fd(`)2796 1086 y Fm(\023)2844 1078 y Fe(\023)p 628 1125 2256 4 v 1415 1201 a(\001)p Fs(;)13 b Fe(C)5 b Fs(;)14 b Fe(\000)31 b Fd(`)1733 1209 y Fm(\023)1782 1201 y Fe(v)s Fs([)p Fe(i)p Fs(]:=)q Fe(v)2012 1170 y Fb(0)2034 1201 y Fs(;)14 b Fe(\023)2924 1144 y Fs(\(1)22 b Fd(\024)f Fe(i)h Fd(\024)f Fe(n)p Fs(\))667 1433 y Fe(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)891 1441 y Fm(v)950 1433 y Fe(v)24 b Fs(:)e Fd(8)p Fs([)p Fd(\001)p Fs(;)13 b Fe(C)1233 1402 y Fb(0)1255 1433 y Fs(])p Fe(:)p Fs(\()p Fe(\034)1361 1441 y Fi(1)1396 1433 y Fe(;)h(:)f(:)g(:)g(;)g(\034)1601 1441 y Fm(n)1643 1433 y Fs(\))p Fd(!)p Fh(0)154 b Fe(\001)21 b Fd(`)g Fe(C)27 b Fd(\024)21 b Fe(C)2319 1402 y Fb(0)799 1525 y Fe(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)1023 1533 y Fm(v)1081 1525 y Fe(v)1118 1533 y Fi(1)1174 1525 y Fs(:)22 b Fe(\034)1251 1533 y Fi(1)1452 1525 y Fd(\001)13 b(\001)g(\001)167 b Fe(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)1932 1533 y Fm(v)1990 1525 y Fe(v)2027 1533 y Fm(n)2091 1525 y Fs(:)22 b Fe(\034)2168 1533 y Fm(n)p 667 1572 1686 4 v 1116 1645 a Fe(\001)p Fs(;)13 b Fe(C)5 b Fs(;)13 b Fe(\000)32 b Fd(`)1434 1653 y Fm(\023)1483 1645 y Fe(v)s Fs(\()p Fe(v)1590 1653 y Fi(1)1624 1645 y Fe(;)13 b(:)h(:)f(:)g(;)g(v) 1832 1653 y Fm(n)1875 1645 y Fs(\))2507 1545 y Fd(`)21 b Fe(S)k Fs(:)d Fe(C)2750 1513 y Fb(0)2948 1545 y Fd(`)f Fe(C)3076 1513 y Fb(0)3120 1545 y Fd(\024)g Fe(C)p 2507 1576 755 4 v 2762 1645 a Fd(`)g Fe(S)26 b Fs(:)21 b Fe(C)p 523 1842 2882 4 v 1050 1977 a Fr(Fig.)15 b(4.)25 b Fs(Language)i(of)f (Lo)r(cations:)i(Non-linear)e(Constrain)n(ts)523 2244 y Ff(4.1)95 b(Non-linear)30 b(Constrain)m(ts)i(and)g(Dynamic)g(T)m(yp)s (e)g(T)-8 b(ests)523 2391 y Ft(Although)36 b(data)g(structures)g (describ)r(ed)g(b)n(y)g(non-linear)f(constrain)n(ts)g(cannot)h(b)r(e)h (deal-)523 2491 y(lo)r(cated)e(or)f(used)i(to)f(store)f(ob)5 b(jects)35 b(of)g(v)-5 b(arying)34 b(t)n(yp)r(es,)i(w)n(e)f(can)f (still)i(tak)n(e)f(adv)-5 b(an)n(tage)523 2591 y(of)36 b(the)h(sharing)e(implied)i(b)n(y)f(singleton)g(p)r(oin)n(ter)g(t)n(yp) r(es.)g(More)f(sp)r(eci\014cally)-7 b(,)36 b(co)r(de)g(can)523 2690 y(use)26 b(w)n(eak)g(constrain)n(ts)f(to)i(p)r(erform)f(a)g (dynamic)g(t)n(yp)r(e)h(test)g(on)f(a)h(particular)e(ob)5 b(ject)26 b(and)523 2790 y(sim)n(ultaneously)h(re\014ne)g(the)h(t)n(yp) r(es)f(of)h(man)n(y)f(aliases)f(of)i(that)g(ob)5 b(ject.)648 2890 y(T)-7 b(o)36 b(demonstrate)g(this)h(application,)f(w)n(e)g (extend)h(the)g(language)e(discussed)i(in)g(the)523 2989 y(previous)29 b(section)g(with)h(a)f(simple)h(form)f(of)h(option)f(t)n (yp)r(e)h(?)p Fn(h)p Fp(\034)2509 3001 y Fk(1)2547 2989 y Fp(;)14 b(:)g(:)g(:)g(;)g(\034)2768 3001 y Fj(n)2813 2989 y Fn(i)30 b Ft(\(see)g(Figure)f(5\).)523 3089 y(Options)37 b(ma)n(y)f(b)r(e)h Fo(null)f Ft(or)g(a)g(memory)h(blo)r(c)n(k)f Fn(h)p Fp(\034)2186 3101 y Fk(1)2224 3089 y Fp(;)14 b(:)g(:)g(:)g(;)g (\034)2445 3101 y Fj(n)2490 3089 y Fn(i)p Ft(.)37 b(The)g Fo(mknull)e Ft(op)r(eration)523 3188 y(asso)r(ciates)18 b(the)h(name)h Fp(\032)f Ft(with)h Fo(null)e Ft(and)h(the)h Fo(tosum)h Fp(v)s(;)14 b(\034)29 b Ft(instruction)19 b(injects)h(the)f(v)-5 b(alue)20 b Fp(v)523 3288 y Ft(\(a)h(lo)r (cation)g(con)n(taining)f(n)n(ull)i(or)e(a)h(memory)g(blo)r(c)n(k\))g (in)n(to)g(a)g(lo)r(cation)g(for)g(the)h(option)f(t)n(yp)r(e)523 3388 y(?)p Fn(h)p Fp(\034)630 3400 y Fk(1)668 3388 y Fp(;)14 b(:)g(:)g(:)g(;)g(\034)889 3400 y Fj(n)934 3388 y Fn(i)p Ft(.)32 b(In)f(the)h(t)n(yping)f(rules)g(for)g Fo(tosum)e Ft(and)i Fo(ifnull)n Ft(,)h(the)f(annotation)g Fp(\036)h Ft(ma)n(y)523 3487 y(either)c(b)r(e)g Fp(!)s Ft(,)g(whic)n(h)g(indicates)g(a)f(non-linear)g(constrain)n(t)g(or)g Fn(\001)p Ft(,)h(the)h(empt)n(y)f(annotation,)523 3587 y(whic)n(h)g(indicates)f(a)g(linear)g(constrain)n(t.)648 3687 y(The)20 b Fo(ifnull)h Fp(v)26 b Fo(then)21 b Fp(\023)1388 3699 y Fk(1)1449 3687 y Fo(else)h Fp(\023)1676 3699 y Fk(2)1734 3687 y Ft(construct)e(tests)g(an)h(option)f(to)g(determine)h (whether)523 3786 y(it)36 b(is)g Fo(null)e Ft(or)h(not.)h(Assuming)g Fp(v)j Ft(has)c(t)n(yp)r(e)h Fl(ptr)p Ft(\()p Fp(\021)s Ft(\),)h(w)n(e)e(c)n(hec)n(k)g(the)h(\014rst)g(branc)n(h)f(\()p Fp(\023)3335 3798 y Fk(1)3373 3786 y Ft(\))523 3886 y(with)k(the)g (constrain)n(t)e Fn(f)p Fp(\021)43 b Fn(7!)e Fl(nul)t(l)9 b Fn(g)1717 3856 y Fj(\036)1799 3886 y Ft(and)38 b(the)h(second)e (branc)n(h)h(with)g(the)h(constrain)n(t)523 3985 y Fn(f)p Fp(\021)e Fn(7!)e(h)p Fp(\034)829 3997 y Fk(1)867 3985 y Fp(;)14 b(:)g(:)g(:)f(;)h(\034)1087 3997 y Fj(n)1133 3985 y Fn(ig)1207 3955 y Fj(\036)1285 3985 y Ft(where)34 b Fn(h)p Fp(\034)1600 3997 y Fk(1)1638 3985 y Fp(;)14 b(:)g(:)g(:)g(;)g(\034)1859 3997 y Fj(n)1904 3985 y Fn(i)35 b Ft(is)f(the)h(appropriate)e(non-n)n(ull)h(v)-5 b(arian)n(t.)34 b(As)523 4085 y(b)r(efore,)27 b(imagine)g(that)h Fp(sp)g Ft(is)f(the)h(stac)n(k)f(p)r(oin)n(ter,)g(whic)n(h)h(con)n(tains)e(an)h (in)n(teger)g(option.)523 4267 y Fo(\(*)43 b(constraints)c Ft(=)22 b Fn(f)p Fp(\021)k Fn(7!)d(h)p Fl(ptr)q Ft(\()p Fp(\021)1693 4237 y Fg(0)1716 4267 y Ft(\))p Fn(i)p Fp(;)14 b(\021)1861 4237 y Fg(0)1908 4267 y Fn(7!)24 b Ft(?)p Fn(h)p Fp(int)o Fn(i)q(g)p Fo(,)42 b Fp(sp)p Ft(:)p Fl(ptr)p Ft(\()p Fp(\021)s Ft(\))591 b Fo(*\))523 4367 y Fp(r)560 4379 y Fk(1)598 4367 y Ft(=)o Fp(sp)p Ft([1];)479 b Fo(\(*)42 b Fp(r)1500 4379 y Fk(1)1538 4367 y Ft(:)p Fl(ptr)p Ft(\()p Fp(\021)1742 4337 y Fg(0)1766 4367 y Ft(\))1465 b Fo(*\))523 4467 y(ifnull)21 b Fp(r)845 4479 y Fk(1)905 4467 y Fo(then)h(halt)54 b(\(*)42 b(null)g(check)1362 b(*\))523 4566 y(else)35 b Fn(\001)14 b(\001)g(\001)502 b Fo(\(*)42 b(constraints)d Ft(=)23 b Fn(f)p Fp(\021)j Fn(7!)d(h)p Fl(ptr)p Ft(\()p Fp(\021)2502 4536 y Fg(0)2526 4566 y Ft(\))p Fn(ig\010f)p Fp(\021)2783 4536 y Fg(0)2829 4566 y Fn(7!)g(h)p Fp(int)o Fn(ig)3149 4536 y Fj(!)3263 4566 y Fo(*\))523 4725 y Ft(Notice)34 b(that)h(a)f(single)f(n)n(ull)i(test)f(re\014nes)g(the)g (t)n(yp)r(e)h(of)f(m)n(ultiple)h(aliases;)e(b)r(oth)h Fp(r)3199 4737 y Fk(1)3271 4725 y Ft(and)523 4825 y(its)e(alias)e(on)i (the)g(stac)n(k)e Fp(sp)p Ft([1])h(can)g(b)r(e)h(used)g(as)f(in)n (teger)f(references)h(in)g(the)h(else)g(clause.)523 4924 y(F)-7 b(uture)28 b(loads)f(of)g Fp(r)1136 4936 y Fk(1)1201 4924 y Ft(or)g(its)h(alias)f(will)g(not)h(ha)n(v)n(e)e(to)i(p)r(erform) f(a)g(n)n(ull-c)n(hec)n(k.)p eop %%Page: 13 13 13 12 bop 648 448 a Ft(These)26 b(additional)h(features)f(of)i(our)e (language)f(are)h(also)g(pro)n(v)n(en)g(sound)h(in)g(the)h(com-)523 548 y(panion)f(tec)n(hnical)g(rep)r(ort)g([19].)p 523 754 2882 4 v 523 829 a Fs(Syn)n(tax:)927 986 y Fc(typ)l(es)309 b Fe(\034)32 b Fs(::=)23 b Fe(:)14 b(:)f(:)21 b Fd(j)h Fs(?)p Fd(h)p Fe(\034)1844 994 y Fi(1)1879 986 y Fe(;)13 b(:)g(:)g(:)g(;)g(\034)2083 994 y Fm(n)2126 986 y Fd(i)21 b(j)g Fc(nul)t(l)927 1077 y(values)274 b Fe(v)26 b Fs(::=)d Fe(:)14 b(:)f(:)21 b Fd(j)h Fh(null)927 1169 y Fc(instructions)94 b Fe(\023)24 b Fs(::=)f Fe(:)14 b(:)f(:)21 b Fd(j)h Fh(mknull)h Fe(x;)12 b(\032)p Fs(;)h Fe(\023)22 b Fd(j)f Fh(tosum)i Fe(v)s(;)13 b Fs(?)p Fd(h)p Fe(\034)2635 1177 y Fi(1)2669 1169 y Fe(;)h(:)f(:)g(:)g(;)g(\034)2874 1177 y Fm(n)2916 1169 y Fd(i)22 b(j)1590 1260 y Fh(ifnull)h Fe(v)i Fh(then)d Fe(\023)2114 1268 y Fi(1)2170 1260 y Fh(else)g Fe(\023)2375 1268 y Fi(2)523 1418 y Fs(Op)r(erational)27 b(seman)n(tics:)771 1576 y(\()p Fe(S;)13 b Fh(mknull)23 b Fe(x;)13 b(\032)p Fs(;)f Fe(\023)p Fs(\))620 b Fd(7\000)-14 b(!)24 b Fs(\()p Fe(S)t Fd(f)p Fe(`)d Fd(7!)g Fh(null)q Fd(g)p Fe(;)14 b(\023)p Fs([)p Fe(`=\032)p Fs(][)p Fh(ptr)q Fs(\()p Fe(`)p Fs(\))p Fe(=x)p Fs(]\))925 1667 y(where)26 b Fe(`)21 b Fd(62)h Fe(S)771 1758 y Fs(\()p Fe(S;)13 b Fh(tosum)23 b Fe(v)s(;)13 b Fs(?)p Fd(h)p Fe(\034)1274 1766 y Fi(1)1308 1758 y Fe(;)g(:)h(:)f(:)g(;)g(\034)1513 1766 y Fm(n)1555 1758 y Fd(i)p Fs(;)g Fe(\023)p Fs(\))291 b Fd(7\000)-14 b(!)24 b Fs(\()p Fe(S;)12 b(\023)p Fs(\))771 1850 y(\()p Fe(S)t Fd(f)p Fe(`)22 b Fd(7!)f Fh(null)q Fd(g)p Fe(;)925 1941 y Fh(ifnull)i(ptr)p Fs(\()p Fe(`)p Fs(\))e Fh(then)h Fe(\023)1617 1949 y Fi(1)1673 1941 y Fh(else)h Fe(\023)1879 1949 y Fi(2)1913 1941 y Fs(\))h Fd(7\000)-14 b(!)24 b Fs(\()p Fe(S)t Fd(f)p Fe(`)d Fd(7!)g Fh(null)q Fd(g)p Fe(;)14 b(\023)2641 1949 y Fi(1)2675 1941 y Fs(\))771 2032 y(\()p Fe(S)t Fd(f)p Fe(`)22 b Fd(7!)f(h)p Fe(v)1109 2040 y Fi(1)1144 2032 y Fe(;)13 b(:)g(:)g(:)g(;)g(v)1351 2040 y Fm(n)1394 2032 y Fd(ig)p Fe(;)925 2123 y Fh(ifnull)23 b(ptr)p Fs(\()p Fe(`)p Fs(\))e Fh(then)h Fe(\023)1617 2131 y Fi(1)1673 2123 y Fh(else)h Fe(\023)1879 2131 y Fi(2)1913 2123 y Fs(\))h Fd(7\000)-14 b(!)24 b Fs(\()p Fe(S)t Fd(f)p Fe(`)d Fd(7!)g(h)p Fe(v)2451 2131 y Fi(1)2486 2123 y Fe(;)13 b(:)g(:)g(:)g(;)h(v)2694 2131 y Fm(n)2736 2123 y Fd(ig)p Fe(;)g(\023)2866 2131 y Fi(2)2900 2123 y Fs(\))523 2281 y(Static)26 b(Seman)n(tics:)p 699 2454 639 4 v 699 2523 a Fe(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)923 2531 y Fm(v)981 2523 y Fh(null)22 b Fs(:)g Fc(nul)t(l)1491 2416 y Fe(\001;)13 b(\032)p Fs(;)f Fe(C)23 b Fd(\010)16 b(f)p Fe(\032)22 b Fd(7!)f Fc(nul)t(l)7 b Fd(g)p Fs(;)14 b Fe(\000)r(;)f(x)p Fs(:)p Fc(ptr)q Fs(\()p Fe(\032)p Fs(\))20 b Fd(`)2634 2424 y Fm(\023)2683 2416 y Fe(\023)p 1491 2454 1220 4 v 1699 2523 a(\001)p Fs(;)13 b Fe(C)5 b Fs(;)14 b Fe(\000)32 b Fd(`)2018 2531 y Fm(\023)2066 2523 y Fh(mknull)23 b Fe(x;)13 b(\032)p Fs(;)f Fe(\023)2752 2473 y Fs(\()p Fe(x)20 b Fd(62)i Fe(\000)r(;)13 b(\032)21 b Fd(62)g Fe(\001)p Fs(\))1142 2753 y Fe(\001)p Fs(;)13 b Fe(\000)32 b Fd(`)1366 2761 y Fm(v)1425 2753 y Fe(v)24 b Fs(:)d Fc(ptr)r Fs(\()p Fe(\021)s Fs(\))153 b Fe(\001)21 b Fd(`)g Fe(C)27 b Fs(=)21 b Fe(C)2256 2721 y Fb(0)2296 2753 y Fd(\010)16 b(f)p Fe(\021)25 b Fd(7!)c Fc(nul)t(l)7 b Fd(g)2744 2721 y Fm(\036)962 2847 y Fe(\001)21 b Fd(`)1094 2856 y Fm(w)q(f)1201 2847 y Fs(?)p Fd(h)p Fe(\034)1301 2855 y Fi(1)1336 2847 y Fe(;)13 b(:)g(:)g(:)g(;)g(\034)1540 2855 y Fm(n)1583 2847 y Fd(i)153 b Fe(\001)p Fs(;)13 b Fe(C)1924 2815 y Fb(0)1964 2847 y Fd(\010)j(f)p Fe(\021)25 b Fd(7!)c Fs(?)p Fd(h)p Fe(\034)2339 2855 y Fi(1)2374 2847 y Fe(;)13 b(:)g(:)g(:)g(;)h(\034)2579 2855 y Fm(n)2621 2847 y Fd(ig)2689 2815 y Fm(\036)2730 2847 y Fs(;)f Fe(\000)32 b Fd(`)2890 2855 y Fm(\023)2939 2847 y Fe(\023)p 950 2894 2028 4 v 1398 2967 a(\001)p Fs(;)14 b Fe(C)5 b Fs(;)13 b Fe(\000)32 b Fd(`)1717 2975 y Fm(\023)1765 2967 y Fh(tosum)23 b Fe(v)s(;)13 b Fs(?)p Fd(h)p Fe(\034)2157 2975 y Fi(1)2191 2967 y Fe(;)h(:)f(:)g(:)g(;)g(\034)2396 2975 y Fm(n)2438 2967 y Fd(i)p Fs(;)g Fe(\023)1672 3199 y(\001)p Fs(;)g Fe(\000)32 b Fd(`)1896 3207 y Fm(v)1954 3199 y Fe(v)25 b Fs(:)c Fc(ptr)q Fs(\()p Fe(\021)s Fs(\))714 3293 y Fe(\001)g Fd(`)h Fe(C)k Fs(=)21 b Fe(C)1090 3261 y Fb(0)1130 3293 y Fd(\010)c(f)p Fe(\021)24 b Fd(7!)e(h)p Fe(\034)1470 3301 y Fi(1)1504 3293 y Fe(;)13 b(:)g(:)g(:)g(;)g(\034)1708 3301 y Fm(n)1751 3293 y Fd(ig)1819 3261 y Fm(\036)2014 3293 y Fe(\001)p Fs(;)g Fe(C)2172 3261 y Fb(0)2211 3293 y Fd(\010)k(f)p Fe(\021)25 b Fd(7!)c Fs(?)p Fd(h)p Fe(\034)2587 3301 y Fi(1)2622 3293 y Fe(;)13 b(:)g(:)g(:)g(;)g(\034)2826 3301 y Fm(n)2869 3293 y Fd(i)o(g)2936 3261 y Fm(\036)2978 3293 y Fs(;)g Fe(\000)32 b Fd(`)3138 3301 y Fm(\023)3187 3293 y Fe(\023)p 703 3340 2523 4 v 1398 3413 a(\001)p Fs(;)14 b Fe(C)5 b Fs(;)13 b Fe(\000)32 b Fd(`)1717 3421 y Fm(\023)1765 3413 y Fh(tosum)23 b Fe(v)s(;)13 b Fs(?)p Fd(h)p Fe(\034)2157 3421 y Fi(1)2191 3413 y Fe(;)h(:)f(:)g(:)g(;)g (\034)2396 3421 y Fm(n)2438 3413 y Fd(i)p Fs(;)g Fe(\023)1004 3647 y(\001)p Fs(;)g Fe(\000)32 b Fd(`)1228 3655 y Fm(v)1286 3647 y Fe(v)25 b Fs(:)c Fc(ptr)q Fs(\()p Fe(\021)s Fs(\))154 b Fe(\001)21 b Fd(`)g Fe(C)27 b Fs(=)21 b Fe(C)2118 3615 y Fb(0)2157 3647 y Fd(\010)c(f)p Fe(\021)25 b Fd(7!)c Fs(?)p Fd(h)p Fe(\034)2533 3655 y Fi(1)2568 3647 y Fe(;)13 b(:)g(:)g(:)g(;)g(\034)2772 3655 y Fm(n)2815 3647 y Fd(i)o(g)2882 3615 y Fm(\036)809 3741 y Fe(\001)p Fs(;)g Fe(C)967 3709 y Fb(0)1006 3741 y Fd(\010)k(f)p Fe(\021)25 b Fd(7!)c Fc(nul)t(l)7 b Fd(g)1455 3709 y Fm(\036)1497 3741 y Fs(;)13 b Fe(\000)32 b Fd(`)1657 3749 y Fm(\023)1705 3741 y Fe(\023)1732 3749 y Fi(1)1921 3741 y Fe(\001)p Fs(;)13 b Fe(C)2079 3709 y Fb(0)2118 3741 y Fd(\010)k(f)p Fe(\021)25 b Fd(7!)c(h)p Fe(\034)2458 3749 y Fi(1)2492 3741 y Fe(;)14 b(:)f(:)g(:)g(;)g(\034) 2697 3749 y Fm(n)2739 3741 y Fd(ig)2807 3709 y Fm(\036)2849 3741 y Fs(;)g Fe(\000)32 b Fd(`)3009 3749 y Fm(\023)3057 3741 y Fe(\023)3084 3749 y Fi(2)p 797 3788 2334 4 v 1371 3857 a Fe(\001)p Fs(;)13 b Fe(C)5 b Fs(;)13 b Fe(\000)32 b Fd(`)1689 3865 y Fm(\023)1738 3857 y Fh(ifnull)22 b Fe(v)j Fh(then)d Fe(\023)2261 3865 y Fi(1)2317 3857 y Fh(else)g Fe(\023)2522 3865 y Fi(2)p 523 3977 2882 4 v 972 4112 a Fr(Fig.)14 b(5.)26 b Fs(Language)g(of)h(Lo)r(cations:)g (Extensions)f(for)h(option)f(t)n(yp)r(es)523 4540 y Fq(5)112 b(Related)37 b(and)h(F)-9 b(uture)38 b(W)-9 b(ork)523 4725 y Ft(Our)33 b(researc)n(h)f(extends)i(previous)f(w)n(ork)g(on)g (linear)h(t)n(yp)r(e)g(systems)g([26])f(and)h(syn)n(tactic)523 4825 y(con)n(trol)26 b(of)i(in)n(terference)f([16])f(b)n(y)i(allo)n (wing)e(b)r(oth)i(aliasing)e(and)i(safe)f(deallo)r(cation.)f(Sev-)523 4924 y(eral)k(authors)h([26,)13 b(3,)g(9])31 b(ha)n(v)n(e)f(explored)h (alternativ)n(es)f(to)h(pure)g(linear)g(t)n(yp)r(e)g(systems)g(to)p eop %%Page: 14 14 14 13 bop 523 448 a Ft(allo)n(w)38 b(greater)g(\015exibilit)n(y)-7 b(.)39 b(W)-7 b(adler)39 b([26],)g(for)g(example,)g(in)n(tro)r(duced)g (a)g(new)g(let-form)523 548 y Fo(let)13 b Ft(!)31 b(\()p Fp(x)p Ft(\))i Fp(y)i Ft(=)c Fp(e)1077 560 y Fk(1)1159 548 y Fo(in)45 b Fp(e)1331 560 y Fk(2)1401 548 y Ft(that)33 b(p)r(ermits)g(the)g(v)-5 b(ariable)32 b Fp(x)h Ft(to)g(b)r(e)g(used)g (as)f(a)g(non-linear)523 648 y(v)-5 b(alue)31 b(in)g Fp(e)880 660 y Fk(1)948 648 y Ft(\()p Fl(i)8 b(.e)e(.)34 b Ft(it)d(can)f(b)r(e)i(used)f(man)n(y)f(times,)h(alb)r(eit)g(in)h(a)e (restricted)g(fashion\))h(and)523 747 y(then)23 b(later)e(used)h(as)g (a)g(linear)f(v)-5 b(alue)22 b(in)h Fp(e)1805 759 y Fk(2)1841 747 y Ft(.)g(W)-7 b(e)22 b(b)r(eliev)n(e)g(w)n(e)g(can)g(enco)r(de)g (similar)f(b)r(eha)n(vior)523 847 y(b)n(y)k(extending)g(our)f(simple)i (subt)n(yping)e(with)i(b)r(ounded)g(quan)n(ti\014cation.)e(F)-7 b(or)25 b(instance,)f(if)523 946 y(a)k(function)h Fp(f)38 b Ft(requires)27 b(some)h(collection)g(of)g(aliasing)g(constrain)n(ts)f Fp(\017)h Ft(that)h(are)f(b)r(ounded)523 1046 y(ab)r(o)n(v)n(e)k(b)n(y) g Fn(f)p Fp(\032)969 1058 y Fk(1)1038 1046 y Fn(7!)g(h)p Fp(int)p Fn(ig)1368 1016 y Fj(!)1437 1046 y Fn(\010)22 b(f)p Fp(\032)1609 1058 y Fk(2)1678 1046 y Fn(7!)32 b(h)p Fp(int)o Fn(ig)2007 1016 y Fj(!)2055 1046 y Ft(,)h(then)h Fp(f)41 b Ft(ma)n(y)33 b(b)r(e)g(called)g(with)g(a)g(single)523 1146 y(linear)e(constrain)n(t)g Fn(f)p Fp(\032)f Fn(7!)h(h)p Fp(int)o Fn(ig)h Ft(\(instan)n(tiating)g(b)r(oth)h Fp(\032)2396 1158 y Fk(1)2465 1146 y Ft(and)f Fp(\032)2674 1158 y Fk(2)2743 1146 y Ft(with)h Fp(\032)f Ft(and)g Fp(\017)f Ft(with)523 1245 y Fn(f)p Fp(\032)h Fn(7!)h(h)p Fp(int)p Fn(ig)p Ft(\).)h(The)f(constrain)n(ts)f(ma)n(y)h(no)n(w)g(b)r(e)h(used) g(non-linearly)e(within)i(the)g(b)r(o)r(dy)523 1345 y(of)27 b Fp(f)9 b Ft(.)27 b(Pro)n(vided)e Fp(f)35 b Ft(exp)r(ects)27 b(a)g(con)n(tin)n(uation)f(with)h(constrain)n(ts)f Fp(\017)p Ft(,)h(its)g(con)n(tin)n(uation)f(will)523 1445 y(retain)32 b(the)h(kno)n(wledge)f(that)g Fn(f)p Fp(\032)f Fn(7!)h(h)p Fp(int)p Fn(ig)g Ft(is)h(linear)f(and)g(will)h(b)r(e)g(able)f(to)h (deallo)r(cate)523 1544 y(the)26 b(storage)e(asso)r(ciated)g(with)i Fp(\032)g Ft(when)g(it)g(is)f(called.)g(Ho)n(w)n(ev)n(er,)f(w)n(e)h(ha) n(v)n(e)g(not)h(y)n(et)f(imple-)523 1644 y(men)n(ted)j(this)g(feature.) 648 1767 y(Because)18 b(our)h(t)n(yp)r(e)g(system)h(is)f(constructed)g (from)g(standard)g(t)n(yp)r(e-theoretic)g(building)523 1866 y(blo)r(c)n(ks,)34 b(including)i(linear)e(and)h(singleton)f(t)n (yp)r(es,)h(it)g(is)g(relativ)n(ely)f(straigh)n(tforw)n(ard)e(to)523 1966 y(implemen)n(t)19 b(these)g(ideas)f(in)h(a)f(mo)r(dern)h(t)n(yp)r (e-directed)f(compiler.)g(In)h(some)f(w)n(a)n(ys,)f(our)h(new)523 2065 y(mec)n(hanisms)26 b(simplify)g(previous)g(w)n(ork.)f(Previous)f (v)n(ersions)h(of)h(T)-7 b(AL)27 b([12,)13 b(11])25 b(p)r(ossessed)523 2165 y(t)n(w)n(o)40 b(separate)g(mec)n(hanisms)h(for)f(initializing)i (data)e(structures.)h(Uninitialized)h(heap-)523 2265 y(allo)r(cated)31 b(data)h(structures)f(w)n(ere)g(stamp)r(ed)h(with)h (the)f(t)n(yp)r(e)g(at)g(whic)n(h)g(they)g(w)n(ould)g(b)r(e)523 2364 y(used.)20 b(On)h(the)f(other)g(hand,)g(stac)n(k)g(slots)f(could)i (b)r(e)f(o)n(v)n(erwritten)f(with)i(v)-5 b(alues)20 b(of)g(arbitrary) 523 2464 y(t)n(yp)r(es.)30 b(Our)f(new)h(system)g(allo)n(ws)e(us)i(to)g (treat)f(memory)h(more)f(uniformly)-7 b(.)30 b(In)g(fact,)g(our)523 2564 y(new)36 b(language)e(can)i(enco)r(de)g(stac)n(k)f(t)n(yp)r(es)h (similar)f(to)h(those)g(describ)r(ed)f(b)n(y)h(Morrisett)523 2663 y Fl(et)c(al.)g Ft([11])d(except)i(that)g(activ)-5 b(ation)30 b(records)e(are)i(allo)r(cated)f(on)i(the)f(heap)h(rather)e (than)523 2763 y(using)e(a)g(con)n(v)n(en)n(tional)e(call)i(stac)n(k.)g (The)g(companion)f(tec)n(hnical)h(rep)r(ort)g([19])f(sho)n(ws)h(ho)n(w) 523 2862 y(to)38 b(compile)f(a)g(simple)h(imp)r(erativ)n(e)f(language)f (in)i(suc)n(h)g(a)f(w)n(a)n(y)f(that)i(it)h(allo)r(cates)d(and)523 2962 y(deletes)28 b(its)f(o)n(wn)g(stac)n(k)g(frames.)648 3085 y(This)40 b(researc)n(h)d(is)j(also)f(related)h(to)g(other)f(w)n (ork)g(on)g(t)n(yp)r(e)i(systems)e(for)h(lo)n(w-lev)n(el)523 3184 y(languages.)23 b(W)-7 b(ork)24 b(on)h(Ja)n(v)-5 b(a)23 b(b)n(yteco)r(de)h(v)n(eri\014cation)g([20,)13 b(8])24 b(also)g(dev)n(elops)g(t)n(yp)r(e)g(systems)523 3284 y(that)19 b(allo)n(ws)f(lo)r(cations)g(to)h(hold)g(v)-5 b(alues)18 b(of)h(di\013eren)n(t)g(t)n(yp)r(es.)g(Ho)n(w)n(ev)n(er,)e (the)j(Ja)n(v)-5 b(a)17 b(b)n(yteco)r(de)523 3384 y(t)n(yp)r(e)28 b(system)f(is)h(not)f(strong)g(enough)g(to)g(represen)n(t)f(aliasing)h (as)g(w)n(e)g(do)g(here.)648 3506 y(The)40 b(dev)n(elopmen)n(t)f(of)h (our)f(language)f(w)n(as)h(inspired)h(b)n(y)f(the)i(Calculus)e(of)h (Capa-)523 3606 y(bilities)d(\(CC\))g([4].)f(CC)h(pro)n(vides)e(an)h (alternativ)n(e)f(to)h(the)h(region-based)e(t)n(yp)r(e)h(system)523 3706 y(dev)n(elop)r(ed)g(b)n(y)f(T)-7 b(ofte)36 b(and)g(T)-7 b(alpin)36 b([24].)f(Because)g(safe)h(region)e(deallo)r(cation)h (requires)523 3805 y(that)30 b(no)f(aliases)f(b)r(e)i(used)g(in)g(the)g (future,)g(CC)g(trac)n(ks)e(region)g(aliases.)g(In)i(our)f(new)h(lan-) 523 3905 y(guage)k(w)n(e)g(adapt)g(CC's)h(tec)n(hniques)g(to)f(trac)n (k)g(b)r(oth)h(ob)5 b(ject)35 b(aliases)e(and)i(ob)5 b(ject)35 b(t)n(yp)r(e)523 4005 y(information.)648 4127 y(Our)e(w)n(ork)g(also)g(has)h(close)f(connections)h(with)g(researc)n (h)f(on)g(alias)h(analyses)e([5,)14 b(21,)523 4227 y(17].)36 b(Muc)n(h)g(of)g(that)h(w)n(ork)e(aims)h(to)g(facilitate)g(program)f (optimizations)g(that)i(require)523 4327 y(aliasing)25 b(information)h(in)h(order)e(to)h(b)r(e)h Fl(c)l(orr)l(e)l(ct)p Ft(.)g(Ho)n(w)n(ev)n(er,)d(these)j(optimizations)f(do)g(not)523 4426 y(necessarily)k(mak)n(e)i(it)g(harder)f(to)h(c)n(hec)n(k)f(the)i Fl(safety)g Ft(of)f(the)g(resulting)f(program.)g(Other)523 4526 y(w)n(ork)g([7,)13 b(6])32 b(attempts)g(to)g(determine)g(when)h (programs)c(written)k(in)f(unsafe)g(languages,)523 4625 y(suc)n(h)k(as)f(C,)h(p)r(erform)g(p)r(oten)n(tially)g(unsafe)f(op)r (erations.)g(Our)h(goals)e(are)h(closer)g(to)h(the)523 4725 y(latter)g(application)f(but)i(di\013er)f(b)r(ecause)f(w)n(e)h (are)f(most)h(in)n(terested)f(in)h(compiling)g Fl(safe)523 4825 y Ft(languages)25 b(and)i(pro)r(ducing)f(lo)n(w-lev)n(el)g(co)r (de)g(that)i(can)e(b)r(e)i(pro)n(v)n(en)d(safe)i(in)g(a)f(single)h (pass)523 4924 y(o)n(v)n(er)32 b(the)j(program.)d(Moreo)n(v)n(er,)f (our)i(main)h(result)g(is)g(not)g(a)f(new)h Fl(analysis)i Ft(tec)n(hnique,)p eop %%Page: 15 15 15 14 bop 523 448 a Ft(but)28 b(rather)e(a)g(sound)h(system)g(for)g (represen)n(ting)e(and)i(c)n(hec)n(king)f(the)i(results)e(of)h (analysis,)523 548 y(and,)22 b(in)g(particular,)e(for)i(represen)n (ting)e(aliasing)h(in)h(lo)n(w-lev)n(el)e(compiler-in)n(tro)r(duced)g (data)523 648 y(structures)27 b(rather)f(than)i(for)f(represen)n(ting)f (aliasing)h(in)g(source-lev)n(el)f(data.)648 749 y(The)d(language)f(of) h(lo)r(cations)g(is)g(a)g(\015exible)h(framew)n(ork)d(for)i(reasoning)f (ab)r(out)h(sharing)523 849 y(and)28 b(destructiv)n(e)f(op)r(erations)f (in)i(a)f(t)n(yp)r(e-safe)g(manner.)g(Ho)n(w)n(ev)n(er,)f(our)h(w)n (ork)f(to)i(date)f(is)523 949 y(only)e(a)g(\014rst)h(step)g(in)f(this)h (area)e(and)i(w)n(e)f(are)g(in)n(v)n(estigating)f(a)h(n)n(um)n(b)r(er)g (of)h(extensions.)f(In)523 1048 y(particular,)d(w)n(e)h(are)f(w)n (orking)g(on)h(in)n(tegrating)f(recursiv)n(e)g(t)n(yp)r(es)h(in)n(to)g (the)h(t)n(yp)r(e)g(system)f(as)523 1148 y(they)32 b(w)n(ould)e(allo)n (w)h(us)g(to)g(capture)g(regular)e(rep)r(eating)i(structure)g(in)g(the) h(store.)e(When)523 1247 y(w)n(e)e(ha)n(v)n(e)f(completed)i(this)f (task,)g(w)n(e)g(b)r(eliev)n(e)h(our)e(aliasing)g(constrain)n(ts)g (will)i(pro)n(vide)e(us)523 1347 y(with)h(a)f(safe,)h(but)g(ric)n(h)f (and)g(reusable,)g(set)g(of)h(memory)f(abstractions.)523 1623 y Fq(Ac)m(kno)m(wledgemen)m(ts)523 1833 y Ft(This)h(w)n(ork)f (arose)f(in)i(the)h(con)n(text)e(of)h(implemen)n(ting)h(the)f(T)n(yp)r (ed)g(Assem)n(bly)g(Language)523 1933 y(compiler.)37 b(W)-7 b(e)39 b(are)e(grateful)g(for)g(the)i(man)n(y)e(stim)n(ulating)h (discussions)e(that)j(w)n(e)e(ha)n(v)n(e)523 2032 y(had)c(on)f(this)h (topic)g(with)g(Karl)f(Crary)-7 b(,)31 b(Neal)i(Glew,)g(Dan)g (Grossman,)e(Dexter)i(Kozen,)523 2132 y(Stephanie)21 b(W)-7 b(eiric)n(h,)20 b(and)h(Stev)n(e)f(Zdancewic.)g(Sophia)g (Drossop)r(oulou,)f(Kathleen)h(Fisher,)523 2232 y(Andrew)28 b(My)n(ers,)f(and)h(Anne)h(Rogers)d(ga)n(v)n(e)h(helpful)i(commen)n(ts) e(on)h(a)g(previous)f(draft)h(of)523 2331 y(this)g(w)n(ork.)523 2608 y Fq(References)561 2809 y Fs(1.)43 b(Alfred)30 b(V.)g(Aho,)g(Ra)n(vi)g(Sethi,)g(and)g(Je\013rey)g(D.)g(Ullman.)47 b Fc(Compilers:)31 b(Principles,)h(T)-6 b(e)l(ch-)663 2900 y(niques,)27 b(and)h(T)-6 b(o)l(ols)p Fs(.)35 b(Addison-W)-6 b(esley)g(,)25 b(1986.)561 2994 y(2.)43 b(Andrew)17 b(W.)h(App)r(el)g (and)g(Da)n(vid)f(B.)i(MacQueen.)j(Standard)17 b(ML)i(of)g(New)f (Jersey)-6 b(.)22 b(In)17 b(Martin)663 3085 y(Wirsing,)23 b(editor,)f Fc(Thir)l(d)i(International)h(Symp)l(osium)f(on)g(Pr)l(o)l (gr)l(amming)h(L)l(anguage)g(Imple-)663 3176 y(mentation)g(and)h(L)l(o) l(gic)f(Pr)l(o)l(gr)l(amming)p Fs(,)f(pages)f(1{13,)h(New)f(Y)-6 b(ork,)22 b(August)g(1991.)i(Springer-)663 3268 y(V)-6 b(erlag.)35 b(V)-6 b(olume)24 b(528)j(of)f Fc(L)l(e)l(ctur)l(e)k(Notes) f(in)e(Computer)h(Scienc)l(e)p Fs(.)561 3361 y(3.)43 b(Erik)22 b(Barendsen)h(and)f(Sjaak)h(Smetsers.)29 b(Con)n(v)n(en)n (tional)23 b(and)f(uniqueness)g(t)n(yping)f(in)i(graph)663 3453 y(rewrite)g(systems)e(\(extended)f(abstract\).)29 b(In)21 b Fc(Thirte)l(enth)26 b(Confer)l(enc)l(e)g(on)e(the)h(F)-6 b(oundations)663 3544 y(of)28 b(Softwar)l(e)j(T)-6 b(e)l(chnolo)l(gy)30 b(and)g(The)l(or)l(etic)l(al)g(Computer)h(Scienc)l(e)p Fs(,)d(pages)g(41{51,)i(Bom)n(ba)n(y)-6 b(,)663 3635 y(1993.)36 b(In)25 b(Sh)n(y)n(amasundar,)f(ed.,)i(Springer-V)-6 b(erlag,)26 b(LNCS)f(761.)561 3729 y(4.)43 b(Karl)26 b(Crary)-6 b(,)26 b(Da)n(vid)f(W)-6 b(alk)n(er,)26 b(and)g(Greg)g (Morrisett.)36 b(T)n(yp)r(ed)26 b(memory)d(managemen)n(t)i(in)h(a)663 3820 y(calculus)k(of)h(capabilities.)49 b(In)29 b Fc(Twenty-Sixth)34 b(A)n(CM)d(Symp)l(osium)g(on)h(Principles)g(of)f(Pr)l(o-)663 3911 y(gr)l(amming)c(L)l(anguages)p Fs(,)h(pages)f(262{275,)i(San)c(An) n(tonio,)h(Jan)n(uary)f(1999.)561 4005 y(5.)43 b(Alain)23 b(Deutsc)n(h.)29 b(In)n(terpro)r(cedural)23 b(ma)n(y-alias)g(analysis)h (for)g(p)r(oin)n(ters:)g(Bey)n(ond)e(k-limiting.)663 4096 y(In)e Fc(A)n(CM)j(Confer)l(enc)l(e)i(on)f(Pr)l(o)l(gr)l(amming)g (L)l(anguage)h(Design)f(and)g(Implementation)p Fs(,)e(pages)663 4187 y(230{241,)28 b(Orlando,)f(June)e(1994.)561 4281 y(6.)43 b(Nurit)26 b(Dor,)h(Mic)n(hael)h(Ro)r(deh,)f(and)f(Mo)r(oly)i (Sagiv.)38 b(Detecting)27 b(memory)e(errors)j(via)f(static)663 4372 y(p)r(oin)n(ter)20 b(analysis)i(\(preliminary)d(exp)r(erience\).) 26 b(In)19 b Fc(A)n(CM)k(Workshop)h(on)f(Pr)l(o)l(gr)l(am)g(A)n (nalysis)663 4463 y(for)k(Softwar)l(e)i(T)-6 b(o)l(ols)28 b(and)g(Engine)l(ering)g(\(P)-6 b(ASTE'98\))p Fs(,)27 b(Mon)n(treal,)g(June)f(1998.)561 4557 y(7.)43 b(Da)n(vid)23 b(Ev)l(ans.)33 b(Static)24 b(detection)h(of)g(dynamic)e(memory)f (errors.)33 b(In)24 b Fc(A)n(CM)i(Confer)l(enc)l(e)i(on)663 4648 y(Pr)l(o)l(gr)l(amming)g(L)l(anguage)h(Design)f(and)g (Implementation)p Fs(,)f(Philadelphia,)g(Ma)n(y)f(1996.)561 4742 y(8.)43 b(Stephen)16 b(N.)h(F)-6 b(reund)17 b(and)g(John)g(C.)h (Mitc)n(hell.)k(A)17 b(formal)h(framew)n(ork)g(for)g(the)g(Ja)n(v)l(a)f (b)n(yteco)r(de)663 4833 y(language)31 b(and)f(v)n(eri\014er.)47 b(In)30 b Fc(Confer)l(enc)l(e)j(on)f(Obje)l(ct-Oriente)l(d)i(Pr)l(o)l (gr)l(amming,)e(Systems,)663 4924 y(L)l(anguages,)d(and)f(Applic)l (ations)p Fs(,)e(pages)h(147{166,)i(Den)n(v)n(er,)c(No)n(v)n(em)n(b)r (er)e(1999.)p eop %%Page: 16 16 16 15 bop 561 448 a Fs(9.)43 b(Naoki)24 b(Koba)n(y)n(ashi.)33 b(Quasi-linear)26 b(t)n(yp)r(es.)32 b(In)24 b Fc(Twenty-Sixth)29 b(A)n(CM)d(Symp)l(osium)h(on)f(Prin-)663 540 y(ciples)h(of)h(Pr)l(o)l (gr)l(amming)g(L)l(anguages)p Fs(,)g(pages)f(29{42,)h(San)d(An)n (tonio,)h(Jan)n(uary)f(1999.)523 623 y(10.)43 b(Tim)18 b(Lindholm)g(and)h(F)-6 b(rank)18 b(Y)-6 b(ellin.)23 b Fc(The)f(Java)g(Virtual)f(Machine)h(Sp)l(e)l(ci\014c)l(ation)p Fs(.)j(Addison-)663 714 y(W)-6 b(esley)g(,)25 b(1996.)523 798 y(11.)43 b(Greg)33 b(Morrisett,)h(Karl)f(Crary)-6 b(,)33 b(Neal)g(Glew,)h(and)e(Da)n(vid)g(W)-6 b(alk)n(er.)55 b(Stac)n(k-based)31 b(Typ)r(ed)663 889 y(Assem)n(bly)23 b(Language.)35 b(In)24 b Fc(Se)l(c)l(ond)29 b(International)f(Workshop) g(on)f(T)-6 b(yp)l(es)28 b(in)f(Compilation)p Fs(,)663 980 y(pages)g(95{117,)i(Ky)n(oto,)d(Marc)n(h)h(1998.)38 b(Published)27 b(in)f(Xa)n(vier)g(Lero)n(y)h(and)f(A)n(tsushi)f(Ohori,) 663 1072 y(editors,)k Fc(L)l(e)l(ctur)l(e)k(Notes)f(in)e(Computer)h (Scienc)l(e)p Fs(,)f(v)n(olume)e(1473,)j(pages)e(28-52.)h(Springer-)663 1163 y(V)-6 b(erlag,)26 b(1998.)523 1246 y(12.)43 b(Greg)34 b(Morrisett,)h(Da)n(vid)e(W)-6 b(alk)n(er,)34 b(Karl)g(Crary)-6 b(,)33 b(and)h(Neal)g(Glew.)59 b(F)-6 b(rom)32 b(System)g(F)i(to)663 1338 y(Typ)r(ed)29 b(Assem)n(bly)g(Language.)47 b Fc(A)n(CM)31 b(T)-6 b(r)l(ansactions)34 b(on)e(Pr)l(o)l(gr)l(amming)g(L)l(anguages)h (and)663 1429 y(Systems)p Fs(,)27 b(3\(21\):528{569,)j(Ma)n(y)c(1999.) 523 1512 y(13.)43 b(George)23 b(Necula.)28 b(Pro)r(of-carrying)c(co)r (de.)k(In)21 b Fc(Twenty-F)-6 b(ourth)27 b(A)n(CM)d(Symp)l(osium)g(on)g (Prin-)663 1604 y(ciples)j(of)h(Pr)l(o)l(gr)l(amming)g(L)l(anguages)p Fs(,)g(pages)f(106{119,)h(P)n(aris,)f(1997.)523 1687 y(14.)43 b(G.)28 b(D.)f(Plotkin.)40 b(Call-b)n(y-name,)27 b(call-b)n(y-v)l(alue,)g(and)g(the)g(lam)n(b)r(da)g(calculus.)40 b Fc(The)l(or)l(etic)l(al)663 1778 y(Computer)28 b(Scienc)l(e)p Fs(,)f(1:125{159,)j(1975.)523 1862 y(15.)43 b(John)36 b(C.)h(Reynolds.)65 b(De\014nitional)36 b(in)n(terpreters)g(for)h (higher-order)g(programming)e(lan-)663 1953 y(guages.)44 b(In)28 b Fc(Confer)l(enc)l(e)j(R)l(e)l(c)l(or)l(d)h(of)d(the)i(25th)h (National)e(A)n(CM)g(Confer)l(enc)l(e)p Fs(,)g(pages)f(717{)663 2044 y(740,)e(Boston,)g(August)e(1972.)523 2128 y(16.)43 b(John)24 b(C.)h(Reynolds.)32 b(Syn)n(tactic)24 b(con)n(trol)h(of)g(in) n(terference.)33 b(In)24 b Fc(Fifth)i(A)n(CM)g(Symp)l(osium)h(on)663 2219 y(Principles)g(of)h(Pr)l(o)l(gr)l(amming)g(L)l(anguages)p Fs(,)g(pages)f(39{46,)h(T)-6 b(ucson,)26 b(1978.)523 2302 y(17.)43 b(M.)24 b(Sagiv,)g(T.)g(Reps,)f(and)g(R.)g(Wilhelm.)30 b(Solving)24 b(shap)r(e-analysis)g(problems)f(in)g(languages)663 2393 y(with)34 b(destructiv)n(e)f(up)r(dating.)59 b Fc(A)n(CM)35 b(T)-6 b(r)l(ansactions)38 b(on)d(Pr)l(o)l(gr)l(amming)h(L)l(anguages)h (and)663 2485 y(Systems)p Fs(,)27 b(20\(1\):1{50,)i(Jan)n(uary)d(1996.) 523 2568 y(18.)43 b(Z.)22 b(Shao.)28 b(An)21 b(o)n(v)n(erview)h(of)h (the)e(FLINT/ML)i(compiler.)28 b(In)21 b Fc(Workshop)26 b(on)e(T)-6 b(yp)l(es)25 b(in)f(Com-)663 2659 y(pilation)p Fs(,)32 b(Amsterdam,)e(June)h(1997.)j(A)n(CM.)53 b(Published)32 b(as)g(Boston)h(College)h(Computer)663 2751 y(Science)26 b(Dept.)f(T)-6 b(ec)n(hnical)26 b(Rep)r(ort)g(BCCS-97-03.)523 2834 y(19.)43 b(F)-6 b(rederic)n(k)20 b(Smith,)f(Da)n(vid)h(W)-6 b(alk)n(er,)21 b(and)f(Greg)i(Morrisett.)28 b(Alias)21 b(t)n(yp)r(es.)26 b(T)-6 b(ec)n(hnical)21 b(Rep)r(ort)663 2925 y(TR99-1773,)28 b(Cornell)f(Univ)n(ersit)n(y)-6 b(,)24 b(Octob)r(er)i(1999.)523 3009 y(20.)43 b(Ra)n(ymie)29 b(Stata)h(and)g(Mart)-9 b(\023)-30 b(\020n)32 b(Abadi.)48 b(A)30 b(t)n(yp)r(e)f(system)h(for)h(Ja)n(v)l(a)g(b)n(yteco)r(de)f (subroutines.)663 3100 y(In)d Fc(Twenty-Fifth)k(A)n(CM)f(Symp)l(osium)g (on)g(Principles)g(of)g(Pr)l(o)l(gr)l(amming)h(L)l(anguages)p Fs(,)f(San)663 3191 y(Diego,)d(Jan)n(uary)e(1998.)523 3275 y(21.)43 b(B.)28 b(Steensgaard.)40 b(P)n(oin)n(ts-to)27 b(analysis)i(in)e(linear)h(time.)39 b(In)27 b Fc(Twenty-Thir)l(d)j(A)n (CM)f(Symp)l(o-)663 3366 y(sium)e(on)h(Principles)f(of)h(Pr)l(o)l(gr)l (amming)g(L)l(anguages)p Fs(,)g(Jan)n(uary)e(1996.)523 3449 y(22.)43 b(D.)35 b(T)-6 b(arditi,)37 b(G.)g(Morrisett,)g(P)-6 b(.)36 b(Cheng,)h(C.)f(Stone,)g(R.)g(Harp)r(er,)g(and)g(P)-6 b(.)36 b(Lee.)65 b(TIL:)36 b(A)663 3541 y(t)n(yp)r(e-directed)28 b(optimizing)h(compiler)g(for)h(ML.)45 b(In)28 b Fc(A)n(CM)j(Confer)l (enc)l(e)h(on)f(Pr)l(o)l(gr)l(amming)663 3632 y(L)l(anguage)e(Design)f (and)g(Implementation)p Fs(,)e(pages)h(181{192,)h(Philadelphia,)g(Ma)n (y)d(1996.)523 3715 y(23.)43 b(Mads)26 b(T)-6 b(ofte.)35 b(T)n(yp)r(e)25 b(inference)h(for)g(p)r(olymorphic)f(references.)35 b Fc(Information)28 b(and)f(Compu-)663 3807 y(tation)p Fs(,)g(89:1{34,)h(No)n(v)n(em)n(b)r(er)c(1990.)523 3890 y(24.)43 b(Mads)31 b(T)-6 b(ofte)32 b(and)f(Jean-Pierre)h(T)-6 b(alpin.)51 b(Region-based)31 b(memory)e(managemen)n(t.)49 b Fc(Infor-)663 3981 y(mation)27 b(and)h(Computation)p Fs(,)g(132\(2\):109{176,)i(1997.)523 4065 y(25.)43 b(Da)n(vid)19 b(N.)h(T)-6 b(urner,)19 b(Philip)i(W)-6 b(adler,)20 b(and)f(Christian)i (Mossin.)26 b(Once)20 b(up)r(on)f(a)h(t)n(yp)r(e.)k(In)19 b Fc(A)n(CM)663 4156 y(International)26 b(Confer)l(enc)l(e)g(on)g(F)-6 b(unctional)26 b(Pr)l(o)l(gr)l(amming)g(and)f(Computer)i(A)n(r)l(chite) l(ctur)l(e)p Fs(,)663 4247 y(San)e(Diego,)i(CA,)f(June)f(1995.)523 4331 y(26.)43 b(Philip)35 b(W)-6 b(adler.)61 b(Linear)35 b(t)n(yp)r(es)f(can)h(c)n(hange)f(the)h(w)n(orld!)61 b(In)34 b(M.)h(Bro)n(y)g(and)f(C.)i(Jones,)663 4422 y(editors,)f Fc(Pr)l(o)l(gr)l(amming)i(Conc)l(epts)h(and)e(Metho)l(ds)p Fs(,)h(Sea)e(of)g(Galilee,)i(Israel,)f(April)f(1990.)663 4513 y(North)25 b(Holland.)35 b(IFIP)25 b(TC)i(2)f(W)-6 b(orking)25 b(Conference.)523 4597 y(27.)43 b(A.)20 b(K.)h(W)-6 b(righ)n(t.)27 b(Simple)19 b(imp)r(erativ)n(e)i(p)r(olymorphism.)k Fc(LISP)e(and)g(Symb)l(olic)g(Computation)p Fs(,)663 4688 y(8\(4\),)j(Decem)n(b)r(er)f(1995.)523 4771 y(28.)43 b(Andrew)17 b(K.)i(W)-6 b(righ)n(t)18 b(and)f(Matthias)j(F)-6 b(elleisen.)23 b(A)18 b(syn)n(tactic)g(approac)n(h)h(to)f(t)n(yp)r(e)g (soundness.)663 4863 y Fc(Information)27 b(and)h(Computation)p Fs(,)f(115\(1\):38{94,)j(1994.)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF