dds: A Home-made Toolkit for Discrete Dynamical Systems in Racket
Find a file
2023-08-24 23:39:07 +02:00
example Minor updates to some figures. 2021-08-04 17:31:16 +02:00
scribblings Make rs fully Typed Racket. 2023-08-24 23:37:17 +02:00
dds.org dds.org: Add a code block for opening the documentation. 2022-01-16 00:44:37 +01:00
dynamics.rkt Implement build-state-graph, build-state-graph/annotated, build-state-graph*. 2022-09-15 16:55:44 +02:00
functions.rkt Use table->unary-function in table->function/list. 2023-03-03 10:21:31 +01:00
generic.rkt generic: Use collect-by-key/sets to collect the labels for state graphs. 2020-03-02 18:18:23 +01:00
info.rkt Add typed-racket-more to package dependencies. 2023-03-24 14:39:49 +01:00
LICENSE Add the GNU GPL licence file. 2020-03-03 14:47:15 +01:00
networks.rkt Make networks fully Typed Racket, throwing away the TBN/SBN part. 2023-03-26 22:53:27 +02:00
README.org Adjust the roadmap. 2023-08-24 23:39:07 +02:00
rs.rkt Make rs fully Typed Racket. 2023-08-24 23:37:17 +02:00
tbn.rkt sbn-interaction-graph: Update the test case. 2023-08-08 16:39:26 +02:00
utils.rkt Generalize the type of pretty-print-set. 2023-08-17 16:58:21 +02:00

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 utilities.
  • functions.rkt: Definitions for working with functions: tabulating, constructing from tables, generating random functions, etc.
  • 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.

The toolkit is designed with Emacs Org-mode interoperability in mind. The file example/example.org explains the features available for interaction with Org-mode.

Roadmap

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.

TODO Remove the artifacts of conversion to Typed Racket

Since I am converting dds to Typed Racket gradually, I need to leave a couple artifacts to ensure that older code compiles with newer code. These artifacts are marked with the keywords TODO: in the source.

TODO Fix ob-racket to work with Typed Racket

Currently, the ob-racket backend for running Racket code blocks in Org-mode assumes the code is written in #lang racket, which breaks the output for tables for example. This makes the typed version of dds essentially useless with tables.

TODO Fix example.org

I changed quite a number of things while converting dds to Typed Racket, which should break a lot of things in example.org.

TODO Think about splitting the library into lib and doc

TODO Implement string rewriting

TODO Implement P systems

TODO Consider splitting dds/utils into a separate package

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)))

TODO Submit update-graph to stchang

TODO Implement monotone?

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 and Hammer.

TODO Consider optimizing the algorithms in networks and dynamics

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.

TODO Test network inference with Racklog