Home Page of Markus Triska

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


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

If you have unexpectedly not received a reply to an e-mail you sent me, please check your spam folder, use a different e-mail provider, or contact me by other means. For instance, judging from past experiences, if you are using an e-mail address that ends with "@gmail.com", all mails I send will likely not be delivered to you, and I may get an automated response such as undelivered.txt, or no error at all. There are several potential reasons why an e-mail I sent you may not have reached you. For example, the company that hosts your account may delete them behind your back. A good way to solve this issue is for both of us to use e-mail accounts of providers who adhere to open standards, and who are not tempted to succumb to anti-competitive practices. What is the primary revenue stream of your e-mail provider?

To send e-mails, I use Gnus. It is free software and adheres to all relevant standards.

You can also post your questions to the #scryer IRC channel on irc.libera.chat. IRC is an open standard, and you can use various clients to access the channel. In Emacs, you can connect with M-x erc RET. A web interface is also available.

For encrypted communication, I use Signal. If you have an account and send me your number, I will contact you on that platform.

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 programs that work as intended, reliably and conveniently, with zero surprises. Programs that you can run for multiple decades without any issues such as crashes, resource leaks or other unexpected behaviour.

I am interested in programming languages, combinatorial optimization, testing, verification, cryptography and many other areas of computer science.



The Power of Prolog
Introduction to modern Prolog.
always work in progress

Peer-reviewed articles

Grants4Companies: Applying Declarative Methods for Recommending and Reasoning About Business Grants in the Austrian Public Administration (System Description) (arXiv)
Björn Lellmann, Philipp Marek, Markus Triska
FLOPS 2024, LNCS 14659, pp. 151-164
Boolean constraints in SWI-Prolog: A comprehensive system description (pdf, bib)
Markus Triska
Science of Computer Programming, Volume 164, pp. 98-115
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(ℤ) (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.
CLP(ℤ) Constraint logic programming over integers. Using a slightly modified version of a program by Mats Carlsson, you can for example solve instances of the social golfer problem with Scryer 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 read a short introduction.
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).
Enscryerypt Encrypt and decrypt files with Scryer Prolog, using state-of-the-art cryptographic algorithms.
ediprolog Emacs does Interactive Prolog. Elisp definitions to interact with Scryer 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. Tested with Scryer 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 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.

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 Scryer Prolog in arbitrary Emacs buffers.
ei Tips for finding and reporting Emacs Issues by constructing systematic test cases.
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. Written in Tcl/Tk.
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.

Why the answer to prayer is delayed


Faith to the End