Introduction Functional Nets are a new way to think about programs and computation, born from a fusion of the essential ideas of functional programming and Petri nets. As in functional programming, the basic computation step in a functional net rewrites function applications to function bodies. As in Petri-Nets, a rewrite step can require the combined presence of several inputs (where in this case inputs are function applications). This fusion of ideas from two different areas results in a style of programming which is at the same time very simple and very expressive.

Papers An Overview of Functional Nets. Martin Odersky. Lecture notes, APPSEM Summer School, Caminha, Portugal, September 2000. Functional Nets. Martin Odersky. Invited paper at European Symposium on Programming 2000. Lecture Notes in Computer Science, Springer Verlag, 2000. Abstract. Functional Nets combine key ideas of functional programming and Petri nets to yield a simple and general programming notation. They have their theoretical foundation in Join calculus. This paper presents functional nets, reviews Join calculus, and shows how the two relate. A Functional View of Join. Gang Chen, Martin Odersky, Christoph Zenger, Matthias Zenger. Technical Report ACRC-99-016, University of South Australia, 1999. Abstract. Join calculus, usually presented as a process calculus, is suitable as a foundation of both sequential and concurrent programming. We give a new operational semantics of join calculus, expressed as a reduction system with a single reduction rule similar to beta reduction in lambda calculus. We also introduce a new Hindley/Milner style type system for join calculus. Compared to previous work, the type system gives more accurate types of composite and mutually recursive definitions. The type system's soundness is established by showing that our reduction rule keeps typings invariant. We present an algorithm for type inference and show its soundness and completeness. Functional Nets. Martin Odersky. Colloque d'Informatique at EPFL, Oct 19, 1999.. Abstract. Foundational work on programming has been based traditionally on some variant of lambda calculus. This approach, while ideally suited to sequential programming, is increasingly at odds with modern programs which are reactive in their interfaces and concurrent in their implementation. Standard process calculi, on the other hand, model nothing but the concurrent aspects of systems, and are ill-suited to express sequential behavior. This talk will show how nets consisting of functions and rewrite rules can serve as a uniform foundation of both sequential and concurrent programming. These nets have close relationships to Petri nets; in fact Petri nets can be regarded as a graphical notation for a a subset of functional nets. Functional nets have been formalized by Gonthier et al. under the name of join calculus. This talk will show how functional nets can be seen as a natural extension of sequential functional programming, and how they can model imperative, concurrent, and object-oriented programming styles.

Browse HTML-Version

Implementation Currently we are developing Funnel, a small programming language based on Functional Nets. You can download a copy of our Funnel compiler and runtime environment from our Funnel homepage.

