We describe the portable and efficient implementation of coinductive logic programming found in Logtalk, discussing its features and limitations. As Logtalk uses as a back-end compiler a compatible Prolog system, we also discuss the status of key Prolog features for an efficient and usable implementation of coinduction.
Prolog affords concise, elegant, and clean solutions for many interesting problems, but is not immune to the software engineering challenges of large-scale application development. Code modularization, using modules or objects, is a key feature to keep projects manageable. Since most literature, instruction, and practice focus exclusively on object-oriented languages derived from imperative languages, objects are perceived as alien to logic programming while modules are considered a natural fit. Logtalk is an object-oriented logic programming language that can use most Prolog implementations as a back-end compiler. Logtalk objects are about code encapsulation and reuse, providing an alternative to Prolog module systems, and enabling natural solutions for a wide range of problems that would be awkward to solve using modules. This talk presents the Logtalk design goals, followed by a tutorial on Logtalk programming and some application examples. The talk ends with a discussion on the problems and benefits of developing Logtalk as a portable Prolog application.
Abstract-Scalability has been studied in several areas of Computer Science and scalability testing and evaluation of contemporary software systems is an active topic. However, most of the times, these activities are still performed in a predominantly ad hoc fashion. There are a few tools to automate this process, but they present several restrictions about what systems can be tested and how to evaluate scalability. In this paper, we introduce a flexible and extensible framework for automated scalability testing of software offered as a service and propose to evaluate the scalability using hypothesis tests. Additionally, we argue that, instead of stating if a system is scalable or not, we should find out how it could scale better.
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
scite is a Brooklyn-based organization that helps researchers better discover and understand research articles through Smart Citations–citations that display the context of the citation and describe whether the article provides supporting or contrasting evidence. scite is used by students and researchers from around the world and is funded in part by the National Science Foundation and the National Institute on Drug Abuse of the National Institutes of Health.