3 research outputs found
The Dynamic Practice and Static Theory of Gradual Typing
We can tease apart the research on gradual types into two `lineages\u27: a pragmatic, implementation-oriented dynamic-first lineage and a formal, type-theoretic, static-first lineage. The dynamic-first lineage\u27s focus is on taming particular idioms - `pre-existing conditions\u27 in untyped programming languages. The static-first lineage\u27s focus is on interoperation and individual type system features, rather than the collection of features found in any particular language. Both appear in programming languages research under the name "gradual typing", and they are in active conversation with each other.
What are these two lineages? What challenges and opportunities await the static-first lineage? What progress has been made so far
Mechanizing Structural Induction
This thesis proposes improved methods for the automatic
generation of proofs by structural induction in a formal system. The
main application considered is proving properties of programs. The
theorem-proving problem divides into two parts: (1) a formal
system, and (2) proof generating methods.
A formal system is presented which allows for a typed
language; thus, abstract data types can be naturally defined in it.
Its main feature is a general structural induction rule using a
lexicographic ordering based on the substructure ordering induced by
type definitions. The proof generating system is carefully introduced in order
to convince of its consistency. It is meant to bring solutions to
three problems. Firstly, it offers a method for generalizing only
certain occurrences of a term in a theorem; this is achieved by
associating generalization with the selection of induction
variables. Secondly, it treats another generalization problem:
that of terms occurring in the positions of arguments which vary
within function definitions, besides recursion controlling
arguments. The method is called indirect generalization, since it
uses specialization as a means of attaining generalization.
Thirdly, it presents a sound strategy for using the general induction rule which takes into account all induction subgoals, and
for each of them, all induction hypotheses. Only then are the
hypotheses retained and instantiated, or rejected altogether,
according to their potential usefulness. The system also includes a
search mechanism for counter-examples to conjectures, and a fast
simplification algorithm