# State Machines
## Links
- See [[Property Based Testing]] for some links about State Machine testing.
## See also
- [[Raft Protocol]]
- [[Concurrency]]
- [[Model Checking]]
## ZK
- [[ZK - 2k3 - State machines are reducers]]
- [[ZK - 2k0 - State Machines compose easily]]
- [[ZK - 2k5 - Building a state machine means modeling the environment]]
## Misc
- [[Fleet control is relocated state machines]]
## Papers
- [[David Harel]] - [https://www.inf.ed.ac.uk/teaching/courses/seoc/2005_2006/resources/statecharts.pdf](https://www.inf.ed.ac.uk/teaching/courses/seoc/2005_2006/resources/statecharts.pdf) [[Statecharts]]
## Books
Hard to read, but a lot of sourcecode and wisdom when using state machines for [[Embedded]] programming.
- [[BOOK - Practical Statecharts in CC++ - Miro Samek]]
### Designing Logic Systems using State Machines
- [Designing Logic Systems using State Machines - Christopher R Clare](https://www.evernote.com/shard/s6/u/0/sh/73545174-8676-41b9-902f-54bfbfbec426/6754a4f0639d6c9c1b85b5b7f42169ff)
A weird old book that emphasizes synthesizing state machines with logic gates and ROM modules. This is how the Apple II disk controller was built by [[Steve Wozniak]].
![[State Machine-1666559547944.jpeg]]
- [Designing Logic Systems Using State Machines by Christopher R. Clare | Hacker News](https://news.ycombinator.com/item?id=33296316)
For example, it shows this state machine:
![[State Machine-1666559623074.jpeg]]
gets transformed to:
![[State Machine-1666559612553.jpeg]]