Notes/Languages & Machines/Introduction.md

55 lines
1.3 KiB
Markdown

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