📜 ⬆️ ⬇️

Fundamentals of the theory of computing systems: a machine with a finite number of states

The theory of computing systems is what allows us to program. However, you can write programs without understanding the concepts behind the computational processes. Not that it is bad - when we program, we work at a much higher level of abstraction. In the end, when we drive, we concentrate only on two or three pedals, gear selector and steering wheel. For everyday leisurely driving this is more than enough. However, if we want to drive a car at the limit of its capabilities, then we need to know much more than just three pedals, a gearbox and a steering wheel.

This approach is also valid in programming. Most of the daily work of the world can be done with minimal knowledge of the theory of computing systems or even without it. You do not need to understand category theory in order to distribute the form “Contacts” in PHP. However, if you plan to write code that requires serious computation, then you will have to figure out that these computations are under the hood.

The purpose of this article is to present some fundamental principles of computation. If this turns out to be interesting, then in the future I can write a more advanced topic on this topic, but right now I just want to consider the logic of the simplest abstract computing device - a machine with a finite number of states (finite state machine).

Machine with finite number of states


A finite state machine ( FSM ) or finite automaton is a mathematical abstraction used in the design of algorithms. In simple terms, a machine with a finite number of states can read input data sequences. When it reads the input signal, it switches to the new state. Where exactly it will switch, having received this signal, is laid in its current state. It sounds confusing, but in fact everything is very simple.
')
Imagine a device that reads a long paper tape. The letter a or b is printed on every inch of this ribbon.



As soon as the device reads a letter, it changes its state. Here is a very simple conversion graph for such a machine:



Circles are the states in which the machine can be. Arrows - transitions between them. So, if you are in the s state and read a , then you need to go to the q state. And if b , then just stay in place.

So, if initially we are in the s state and start reading the tape from the first picture from left to right, then a will be read first, and we will move to the q state, then b will return back to s . The next b will leave us in place, and a will move us back to q . Elementary, but what's the point?

It turns out that if you skip the tape with letters through FSM, then according to its final state, you can draw some conclusions about the sequence of letters. For the above simple state machine, the final state s means that the tape ended with the letter b . If we ended up in the state q , then the last letter on the tape was a .

This may seem pointless, but there are many problems that can be solved using this approach. The simplest example is to determine if an HTML page contains the following tags in a given order:

<html> <head> </head> <body> </body> </html> 


A machine with a finite number of states can go into a new state by counting , , .. , .

, , .

(Deterministic Finite State Machine)
, , . . , , , , a . .

, , ? : x == true , doSomethingBig() doSomethingSmall(), ?

, -, - . - . , , - . . FSM , , (, ). , .

(Nondeterministic Finite State Machine)
, ( nondeterministic finite automaton , NFA ) - , . , , FSM, , a , b c . - . :

abbbbbbbbbc abbbc acccd acccccd ac ( b ) ad ( c )

, a b c . . t , .



? s , . a , , q r . . - . , .

. , .

- . NFA. , . , . , , .

- . t v .



. - , . , , . .


- , (regular expressions). . , ( ) , ( ) . , , ,

a(b*c|c*d)

. , , . ? , , a b , - a b . , n a n b , n - - . :

ab aabb aaaaaabbbbbb aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb

. , , - . , , a b . , a b . . , , , , , .

. : , , , . , , , , .

, , , a b , HTML, . , HTML- html , head body , , , HTML- . HTML - .


? , (Turing Machine). , , . , . , , , .

, , , . , , . , . , , , , , .

, , . . , .

?
? PHP-? , - . , , , , , . , , , . , , .

, , . , -, .

X, , : " , X, , Y Y X. , X".
, , .. , .

, , .

(Deterministic Finite State Machine)
, , . . , , , , a . .

, , ? : x == true , doSomethingBig() doSomethingSmall(), ?

, -, - . - . , , - . . FSM , , (, ). , .

(Nondeterministic Finite State Machine)
, ( nondeterministic finite automaton , NFA ) - , . , , FSM, , a , b c . - . :

abbbbbbbbbc abbbc acccd acccccd ac ( b ) ad ( c )

, a b c . . t , .



? s , . a , , q r . . - . , .

. , .

- . NFA. , . , . , , .

- . t v .



. - , . , , . .


- , (regular expressions). . , ( ) , ( ) . , , ,

a(b*c|c*d)

. , , . ? , , a b , - a b . , n a n b , n - - . :

ab aabb aaaaaabbbbbb aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb

. , , - . , , a b . , a b . . , , , , , .

. : , , , . , , , , .

, , , a b , HTML, . , HTML- html , head body , , , HTML- . HTML - .


? , (Turing Machine). , , . , . , , , .

, , , . , , . , . , , , , , .

, , . . , .

?
? PHP-? , - . , , , , , . , , , . , , .

, , . , -, .

X, , : " , X, , Y Y X. , X".

, , .. , .

, , .

(Deterministic Finite State Machine)
, , . . , , , , a . .

, , ? : x == true , doSomethingBig() doSomethingSmall(), ?

, -, - . - . , , - . . FSM , , (, ). , .

(Nondeterministic Finite State Machine)
, ( nondeterministic finite automaton , NFA ) - , . , , FSM, , a , b c . - . :

abbbbbbbbbc abbbc acccd acccccd ac ( b ) ad ( c )

, a b c . . t , .



? s , . a , , q r . . - . , .

. , .

- . NFA. , . , . , , .

- . t v .



. - , . , , . .


- , (regular expressions). . , ( ) , ( ) . , , ,

a(b*c|c*d)

. , , . ? , , a b , - a b . , n a n b , n - - . :

ab aabb aaaaaabbbbbb aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb

. , , - . , , a b . , a b . . , , , , , .

. : , , , . , , , , .

, , , a b , HTML, . , HTML- html , head body , , , HTML- . HTML - .


? , (Turing Machine). , , . , . , , , .

, , , . , , . , . , , , , , .

, , . . , .

?
? PHP-? , - . , , , , , . , , , . , , .

, , . , -, .

X, , : " , X, , Y Y X. , X".

, , .. , .

, , .

(Deterministic Finite State Machine)
, , . . , , , , a . .

, , ? : x == true , doSomethingBig() doSomethingSmall(), ?

, -, - . - . , , - . . FSM , , (, ). , .

(Nondeterministic Finite State Machine)
, ( nondeterministic finite automaton , NFA ) - , . , , FSM, , a , b c . - . :

abbbbbbbbbc abbbc acccd acccccd ac ( b ) ad ( c )

, a b c . . t , .



? s , . a , , q r . . - . , .

. , .

- . NFA. , . , . , , .

- . t v .



. - , . , , . .


- , (regular expressions). . , ( ) , ( ) . , , ,

a(b*c|c*d)

. , , . ? , , a b , - a b . , n a n b , n - - . :

ab aabb aaaaaabbbbbb aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb

. , , - . , , a b . , a b . . , , , , , .

. : , , , . , , , , .

, , , a b , HTML, . , HTML- html , head body , , , HTML- . HTML - .


? , (Turing Machine). , , . , . , , , .

, , , . , , . , . , , , , , .

, , . . , .

?
? PHP-? , - . , , , , , . , , , . , , .

, , . , -, .

X, , : " , X, , Y Y X. , X".

, , .. , .

, , .

(Deterministic Finite State Machine)
, , . . , , , , a . .

, , ? : x == true , doSomethingBig() doSomethingSmall(), ?

, -, - . - . , , - . . FSM , , (, ). , .

(Nondeterministic Finite State Machine)
, ( nondeterministic finite automaton , NFA ) - , . , , FSM, , a , b c . - . :

abbbbbbbbbc abbbc acccd acccccd ac ( b ) ad ( c )

, a b c . . t , .



? s , . a , , q r . . - . , .

. , .

- . NFA. , . , . , , .

- . t v .



. - , . , , . .


- , (regular expressions). . , ( ) , ( ) . , , ,

a(b*c|c*d)

. , , . ? , , a b , - a b . , n a n b , n - - . :

ab aabb aaaaaabbbbbb aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb

. , , - . , , a b . , a b . . , , , , , .

. : , , , . , , , , .

, , , a b , HTML, . , HTML- html , head body , , , HTML- . HTML - .


? , (Turing Machine). , , . , . , , , .

, , , . , , . , . , , , , , .

, , . . , .

?
? PHP-? , - . , , , , , . , , , . , , .

, , . , -, .

X, , : " , X, , Y Y X. , X".

, , .. , .

, , .

(Deterministic Finite State Machine)
, , . . , , , , a . .

, , ? : x == true , doSomethingBig() doSomethingSmall(), ?

, -, - . - . , , - . . FSM , , (, ). , .

(Nondeterministic Finite State Machine)
, ( nondeterministic finite automaton , NFA ) - , . , , FSM, , a , b c . - . :

abbbbbbbbbc abbbc acccd acccccd ac ( b ) ad ( c )

, a b c . . t , .



? s , . a , , q r . . - . , .

. , .

- . NFA. , . , . , , .

- . t v .



. - , . , , . .


- , (regular expressions). . , ( ) , ( ) . , , ,

a(b*c|c*d)

. , , . ? , , a b , - a b . , n a n b , n - - . :

ab aabb aaaaaabbbbbb aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb

. , , - . , , a b . , a b . . , , , , , .

. : , , , . , , , , .

, , , a b , HTML, . , HTML- html , head body , , , HTML- . HTML - .


? , (Turing Machine). , , . , . , , , .

, , , . , , . , . , , , , , .

, , . . , .

?
? PHP-? , - . , , , , , . , , , . , , .

, , . , -, .

X, , : " , X, , Y Y X. , X".
, , .. , .

, , .

(Deterministic Finite State Machine)
, , . . , , , , a . .

, , ? : x == true , doSomethingBig() doSomethingSmall(), ?

, -, - . - . , , - . . FSM , , (, ). , .

(Nondeterministic Finite State Machine)
, ( nondeterministic finite automaton , NFA ) - , . , , FSM, , a , b c . - . :

abbbbbbbbbc abbbc acccd acccccd ac ( b ) ad ( c )

, a b c . . t , .



? s , . a , , q r . . - . , .

. , .

- . NFA. , . , . , , .

- . t v .



. - , . , , . .


- , (regular expressions). . , ( ) , ( ) . , , ,

a(b*c|c*d)

. , , . ? , , a b , - a b . , n a n b , n - - . :

ab aabb aaaaaabbbbbb aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb

. , , - . , , a b . , a b . . , , , , , .

. : , , , . , , , , .

, , , a b , HTML, . , HTML- html , head body , , , HTML- . HTML - .


? , (Turing Machine). , , . , . , , , .

, , , . , , . , . , , , , , .

, , . . , .

?
? PHP-? , - . , , , , , . , , , . , , .

, , . , -, .

X, , : " , X, , Y Y X. , X".

, , .. , .

, , .

(Deterministic Finite State Machine)
, , . . , , , , a . .

, , ? : x == true , doSomethingBig() doSomethingSmall(), ?

, -, - . - . , , - . . FSM , , (, ). , .

(Nondeterministic Finite State Machine)
, ( nondeterministic finite automaton , NFA ) - , . , , FSM, , a , b c . - . :

abbbbbbbbbc abbbc acccd acccccd ac ( b ) ad ( c )

, a b c . . t , .



? s , . a , , q r . . - . , .

. , .

- . NFA. , . , . , , .

- . t v .



. - , . , , . .


- , (regular expressions). . , ( ) , ( ) . , , ,

a(b*c|c*d)

. , , . ? , , a b , - a b . , n a n b , n - - . :

ab aabb aaaaaabbbbbb aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb

. , , - . , , a b . , a b . . , , , , , .

. : , , , . , , , , .

, , , a b , HTML, . , HTML- html , head body , , , HTML- . HTML - .


? , (Turing Machine). , , . , . , , , .

, , , . , , . , . , , , , , .

, , . . , .

?
? PHP-? , - . , , , , , . , , , . , , .

, , . , -, .

X, , : " , X, , Y Y X. , X".

, , .. , .

, , .

(Deterministic Finite State Machine)
, , . . , , , , a . .

, , ? : x == true , doSomethingBig() doSomethingSmall(), ?

, -, - . - . , , - . . FSM , , (, ). , .

(Nondeterministic Finite State Machine)
, ( nondeterministic finite automaton , NFA ) - , . , , FSM, , a , b c . - . :

abbbbbbbbbc abbbc acccd acccccd ac ( b ) ad ( c )

, a b c . . t , .



? s , . a , , q r . . - . , .

. , .

- . NFA. , . , . , , .

- . t v .



. - , . , , . .


- , (regular expressions). . , ( ) , ( ) . , , ,

a(b*c|c*d)

. , , . ? , , a b , - a b . , n a n b , n - - . :

ab aabb aaaaaabbbbbb aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb

. , , - . , , a b . , a b . . , , , , , .

. : , , , . , , , , .

, , , a b , HTML, . , HTML- html , head body , , , HTML- . HTML - .


? , (Turing Machine). , , . , . , , , .

, , , . , , . , . , , , , , .

, , . . , .

?
? PHP-? , - . , , , , , . , , , . , , .

, , . , -, .

X, , : " , X, , Y Y X. , X".
, , .. , .

, , .

(Deterministic Finite State Machine)
, , . . , , , , a . .

, , ? : x == true , doSomethingBig() doSomethingSmall(), ?

, -, - . - . , , - . . FSM , , (, ). , .

(Nondeterministic Finite State Machine)
, ( nondeterministic finite automaton , NFA ) - , . , , FSM, , a , b c . - . :

abbbbbbbbbc abbbc acccd acccccd ac ( b ) ad ( c )

, a b c . . t , .



? s , . a , , q r . . - . , .

. , .

- . NFA. , . , . , , .

- . t v .



. - , . , , . .


- , (regular expressions). . , ( ) , ( ) . , , ,

a(b*c|c*d)

. , , . ? , , a b , - a b . , n a n b , n - - . :

ab aabb aaaaaabbbbbb aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb

. , , - . , , a b . , a b . . , , , , , .

. : , , , . , , , , .

, , , a b , HTML, . , HTML- html , head body , , , HTML- . HTML - .


? , (Turing Machine). , , . , . , , , .

, , , . , , . , . , , , , , .

, , . . , .

?
? PHP-? , - . , , , , , . , , , . , , .

, , . , -, .

X, , : " , X, , Y Y X. , X".

, , .. , .

, , .

(Deterministic Finite State Machine)
, , . . , , , , a . .

, , ? : x == true , doSomethingBig() doSomethingSmall(), ?

, -, - . - . , , - . . FSM , , (, ). , .

(Nondeterministic Finite State Machine)
, ( nondeterministic finite automaton , NFA ) - , . , , FSM, , a , b c . - . :

abbbbbbbbbc abbbc acccd acccccd ac ( b ) ad ( c )

, a b c . . t , .



? s , . a , , q r . . - . , .

. , .

- . NFA. , . , . , , .

- . t v .



. - , . , , . .


- , (regular expressions). . , ( ) , ( ) . , , ,

a(b*c|c*d)

. , , . ? , , a b , - a b . , n a n b , n - - . :

ab aabb aaaaaabbbbbb aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb

. , , - . , , a b . , a b . . , , , , , .

. : , , , . , , , , .

, , , a b , HTML, . , HTML- html , head body , , , HTML- . HTML - .


? , (Turing Machine). , , . , . , , , .

, , , . , , . , . , , , , , .

, , . . , .

?
? PHP-? , - . , , , , , . , , , . , , .

, , . , -, .

X, , : " , X, , Y Y X. , X".

, , .. , .

, , .

(Deterministic Finite State Machine)
, , . . , , , , a . .

, , ? : x == true , doSomethingBig() doSomethingSmall(), ?

, -, - . - . , , - . . FSM , , (, ). , .

(Nondeterministic Finite State Machine)
, ( nondeterministic finite automaton , NFA ) - , . , , FSM, , a , b c . - . :

abbbbbbbbbc abbbc acccd acccccd ac ( b ) ad ( c )

, a b c . . t , .



? s , . a , , q r . . - . , .

. , .

- . NFA. , . , . , , .

- . t v .



. - , . , , . .


- , (regular expressions). . , ( ) , ( ) . , , ,

a(b*c|c*d)

. , , . ? , , a b , - a b . , n a n b , n - - . :

ab aabb aaaaaabbbbbb aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb

. , , - . , , a b . , a b . . , , , , , .

. : , , , . , , , , .

, , , a b , HTML, . , HTML- html , head body , , , HTML- . HTML - .


? , (Turing Machine). , , . , . , , , .

, , , . , , . , . , , , , , .

, , . . , .

?
? PHP-? , - . , , , , , . , , , . , , .

, , . , -, .

X, , : " , X, , Y Y X. , X".

, , .. , .

, , .

(Deterministic Finite State Machine)
, , . . , , , , a . .

, , ? : x == true , doSomethingBig() doSomethingSmall(), ?

, -, - . - . , , - . . FSM , , (, ). , .

(Nondeterministic Finite State Machine)
, ( nondeterministic finite automaton , NFA ) - , . , , FSM, , a , b c . - . :

abbbbbbbbbc abbbc acccd acccccd ac ( b ) ad ( c )

, a b c . . t , .



? s , . a , , q r . . - . , .

. , .

- . NFA. , . , . , , .

- . t v .



. - , . , , . .


- , (regular expressions). . , ( ) , ( ) . , , ,

a(b*c|c*d)

. , , . ? , , a b , - a b . , n a n b , n - - . :

ab aabb aaaaaabbbbbb aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb

. , , - . , , a b . , a b . . , , , , , .

. : , , , . , , , , .

, , , a b , HTML, . , HTML- html , head body , , , HTML- . HTML - .


? , (Turing Machine). , , . , . , , , .

, , , . , , . , . , , , , , .

, , . . , .

?
? PHP-? , - . , , , , , . , , , . , , .

, , . , -, .

X, , : " , X, , Y Y X. , X".

, , .. , .

, , .

(Deterministic Finite State Machine)
, , . . , , , , a . .

, , ? : x == true , doSomethingBig() doSomethingSmall(), ?

, -, - . - . , , - . . FSM , , (, ). , .

(Nondeterministic Finite State Machine)
, ( nondeterministic finite automaton , NFA ) - , . , , FSM, , a , b c . - . :

abbbbbbbbbc abbbc acccd acccccd ac ( b ) ad ( c )

, a b c . . t , .



? s , . a , , q r . . - . , .

. , .

- . NFA. , . , . , , .

- . t v .



. - , . , , . .


- , (regular expressions). . , ( ) , ( ) . , , ,

a(b*c|c*d)

. , , . ? , , a b , - a b . , n a n b , n - - . :

ab aabb aaaaaabbbbbb aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb

. , , - . , , a b . , a b . . , , , , , .

. : , , , . , , , , .

, , , a b , HTML, . , HTML- html , head body , , , HTML- . HTML - .


? , (Turing Machine). , , . , . , , , .

, , , . , , . , . , , , , , .

, , . . , .

?
? PHP-? , - . , , , , , . , , , . , , .

, , . , -, .

X, , : " , X, , Y Y X. , X".

Source: https://habr.com/ru/post/169373/


All Articles