Funk2: Causal Reflective Programming

Funk2: reflective programming language



Overview


    
The goal
How does it work?
Publications
Presentations
Media
Download: Binaries and Sources
Git Access
Current plan
Society of Mind final project ideas
Documentation...
Funk2 Development Mailing List...
Developers


The goal


    

The goal of the programming language Funk2 is to enable reflective algorithmic tracing for large heterogenous control systems. A few point emphasized in the Funk2 programming language are:

  oLayered Critical Causal Reflection
  oEfficient and Robust Control
  oLearning by Credit Assignment
  oDivergent Solution Paths
  oIntricate Thread Control
  oGoal-oriented Learning

Funk2 is a novel programming language that introduced a programming technology that we call Causal Reflective Programming. The language is based on a peer-to-peer shared memory system, allowing individuals access to large numbers of processors and memory. Funk2 uses a virtual scheduler, processor, and thread model that is based on top of the shared memory system, while taking advantage of the specific number of processor cores on each machine. We use Posix Threads to implement virtual processors. Funk2 includes very simple and abstract data and syntax representation--inspired by lisp and scheme. Funk2 compiles to bytecodes that may be shared between architectures, inspired by these similar concepts in Python and Java virtual machines. What is novel to the Funk2 programming language is it's unique ability to keep track of everything that it does, which uses a lot of memory when used indiscreetly, but in general allows reflective tracing for causal reasons why bugs occur, when they inevitably do. Other reflective features of the language include an event-based inter-process communication system that works across the peer-to-peer network, inspired by the Erlang model. We see a language like this as necessary for the social, iterative, cooperative design environment for large distributed complex control systems. Our applications are inspired by Marvin Minsky's, Emotion Machine layered control algorithm for a Society of Mind.



How does it work?

    

Examples of the most basic computational features include: (1) memory creation, (2) memory read, and (3) memory write. Tracing all causal relationships between these basic features allows tracing the context of all other programmer-defined semantic abstractions. All of these computational features create an intricate trace network of dependencies, automatically traceable and shared by many parallel threads of execution. Funk2 allows causal tracing to occur modularly to dynamically chosen parts of large commonsense-scale artificial intelligence projects. The resulting causal dependency trace networks can be processed by critical causal reflection threads.



Funk2 Publications


    
Morgan, B.;"Funk2: A Distributed Processing Language for Reflective Tracing of a Large Critic-Selector Cognitive Architecture";Proceedings of the Metacognition Workshop at the Third IEEE International Conference on Self-Adaptive and Self-Organizing Systems; San Francisco, California, USA; 2009 September
    
Morgan, B.;"Funk2: A Frame-based Programming Language with Causally Reflective Capabilities (draft in progress)";Technical Note; Massachusetts Institute of Technology;2009 May


Funk2 Presentations


    
Morgan, B.;"Funk2 Trust Presentation online Movie, PDF, and Transcript.";Research Presentation; Massachusetts Institute of Technology;2008 April
    
Morgan, B.;"Funk2: Causal Reflective Programming";Research Presentation; Massachusetts Institute of Technology;2008 January


Funk2 Media


    
Morgan, B.;"NeuralMoM: Funk2 3D-Brain Mental Simulation Demo Video";Research Presentation Movie; Massachusetts Institute of Technology;2008 April


Download: Binaries and Sources


    

The following is a direct link to the latest version of platform independent source code:

    oLatest Architecture and Platform Independent Source Code (version 2.10.2010.01.03)

The following table includes direct links to the latest architecture and platform specific binary packages. In most situations, you should be able to simply single-click on the appropriate link in order for your operating system to fully install the latest version of Funk2.

    oLatest 32-bit Debian Binary Package (version 2.10.2010.01.03)
    oLatest 64-bit Debian Binary Package (version 2.10.2010.01.02)

All Funk2 packages are signed with a public key, which is available here for your security:

    oPublic Key for Bo Morgan <bo@mit.edu> (most recent)
    oPublic Key for Bo Morgan <bo@mit.edu> (for older packages released before 2010)

All of the above Funk2 source tarballs and binary packages as well as all other previous versions are available here:

    oFunk2 HTTP File Server



Git Access


    

This project is now a publicly developed project hosted via gitosis and gitweb at http://git.neuromin.de/, where you should have both access to stable packages and the trunk source repository. To clone the public git Funk2 repository on your machine, you should be able to just type the following command into a terminal:

    
    

git clone git://neuromin.de/funk2.git



Current Plan

    

(Order is not meant to imply importance or priority.)


    oFunktion Documentation Strings
    oDistributed Peer-to-Peer Shared Memorydone!(alpha version w/o GC)
    oImaginary Memoryin progress...
    oFunction Call Planner
    oActor/Object/Frame Ontologydone!
    oValue Dependency Tracingdone!
    oPeer to Peer Grid-Processor Supportin progress...
    oBytecode to x86 Machine-code Compiler
    oParallel Native Function Handler
    oGenerational Garbage Collectiondone!
    o64-bit swap memory index on 32-bit systems
    oReflective event "spike trains" to Matlab format


Society of Mind final project ideas


    
    o

Explain and demonstrate as much as possible how to build a reflective goal-oriented planner in Funk2.

    
    

use funktion traces

    

build imaginary trace simulator

    

build search for goal state in imagination

    

build imaginary memory

    

execute imaginary plan for real

    

how would learning occur?

    

consider how modern statistical goal-oriented learning methods can be incorporated into your reflective planner. are these techniques a natural addition to your algorithm?

    

consider advances beyond what was developed in the HACKER algorithm discussed in Gerry Sussman's Ph.D. Specifically, focus on the learning of critics to monitor and signal critical patterns in the declarative plan representations of the planning layer.

    o

Explain and demonstrate as much as possible how to build a reflective critic in Funk2.

    
    

use data-centric tracess (e.g. the 'remember' funktion)

    

build data-centric mutation callbacks

    

remember: the use of long-running threads enables distributed processing, so use pause/unpause thread controls whenever possible!

    

build pattern recognition library of commonly used trace patterns

    

how would new critics be learned? how would critics be added to selectors to recognize new critical points in a problem solving method?

    o

Explain and demonstrate as much as possible how to build a selector in Funk2.

    
    

use pause/unpause/priority-set thread controls to manage behaviors

    

build selection combination rules (e.g. 'xor' ['exclusive or', 'choose only one', 'mutex', etc.], 'and', 'or', 'not', etc.)

    

how do selectors control other selectors? and critics? use commonsense goal-oriented problem solving examples to demonstrate your ideas.

    

how are selectors selected by critics?

    

how are new selectors learned? consider the application of the social evolutionary algorithms discussed in class for evolving mental realms.



Funk2 Developers


    

Bo Morgan

Dustin Smith


λ

Blue%20Ribbon%20Online%20Free%20Speech%20Campaign