Scala, semantics, type system, virtual types, type safety, model of computa- tion. 9 ..... Core-Scala simply, but it is dubious it can support a nominal type system as.
FOUNDATIONS FOR SCALA: SEMANTICS AND PROOF OF VIRTUAL TYPES
THÈSE NO 3556 (2006) PRÉSENTÉE LE 1 SEPTEMBRE 2006 À LA FACULTÉ INFORMATIQUE ET COMMUNICATIONS Laboratoire de méthodes de programmation 1 SECTION D'INFORMATIQUE
ÉCOLE POLYTECHNIQUE FÉDÉRALE DE LAUSANNE POUR L'OBTENTION DU GRADE DE DOCTEUR ÈS SCIENCES
PAR
Vincent CREMET DEA de programmation, Université Paris 7, France et de nationalité française
acceptée sur proposition du jury: Prof. E. Sanchez, président du jury Prof. M. Odersky, directeur de thèse Prof. C. Petitpierre, rapporteur Dr F. Pottier, rapporteur Prof. J. Vitek, rapporteur
Lausanne, EPFL 2006
! "
# $ $ %% & %'( ) $ * %'( ' #
$ ', -' . $ -' ' $ ) /, 0* 1 $ - $ 3 $ ) $ 0 1 0 34 * $ 4 '( ! #) ! &4 $ ) ! ) $ ) , 2 ' 2 "
! + ! 2 2 2 + + ! !
!
2 * $ " ) $ $ *' & /, , ( $ - ! ! 5 6 ! ς - ! &'- /,
! 2
+
) 3,/ , 7* /, " /, 3,/ , 8 7* %**/ ' ' ' 8, $ ' 9* ' 5 9* 5 : ! / #* 6 $ 2 * ' ; + 6-$ 5 ' ' ) 0 ? $ . , E $ = , ',* ' D = 3,D /$ ' R * /$ ' , ) D =- $D ,D -, ' $ =D /, ' ' , , , / $ / , , -E '/ )* $ , , ' , ' '(- , ,* , $ , $ ) , ) , $ , , ' $ ' , ' /, ,
S/*D ) ,/ , / , ' $ ' ' ' D ' , $/ )
, $ / / ' , * $ , , )D $ /, /-'
+
-' , ) , ', $ ' $ D , / $ * D , $ ' > $ , , ' ' ' , *' ' 'D ,D / / $ , , ' '/ , ' $ , :$D * $ D /,, = = $ , /-' $ D / , ' $ F ' , * 42 = /,
, -' $ D / , ' $ F ' , * = /, , ' ,D , D D /,, $ D , * 42 * %$ D , $ ' / / * , * 42 9 , =
!" !" !" / ,* ' ' $ , D ' , = / 4 '$ , '( ' D , $ ' * 4 $ / $ , ' , D ' /, ' ' ,* ' $' :$D , , / ,* , ' , D , ' / * F , ,/ , , , * * N$ , ( = ) , , $ *OD , , > ) , $ , , * , $ , ,/* ' , * ' , $ , D ' $ ) D , $ , , ) , $ $ $ ' $ $ , 6, , , ,D / ,* , ' $ $ * $ , % ' , , $ = $ $ $ $ $ , D *
% , $ ' ', -
$ $ ) , = ' $ , , , = $ $ $ $ ' $ D , ) ' * $ / D , , $ $ ' , , )' 3 , D , , ) = , $ D = $ / = $ -' , , , / ' ,
E / $ ) '. 'D * / /-', , ' * , $ * , ' , '( $ ' , F , / '* ' $D ' , D , ) $ , / = , '$ , ' $ , , * $ $ $ $ $ * , $ ) ' , & %
6 */ , / $ $ , / , ,D * , ' , , PQD /,, ) , -* '/ , / ,
, D / ' ) /, / 6 D ' /- /D $ ' ,
% % %
'
/, , 6 , / $ . /,, , $ , /,, 6, , $ ,
* $ D , >* -* /, * , ' $ , , , -* S/* , ' , $ , , SD / , ' , $ , $ , , /, ) / P 2Q
% % % ( ' D - /, 6, , D , ' , ) # /,, $ , '/ $ ) , $ $ $ ' = $ , 4 /, ,
$ $ $#%
, ) ) = , , , S/*D * , , = , , , , ) # ( / , , = $D , , /, = , , 6 , = $ , 6, /, , D , $ ', $ 3 )D /, & , '/D , ) $# , $ , NO $ , D ' =D > $# * /, , /D &D $# > , ) # &
$ $ $#% & & #%
D , , ,* , $ * D = R , , D /, 0 1 D D n D , ) i # > # 0 ... i−1 ,$D , ) # / ' ; $ , = / , / 4 / ' ' $ =
% % % / $ 'D $ , ' * D , ) ( '! " , E / $ ' /, , $ , ) , ' $ , D ' D ' ) $ , D , ) ( '! " >* , ) )# ( '! " 6 , ' , $ '* /, , / = '/ , * $ /, , $ $ N, ) ( !" # ( !"O , * * $ & /, , *
( !"% & * ( &!"% * =D ' $ ,* * = ' , $ , $ 3 )D * $ , + '/ , / =D +D * $ , , , , / = & ,
$ $ $#% & & #% , & , #% ,! " !"% + $ + $#% ( !"% + - ( +!"% , ( ,!-"% 3 , $ > D $ > , ,* , ) !" /, * $ , $ , /, D , ' $ , D ' D ' ) $ , D , ) ! " >* )# !"
% % %) ' , '*D , + , ) F $ , D !"D /,, , >* $# !" , , $ $ +D / = + , ) , * , $ , = , , $ & ,$D , / = $ * $ , , E * 3 )D $ , * D , > /, & > - $D , / * * $ E , ) ) , ' ', , / = , , * , , / = ' ' , , , /
. 0
$ $ . $#% / . / .#% . $ 0 $#% 1 / 0 1 0#%
$ , 1 '* ,* / =. / 1 % ', , ', / / , , *D ' ', $ >*F 1 $ 0 /, / $ . S/*D / / , / , $ 0 ,D / / , , , * /D $ 0 , ) / ,/ , , $ , ) $ *
% % % D ' */ -* /, = N, =O , , , ' * $ , = $ , $ , = , E *D ' ' $ ', , $ , , , *
'(- D ' ' 'D ' , ' ' ' ,* ) * , ' , ' * E * E ' , , , ) * $ , ' , ) $ , * $ /,, , ' 6 * /, , $/ ) / .
& 2-
, & 3 3 &D , = ', /, , ,$ 6, &D , ) * $ / / , , * ' ' N ' $O 2- , , 3 3 , ' $ 2- D / ' 3 3 & ' ' $ &D ' ' $ 2- , * $ , ' $ , , ' ,D , ' * 'D ' 3 3 ,
, , ' , $ , $ $ $ = , ' , ',* $ / , 6 / * $ , ) $ = * T$ , ' /F / , , * , , * * -* , , ) , * , ' , ' $ , ' , F , , / * , $ ,
*&& $ ' / $ $ ' $
, / / * D / $ , /,, ', ' H' 'H , , $ D /,, ' , $ , / = $ * $ , * , '(- $ ' D , $- 6 , $ , $= , > ' , ' $ D ' ' , $ ' , $ * , $ = / D D /,, -' ' /, , $ ,D / $ ' / * ) $ D , = D , 3D / * * $ /, * , $ * $ * -' D / ' , , $ ' 6 , , = , D , E )-' $ = , , , ' 4 ' , $ 3 * ') , ' , , * / $ c1 c2 $ c1 c2
Core−Scala
C−cal + parameters + anonymous templates
CLASS−BASED
C−cal + anonymous templates
C−cal
MoC 3 . $
Scaletta
TEMPLATE−BASED
'
% $ , , $4 , ) $ % ' = , , )D , ' = , $ , , = , , / ' ' , / ' S/* , ' /, ', , , $ , , F , ' , , , $ , , / ' $ , = $ D , '-D $ *D * $ , , $ $ D ' * * $ '(- ,* ' ' , '- **/ $ '( , '- ' $ P!Q , * $ , , '- . ' /', , , /' , * , ' $ '(- , $- , / ' $ '(- /,, , * , $ , , / $ , $
D
!
% $ $ %% * , $ ' D , $- , / $ . '( , = $ '( * '( * $ ' , / $ ' / $ . ' L T D '( ' l '( t * $ ' D ' '( , ' D /,, , $ ' $ /,, , *D , *D * ' 'D , $ , ' ' , $ , , ' '( , ' ' $ , {x | d} , )D x *' , , $ , , / # , $ , ' $ / T U ' , ) T & U '( ' , =) $ D , '( , , =) $ T ' , '( ( T 3D $ '( t / ' /, , ) t.L '( ' /, , ) t.l , ) $ , $ $4 3 D # $ 3 N O , , =) t $ '( t.l , N O N O , / , E , $ , , , D '( 'D / $ ) '( * / . ' 3 , =) t $ , / $ $ , ' l , , ) t x d t x ( - l = u) , '( t , ( - l = u) , , , ' , *' x , $ , , / $ , *' , $ $ , $ *' , $ , , u /,, , =) t ' $ , *' xD /,, u[x\t] , ' * , $ $ '( , $ d t = ' , N O. t ' ) ( T , T , d , ) T x d , d / ' , T , D , *' x , , , {x | d} dD , / ' T & U $ , d / ' T , d / ' U , ' ' , d x d F $ / / , D /, / (d, d )D ' /
2
%'( ' ' $ *' %'(
l L x, y t, u
T, U
1
d
%'( * *
v, w V, W
::= | | ::= | | ::= | ::= ::=
x t.l
( T {x | d} T &U t.L
- l = t * L = T x | ( V {x | d} | V & W
3 . ) $
'( '( = =
t x ( - l = u) t.l → u[x\t]
t x ( * L = U ) t.L → U [x\t]
T →U ( T → ( U
t→u t.l → u.l
t→u t.L → u.L
T → T T &U → T &U
U → U T & U → T & U
3 . 5 $ '( Nt → uO NT → U O
{x | d} x d
d x d = d, d
T x d U x d
T x d
( T x di
3 . 1 NT x dO '( Nt x dO
T & U x d x d
* = $ , = , D , * , $ , '( = # D '( * v , $ $ x ( V D /, V * , ' *' * %$ D D , D /,, * $ *' ' ' , $ *' $ D / * *' S/*D *' *D , '- $ D $ *' * V , {x | d} ' V & W $ / * , ) $ , /, ; ' , $/
{x | d} & {x | d } → {x | d x d }
, , $ * $ , '
( {x | d} x di
, /, ; $ , /, $ * >* , /, / , , /, ; ' ) /, / , $ ' , * , , , $
( '( , * $ $ ' * $ , * , , , / , $/ , '( , / t , '( * ' , , $ ( T /, T T , $ $ ' , *' root T / '( , ) ' ' /, %% . / , $ $ '( = D , $ / , , ' , 6 , , ) > **. / ,* A /, XD , * $ , = foo X $ , * $ , = bar , a , B ' $ , A , * $ , = barF D / / , , B , A , = bar
( 4 * . 4 * / 4 -
+
* 0 . 5 4 - * # - * 0 ( 0
, t ' $ ' *D $ = u , , / ( ,* t ' $ u , ) $ , u , ( ( t.myB.X).foo S , , * $ , u , * < something > 3 / ,* , ) / , ) $ , , '( u
= → → → → → →
( ( t.myB.X).foo ( ( ( ( t.B).X).foo ( ( ( ( t.A & {b | · · · }).X).foo /, t = ( {a | · · · } & {b | · · · } ( ( t .X).foo ( ( {x | - foo = t .bar}).foo t .bar < something >
* $ / , * * $ , 'D ' $ / , = ' ' , , /, , ; D * , , $ ' , , , , , / * * , $ , '( * $ , ' ' ' , $ / 'D , , / , ' $, /, , , , , * D ' D '(- 3D R , = $ , $ d x d , ' , $/
d x d = d + d
, = , d + d * , , , ,-, d ' = ' , , $ , = $ +d
=
(d, d) + d
=
d
d+d $ '(d) ∈ (d ) d, (d + d ) ,/
, ' / , $ ** , /, , $ ' /-= ' $ , , ,* ' $ $ , ' , $ ' $ ' , ) $ /D ' , , , ) D P Q D .m(t) ) , ' $ , , m = , - , ' , $ , , = , - ' ' / / -D , / $ - D ,
4 $ -. ) $ , $ , D ' ' ) / D / , $ - $ , $ , - / , ) , ' $ , $ , $ , / , ' /,, / ' *D /, , / ,,)$ , , , , $ , , , /,, D /, 'D ,/ , ' / $ ' , $ ', , $ , / / / $ ' /,, ' , 6 $ , , D 'D ' , ' $ D -E $ , ) ' $ , , , , T & U
% %%
' '
, / , $ ' D ' , / D /,, , * , - ( $ , , ) $ / / $ -D ' / ,* ,D ' $ F / ) , ) $ '( $/ %'(
t
T
::= | ::= |
x. .l ··· x. .L ···
'( - N '$O - N '$O
6, , )D - x. .l , * $ , $ l , - $ , $ /,, x , $ $ $D , - $ , , $D 3 , ) (T1 & {x | d}) & T2 , - $ {x | d} T1 9 , , * $ , / '$ , D ' T1 ' t.L $ = , $ , / D / ( $ $ $ d x d , / $ 4 $ , * D * ,- '
, , , ' $ * ' - /, , * S $ = $ , $
d x d = (( - l = t), x, d) = (x. .l, x, d) = (x. .L, x, d) = (t.l, x, d) = ··· =
d + (d , x, d) - l = (t, x, d) t $ ( - l = t) ∈ d T $ ( * L = T ) ∈ d (t, x, d).l ···
, ) $ (t, x, d) - t , d 9 , (x. .l, y, d) = /, x y E *'F , , /, * , , $ , = , ' , ) $ , & , * , ' ) 6 T /,, ' $ / '- T1 T2 T1 * $ , '( ' f D T2 , * $ f * $ , '( ' g = = = = =
T T1 T2 d d
T1 & T2 {x | d} {x | d } ( - f = 3) ( - g = x.f ∗ x. .f, - f = 4 + x. .f )
6 / ,/ , T x ( - g = x.f ∗ 3, - f = 4 + 3)
N&- OD T1 x d T2 x d N&-OD T x d x d /,
d x d
= = =
d + (d , x, d) ( - f = 3) + ( - g = x.f ∗ 3, - f = 4 + 3) ( - g = x.f ∗ 3, - f = 4 + 3)
6, , * ) / ,* ,/ , $ / ' , 6, , ) )D / , , D T1 D T2 T3 D - / , , / ' , T T1 T2 T3
= = = =
(T1 & T2 ) & T3 {x | - f = 3} {x | - f = 4 + x. .f } {x | - f = 5 ∗ x. .f }
) , $ f ' $ , ' $ T1 D T2 T3 .
T x ( - f = 5 ∗ (4 + 3))
% %% '' '
/ ,* D D D - , $ - ' , , # $ , - ' , # $ , ' , - / $ , $ , '* ' ' = $ ' . - x. .l , $ $ $ *' x > / 4 , , -D -D ' ' '(D $ ( , , , 4 , / , , ,* / $ ' , '
/, k ,D / $ , NT x dO , ' * , = $ , ) ' , ) 4 '/ ' %'(
k t
T
* V, W
::= | ::= | | ::=
t. [k].l '( - ··· N '$O { x | d }k
t. [k].L - ··· N '$O { x | d }k | V & W
6, , )D - t. [k].l , t.l ) , $ $ l $ , - $ , =
/, k D $ $ , = , = , > ' , ) 4 , $/ =
{ x | d }k x d V x d
V & { x | d }k kx d
V kx d
( V kx di
V x d
V x d
V & V x d + d
k = k
V kx d
V & { x | d }k kx d
t kx ( - l = u) t. [k].l → u[x\t]
, V x d $ N $ - , = , ' O = , / , * ,- , V kx d $ -D $ , $ , =
/, k
, , V kx d = $
/, k /,, E $ k , $ - $ , , - , , - , , , = $ , , , T1 & (T2 & T3 ) 6 * , $ , )D / , $/ = $ T
::= | | |
{ x | d }k t.L t. [k].L T & { x | d }k
-
, , / * , $ * V, W
::= { x | d }k | V & { x | d }k
%
, - ' = , $ t. [k].l - t. [k].l ) , $ , =
/, k $ $ , - $ , , ) $ -' '(- D , ' $ ) , $ , m = * - C , ) $ ,D $ /,, , ) [C].m(t) D /, t , $ , , , , , , ) $ ,. $ , , m $ C D , mC , , , mD , , [C].m(t) /, , #.mC (t)
% %% +, 3 = - / , D '
D / , $ ' , ' , 3 , = , / ,* ; D ) * , = ' , $ $ -' 6, , , $ , $ D , , ) , , / , '* , , $ , = , *. D /, E D { x | d }k $ x. .l /, x. [k].lD , , $ ' , /, , = ' * $ , ' , / ' , , 3
{ x | d }k / , N - l = x. .lO / - t. [k].l ' t.l D 4 - $ , - * , D / / ,* , ' '* 6, ' / /,, , ' ' , , 4 , , , / ' , /, ' ,D /,,
% $ '(- , , '- ' * , $/ '(- . '( $ * , ' , , , 'D $- $ '( ' , $ $ D = , $ , , $ % , , , $ D ' , * , . , D / * $ = $ D ' , , $ D ,D / ,4 ' $ /, ( , / = $ 3D / -' D D /,, , $ * / 3 , D / * ', * $ $ , $ ' , D , , , * $ ' ' 6 ($ / , $ -' , ,* , , , , , , ) $ '(- D , $ , D $ $ D $ $ $ ' * -'
$ , D D / , $ $ $ */ D = , ' ' ' , ) * $ , ' ' , , , ,, % , D ) '( ' , ) , D , ) * $ , 3 /, $ ) ( D / / ) /,, / ' D D , $ , ' ', , $ , > $ , ,
( , '/ , ,* , ' , E :$ ' = A ) M /,, , , ) = - B $ AD , ' $ A , ) B /, , ) .M D , ) * $ , = , ) * ( / ) M D .M ( $ M $ ,* ) ,. $ ,D = * ' D $ D = / = ' 6 / = $ , = , $/ . * $ D * $ = , D , $ , * $ D , /, , * -' '(- D * $ / *D $ , , /, . / ,* *' , ' D , * ' , ' S/*D /, , $ , =D * , , $ $ , $ $ , $ , '( D , /, , , = D , $ /, , D , -D ' /, ) $ D * / $ , $ , * $ S $ , = '
, * $ ' D -, $ , /, , , = , ( /, '(- ' , $ 3 $ , = ' , ) , , ' , = $ /-$ , t.C D t.L ) t.C :: Topt , $ D , , , * $ %'( * '( , , '-) , '( * v , $ $ x ) ( V /, V *D * V ) v.C :: Vopt / ) ,/ * ' $ (v, C) '( * -'
%
&
, * / ,* ) ,/ 6 $4 , / * $ S/*D '
$' , * $ / $ $D ' , ' / / ' $ , $ D $ / D , , ' ' , $ 4 3 2 , $ , / * , , , $ Γ V x d F , , * ) Γ , V , d , , , $ $ ' , *' x , ) D ) , 4 ' ) ΓD , ) , S/* , = $ , ) /, , , * $ D /,, , ' % , D * $ ' , D ' , , , , ' , ' $/ ' , , ' $ , / , ) , '
4 . 4 0 4 - - ! ( ! ( ."0" & Γ ' , * ) root A { a | · · · }D / / , $ ( ( root.A).B $ / ( $ B /, $, D / , $/ ( Γ ( ( root.A).B b ( - f oo = a, - bar = b)
S/* , ' ' , *' a , / ' , ' $ , ( 9 , , b E , ' ' ' , ( , $ , ' ' , *' a /, *D , ( root.A )D , , $ $ , / /D ' =D ' , / # D /, d , n / ,/ , $ , n $ *' , n $ d /, * % = , $ , n ' , NΓ V x dO , '( NΓ t dO ,* * = 3 = , / / . $ t $ *' xD ' , $ , d ' = -*F
+
!
Γ t ( * L = T ) Γ t.L → T
Γ t ( C Topt { x | d }) Γ t.C → t.C :: Topt
Γ t→u Γ t.l → u.l
Γ t→u Γ t.L → u.L
Γ t ( - l = u) Γ t.l → u
!
Γ T →U Γ ( T → ( U Γ t→u Γ t.C → u.C
Γ T →U Γ t.C :: T → t.C :: U
3 2. 5 $ '( NΓ t → uO NΓ T → U O
Γ Vopt x d
Γ=xd Γ x di
Γ v ( C Topt { x | d })
Γ v.C :: Vopt x d + d
t = ( V Γ V x d Γ t di [x\t]
3 . 1 NΓ V x dO '( NΓ t dO
Γ Vopt x d Γ v.C :: Vopt C x d
t = ( V
C = C Γ Vopt C x d
Γ v.C :: Vopt C x d
Γ V C x d
Γ t C di [x\t] Γ t C ( - l = u) Γ t. [C].l → u
Γ t C ( * L = U ) Γ t. [C].L → U
3 +. -
$ t , , $ ( V D , V $ d $ ' , /, t , ' ' $ , , = $ Γ V x dD / / , V , , $ v.C :: Vopt ' , $ C /, > ' ,* ' $D / $ $ C , '( v $ , , , ,* ' , / , * , * $ )
Γ root ( A { a | · · · }) Γ root.A a ( B { b | - f oo = a, · · · })
Γ ( root.A ( B { b | - f oo = ( root.A, · · · })
Γ ( ( root.A).B b ( - f oo = ( root.A, · · · )
Γ ( ( ( root.A).B ( - f oo = ( root.A)
Γ ( ( ( ( root.A).B.f oo) → ( root.A
% %)%
3 / / $ = , $ -' $ 3 / , /,, , ' -* $ 6 ) , ) $ /, '( - t. [C].l - t. [C].LF , ,* , , 3 +D / 4 , /, , , = , -' ) $ /, - N O
, $ , ,D / ,* , ' * , 5,D / $ $ ' $ D , / , $ , $ $ , -' D 4 ' , $/ $ #
= 5 9 → + #
, $ = ) ' * $ 6 ' ) $ /, D , / ) , ) ' , $ 3D / , ) $ $ = , / $ * $ , ' $ , $ ) , / ) $ /, ' $ D , *
!
3 / * , ) $ 1 , * )* , '(- $ D , = , D )D D ' D =- $ , $ ' , ' * % $D , , , $ $D ' , , , * $ , T% *D ' = ' *' , E '/ , D ) $ , , / , ,D , / / /, , , $ , ) # , $ , D /, ' , /,, , ) $ , / *' $ , $ , '/ ', % $ ) ' , $ ' D * ' *' x , , $ , ' ,* , $ {x | d t} ,* , $ ( eopt {x | d} ' D ' $ , ' ' $ , , , *' x , $ , $ , - C. .m(t) ' - $ , $ x. .m(t)
, / ) , ) $
T
/,
::= Topt { x | d } | · · ·
#) 3 #, $ $ 0 1
C M f m x z d
::= | | | 0 p ::= ) e ::= #) k ::= t, u ::= | | | | | | | | P ::= 0
C(z) p M (# k {x | d} f =t m(z) = t
) = ,
eopt {x | d} t.C(t) (# k t.M ) x $ $ z t.f = t.m(t) , x. .m(t) - ( p D {x | d t} ' (z) ⇒ t $ t(t) $ {x | d t}
3 . ) $
/, ' $ >* /, , $ ·y 4 ' *' y , , $ $ $ , , , D ' , $ , * . * $ Topt { x | d } /, y.C /, C $, , C ' , , /, y , $ $ * , S = C Topt y { x | dx } * $ , * D , = $ , $ ' > , / / ' * , /D ' $ , , , ' ) $ , D / , '* , $ ' = $ , / * )
4 0 4 . 4 - (
0 4 -
6
, )D , $ , 0 4 - 6 , . 78D /, . 78 , , .
. 4 . 78 0 4 - - ( . 78
6
$ &
D , ,* ' D / ) /, , ' $ ,*
'( 6 ,/ , ' , $ , , , , * $ , ' $ , 9 , , = , ) $ , D ' , , $ = , , )D $ , , $ / , > $ $ */D E , R $ ,D , , / , $ , , = $ D , ' , , , , / , '( , ) $ , ) 4 '/ , -*' z N Z O * ,
'( N O '( / ,* p 3D '( ' a %'( 0 1
z Z p a d
%'(
T, U t, u
%%%
::= ::= ::= | ::= ::=
z|Z t|T
C(p) Topt { x | d } - l(p) = t | · · · Z | t.C(a) | · · · z | t.l(a) | · · ·
, ', , $ * , = %'( ' '( = ' = , = $ , x $ C ' = $ , C 3
!9 " 4 - (
! 9 "
'
4 - -
- ( -
-
4
9 , , = ' D ' , $ D / ,* , $ , $ *, , ', $ , , ' /, , , /, , ) $ D , $/ )
'! " 4 !"
'!" 4
=D , $ $ *' , $ S/*D $ / ' = $ D , D , ) '!" ' ' D , )D ,/ ' , '/D ( ) /, , '
' 4 -
- -
' 4
, ,* $ , / , ' = $ , $ , ,D / $ , )
': : 4 - :
' 4 : : 4 - : ! (
': - : "' 4
%%% . -
, ) $ , ) $ /, ( D / , ) $ = { l0 , l1 , · · · } $ '( ' $ '( = { L0 , L1 , · · · } $ ' $ 6 $ , '( ' l N , C O , ) $ ' Ll N CC O , ' , , $ ·σ ' 3 D 4 ' ' σ , '( '( 6, , D , ' F , ) , , , 4 , , , ' ' , ) $ (x, p) /,, $ *' x , > $ p $ , ' ,D * . , = x.l1 $ '( x.L1 ,/D , x.l2 $ '( x.L2 ,/D 6 , $4 $ ' , $/ /,, ' /- , ) , 4 ; D 4 '( , /, ; ! < =9 < ="
4 ; !9 " ; ># 4 - !=" ( ; ! < =9 < ="
(x, p) i (x, z) i (x, Z) (a) i (t) i (T ) - l = tσ * L = T σ C(p) Topt { x | d }σ
= = = = = = = = =
- l(p) = tσ xσ t.lσ t. [C].lσ ( T σ zσ t.l(a)σ t. [C].l(a)σ t.Cσ t.Lσ Zσ t.C(a)σ { x | d t }
= = = = = = = = = = = = =
!
0 (x, p0 ), · · · , n−1 (x, pn−1 ) z → x.li Z → x.Li 0 (a0 ), · · · , n−1 (an−1 ) - li = t * Li = T - l = tσ * L = T σ CC { y | d } /, d = C Topt σ { x | dσ } /, σ = σ, (y, p) * Ll = { y | - l = tσ,(y,p) } x tσ .l tσ . [C].l ( T σ σ(z) ( ( tσ .Ll { x | (aσ ) }).l ( ( tσ . [C].Ll { x | (aσ ) }).l tσ .C tσ .L σ(Z) ( ( tσ .CC { x | (aσ ) }).C { x | d t }
3 . 0 '(
2
/ , $ , '/D 4 4 '( E. ; , 7; /, '( , ?7
4 7; 7; ># 4 ; ; ># 4 * ?7 ?7 ># 4 - ( ! ( 7; ># 4 - 78 7; >#78 < ?7 >#78 - 7 7; >#7 < ?7 >#78 "; , $ D , 7; >#78 N , 7; >#7O , $ , N O , D ?7 >#78 , $ , = 6, ) , $ , D / ,* , $ *' $ , =D /, , $4 / ' l1 D l2 D L1 D , * $ , , , $4 , , $ ' $ , $ , D ( ' ,* * , $ ' li ') ) /, ') , , $ / '/ ) / /, , , '/ / / /, , , , '/ )
, > $ $ 3 / /, , , , $ ) ' , ) % 4 , /. -# -# - -# - / D , / $ , ) &8 , 4
, 4 / = * , / ' , ,D , ( $ , $ $ , $ )D /,, * , / $ ,-= ,- * $ , $ 6 , , / D * $ , ' *D , ) &8 )D /,, / , 4 , $ , $ 6 * , * 8D /,, = $ ) &8 , 4 , /. -# - -# - * , , D ' 4 , / / , $ ) , , ' )D * * , = $ &8 8 /, , , $ , 6, , 4 , $ , * 6 4 , , , % 4 ' $ ) 4 ' , - % 4 ' ) /, , ' $ ,* $ ) , 4D ( ) , 4D $-- , /,, = , , * $ , 4 $ ' , D / /, , ,, $ ). , C , ) M D C '$ M , 4 , , /, 4 / ,* &8 '$ , 4 * , , , &8 )
%%% (1 1 ,
, / ) ,/ ) , , ' , 4 ' , * , $ /, ) >* /, ) 6 , , , , $/ ) , ) $ , , $ , ' , ) , , * $ , ) $ , * $ , '( $ , /, , ) , $D - ' ' , ' * , , 'D , ) D / / /,, , D / ( / , , ' , ) ' , , 4 /, , ) , $ ) N, OD / / , 4D / , ' , -
!
! "# $ % & "# $
S , , ' ,
'"# ' $ $'"# ' $ $' $'"# ' ' '"# ' "# (( "# (( )# ) #
* '
* $'
! '"# '
$ % & $'"# '
, $ $ ' , ) , , ' $ 4 $ ) , /, ) % $ ) ,
*
, = , $ $ , , ' , P QD , /, , , , / ,,)$ , , $ , , , ' $ , 6, / , $ ' , ' - , , '
!
*. NO / $ = , -D , , N O / $ = , ' , / ) $ $ ' /,, ' , '
%%%
6 ) , ) $ /, / / $ $ * , = , = $ *
C(x) p , $ , * $ ) * & ) D * ,* ) D ' , , $ , , *
C(x) (# k {x | d} 9 , > $ $ * ,* ) , ' $ , $ - $ ,
%%% & '
6 ,* , $ , ' $ , , ' * $ , / / ' ' ) * /, - , D , $/ )
. # 4 !=" 0 . # 4 !=" # !=" (# ( ! ( 0"!" 3 ' , ' * . , $ , * > ' /,, ( $ , 6, , D , * ) $/
. # 4 7.!=" * !=" 7.!=" 0 . # 4 70!=" # !=" (# * !=" 70!=" ( ! ( 0"!"
!
!
, ' $ F $ , , $ * , D $ $ '(- S/*D $ -' , . * , -' D ' , ) * , $ ' D , * , / $ , $ $ $ $ , $ , $ , * , /
% )
'( * = ' , $/ ' v V
::= ::=
x | ( V v.C :: Vopt
* V , $ (v, C) /, = '( * v C , '( * ' ' /, &$ $ , , '( * xD /,, , '( $ '( * ( V . $ V , , ((v1 , C1 ), · · · , (vn , Cn ))D , / ,* n D ' /, Ci $ ' $ D D /, 5, , * -, / $ = $ , > $ , D / ,* = * $ $ '(- , / , '(- $ = D $ , ' ,* * , $ D / ,* ' D D , $ 3 / ,* , , -' D D /, , $ * $ , , ' $ , ,D /,, , $ * , $D , = $ $ = / , = * $ / ' ,/ ,
!+
!
Γ t ( - l = u) Γ t.l → u[#\t]
Γ t ( * L = T ) Γ t.L → T [#\t] Γ t ( C Topt ) Γ t.C → t.C :: Topt [#\t]
Γ t ( C = u) Γ t/C → u
Γ t→u Γ t.l → u.l
Γ t→u Γ t.C → u.C
Γ t→u Γ t/C → u/C
Γ T →U Γ ( T → ( U
Γ t→u Γ t.L → u.L
!
Γ T →U Γ t.C :: T → t.C :: U
3 !. 5 $ '( NΓ t → uO NΓ T → U O
(d $ ) ∈ Γ Γ # d
d ∈ 'Γ (V ) Γ ( V d
3 2. 1 NΓ t dO
t = ( V ( - l = u) ∈ 'Γ (C, V )
Γ t. [C].l → u[#\t]
3 . -
!
= )* , ' R 6 , , / , ' 0, , $ / $ ', . /, , $ / ) , , ' =W 1 / , , * $ , =D / ,* , , , / *W $ '( '$ ) 6 * , ς - * $ /, '( =. '( [l1 = ς(x) t1 , · · · , ln = ς(x) tn ] ' , '(T {x | - l1 = t1 , · · · , - ln = tn }D *' *'D = = D = t.l ← ς(x) u ' '(T t & {x | - l = u} / D = , ς - * *
2
$ , ' T & U D /, , = T / , U / /, ( = , , $ , ς -
$ - $ D ' , $ D / /, = $ - , ) D * , ' 4
, /D - /, $ , ) 4 $ , , ' $ , , {x | d} , ς - ' ) /, , [d]D ' $ ) 4 $ D ' , / $ ' , ς - , , , , ( ' , 4
%% % 0+ $ , , '( ) $ , '- /, , '- / , , , $- , $ '(- D $ . '( $ $ , $ $ , , $ , '( ) , , '( $ , t.m(t) $ , m /, t * '( t $ , $ (t.m)(t, t)D $ , $ t.m /, = t $D $/ ' , , t , * /, $ S/*D $ , $ ' , '( * /, , > $' , * $ , ' , *- D '( * μ(x) r 6 , * μ(x) t ' , '- $ = =)- , * $ '( ' , '- E , ' D $ $ '( . ' * $ , D , ' , = $ , ' ' , ' $ * E D * D ) * D /,, ,* , $ /, , , P!Q **/ $ , ) , , / -' D D /,, $ , = , $ $
#
, E $ '(- D * ,* ' $ 4 P Q D , ) , ) $ 4 * P Q * ' , $ * ,D /, ) , '( /,, , D , $ * , '( /,, " , $ $ ' , P Q , , ' $ $ $ $ $ /, * 6 , * )* ) /, / $ / /, )* ' /, $ ' > , $ , , $ $ $ / ,* ' ' , '(* $ / , $ PQ , $ , , ' , , * $ , , $ ' , , $ , '(*
' . #" '# / " #
) $ , )D , / / D , /,, / * $ ' 3,/ , 7* P Q NO $4 $ , $ , /, , $> * , * $ ) & D -' '(- /, =D ,D ,D -* ', D , * $ = $ , $ , /,, ' D , , ' ' , * $ = '$ * , $ '( 3, ', , * - /, $ 2
2
, ,D /,, '( ,* % , $ * ' * ) ) , D D /,, $ , $ C , $ C D ' p.LD ' D /,, , * $ , = L , ' , '( ' , , p , ' $ , / 5 , D , $ *' = $ , ,* , , $ , * ' , $ ' 4' $ / * , '( *F ', $ / / , , / $ ' , * . L >: T $ , ' 6 ) /, * =
? / # #/ ? *2 # / , D , , , 3 D $ , # /D /,, 'D / ,* , , , 1 , $ , ?D ' $ , , , ? / . $ , * /D * )D $ , # / , $ ? , $ > * / , = $ 1 ' , ' $ , 3 , R / , = $ , , $/
?A/91C # / ?A19BC *2 1
, / / $ , ) , , $ ,* , / , * D *
2
$ , * /, E =) , 3 ) / , / $ , * / /, E =). #/ # / / /, / . / 1 , '* , $ ' $ , $ $ /, , , ' > ' $ , = , $ * > $ / /, * /, ( 4 / > , , ' , $ , ', ' $ )*D ' , , , (= * , $ $ /, * D ,/ / / ' , , , ) * $ $ $
"
, $ , , $/ ) , ' ', , ', , $ ' $ * $ ,* $ , ) $ D D ! D 2 , /-$ $ / , $ ' + / , ' , , ) '/ , / ' $ * '; , $ $ D /,, ) 3D $ /
$ , / $ ) , ' ', , $ ' $ * D / ,/ , , * , $ , , , ' /, $ $ / * = $ , / /, , /$. = / /-$ ≺ ' , /, D / , * $ ' , , , D /, , ≺D , , $ , 6 , '
' '
, $ > ' $ , , , ' , '(* $ , $ 3 '(- , , ' * . , '( $ = , ) , '(D , '( $ , , ) , '(D , $ , /, / ' $
2!
% , $ $ ,4
$ ' = , 'D /, , , , / ,* * , / 6 , ,D , ) $ -' /, * D $ , ' / , $/ >. # D , ' , $ / A B , , , A $ , B D , A $ B , $ * /,, /,,D >D ' ' * ,
, $ '* /, * D /,, , $ , A ' $ B , , , * p.L N$ $ L , A /-' B -'O
=D /, /, ' ' *' $ , ' , $/ )
. 0 *!" 0 ( 0!" ( .!"*!" , ) / ,* / A B , , D B D , mD /, , ,D AD , , , , A ' $ B , ) ( A().m() /- ' , m B D B - $ , A $ , * '( ( A() , , , ) ( A().m() /-D ' , m , $ A 9 , / ,* ' $ / , , ,, $ HA ' $ B H H, ) T , , A ' $ T T ' $ B HD ) /, ' * $ , $ ' ) D ' ' , / ' D $ A T $ T B D ' / $D 8 D , * $ ( $ , , $ D = '/D $ A $ B >D , $ ) id( ( A()).m()D /,, , * ( A().m()D /-
8! ." ! " 0 ! ." 0 !8!"" 9/ / , '* /, $ ' ' ,
0 #
, $ D / / * ) $ $ * D / / ' , , ) '/ , '
22
, , ' 'D / ' $ = , ,
,D , , ' , , , ' , / N O $ ' , $ , , ', ' , / ' ' , $ , . : '/ ' , ' $ /'F = = '/ ' , ' $ , $ 9 , , ' , ' /, = $ ' ' ' E * E $ , */ $ D , , $ , $/ 3
0 0 . 0 .
' $ , , , $ 'D ' , ) / ' , * , ,D
/ ,* , , , * $ , , , ' /-$ 4 D , $ , , = $ / , D / ,> , , ' . ' D ' D /-$ ' , , ( ' , ,, $ , D , = , , $ , '( $ , $ , ,
$ % % $ $ $ $ * ' -' '( 6 , , $ = $ , / . = / = , $ D /,, , , /, , ' * , / = , $ , ' $ - , ' ) $ 3 - D / * / */. , = D , / , D - = $ ' ) , D , / ' , D - = $ $ , , ' , , , */ . , : Topt * Π.,"((C, m)) = t / / C C { d } , $ C C { d } ∈ Π , * * , ) N OD / ' , ' t $ , , m , * '( v $ , # , v $ , $ x , ' t $ , p $ , # / t[p]D , ' t $ , p $ x / t[x\p] / / ' *D D , ' $ $ ' = ' ,$/ /, ' 5 N'
!%O N ! O * / , $ , =) = $ , * '( , , * ' /, , , ' = N OD ' , , , / $. , , ' * N$D *'O * 6 *, N'
!%O N ! O , ' , $ ) /, ' ,
" &$ , , $ /-$ ' , $ ' $ . ' / , ) $ * ' / / ) * ' ' D $ ' ,
% Π t → u Π C C C C
t → u
+
#!
p → q p.f → q.f
$
( C(f = v).fi → vi
t → u
( C(f = v, t, t) → ( C(f = v, u, t)
p → q p.m(x = t) → q.m(x = t)
t → u v.m(x = v, t, t) → v.m(x = v, u, t)
v ≡ ( C(f = w) C C ( m = t) ∈ C v.m(x = v) → t[v][x\v]
t → t : T = t u → : T = t u
: T = v t → t[0 := v]
3 . Nt → uO !
C C { d } C C
3
CC
. ' NC C O
C C
+
$ * , / ( , . ( Γ t : T , t ' ) ' , T D ' ( Γ T : Topt : Topt : Topt $ $
% , / $ , > , ) $ /-$ ' $' , ' $ / , ) * , ≺ , 6 ,/ , $/ ) ,/ , $ $ , /, , $ 2- . 2- D 2- 0 . #D 6 / ', , ' ≺ $ $ .D ≺ $ , (Object, T )D (Object, U )D (A, T ) (A, U ) $ $ 0D ≺ , ' ) /, , (A, B)D (B, T )D (B, U ) (U, T ) / > ≺ ' D /, . , $ , '/ T ≺ U U ≺ T D /,, / * $, ) $ .D , 0 $ / , , T ≺ U
!
+
;6 ' , , + '%
' /-$ ' * 6 , /, , $/ ) /,, $ * ' /,, ( ' ' , $ { U ≺ T, T ≺ U }
. D 08 . #D 0 . D # * , ' /, 4 ' , $ , /, ' * $ , = ' , 3 )D , ' T /, 4 , #.U B1 , $ , /, , ' T , , T ,D , U /, 4 , #.T B2 *D , , $ ( ≺ ' , $ ' , / $/ , ' , * $ * 6 ,* $4 , , $ , , ,D ' / * , $ 3,/ ,- P QD , D $ , $4 , $ / $ * ' ' /-$
) $ N OD , , , * /, = ,
Ui /,, $ , T $ , =D / ,* / # : C struct Ui $ , ' S/*D ' , $ ,> ' , = $ D N O N() $O ' * $ ' D / $ , , )* $ , % / , > ,D D , , # D / ,/ , , $ -, $ / $ , * $ ' , / ' ' , , / ,*
+ ' $ % * * , , * -, ,D R /, ' $ / , / / , ' $ / E
, ' ' , N O '/D /,, , , * $ N O $ ,
+
!
, $ , ( Γ alg t : T Γ alg T * $ , ' ( 6, , , , U $ , =) p ' $ , C , , $ , , mD ' ) , $ 6, , , , U $ , $ , , $ , ) T [p] $ , ,D ' '/ / , / , $ , Γ alg p : U
Γ alg U , /-$ $ , $ L , # : C struct T T 3 , /
#
/, * / ' /, , ' $ * , ' $ * ' % / , , ' / /, $ , /, * $'
+ , 3/ / /-', , P !Q $ * $ $ /, - / $ $ / . '(- 0 , /- , * 'D '(- , , $ * ' $ ) * $/ ' $ 3, , $ $ $ , ,* ' * = N *O
- 8
. ,-
, , / $D , , ,-, D $ $ $ ) $ /, * , $ ' ) D $ ' ' $ $ $ * 'F , , ,4 $ , $ $ 6 $ ) , ,/ , '/ ' /,, /, , ,,F , ' $ % , ' , ) $ ' /-$ ' /,, /, 6 = ' D ' D /,, * ' $ , $ * $ ' , $ ,/ >* , ' , ) / D , / , = $ $* $ , $ * S/*D ' $ $ $ * D ' , D * 4 $ , $ * D / / ,* , $/ )
; + ,% 3D / , , * ' ' , $' ) /, = ' 3 D / ,* , $/ ?& /,, , $ ' ?& # ! # "
! # " # )* ! # " 0 !" # ! 9 # " #
, D , ' , $ D , ' , # D $ # D , = $ , D / ,* * E $ &D / / $ , ' 04 , $ ' ' ,* ' , $ , = * $ ?& D ,/ '/ , D ', , , $ , , , $ ' , = #*
* ?& ! #* " #* S* ' ' , 6, R , $ = ' / , ' * , , * ' 4D $ >* * , ' $ , 4 / , $ ,> , / * $
$ , 6 , $ , ,
) , 6 ' , X $ C ' * D ' $ $ / ) , , ) $ , / $ , * $ X $ C , / C{ X >: T : Topt : Topt # /D
> # / $ $ 1D / > 1D / , 1D , = , , # 1 /,, '* > , $ 3 3 1 ,$ /- , ) , $ , * , $ > $ = , )D ' ', , , , 1 ' / ' ', ,D $ $ 1D , = / 1 , , * 6, , $D / / , , , , ' ' 2-
8
3 * /, * D / , , / , , $ . )*D $ ' , $ ' -* , ' * $ ' , $ = $ /, -* , / $ = , )* $ / -, /, $/ , $ ) S/* , $ ' , ,D ' D , -, , - , ' ,* , -, $ $ $ , -, , 1 $ , , $ ( F , , * $ 1 D -, , $ $ $ , , /-F , $ , ' , ' $ , , > $ $ , -, D , , ' $ :$D / , / -$ $ , , , ' / $ , , , /,, $4 # ' $ P Q 3D , )* ' $ /, - - , , R ,D ' , ,/ / ) ' /
=D $ , , ) 3 D , ,D , ) $ D , ' * ' , , , * '( , $ $ ' * $ / * $ $ , $ ' ' ,D , ) , , /, 1 $ , ' , , /, , ,/ 1' , ' * $ $ ,* ' D ' * $ , ' $ = D ' 'D ' /,, $
$
' ' , , 4 , $ ' 9/ / , * /, , , , / $ = )* / ' , )* $ / ) /, , $ * . ' ,D /, = , $ ,* $ $ $ 3D / ( , , ' * , / / $4 , , , / ,* ,/ , >* , $ ,
8
+ ,-
* / $4 * S , **/ $ , / P +Q , , $ $ * , '( ' '- /,, ' $ /- $D ' D D =) D $ , , '* , , '/ , $ , ' $D ' * $ , ,* , $ * , , $ ' $ , $ , * , , $ * , $ $ S/*D , ' ' , , = $ , , , )* , -) , $ P Q H" $H , ' , ' ) $ $ /, * F , , $ * ,D $ * $* $ $ 6 , , ' , ) $ /, , '$ / , / ' $ * , ', , D , , , * , $ D / ,* . * , 'D *'D D * , P Q , , ν -*D $ '( /, D , =D /,, $ , , / $ $ $ * , $4 D $ , $ ν -*
$ $* $ , $ $ * S/*D , /, ν -* $ ' , / , > , / ' 3D ν -* , ) /,, E $ 3 D ν -* , * $ D , , $ D , $ ' ,/ , $ $ ν -*
' / , . ', , $ , D , ) , , $ , , ) $ , D , ) $ , ν -* ) , ) $ , , $ , $ * * ν -* F $' , * * -, , * ' $ ν -*D D , > $ , ) $ , -* % E , ' ' $ 3,D , /, , * $ =) , ' ' * = * D , ν -* D ' D , ' / * * , ' $ ν -* , $ $4 $ $ $ D ,4 , $ $ ν -* *' , , % $ $ , = , $ , $ , ' PQ , , $ $ $ '- /, D ' ' * * , $ * , ' $ '/ = / ,* D ,* , ' ' * $ . , , '( /,, , P !QD , , * , $ /, * " , ' = * 'D , $ , ' $ , %* , $ , * : Topt -
+ 0,1 ,D 1 $ D :* $ ,D Z,D 1 D P Q 0 #, ' 9 0 (4( &90(('D &9 2 +D 2X D &'D 0 D 7 -" P !Q D M %D 6 5 " 2 5 &(5'D 7 2 P 2Q 7 8 D 7D 8 ? 5 2 7* D #D 2 9 - -2! - P Q
, ,D ( 0D 0, 6 3,/ , 7*. $ 7* 87 %0) 2+@5%: 0
(4 ( $ 2# 5 # % &((25%'D %' 3 * # 0 & N%0& OD NOD # P +Q
, , ( 0 3 $ " 9 0 (4( &90(('# 5 # D 7 $ $ , * (4( 5 &*((5'D 7 3 * + 0 D !N O. XD #
P Q # % D 0, ,D " D D ' #,D @, #,D 9 #,*D #, ,4D D #, K %**/ $ , 0 & , T T2D 03&D /4D P Q # % D " D , 5J D #, K 9 , $ %'( /, 1 9 0 (4( &90(('D 1D 8D 7 P Q M M' , 8 7* /, " 9
0 (4( &90(('# ?AA# * D * $ 5 : 0 2 D X -" D 7
!
P Q # " $ + * (4( 5 &*((5'D $ D 7 + P Q # D D , 0 S 6 37
*((5 !$ + * (4( 5 D !
P Q 1* : 5 , $. , / $ 5 2 0 D NO. +X !D P !Q
/ M 6 , #, 3 + 0 D
!D
,
2
# , 9 4, 1 $ ', 0 $ ',
" 3 3' ,D !
$D 3
2 X 2 X 2X !X 2 X ! (
0,1D &' #@, 0 N& #0OD 03&D /4 1 H0 . @>D 0* & HD :*@ 0 9 @ # 9D $> & #,@>D :*@ D & 1:8 D :*@ D &
@ @ N=>OD &@ &D #[
, % , 0 X 2
, D &' #@, 0 N& #0OD 03& 1 ( N1 OD 1 $ , $ - ' D * ' 7-0 7 # % D &5 N:*@ D 0