We present a new approach to proving type soundness for Hindley/Milner-style polymorphic type systems. The keys to our approach are (1) an adaptation of subject reduction theorems from combinatory logic to programming languages, and (2) the use of rewriting techniques for the specification of the language semantics. The approach easily extends from polymorphic functional languages to imperative languages that provide references, exceptions, continuations, and similar features. We illustrate the technique with a type soundness theorem for the core of Standard ML, which includes the first type soundness proof for polymorphic exceptions and continuations. 1 Type Soundness Static type systems for programming languages attempt to prevent the occurrence of type errors during execution. A definition of type error depends on a specific language and type system, but always includes the use of a function on arguments for which it is not defined, and the attempted application of a non-function. ...
|
1415
|
The Definition of Standard ML
– Milner, Tofte, et al.
- 1990
|
|
1044
|
Structural approach to operational semantics
– Plotkin
- 1981
|
|
870
|
The Lambda Calculus. Its Syntax and Semantics
– Barendregt
- 1984
|
|
806
|
A Theory of Type Polymorphism in Programming
– Milner
- 1978
|
|
251
|
Abstract types have existential type
– Mitchell, Plotkin
- 1988
|
|
217
|
Principal type schemes for functional programs
– Milner, Damas
- 1982
|
|
208
|
The revised report on the syntactic theories of sequential control and state
– Felleisen, Hieb
- 1992
|
|
179
|
Introduction to Combinators and *-Calculus
– Hindley, Seldin
- 1986
|
|
168
|
Data types as lattices
– Scott
- 1976
|
|
147
|
Parameter-passing and the lambda calculus
– Crank, Felleisen
- 1991
|
|
122
|
Call-by-name, call-by-value and the lambda calculus
– Plotkin
- 1975
|
|
116
|
Higher-order Concurrency
– Reppy
- 1992
|
|
115
|
The type and effect discipline
– Talpin, Jouvelot
- 1994
|
|
113
|
The principal type-scheme of an object in combinatory logic
– Hindley
- 1969
|
|
113
|
An ideal model for recursive polymorphic types
– MacQueen, Plotkin, et al.
- 1986
|
|
103
|
Type inference for polymorphic references
– Tofte
- 1990
|
|
99
|
The theory and practice of first-class prompts
– Felleisen
- 1988
|
|
99
|
A syntactic theory of sequential control
– Felleisen, Friedman, et al.
- 1987
|
|
92
|
Revised report on the algorithmic language scheme
– Rees, Clinger
- 1986
|
|
90
|
Type Assignment in Programming Languages
– Damas
- 1985
|
|
86
|
Operational Semantics and Polymorphic Type Inference
– Tofte
- 1987
|
|
82
|
Control operators, the SECD-machine, and the -calculus
– Felleisen, Friedman
- 1986
|
|
74
|
The essence of ML
– Mitchell, Harper
- 1988
|
|
69
|
Co-induction in relational semantics
– Milner, Tofte
- 1991
|
|
64
|
Dynamic typing in a statically-typed language
– Abadi, Cardelli, et al.
- 1989
|
|
50
|
Polymorphic type inference and assignment
– Leroy, Weis
- 1991
|
|
39
|
On the relation between direct and continuation semantics
– Reynolds
- 1974
|
|
33
|
A syntactic theory of sequential state
– Felleisen, Friedman
- 1989
|
|
28
|
Typing references by effect inference
– Wright
- 1992
|
|
27
|
Definitional interpreters for higher order programming languages
– Reynolds
- 1972
|
|
26
|
Data types are values
– Donahue, Demers
- 1985
|
|
24
|
Programming, transforming, and proving with function abstractions and memories
– Mason, Talcott
- 1989
|
|
12
|
Typing first-class continuations
– Duba, Harper, et al.
|
|
7
|
On the expressive power of programming languages. Science of Computer Programming 17
– Felleisen
- 1991
|
|
4
|
A sequent calculus for type assignment
– Seldin
- 1977
|
|
3
|
ML of New Jersey release notes (version 0.75
– Standard
- 1991
|