Results 1  10
of
12
A Step Towards the Mechanization of Partial Functions: Domains as Inductive Predicates
, 1998
"... . This work is centred on the specification of partial operations in a system based on a classical logic with total functions. We present a style with preconditions: our method enables calculation of the domain of a partial function f independently of calculation of f. We also study the influen ..."
Abstract

Cited by 11 (1 self)
 Add to MetaCart
. This work is centred on the specification of partial operations in a system based on a classical logic with total functions. We present a style with preconditions: our method enables calculation of the domain of a partial function f independently of calculation of f. We also study the influence of this style upon the proof facility and the later use of the specification. 1 Introduction In this paper we are in the context of a logic which does not incorporate the notion of partiality and where any function is total. This choice is justified by the power of the underlying logic and by the expressive power of the associated languages. In this context, various tricks are used to encode the partiality. In a typed world, a total function of type ! 0 is defined for every value of type . Thus we have to encode a partial function whose arguments and result are respectively of type 1 and 2 into a total function of type ! 0 . Usually 1 and are identical but 2 and 0 are...
Treating partiality in a logic of total functions
 THE COMPUTER JOURNAL
, 1997
"... The need to use partial functions arises frequently in formal descriptions of computer systems. However, most proof assistants are based on logics of total functions. One way to address this mismatch is to invent and mechanize a new logic. Another is to develop practical workarounds in existing sett ..."
Abstract

Cited by 10 (0 self)
 Add to MetaCart
The need to use partial functions arises frequently in formal descriptions of computer systems. However, most proof assistants are based on logics of total functions. One way to address this mismatch is to invent and mechanize a new logic. Another is to develop practical workarounds in existing settings. In this paper we take the latter course: we survey and compare methods used to support partiality in a mechanization of a higher order logic featuring only total functions. The techniques we discuss are generally applicable and are illustrated by relatively large examples.
Another Look at Nested Recursion
"... Functions specified by nested recursions are difficult to define and reason about. We present several ameliorative techniques that use deduction in a classical higherorder logic. First, we discuss how an apparent circular dependency between the proof of nested termination conditions and the defin ..."
Abstract

Cited by 7 (0 self)
 Add to MetaCart
Functions specified by nested recursions are difficult to define and reason about. We present several ameliorative techniques that use deduction in a classical higherorder logic. First, we discuss how an apparent circular dependency between the proof of nested termination conditions and the definition of the specified function can be avoided. Second, we propose a method that allows the specified function to be defined in the absence of a termination relation. Finally, we show how our techniques extend to nested program schemes, where a termination relation cannot be found until schematic parameters have been filled in. In each of these techniques, suitable induction theorems are automatically derived.
Induction Proofs with Partial Functions
 Journal of Automated Reasoning
, 1998
"... In this paper we present a method for automated induction proofs about partial functions. We show that most wellknown techniques developed for (explicit) induction theorem proving are unsound when dealing with partial functions. But surprisingly, by slightly restricting the application of these te ..."
Abstract

Cited by 5 (4 self)
 Add to MetaCart
(Show Context)
In this paper we present a method for automated induction proofs about partial functions. We show that most wellknown techniques developed for (explicit) induction theorem proving are unsound when dealing with partial functions. But surprisingly, by slightly restricting the application of these techniques, it is possible to develop a calculus for automated induction proofs with partial functions. In particular, under certain conditions one may even generate induction schemes from the recursions of nonterminating algorithms. The need for such induction schemes and the power of our calculus have been demonstrated on a large collection of nontrivial theorems (including Knuth and Bendix' critical pair lemma). In this way, existing induction theorem provers can be directly extended to partial functions without major changes of their logical framework.
Recursive functions with higher order domains
 Typed Lambda Calculi and Applications., volume 3461 of LNCS
, 2005
"... Abstract. In a series of articles, we developed a method to translate general recursive functions written in a functional programming style into constructive type theory. Three problems remained: the method could not properly deal with functions taking functional arguments, the translation of terms ..."
Abstract

Cited by 4 (1 self)
 Add to MetaCart
(Show Context)
Abstract. In a series of articles, we developed a method to translate general recursive functions written in a functional programming style into constructive type theory. Three problems remained: the method could not properly deal with functions taking functional arguments, the translation of terms containing λabstractions was too strict, and partial application of general recursive functions was not allowed. Here, we show how the three problems can be solved by defining a type of partial functions between given types. Every function, including arguments to higher order functions, λabstractions and partially applied functions, is then translated as a pair consisting of a domain predicate and a function dependent on the predicate. Higher order functions are assigned domain predicates that inherit termination conditions from their functional arguments. The translation of a λabstraction does not need to be total anymore, but generates a local termination condition. The domain predicate of a partially applied function is defined by fixing the given arguments in the domain of the original function. As in our previous articles, simultaneous inductionrecursion is required to deal with nested recursive functions. Since by using our method the inductive definition of the domain predicate can refer globally to the domain predicate itself, here we need to work on an impredicative type theory for the method to apply to all functions. However, in most practical cases the method can be adapted to work on a predicative type theory with type universes. 1
Verification of Functional Programs Containing Nested Recursion
"... Abstract. We present an environment for proving partial correctness of recursive functional programs which contain nested recursive calls. As usual, correctness is transformed into a set of firstorder predicate logic formulae—verification conditions. As a distinctive feature of our method, these fo ..."
Abstract

Cited by 1 (1 self)
 Add to MetaCart
(Show Context)
Abstract. We present an environment for proving partial correctness of recursive functional programs which contain nested recursive calls. As usual, correctness is transformed into a set of firstorder predicate logic formulae—verification conditions. As a distinctive feature of our method, these formulae are not only sufficient, but also necessary for the correctness. We demonstrate our method on the McCarthy 91 function, which is considered a “challenge problem ” for automated program verification. 1
Verification of Mutual Recursive Functional Programs
"... We present an environment for proving total correctness of mutual recursive functional programs. As usual, correctness is transformed into a set of firstorder predicate logic formulae—verification conditions. As a distinctive feature of our method, these formulae are not only sufficient, but also n ..."
Abstract
 Add to MetaCart
(Show Context)
We present an environment for proving total correctness of mutual recursive functional programs. As usual, correctness is transformed into a set of firstorder predicate logic formulae—verification conditions. As a distinctive feature of our method, these formulae are not only sufficient, but also necessary for the correctness. A specialized strategy for proving termination is developed. The detailed termination proofs may in many cases be avoided due to their reusability. 1
Doktors der Naturwissenschaften (Dr. rer. nat.) genehmigten Dissertation.
"... Abstract This thesis addresses two basic problems with the current crop of mechanized proof systems. The first problem is largely technical: the act of soundly introducing a recursive definition is not as simple and direct as it should be. The second problem is largely social: there is very little c ..."
Abstract
 Add to MetaCart
(Show Context)
Abstract This thesis addresses two basic problems with the current crop of mechanized proof systems. The first problem is largely technical: the act of soundly introducing a recursive definition is not as simple and direct as it should be. The second problem is largely social: there is very little codesharing between theorem prover implementations; as a result, common facilities are typically built anew in each proof system, and the overall progress of the field is thereby hampered. We use the application domain of functional programming to explore the first problem. We build a patternmatching style recursive function definition facility, based on mechanically proven wellfounded recursion and induction theorems. Reasoning support is embodied by automatically derived induction theorems, which are customised to the recursion structure of definitions. This provides a powerful, guaranteed sound, definitionandreasoning facility for functions that strongly resemble programs in languages such as ML or Haskell. We demonstrate this package (called TFL) on several wellknown challenge problems. In spite of its power, the approach suffers from a low level of automation, because a termination relation must be supplied at function definition time. If humans are to be largely relieved of the task of proving termination, it must be possible for the act of defining a recursive function to be completely separate from the act of finding a termination relation for it and proving the ensuing termination conditions. We show how this separation can be achieved, while still preserving soundness. Building on this, we present a new way to define program schemes and prove highlevel program transformations.
doi:10.1017/S0960129505004822 Printed in the United Kingdom Modelling general recursion in type theory
, 2003
"... Constructive type theory is an expressive programming language in which both algorithms and proofs can be represented. A limitation of constructive type theory as a programming language is that only terminating programs can be defined in it. Hence, general recursive algorithms have no direct formali ..."
Abstract
 Add to MetaCart
Constructive type theory is an expressive programming language in which both algorithms and proofs can be represented. A limitation of constructive type theory as a programming language is that only terminating programs can be defined in it. Hence, general recursive algorithms have no direct formalisation in type theory since they contain recursive calls that satisfy no syntactic condition guaranteeing termination. In this work, we present a method to formalise general recursive algorithms in type theory. Given a general recursive algorithm, our method is to define an inductive specialpurpose accessibility predicate that characterises the inputs on which the algorithm terminates. The typetheoretic version of the algorithm is then defined by structural recursion on the proof that the input values satisfy this predicate. The method separates the computational and logical parts of the definitions and thus the resulting typetheoretic algorithms are clear, compact and easy to understand. They are as simple as their equivalents in a functional programming language, where there is no restriction on recursive calls. Here, we give a formal definition of the method and discuss its power and its limitations. 1.
unknown title
, 2005
"... Reasoning about partial functions in the formal development of programs ..."
(Show Context)