Home Page of Markus Triska

Find your way—from darkness...
to light.
Knight of Cups


E-mail: triska@metalevel.at
GitHub: github.com/triska

Research interests

The central theme of my research is software reliability. How can we guarantee correctness, robustness and acceptable performance of our programs?

My goal is to provide boring software: Programs that work as intended, reliably and conveniently, with zero surprises.

I aim to provide programs that you can run for multiple decades without any issues such as crashes, memory leaks or other unexpected behaviour.



The Power of Prolog
Introduction to modern Prolog.

Peer-reviewed articles

The Boolean Constraint Solver of SWI-Prolog: System Description (pdf, bib)
Markus Triska
FLOPS 2016, LNCS 9613, pp. 45-61
Tor: Extensible Search with Hookable Disjunction (pdf)
Tom Schrijvers, Markus Triska, Bart Demoen
PPDP 2012, ACM 2012, pp. 103-114
The Finite Domain Constraint Solver of SWI-Prolog (pdf, bib)
Markus Triska
FLOPS 2012, LNCS 7294, pp. 307-316
An Effective Greedy Heuristic for the Social Golfer Problem (pdf)
Markus Triska and Nysret Musliu
Annals of Operations Research Vol. 194(1) (2012), pp. 413-425
An Improved SAT Formulation for the Social Golfer Problem (pdf)
Markus Triska and Nysret Musliu
Annals of Operations Research Vol. 194(1) (2012), pp. 427-438
SWI-Prolog (pdf)
Jan Wielemaker, Tom Schrijvers, Markus Triska, Torbjörn Lager
TPLP 12 (2012), pp. 67-96
A Constraint Programming Application for Rotating Workforce Scheduling (pdf)
Markus Triska and Nysret Musliu
IEA/AIE 2011, Studies in Computational Intelligence 363 (2011), pp. 83-88
Better Termination for Prolog with Constraints
Markus Triska, Ulrich Neumerkel, Jan Wielemaker
WLPE 2008
Constraint solving for high-level WCET analysis
Adrian Prantl, Jens Knoop, Markus Schordan, Markus Triska
WLPE 2008
A Generalised Finite Domain Constraint Solver for SWI-Prolog
Markus Triska, Ulrich Neumerkel, Jan Wielemaker
WLP 2008
Declarative language extensions for Prolog courses
Ulrich Neumerkel, Markus Triska, and Jan Wielemaker
FDPE 2008
Compiler Technology for Blue Gene Systems
Stefan Kral, Markus Triska and Christoph W. Ueberhuber
Euro-Par 2006, LNCS 4128, pp. 279-288


Solution Methods for the Social Golfer Problem (pdf)
Masters thesis, under the supervision of Priv.-Doz. Dr. Nysret Musliu
Accepted in April 2008, Technische Universität Wien
Correctness Considerations in CLP(FD) Systems (pdf, bib)
Doctoral thesis, under the supervision of Priv.-Doz. Dr. Nysret Musliu
Accepted in January 2014, Technische Universität Wien

Prolog resources

Prolog is the most popular logic programming language. You can use it to elegantly solve problems from such diverse areas as combinatorial optimisation, scheduling, natural language processing, data analysis, system verification and web hosting.

You interacted with a Prolog program when you accessed this page: It was served to you by Proloxy.

I am the current maintainer of the comp.lang.prolog Frequently Asked Questions.

Acomip A Couple of Meta-interpreters in Prolog, collection of meta-interpreters and tutorial.
Alzint Interpreter for AL(Z) (assignment language over integers), a simple Turing-complete programming language. Supports tracing and reverse execution. Written in Prolog.
Bitcoinolog Reason about Bitcoin addresses with Prolog.
CLP(B) Constraint solver over Boolean variables that ships with SWI-Prolog. You can try a show-case and download further CLP(B) sample programs and a variant based on ZDDs.
CLP(FD) Finite domain constraint solver that ships with SWI-Prolog. Using a slightly modified version of a program by Mats Carlsson, you can for example solve instances of the social golfer problem with SWI-Prolog. An example with 8 games a week in groups of 4 (32 players in total) playing for 9 weeks is sol9.txt. You can also try Sudoku and N-queens, read a short CLP(FD) primer and study a collection of CLP(FD) sample programs.
CLP(Z) Constraint logic programming over integers for SICStus Prolog.
Connect 4 Connect 4 (four in a row, plot four) game that plays against itself. Prolog.
DCG Primer Introduction to Prolog definite clause grammars (DCGs).
ediprolog Emacs does Interactive Prolog. Elisp definitions to interact with SWI Prolog in arbitrary Emacs buffers.
etrace Graphical Prolog Tracer in Emacs.
galeshapley.pl Gale-Shapley algorithm to find a stable matching, also known as stable marriage, implemented in Prolog. A Prolog program that finds all stable matchings by exhaustive search: allstable.pl
Knight's Tour Closed knight's tours on an NxN chessboard, written in Prolog. Example application of the circuit/1 constraint, describing a Hamiltonian circuit.
LetSWICrypt Walkthrough document and sample files for running HTTPS servers with SWI-Prolog.
Lisprolog Interpreter and parser for a simple Lisp, written in Prolog.
markov.pl Markov chain demonstration, written in Prolog. Train a Markov chain of arbitrary order and use it for text generation.
N-queens N-queens constraint solving visualization, written in Prolog.
plres.pl Prolog program that finds shortest resolution refutations of propositional clauses.
Presprover Presprover can determine validity and satisfiability of all formulas of Presburger arithmetic. Written in Prolog.
Proloxy HTTP reverse proxy, written in Prolog.
Prost Prolog streams (sequences, delayed/lazy/infinite lists) demonstration.
quine.pl A Prolog quine, bootstrapped from quinebs.pl. Prolog is fully reflective, allowing for a more concise quine: quinerefl.pl.
RITS Rule-based Intelligent Tutoring System. Implements a domain-specific language for guiding students through solving tasks, emulating an instructor. Try the web-based demo! Written in Prolog.
scc.pl Prolog library for computing the strongly connected components of a graph using Tarjan's algorithm.
simplex Prolog library for solving linear programming problems. Implements the simplex algorithm, and contains a streamlined version for solving transportation and assignment problems. Also contains a simplistic branch-and-bound implementation to solve mixed integer programs. A show-case is delayed column generation.
Simsttab A timetabling engine for schools. Written in Prolog.
Sudoku Sudoku constraint solving visualization, written in Prolog.
Tist Thinking in States; various show-cases (puzzle, interpreter, compiler, virtual machine), realized using declarative approaches. Examples in Prolog, Haskell and J.
trs.pl Prolog definitions for reasoning about term rewriting systems, using algorithms described in Term Rewriting and All That by Baader and Nipkow. This program implements the Knuth-Bendix completion procedure.
Wisemen Demonstrates agent reasoning using constraint handling rules (CHR). See source file for documentation.
Wumpus World An AI-classic. Contains a framework to test your own agents and a simple example agent. Written in Prolog.
Zurg A Prolog solution to a search problem called Escape from Zurg.

Emacs resources

Emacs is an extensible editor. You can use it for editing programs and also for more general interaction with the operating system such as: compiling programs, interacting with version control systems, writing e-mails and managing files. Take the Emacs tour for more information.

Importantly, you can also use Emacs itself to report issues. Suggested reading: Debugging Emacs Issues.

A useful customization when using Emacs is to remap Caps Lock to act as an additional Ctrl key.

I recommend to use Emacs with a Dvorak keyboard layout.

cdvdmacs Create data CDs and DVDs from within Emacs.
ediprolog Emacs does Interactive Prolog. Elisp definitions to interact with SWI Prolog in arbitrary Emacs buffers.
etrace Graphical Prolog Tracer in Emacs.
Freud Standalone C++ port of the Emacs Psychiatrist, simulating a Rogerian analyst using phrase-production techniques similar to the classic ELIZA demonstration of pseudo-AI.
imimacs Instant messaging in Emacs. Very simple IM system.
linum Emacs definitions for displaying line numbers to the left of buffers.
openwith.el openwith.el lets you associate external applications with files, so that you can open them from within Emacs via C-x C-f, with RET in dired, etc.
PceProlog Prolog development using GNU Emacs.
pointback Emacs definitions for restoring previous window points when switching buffers.
UnicAPL Enter and typeset APL and A+ in Emacs and LaTeX using Unicode.

PostScript resources

PostScript is a stack-oriented programming language. It is supremely useful as a page description language and supported by many printers and programs. You can extend the language with user-defined procedures and easily build environments for visualizing structured data very conveniently.

The PostScript Language Reference is one of the finest technical reference manuals due to its elegance, clarity and completeness.

Animations PostScript lets you draw portable animations of search processes and nice pictures of solutions.
Austria Scalable PostScript outline of Austria.
Temperatures Visualization of daily maximum temperatures in Vienna, using PostScript.

Other programs

Alana A Turing machine simulator with many examples (unary and binary addition, subtraction, multiplication, a 5-state busy beaver, 2 string parsing examples, divisibility test, primality test) and a theoretical introduction to Turing machines. A more formal document about this is alana.pdf.
Blinkory Memory game involving a sequence of blinking disks.
CGIForum Light-weight discussion board with expandable/collapsible threads, name registration, multiple sections, previewing, searching, and marking of new entries. Written in Perl.
Contests Material from programming contests.
Finomaton Finomaton lets you draw finite state machines (automata) and similar graphs. It outputs MetaPost code that can be transformed to PostScript and used in TeX and LaTeX documents. Written in Tcl/Tk.
goco.tcl GO considered, minimalistic front-end for GNU Go. Written in Tcl/Tk (screenshot).
Greenpoint Der grüne Punkt in METAFONT.
Hoarescope Hoarescope helps to prove partial correctness assertions of AL programs over natural numbers using Hoare logic (Hoare calculus). The resulting proof tree is exported to LaTeX. If the remaining formulas are of Presburger arithmetic, you can use Presprover to see whether they are valid. A more formal paper about this is hoarescope.pdf.
Jind An interactive interpreter for a toy programming language. You are to formulate how to get out of a rather general maze. Written in Java.
jugs.maude A water jugs puzzle expressed as a term rewriting system in Maude. A transcript of an example session: jugs.txt.
knighttour.lisp Finds a knight's tour on an 8x8 chessboard using first-fail heuristics (always choose the position which is reachable from the fewest other positions). Written in Lisp.
Magic Hexagon 3 ways to compute all magic hexagons of order 3.
misc Miscellaneous programs and code snippets, prototypes, work in progress etc.
Puzpan Puzzle game involving a panel of squares.
Spakes Snakes-Clone for up to 4 players that can be played across the Internet. Optionally, AI players (computer controlled) can join the game. Written in C++.
Swap File transfer program with resume-capability. Written in Tcl/Tk.
Tickletankle A 2-player game with fractal terrain that can be played locally or across the Internet or a LAN. You can play against a human player or a computer-controlled opponent (AI player). Written in Tcl/Tk.
Worldcup Statistical simulation of FIFA World Cup.

Other texts

Compass Compass buying tips.
compnumerik.pdf Short paper about numerical issues involved in approximating exponential and cosine functions using Taylor series. German.
fourier.pdf Short paper about Fourier series with some common example expansions. German.
Logic Some proofs and solved exercises.

A joke.

A music tip.


Faith to the End