17,131 research outputs found
Data Structures and Data Types in Object-Oriented Databases
The possibility of finding a static type system for object-oriented programming languages was initiated by Cardelli [Car88, CW85] who showed that it is possible to express the polymorphic nature of functions such a
Principal Typings in a Restricted Intersection Type System for Beta Normal Forms with De Bruijn Indices
The lambda-calculus with de Bruijn indices assembles each alpha-class of
lambda-terms in a unique term, using indices instead of variable names.
Intersection types provide finitary type polymorphism and can characterise
normalisable lambda-terms through the property that a term is normalisable if
and only if it is typeable. To be closer to computations and to simplify the
formalisation of the atomic operations involved in beta-contractions, several
calculi of explicit substitution were developed mostly with de Bruijn indices.
Versions of explicit substitutions calculi without types and with simple type
systems are well investigated in contrast to versions with more elaborate type
systems such as intersection types. In previous work, we introduced a de Bruijn
version of the lambda-calculus with an intersection type system and proved that
it preserves subject reduction, a basic property of type systems. In this paper
a version with de Bruijn indices of an intersection type system originally
introduced to characterise principal typings for beta-normal forms is
presented. We present the characterisation in this new system and the
corresponding versions for the type inference and the reconstruction of normal
forms from principal typings algorithms. We briefly discuss the failure of the
subject reduction property and some possible solutions for it
Elaboration in Dependent Type Theory
To be usable in practice, interactive theorem provers need to provide
convenient and efficient means of writing expressions, definitions, and proofs.
This involves inferring information that is often left implicit in an ordinary
mathematical text, and resolving ambiguities in mathematical expressions. We
refer to the process of passing from a quasi-formal and partially-specified
expression to a completely precise formal one as elaboration. We describe an
elaboration algorithm for dependent type theory that has been implemented in
the Lean theorem prover. Lean's elaborator supports higher-order unification,
type class inference, ad hoc overloading, insertion of coercions, the use of
tactics, and the computational reduction of terms. The interactions between
these components are subtle and complex, and the elaboration algorithm has been
carefully designed to balance efficiency and usability. We describe the central
design goals, and the means by which they are achieved
- …