--- type: theoretical ty: --- ## The foundations of computation Looking for answers for basic questions like: - Computability? - Power $\leftrightarrow$ Programming constructs? Which leads us to fundamental concepts like: - State - Transitions - Non-determinism - Undecideability ## Models ### Finite memory Finite automata, regexp ![](Pasted%20image%2020250414190100.png) ### Finite memory with stack Push down automata ![](Pasted%20image%2020250414190119.png) ### Unrestricted Turing machines ![](Pasted%20image%2020250414190144.png) ## Grammars ![](Pasted%20image%2020250414190229.png) On a higher level, it seems like grammars and machines are very different, but parsing a language (a set of strings) is quite similar to computation. ## State-based systems and glossary An FSM can be a specification for OOP. - States ($q_0,\ldots, q_n$) - Transitions ($a,b,c,\ldots,z$) - We can interpret the transitions as class methods and specify the sequences of allowed invocations - **typestate** ## Notation - $x \in X, X\subseteq Y$ - $\forall x \in X: P(x), \exists x \in X: P(x)$ - $R \subseteq X \times Y$ is a relation between $X$ and $Y$ - $xRy \equiv (x,y) \in R$ - $G = (V, E)$, where $E \subseteq V\times V$ is a directed graph Part of [Relations and Digraphs](Relations%20and%20Digraphs.md)