2 research outputs found
Tabling, Rational Terms, and Coinduction Finally Together!
To appear in Theory and Practice of Logic Programming (TPLP). Tabling is a
commonly used technique in logic programming for avoiding cyclic behavior of
logic programs and enabling more declarative program definitions. Furthermore,
tabling often improves computational performance. Rational term are terms with
one or more infinite sub-terms but with a finite representation. Rational terms
can be generated in Prolog by omitting the occurs check when unifying two
terms. Applications of rational terms include definite clause grammars,
constraint handling systems, and coinduction. In this paper, we report our
extension of YAP's Prolog tabling mechanism to support rational terms. We
describe the internal representation of rational terms within the table space
and prove its correctness. We then use this extension to implement a tabling
based approach to coinduction. We compare our approach with current coinductive
transformations and describe the implementation. In addition, we present an
algorithm that ensures a canonical representation for rational terms.Comment: To appear in Theory and Practice of Logic Programming (TPLP
Coinduction Plain and Simple
Coinduction refers to both a technique for the definition of infinite
streams, so-called codata, and a technique for proving the equality of
coinductively specified codata. This article first reviews coinduction in
declarative programming. Second, it reviews and slightly extends the formalism
commonly used for specifying codata. Third, it generalizes the coinduction
proof principle, which has been originally specified for the equality predicate
only, to other predicates. This generalization makes the coinduction proof
principle more intuitive and stresses its closeness with structural induction.
The article finally suggests in its conclusion extensions of functional and
logic programming with limited and decidable forms of the generalized
coinduction proof principle