||2 months ago|
|example||2 months ago|
|scribblings||11 months ago|
|LICENSE||2 years ago|
|README.org||5 months ago|
|functions.rkt||1 year ago|
|generic.rkt||2 years ago|
|info.rkt||11 months ago|
|networks.rkt||2 months ago|
|rs.rkt||11 months ago|
|utils.rkt||6 months ago|
- dds: A Home-made Toolkit for Discrete Dynamical Systems in Racket
ddsto Typed Racket
- Implement a shorter syntax for defining Boolean functions
networksinto general networks and threshold Boolean networks
- Implement the BN → RS conversion
- Implement the minimisation of TBF/SBF
- Contribute to Racket
- Test network inference with Racklog
dds: A Home-made Toolkit for Discrete Dynamical Systems in Racket
This is a toolkit for playing with various discrete dynamical systems in Racket. A discrete dynamical system is a system which evolves from a discrete state to some other discrete states (many or one). The systems are discrete in the sense that we can identify successive states with no other states in between. Equivalently, the phase state of the system is discrete (and is often called the state graph). These constraints imply the possibility of associating discrete, possibly branching timelines to any evolution of the system.
DISCLAIMER: I develop this toolkit as a support for my research on discrete dynamical systems. The primary objective for this framework is to fit my approach to these systems. Essentially, this framework should fit to the "shape of my mind", which is not necessarily the same as yours.
Currently, the toolkit includes the following files:
generic.rkt: The generic interface for a discrete dynamical system, with functions for constructing state graphs.
utils.rkt: Misc utility functions.
networks.rkt: Implements network-based models, which generalise Boolean networks, threshold Boolean automata networks, multivalued networks, etc.
rs.rkt: Implements reaction systems, a variant of set rewriting.
Here is my current roadmap for this toolkit, in order. The first element is what I am currently working on. The degree of certainty that I work on the subsequent items decreases with their position in the list.
dds to Typed Racket
dds with Typed Racket will be a major refactoring,
consisting in the following 3 phases which will happen more or
less in parallel:
define types, add type signatures, add types for functions I import from
transfer the comments from the source files to Scribble documentation;
redefine the generic interface for dynamics, which is currently in
I plan to implement the new dynamics interface as a classes, since Typed Racket can now type classes. I didn't really like generics: they are quite cumbersome, and I think I can do more with classes.
People on Racket Users suggested using structures with fields containing functions, but it does not seem to get me to my goal of having type-level methods/functions.
The order in which I will convert the modules:
This is how I will convert a module
Create a copy
Transfer the definitions from
A.rktone by one, adding the necessary types, signatures, and typed imports as I go.
When done, remove
TODO Implement a shorter syntax for defining Boolean functions
Right now, this is how one defines the Boolean function:
(define (update-go st) (auto-hash-ref/: st (or (and (not :Go) :new-x) (and :Go :old-x))))
It would be nice and probably not too difficult to implement a macro allowing for a syntax like the following one:
(define-pbf my-pbf (or (and (not :Go) :new-x) (and :Go :old-x)))
monotone? would verify whether a given Boolean function is
monotone according to the definition in the book Boolean
Functions: Theory, Algorithms, and Applications by Crama
networks into general networks and threshold Boolean networks
TODO Implement the BN → RS conversion
TODO Implement the minimisation of TBF/SBF
TODO Contribute to Racket
Make sequence-filter allow multivalued sequences, provided the arity of the predicate is consistent with the arity of the sequence.
Add a sequence->hash function that accepts a multivalued sequence of keys and values (exactly like what in-hash produces) and copies them into a hash table.