9 research outputs found
Taylor subsumes Scott, Berry, Kahn and Plotkin
The speculative ambition of replacing the old theory of program approximation based on syntactic continuity with the theory of resource consumption based on Taylor expansion and originating from the differential γ-calculus is nowadays at hand. Using this resource sensitive theory, we provide simple proofs of important results in γ-calculus that are usually demonstrated by exploiting Scott's continuity, Berry's stability or Kahn and Plotkin's sequentiality theory. A paradigmatic example is given by the Perpendicular Lines Lemma for the Böhm tree semantics, which is proved here simply by induction, but relying on the main properties of resource approximants: strong normalization, confluence and linearity
Weak orthogonality implies confluence: the higher-order case
In this paper we prove confluence for weakly orthogonal Higher-Order Rewriting Systems. This generalises all the known `confluence by orthogonality' results
Normal Form Bisimulations By Value
Normal form bisimilarities are a natural form of program equivalence resting
on open terms, first introduced by Sangiorgi in call-by-name. The literature
contains a normal form bisimilarity for Plotkin's call-by-value
-calculus, Lassen's \emph{enf bisimilarity}, which validates all of
Moggi's monadic laws and can be extended to validate . It does not
validate, however, other relevant principles, such as the identification of
meaningless terms -- validated instead by Sangiorgi's bisimilarity -- or the
commutation of \letexps. These shortcomings are due to issues with open terms
of Plotkin's calculus. We introduce a new call-by-value normal form
bisimilarity, deemed \emph{net bisimilarity}, closer in spirit to Sangiorgi's
and satisfying the additional principles. We develop it on top of an existing
formalism designed for dealing with open terms in call-by-value. It turns out
that enf and net bisimilarities are \emph{incomparable}, as net bisimilarity
does not validate Moggi's laws nor . Moreover, there is no easy way to
merge them. To better understand the situation, we provide an analysis of the
rich range of possible call-by-value normal form bisimilarities, relating them
to Ehrhard's relational model.Comment: Rewritten version (deleted toy similarity and explained proof method
on naive similarity) -- Submitted to POPL2
Weak orthogonality implies confluence : the higher-order case
In this paper we prove confluence for weakly orthogonal Higher-Order Rewriting Systems. This generalises all the known `confluence by orthogonality' results
Compiling With Classical Connectives
The study of polarity in computation has revealed that an "ideal" programming
language combines both call-by-value and call-by-name evaluation; the two
calling conventions are each ideal for half the types in a programming
language. But this binary choice leaves out call-by-need which is used in
practice to implement lazy-by-default languages like Haskell. We show how the
notion of polarity can be extended beyond the value/name dichotomy to include
call-by-need by adding a mechanism for sharing which is enough to compile a
Haskell-like functional language with user-defined types. The key to capturing
sharing in this mixed-evaluation setting is to generalize the usual notion of
polarity "shifts:" rather than just two shifts (between positive and negative)
we have a family of four dual shifts.
We expand on this idea of logical duality -- "and" is dual to "or;" proof is
dual to refutation -- for the purpose of compiling a variety of types. Based on
a general notion of data and codata, we show how classical connectives can be
used to encode a wide range of built-in and user-defined types. In contrast
with an intuitionistic logic corresponding to pure functional programming,
these classical connectives bring more of the pleasant symmetries of classical
logic to the computationally-relevant, constructive setting. In particular, an
involutive pair of negations bridges the gulf between the wide-spread notions
of parametric polymorphism and abstract data types in programming languages. To
complete the study of duality in compilation, we also consider the dual to
call-by-need evaluation, which shares the computation within the control flow
of a program instead of computation within the information flow
Compiling With Classical Connectives
The study of polarity in computation has revealed that an "ideal" programming
language combines both call-by-value and call-by-name evaluation; the two
calling conventions are each ideal for half the types in a programming
language. But this binary choice leaves out call-by-need which is used in
practice to implement lazy-by-default languages like Haskell. We show how the
notion of polarity can be extended beyond the value/name dichotomy to include
call-by-need by adding a mechanism for sharing which is enough to compile a
Haskell-like functional language with user-defined types. The key to capturing
sharing in this mixed-evaluation setting is to generalize the usual notion of
polarity "shifts:" rather than just two shifts (between positive and negative)
we have a family of four dual shifts.
We expand on this idea of logical duality---"and" is dual to "or;" proof is
dual to refutation---for the purpose of compiling a variety of types. Based on
a general notion of data and codata, we show how classical connectives can be
used to encode a wide range of built-in and user-defined types. In contrast
with an intuitionistic logic corresponding to pure functional programming,
these classical connectives bring more of the pleasant symmetries of classical
logic to the computationally-relevant, constructive setting. In particular, an
involutive pair of negations bridges the gulf between the wide-spread notions
of parametric polymorphism and abstract data types in programming languages. To
complete the study of duality in compilation, we also consider the dual to
call-by-need evaluation, which shares the computation within the control flow
of a program instead of computation within the information flow