Archive for the ‘Additivity’ Category

Adventures in Advanced Symbolic Programming

Saturday, June 1st, 2013

Adventures in Advanced Symbolic Programming by Gerald Jay Sussman with Pavel Panchekha.


Concepts and techniques for the design and implementation of large software systems that can be adapted to uses not anticipated by the designer. Applications include compilers, computer-algebra systems, deductive systems, and some artificial intelligence applications. Means for decoupling goals from strategy. Mechanisms for implementing additive data-directed invocation. Working with partially-specified entities. Managing multiple viewpoints. Topics include combinators, generic operations, pattern matching, pattern-directed invocation, rule systems, backtracking, dependencies, indeterminacy, memoization, constraint propagation, and incremental refinement. Substantial weekly programming assignments are an integral part of the subject.

I was searching for updates on the Revised Report on the Propagator Model when I discovered this course and its readings page.

From the readings page:

Propagator Language and System

Suggestion: Don’t cheat yourself by focusing too narrowly. All of the reading material is worthwhile.

Revised Report on the Propagator Model

Sunday, October 30th, 2011

Revised Report on the Propagator Model by Alexey Radul and Gerald Jay Sussman.

After I watched Sussman’s We Really Don’t Know How To Compute!, I just had to track down more information on the propagator model!


In the past year we have made serious progress on elaborating the propagator programming model [2,3]. Things have gotten serious enough to build a system that can be used for real experiments.

The most important problem facing a programmer is the revision of an existing program to extend it for some new situation. Unfortunately, the traditional models of programming provide little support for this activity. The programmer often finds that commitments made in the existing code impede the extension, but the costs of reversing those commitments are excessive.

Such commitments tend to take the form of choices of strategy. In the design of any significant system there are many implementation plans proposed for every component at every level of detail. However, in the system that is finally delivered this diversity of plans is lost and usually only one unified plan is adopted and implemented. As in an ecological system, the loss of diversity in the traditional engineering process has serious consequences.

The Propagator Programming Model is an attempt to mitigate this problem. It is a model that supports the expression and integration of multiple viewpoints on a design. It incorporates explicit structure to support the integration of redundant pieces and subsystems that solve problems in several different ways. It will help us integrate the diversity that was inherent in the design process into the delivered operational product.

The Propagator Programming Model is built on the idea that the basic computational elements are autonomous machines interconnected by shared cells through which they communicate. Each machine continuously examines the cells it is interested in, and adds information to some based on computations it can make from information from the others. Cells accumulate information from the propagators that produce that information. The key idea here is additivity. New ways to make contributions can be added just by adding new propagators; if an approach to a problem doesn’t turn out to work well, it can be identified by its premises and ignored, dynamically and without disruption.

This work was supported in part by the MIT Mind Machine Project.

I really like the idea of additivity. I think it has long legs in a world characterized by diversity. That is to say a world outside most programming paradigms, which presume a syntax, semantics and inviolate rules, the very opposite of diversity.