# 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]]