end, then [T {t j ? p.t, x k ? p.x | t j ? BV ,
structure x i : S ; D 2 end, then [S {t j ? p.t, x k ? p.x | t j ? BV ,
Hence S is of the format sig D 1 ; structure x i : S ; D 2 end Applying rule 20, we obtain E p : S where S = S {t j ? q.t, x k ? q.x | t j ? BV (D 1 ), x k ? BV (D 1 )}. Moreover, it follows from (3) that [S] ? = ?(q.x) = ?(p) For the " only if " part, assume E p : S. Then, by rule 20, E q : S and S = sig D 1 ; structure x i : S ; D 2 end, with S = S {t j ? q.t, x k ? q, BV (D 1 ), x k ? BV (D 1 )}. Applying the induction hypothesis, we get that ?(q) is defined and [S ] ? = ?(q). Since S contains a field named x, ?(p) is defined as well, and (3) implies ?(p) = [S] ? ,
S 1 )S 2 ] ? , there exists a substitution ? such that Dom(?) ? F S(? 1 ) \ F S(?) and ? 1 = ?(? 1 ) and ? 2 = ?(? 2 ). (We have assumed) without loss of generality, since the condition N ? F S(?) = ? is met.) Applying the induction hypothesis to ? p ? ? p , we get a signature expression S p such that E p : S p and, proposition 11 shows that E S p <: S 1 . We can therefore apply rule 22, obtaining E f i (p) : S 2 {x i ? p}. By proposition 12, we get the expected result [S 2 {x i ? s}] ? = ? ?(? 2 ) = ? ,
By proposition 6, we have ? = [T ] ? . Therefore, [E; type t i = T ] = ? + {t i ? ? }. Applying the induction hypothesis to d , we obtain D such that E; type t i = T d : D and [D ] ? = ? ? , where ? is ? + {t i ? ? }. Moreover, BV (E) follows from the hypothesis t i / ? Dom(?). By rule 25 ,
Same proof as in the previous case. The condition n / ? F S(?) in rule 8' ensures that ,
By rule 10', ? s ? ? 1 and Dom(? 1 ) ? Dom(?) = ? and ?+? 1 d ? ? 2 and ? = ? 1 +? 2 . By induction hypothesis, we have E s : S 1 for some signature expression S 1 such that ,
Extending record typing to type parametric modules with sharing, Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages , POPL '93, pp.465-478, 1993. ,
DOI : 10.1145/158511.158704
URL : https://hal.archives-ouvertes.fr/inria-00074768
Typeful programming, Formal description of programming concepts, pp.431-507, 1989. ,
Abstract types and the dot notation, Proceedings IFIP TC2 working conference on programming concepts and methods North-Holland. Also available as research report 56, pp.479-504, 1990. ,
URL : https://hal.archives-ouvertes.fr/hal-01499980
Persistence and Type Abstraction, Data types and persistence, 1988. ,
DOI : 10.1007/978-3-642-61556-6_3
URL : http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.97.3858
On understanding types, data abstraction, and polymorphism . Computing surveys, pp.471-522, 1985. ,
DOI : 10.1145/6041.6042
URL : http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.117.695
An error in rule 55 of the definition of Standard ML, 1995. ,
A type-theoretic approach to higher-order modules with sharing, Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages , POPL '94, pp.123-137, 1994. ,
DOI : 10.1145/174675.176927
A type discipline for program modules, Lecture Notes in Computer Science, vol.87, issue.250, pp.308-319, 1987. ,
DOI : 10.1007/BFb0014988
On the type structure of standard ML, ACM Transactions on Programming Languages and Systems, vol.15, issue.2, pp.211-252, 1993. ,
DOI : 10.1145/169701.169696
Higher-order modules and the phase distinction, Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages , POPL '90, pp.341-354, 1990. ,
DOI : 10.1145/96709.96744
URL : http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.41.3795
Manifest types, modules, and separate compilation, Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages , POPL '94, pp.109-122, 1994. ,
DOI : 10.1145/174675.176926
URL : https://hal.archives-ouvertes.fr/hal-01499976
Applicative functors and fully transparent higher-order modules, Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages , POPL '95, pp.142-153, 1995. ,
DOI : 10.1145/199448.199476
URL : https://hal.archives-ouvertes.fr/hal-01499966
Abstraction and specification in program development, 1986. ,
Modules for standard ML, Proceedings of the 1984 ACM Symposium on LISP and functional programming , LFP '84, pp.198-207, 1984. ,
DOI : 10.1145/800055.802036
Using dependent types to express modular structure, Proceedings of the 13th ACM SIGACT-SIGPLAN symposium on Principles of programming languages , POPL '86, pp.277-286, 1986. ,
DOI : 10.1145/512644.512670
A semantics for higher-order functors, Programming languages and systems ? ESOP '94, pp.409-423, 1994. ,
DOI : 10.1007/3-540-57880-3_27
Commentary on Standard ML, 1991. ,
The definition of Standard ML, 1990. ,
Abstract types have existential type, ACM Transactions on Programming Languages and Systems, vol.10, issue.3, pp.470-502, 1988. ,
DOI : 10.1145/44501.45065
Generativity of names in the static semantics of Standard ML, 1995. ,
Reasoning about programs in continuation-passing style, Lisp and Functional Programming 1992, pp.288-298, 1992. ,
DOI : 10.1007/bf01019462
URL : http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.122.1481
Operational semantics and polymorphic type inference, 1988. ,
Principal signatures for higher-order program modules, 19th symposium Principles of Programming Languages, pp.189-199, 1992. ,
DOI : 10.1145/143165.143206
URL : http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.14.1425
Programming in Modula-2, 1983. ,
DOI : 10.1007/978-3-642-96878-5