Note: This schedule is preliminary and subject to change!
Tuesday, May 26
9:30 Opening
9:40 Invited talk: Gabriele Keller
Accelerate – past, present and future
Accelerate, a purely functional embedded parallel array language was designed to give Haskell programmers an easy, high-level way to exploit parallel hardware. It has been around for many years, and it has seen significant changes, some on the user level, but mostly in its implementation behind the scene.
This talk briefly introduces the language, and the concept of functional parallel array languages in general. It also explores upcoming changes now available in an experimental release - that rethink fusion, scheduling, and code generation.
Fusion optimizations typically focus on merging producer-consumer pairs to reduce intermediate structures and memory accesses. However, many approaches struggle with multiple inputs and often fail to fuse computations whose combination would be producing multiple outputs, therefor missing optimizations opportunities. Accelerate’s new strategy can deal with this situation. Yet, more powerful fusion strategies complicate finding optimal solutions, as this is an NP-complete problem, so this poses additional challenges.
The new scheduling strategy, which we present, enables mixing data and task parallelism while preserving loop parallelism. In this respect, it is unlike most approaches that convert all parallelism to tasks. Preserving data-parallelism avoids task-parallel overhead and supports selfscheduling for loops, o!ering full flexibility: thread counts and distribution need not be fixed before execution.
Finally, a new backend-aware intermediate language enables architecturedependent optimizations. Together, these innovations promise to improve performance, and broaden Accelerate’s applicability to modern hardware.
11:00-12:00 Talks: Functional Programming
Miyazawa, O., Nishizaki, S.: Matrix Coeffect: A Coeffect Calculus for Handling Interdependent Information
Coeffects capture requirements that the environment imposes on programs. Petricek’s structural coeffect calculus extends the simply typed lambda calculus with a type-and-coeffect system. In this framework, requirements such as variable reuse counts and the number of past values needed in dataflow languages are represented by scalars drawn from algebraic structures that relax some semiring axioms (coeffect algebras). However, existing scalar- and vector-based coeffect domains combine annotations componentwise and therefore do not naturally capture constraints between interacting contextual quantities, such as travel times between airports and departure times at airports. To address this limitation, we introduce Matrix Coeffect Algebra, a matrixvalued coeffect domain whose composition propagates requirements across contextual components, enabling constraints between interdependent quantities. We embed Matrix Coeffect Algebra into Petricek’s structural coeffect calculus and prove its type safety via his translational semantics. A flight-timetable case study demonstrates that matrix-based coeffects enable dependency-aware static checking in a coeffect type system. Our technical contribution is a new matrix-valued coeffect algebra, used as an instantiation of Petricek’s structural (schematic) coeffect calculus.Cabo, Q., Scholz, S.: Finding Programming Faults Even When Large Parts of the Code have Disappeared
This paper proposes a debugging technique for functional programming languages that enables debugging of highly optimised code even if the code that actually is executed is very different from its original specification. We suggest a combination of virtual shadow stacks, uniqueness types, as well as pre- and post conditions for functions. Using this combination, we can trace bugs through function calls that may no longer exist at runtime at all. We describe how this approach is realised in the functional array language SaC and we demonstrate how we can enrich virtual stack traces with partial argument information such as array dimensionality or shape.Arntzenius, M., Willsey, M.: Finite Functional Programming or, LAMBDA: the Ultimate Predicate
We unify functional and logic programming by treating predicates as functions equipped with their support: the set of inputs whose output is nonzero. Datalog, for instance, is a language of finitely supported boolean functions. Finite support allows representing functions as input-output tables. Generalizing from boolean functions to other pointed sets neatly handles aggregation and weighted logic programming. We refer to the combination of finitely supported functions, represented as data, with higher order functions, represented as code, as finite functional programming. We give a simple type system to check finite support, using graded effects to check variable grounding and relevance types to model pointed sets.12:30-14:00 Lunch
14:00-15:00 Talks: Logic Programming
Li, F., Gupta, G.: Computing Supported Models via Transformation to Stable Models
Supported models offer a semantics for logic programs that relaxes the minimality constraint of stable models while maintaining logical consistency through a support condition. Despite their theoretical significance since 1988, supported models lack practical computational tools integrated with modern Answer Set Programming (ASP) infrastructure. We present a transformation-based method that enables computation of supported models using standard stable model solvers. Our approach transforms any ground logic program into an equivalent program whose stable models correspond exactly to the supported models of the original program. We implement this transformation as a preprocessor for Clingo and demonstrate applications in software verification, medical diagnosis, and planning where supported models enable valuable exploratory reasoning beyond stable models.Bohrer, R.: Demonic Dynamic Logic Programming **(Distinguished Paper)**
This paper introduces a logic programming language called Demonic Dynamic Logic Programming. It is based on the ground, Demonic fragment of propositional dynamic logic, a well-studied program logic. Syntax, operational semantics and proof-theoretic semantics are presented. The theoretical foundations are validated by proving theorems such as soundness and existence of uniform proofs. Applications to twoplayer mathematical games are discussed and a pursuit-evasion game on a graph is presented as a concrete example. By bringing program logic and logic programming together, we hope to improve reasoning about imperative programs within logic programs. Future work is discussed, including extensions to game logic which hold the potential to generate winning strategies of games.15:20-16:20 Talks: Logic Programming
Zhou, N., Jiang, C., Bierlee, H., Stuckey, P.: Dynamic Programming and Tabled Logic Programming for Encoding Single-Constant Multiplication into SAT (Declarative Pearl) **Distinguished Paper**
Encoding single-constant multiplication (SCM) constraints into SAT is essential for solving a wide range of combinatorial problems involving integer arithmetic. Although optimal SAT encodings for SCM are known, they are often prohibitively expensive to generate for large constants. This paper introduces a dynamic programming (DP) approach that offers a practical balance between encoding quality and encoding time. The proposed method recursively decomposes the binary representation of the target constant into chunks and eliminates common subexpressions across the chunks and their one’s complements. The objective is either to minimize the number of additions (the min-k objective) or to minimize the number of half/full adders (the min-a objective). The DP algorithm is naturally expressed and efficiently implemented using mode-directed tabling in Picat. Although the approach does not guarantee optimality, experimental results show that it produces high-quality encodings while substantially reducing encoding time. This makes SAT-based techniques considerably more practical for applications involving SCM constraints. The full implementation is publicly available at:https://github.com/nfzhou/Picat/blob/master/scm.pi.
Maieli, R., Acclavio, M.: Probabilistic Linear Logic Programming with an application to Bayesian Networks computations
Bayesian networks are a canonical formalism for representing probabilistic dependencies, yet their integration within logic programming frameworks remains a nontrivial challenge, mainly due to the complex structure of these networks. In this paper, we propose probLO (probabilistic Linear Objects) an extension of Andreoli and Pareschi’s LO language which embeds Bayesian network representation and computation within the framework of multiplicative additive linear logic programming. The key novelty is the use of multi-head Prolog-like methods to reconstruct network structures, which are not necessarily trees, and the operation of slicing, standard in the literature of linear logic, enabling internal numerical probability computations without relying on external semantic interpretation.16:40-18:00 Student Research Competition and Posters
Wednesday, May 27
9:30 Invited talk: Kazunori Ueda
Hierarchical Port Hypergraphs: Two Decades Toward a Unifying Structure for Declarative Languages
Declarative languages take diverse forms with respect to data structures and control structures. They encompass a broad range of notions and paradigms, ranging from higher-order terms with binders to concurrent processes with various forms of communication.
A natural but challenging question is whether many, if not all, of these frameworks can be unified within a simple yet expressive formalism, rather than merely combined into a larger formalism. Graphs and graph rewriting provide a promising framework, since higher-order terms can be represented as tree structures augmented with edges encoding binding structures, while networks of processes can be represented as graph nodes and edges representing processes and their interconnection, respectively.
This perspective motivated us to design and implement LMNtal, a graph rewriting language for modeling and programming. LMNtal was conceived as an attempt to unify constraint-based concurrency (a.k.a. concurrent constraint programming) and Constraint Handling Rules [1], two extensions of concurrent logic programming, within a simple setting consisting of relations and zero-assignment logical variables that connect relations (i.e., without function/constant symbols). This ‘degeneration’ naturally allows computation to be interpreted in terms of graphs and graph rewriting. Here, graphs are more accurately described as port graphs (when each variable connects exactly two ports of graph nodes) or port hypergraphs (when each variable may connect more than two ports), to distinguish them from ordinary graphs in graph theory.
Programming languages for graphs remain largely under-explored, presumably because graphs have poor affinity with standard PL-style inductive definitions. LMNtal addresses this issue by allowing graphs to be represented as terms modulo structural congruence, which serves as a PL counterpart of graph isomorphism.