December 2001, 53pp.
Polyanna is a program for finding the polymorphisms of a given set of finite relations over a finite domain. Other programs have been written in the past to solve this problem, but all have run prohibitively slowly. Polyanna is the first program to fully exploit the symmetry inherent in this problem, and as a result, can run exponentially faster than its rivals.
This manual details the working of Polyanna at several levels of abstraction. We begin by describing the program from a user's point of view, and then give a detailed account of Polyanna's internals, which will be of interest to those who wish to modify or extend the program. We conclude with a high-level discussion of some of the algorithms used in Polyanna.