Results 1 
7 of
7
Beating the Productivity Checker Using Embedded Languages
"... Abstract. Some total languages, like Agda and Coq, allow the use of guarded corecursion to construct infinite values and proofs. Guarded corecursion is a form of recursion in which arbitrary recursive calls are allowed, as long as they are guarded by a coinductive constructor. Guardedness ensures th ..."
Abstract

Cited by 10 (3 self)
 Add to MetaCart
Abstract. Some total languages, like Agda and Coq, allow the use of guarded corecursion to construct infinite values and proofs. Guarded corecursion is a form of recursion in which arbitrary recursive calls are allowed, as long as they are guarded by a coinductive constructor. Guardedness ensures that programs are productive, i.e. that every finite prefix of an infinite value can be computed in finite time. However, many productive programs are not guarded, and it can be nontrivial to put them in guarded form. This paper gives a method for turning a productive program into a guarded program. The method amounts to defining a problemspecific language as a data type, writing the program in the problemspecific language, and writing a guarded interpreter for this language. 1
Recursive definitions of monadic functions
 In Proc. of PAR 2010
, 2010
"... Using standard domaintheoretic fixedpoints, we present an approach for defining recursive functions that are formulated in monadic style. The method works both in the simple option monad and the stateexception monad of Isabelle/HOL’s imperative programming extension, which results in a convenient ..."
Abstract

Cited by 7 (0 self)
 Add to MetaCart
(Show Context)
Using standard domaintheoretic fixedpoints, we present an approach for defining recursive functions that are formulated in monadic style. The method works both in the simple option monad and the stateexception monad of Isabelle/HOL’s imperative programming extension, which results in a convenient definition principle for imperative programs, which were previously hard to define. For such monadic functions, the recursion equation can always be derived without preconditions, even if the function is partial. The construction is easy to automate, and convenient induction principles can be derived automatically. 1
Mixing Induction and Coinduction
, 2009
"... Purely inductive definitions give rise to treeshaped values where all branches have finite depth, and purely coinductive definitions give rise to values where all branches are potentially infinite. If this is too restrictive, then an alternative is to use mixed induction and coinduction. This techn ..."
Abstract

Cited by 3 (0 self)
 Add to MetaCart
Purely inductive definitions give rise to treeshaped values where all branches have finite depth, and purely coinductive definitions give rise to values where all branches are potentially infinite. If this is too restrictive, then an alternative is to use mixed induction and coinduction. This technique appears to be fairly unknown. The aim of this paper is to make the technique more widely known, and to present several new applications of it, including a parser combinator library which guarantees termination of parsing, and a method for combining coinductively defined inference systems with rules like transitivity. The developments presented in the paper have been formalised and checked in Agda, a dependently typed programming language and proof assistant.
Stop when you are AlmostFull Adventures in constructive termination
"... Disjunctive wellfoundedness (used in Terminator), sizechange termination, and wellquasiorders (used in supercompilation and termrewrite systems) are examples of techniques that have been successfully applied to automatic proofs of program termination and online termination testing, respectively ..."
Abstract

Cited by 2 (0 self)
 Add to MetaCart
(Show Context)
Disjunctive wellfoundedness (used in Terminator), sizechange termination, and wellquasiorders (used in supercompilation and termrewrite systems) are examples of techniques that have been successfully applied to automatic proofs of program termination and online termination testing, respectively. Although these works originate in different communities, there is an intimate connection between them – they rely on closely related principles and both employ similar arguments from Ramsey theory. At the same time there is a notable absence of these techniques in programming systems based on constructive type theory. In this paper we’d like to highlight the aforementioned connection and make the core ideas widely accessible to theoreticians and Coq programmers, by offering a Coq development which culminates in some novel tools for performing induction. The benefit is nice composability properties of termination arguments at the cost of intuitive and lightweight user obligations. Inevitably, we have to present some Ramseylike arguments: Though similar proofs are typically classical, we offer an entirely constructive development standing on the shoulders of Veldman and Bezem, and Richman and Stolzenberg. 1.
Acknowledgments
"... The most thanks for this thesis go to Stephanie Weirich, who has been a fantastic research advisor and mentor. Stephanie always has time for her students—whenever I ran into technical difficulties she seemed genuinely happy to drop everything else to work together on the whiteboard (where her skills ..."
Abstract
 Add to MetaCart
(Show Context)
The most thanks for this thesis go to Stephanie Weirich, who has been a fantastic research advisor and mentor. Stephanie always has time for her students—whenever I ran into technical difficulties she seemed genuinely happy to drop everything else to work together on the whiteboard (where her skills are very impressive). Her enthusiasm is contagious, and I always leave her office happy and full of energy. All in all I could not wish for a better phd advisor. The work described in this thesis came out of the Trellys project, and I benefitted very much from cooperation with the rest of the Trellys team. Their contributions are described in more detail in Section 1.2. Here I would like to particularly thank two of them. Chris Casinghino was my closest collaborator at Penn. Both our research (on two different parts of the same programming language) was improved by having someone to bounce ideas with. Aaron Stump was a constant source of new ideas and insights. I would also like to thank him for inviting me to spend a very enjoyable summer visiting the University of Iowa. The University of Pennsylvania is a great place to be a programming languages student. The Penn PL Club is a vibrant and tightlyknit place, the faculty (Benjamin Pierce and Steve Zdancewic) are very helpful to everyone in the group, and the students and postdocs always have interesting research projects to talk about. Special thanks to the plclub people who I shared my office with over the years—it was lots of fun chatting with you all the time! When typesetting this document, two very helpful tools were Ott by Sewell et al. [115], and pulp by Daniel Wagner.1
Partial Functions in Operational Type Theory (DRAFT)
"... An Operational Type Theory (OPTT) is developed based on a theory of operational joinability of untyped terms. The theory accomodates functions which might diverge or abort on some inputs. To preserve logical soundness, OPTT distinguishes proofs from programs, and formulas from types. OPTT incorporat ..."
Abstract
 Add to MetaCart
(Show Context)
An Operational Type Theory (OPTT) is developed based on a theory of operational joinability of untyped terms. The theory accomodates functions which might diverge or abort on some inputs. To preserve logical soundness, OPTT distinguishes proofs from programs, and formulas from types. OPTT incorporates proof irrelevance, thus facilitating the combination of internal and external verification. 1