44,567 research outputs found
Refining Inductive Types
Dependently typed programming languages allow sophisticated properties of
data to be expressed within the type system. Of particular use in dependently
typed programming are indexed types that refine data by computationally useful
information. For example, the N-indexed type of vectors refines lists by their
lengths. Other data types may be refined in similar ways, but programmers must
produce purpose-specific refinements on an ad hoc basis, developers must
anticipate which refinements to include in libraries, and implementations must
often store redundant information about data and their refinements. In this
paper we show how to generically derive inductive characterisations of
refinements of inductive types, and argue that these characterisations can
alleviate some of the aforementioned difficulties associated with ad hoc
refinements. Our characterisations also ensure that standard techniques for
programming with and reasoning about inductive types are applicable to
refinements, and that refinements can themselves be further refined
Refining Inductive Types
Dependently typed programming languages allow sophisticated properties of data to be expressed within the type system. Of particular use in dependently typed programming are indexed types that refine data by computationally useful information. For example, the N-indexed type of vectors refines lists by their lengths. Other data types may be refined in similar ways, but programmers must produce purpose-specific refinements on an ad hoc basis, developers must anticipate which refinements to include in libraries, and implementations must often store redundant information about data and their refinements. In this paper we show how to generically derive inductive characterizations of refinements of inductive types, and argue that these characterizations can alleviate some of the aforementioned difficulties associated with ad hoc refinements. Our characterizations also ensure that standard techniques for programming with and reasoning about inductive types are applicable to refinements, and that refinements can themselves be further refined
Coinductive Formal Reasoning in Exact Real Arithmetic
In this article we present a method for formally proving the correctness of
the lazy algorithms for computing homographic and quadratic transformations --
of which field operations are special cases-- on a representation of real
numbers by coinductive streams. The algorithms work on coinductive stream of
M\"{o}bius maps and form the basis of the Edalat--Potts exact real arithmetic.
We use the machinery of the Coq proof assistant for the coinductive types to
present the formalisation. The formalised algorithms are only partially
productive, i.e., they do not output provably infinite streams for all possible
inputs. We show how to deal with this partiality in the presence of syntactic
restrictions posed by the constructive type theory of Coq. Furthermore we show
that the type theoretic techniques that we develop are compatible with the
semantics of the algorithms as continuous maps on real numbers. The resulting
Coq formalisation is available for public download.Comment: 40 page
Impredicative Encodings of (Higher) Inductive Types
Postulating an impredicative universe in dependent type theory allows System
F style encodings of finitary inductive types, but these fail to satisfy the
relevant {\eta}-equalities and consequently do not admit dependent eliminators.
To recover {\eta} and dependent elimination, we present a method to construct
refinements of these impredicative encodings, using ideas from homotopy type
theory. We then extend our method to construct impredicative encodings of some
higher inductive types, such as 1-truncation and the unit circle S1
Between X and Y: how process tracing contributes to opening the black box of causality
This article maps the methodological debate on process tracing and discusses the diverse variants of process tracing in order to highlight the commonalities beyond diversity and disagreements. Today most authors agree that process tracing is aimed at unpacking causal and temporal mechanisms. The article distinguishes two main types of use for process tracing. Some are more inductive, aimed at theory building (i.e. at uncovering and specifying causal mechanisms) while others are more deductive, aimed at theory testing (and refining). The paper summarizes the main added value and drawbacks of process tracing. It ends by providing ten guidelines for when and how to apply process tracing
- …