Welcome to the official Funk2 Website!

Funk2 is a free, open, programming language designed for causal reflective tracing and monitoring of complex control systems. This project is developed by the Reflective Commonsense Thinking group at the MIT Media Lab. The Funk2 project is currently supported as a core research effort of the Mind Machine Project.

Call for Collaboration to Build Artificial Intelligence

All programs fail, so let us embrace this failure and write systems that react to failure through reflection:

“Reflection is the business of man; a sense of his state is his first duty: but who remembereth himself in joy? Is it not in mercy then that sorrow is allotted unto us?”—William Shakespeare

Human intelligence is a complicated control system for accomplishing complicated goals. Building artificial intelligence is a massive software engineering project that requires new ways for large teams of engineers to work together. Funk2 is meant as a collaboration platform that provides reflective tracing of resposibility for bugs in distributed interactive software systems.

Causal tracing of Funk completion events

The funk object is as universal to Funk2 as the lambda object is to Lisp or Python. Causally tracing funk execution and completion events allows us a powerful and intricate reflective tool. These numerous and intricate events are compiled into graphs and other representations for both debugging as well as planning in order to avoid software failures. Declarative and goal-oriented software systems that are not reflectively controlled are notoriously difficult to control and often attempt to solve problems by diving into an under constrained search. Building pattern recognition that deals not only with the problem space but with the mental space of the solver itself is necessary for learning to solve more difficult control problems.

Funk2 remote interface to IsisWorld

IsisWorld is another core research effort supported by the Mind Machine Project that we are using to collaborate in developing reflective social commonsense reasoning cognitive models of humans. Agents in IsisWorld are controlled through an XML-RPC interface. The most recent IsisWorld interface in now included in the default distribution of Funk2 in order that AI researchers around the world can contribute to this large open software development and research project.

XML-RPC client library built on fast xmlrpc-c library

Funk2 is written in pure C, which makes incorporating the fastest libraries easy. Xmlrpc-c is a lightweight implementation of this very abstract remote procedure call (RPC) protocol. The XML-RPC protocol is an XML representation communicated through HTTP and is supported by all popular languages. Python dictionaries, Java hashtables, and other hierarchical named complex data types from other languages can be easily communicated to and from Funk2's frame-based and directed-graph object representations. Also, for data-intensive algorithms, the XML-RPC protocol supports the efficient communication of large amounts of raw binary data between correctly implemented versions of the protocol.

Simple node and edge variable graph matching library completed

Procedural traces in Funk2 are labeled directed graphs. These graphs are very large and difficult to visualize because of their size and complexity. We are developing algorithms for simplifying the process of finding and recognizing critical patterns in these reflective traces. Often, large and subtle but exact patterns must be found in order to correctly assign credit for a failure in a learning situation. We have developed a fast labeled directed graph representation in Funk2. See our graph matching example for a demonstration of a simple variable graph matching algorithm.

Compiles on Windows XP under CygWin

A port of Funk2 has been made to the CygWin platform, which now enables Microsoft Windows users to join the Funk2 distributed programming effort! We have not completed a binary distribution package for the Windows operating system yet, but developers should have few problems compiling and installing Funk2 from source. Please see the Funk2 download page in order to download the latest source package.

MacOS X Binaries available for 10.5 and 10.6

Binary packages for the Apple Macintosh operating system X (MacOS X) are now available! Please see the Funk2 download page in order to download the latest MacOS X binary package for Funk2.

GraphViz graph visualization completed

GraphViz is an open, free and fast graph visualization tool for labeled directed graphs. We have included a very fast GraphViz compiler in Funk2 for generating and viewing our causal reflective traces. See our GraphViz example for how this new facility of Funk2 can be used.

Successfully stress tested 1000 parallel fibers for 1 day!

Fibers are to Funk2 as threads are to a C or Java application. Funk2 is an abstract simulation of an operating system built out of Funk2 traceable memory. Each Funk2 processor is an abstract object representing each processor core in it's host machine. Each Funk2 processor is implemented as a POSIX thread (pthread). Funk2 processors each have a scheduler that handles scheduling Funk2 fibers that represent parallel procedures, implemented as funks (traceable functions) of compiled bytecodes. Because this entire operating system simulation is built out of traceable memory, this opens an avenue for easily building very intricate causally reflective traces. The ability to run 1000 parallel fibers for a complete day is one step closer to the ability of the Funk2 programming to simulate large distributed concurrent systems. See our parallel programming example for more details about how to create and control parallel fibers in Funk2.

Funk2 used to teach 35 students “Block's World” planning in Marvin Minsky's Society of Mind class

Funk2 is largely inspired by Marvin Minsky's theory that the ability of humans to quickly adapt and switch between mental representations and processes is a metacognitive problem of reflective control. His book, Society of Mind, organizes and describes in surprisingly both dense and understandable English the hundreds of different types of reasoning that a human performs. In his most recent book, The Emotion Machine, Prof. Minsky tells a story about how what we normally call “emotions” are actually self-reflective forms of control processes for switching between ways of thinking. We have built and demonstrated basic reactive and deliberative planning algorithms in Funk2 that demonstrate simple aspects of the lower layers of this theory. Thirty-five students completed two computer laboratory assignments within the Funk2 language that related the continuity between the contemporary fields of planning and reinforcement learning in relational domains to Prof. Minsky's theory for how to build a cognitive architecture.

Funk2 presented at Seed Magazine in New York

Funk2 is the programming language that supports building large cognitive architectures, and a preliminary demonstration of the Moral Compass cognitive architecture was invited to be presented last week at Seed Magazine's head office in New York. Read more about our visit on Seed Media Group's blog!