rstm
Welcome to rstm! This crate provides a simple and easy-to-use interface for creating and executing Turing machines. The crate is designed to be flexible and extensible, allowing developers to create and execute a wide range of Turing machines. Furthermore, the crate focuses on efficiency and leverages feature-gating to reduce overhead.
Rules
where Head and Tail are defined as follows:
Serialization
Enabling the serde feature will allow for serialization and deserialization of the Rule and other implementations within the crate. That being said, the serialization of the Rule macro is notable for the fact that it flattens both the head and tail fields, resulting in a more compact representation.
rule!, ruleset!, and other rule-based macros
Researchers have simplified the definition of a Turing machine, boiling it down into a dynamical system defined by a set of states, symbols, and rules. The rules define the behavior of the machine, dictating how it transitions from one state to another based on the current symbol being read. More specifically, the transition function $\delta$ where:
$$ \delta: Q\times{A}\rightarrow{Q}\times{A}\times{\lbrace\pm{1},0\rbrace} $$
as defined within the paper On the Topological Dynamics of Turing Machines by Petr Kůrka. Therefore, we allow any rule-based procedural macros within the scope of rstm to follow the following syntax:
(state, symbol) -> Direction(next_state, next_symbol)
Note: the macros are hygenic, in the fact that they do not require the user to import any variants, traits, or other types into scope.
Examples
For more examples visit the examples directory.
Example #1: Using the rule! macro
The following example demonstrates the use of the rule! macro to define a single rule:
rule!
Example #2: Using the ruleset! macro
The following example demonstrates the use of the rules! macro to define a set of rules:
ruleset!
Example #3: Using the program! macro
The following example demonstrates the use of the program! macro to define a set of rules for a three-state, two-symbol Turing machine.
// define the ruleset for the machine
program!
Example #4: Putting it all together with the TMH implementation
extern crate rstm;
use TMH;
use Program;
Getting Started
For a more detailed guide on getting started, please refer to the QUICKSTART.md file.
Building from the source
To build the project from source, start by cloning the repository:
before switching into the project directory:
and building the project targeting the desired feature set:
Run an example
Usage
To add rstm to your Rust project, run the following command:
or, manually include it in your Cargo.toml file as such:
[]
= "0.1.x"
= [
"default",
]
Contributing
Contributions are welcome! For more information visit the CONTRIBUTING.md file.