Совершенные дизъюнктивная и конъюнктивная
Нормальные формы
x1 | … | xn | A(x1 , … , xn ) |
… | … | … | … |
e1 | … | en | A(e1 , … , en ) |
… | … | … | … |
Итак, любая формула A(x1 , … , xn) определяет таблицу истинности, в которой можно опустить столбцы с промежуточными вычислениями. При этом равносильным формулам A(x1 , … , xn) º B(x1 , … , xn) соответствуют одинаковые таблицы истинности (если предположить, что в первых n столбцах этих таблиц всевозможные наборы значений пропозициональных переменных x1 , … , xn (интерпретации) перечислены в одном и том же порядке). Возникает вопрос: каждая ли таблица рассматриваемого вида будет таблицей истинности некоторой формулы ?
x1 | x2 | x3 | ? |
0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 0 |
1 | 1 | 1 | 0 |
Пример. Найти формулу со следующей таблицей истинности:
Если формула A(x1 , x2 , x3 ) – искомая, то
A(x1 , x2 , x3 ) = 1 Û
Û (x1 = 0 Ù x2 = 0 Ù x3 = 1)Ú (x1 = 0 Ù x2 = 1 Ù x3 = 1) Ú
Ú (x1 = 1 Ù x2 = 0 Ù x3 = 1) Û
Û ( Ù Ù x3 = 1) Ú ( Ù x2 Ù x3 = 1) Ú
Ú (x1 Ù Ù = 1) Û
Û ( Ù Ù x3 ) Ú ( Ù x2 Ù x3 ) Ú (x1 Ù Ù ) = 1.
Таким образом, в качестве искомой формулы можно взять
A(x1 , x2 , x3 ) = ( Ù Ù x3 ) Ú ( Ù x2 Ù x3 ) Ú (x1 Ù Ù ) .
Полученное в примере выражение для формулы A(x1 , x2 , x3 ) устроено регулярно: оно является дизъюнкцией выражений вида y1 Ù y2 Ù y3 , где каждое yi является или переменной xi или её отрицанием . Аналогичные построения можно применить и в общем случае, используя соответствующие общие обозначения, к описанию которых теперь и переходим.
Для пропозициональной переменной x и фиксированного значения e Î {0, 1} введём следующее обозначение xe = . Выражение xe можно считать булевой функцией переменного x, вычисляя её значение при x = d Î {0, 1} естественным образом: d e = .
Найденная в предыдущем примере формула в этих обозначениях может быть записана так: A(x1 , x2 , x3 ) = (x10 Ù x20 Ù x31) Ú (x10 Ù x21 Ù x31 ) Ú (x11 Ù x20 Ù x30 ). Следует заметить, что наборы степеней при переменных x1 , x2 , x3 , т.е.наборы (0; 0; 1), (0; 1; 1), (1; 0; 0), – это в точности те интерпретации из исходной таблицы, при которых в последнем её столбце стоит значение 1:
A(x1 , x2 , x3 ) = .
Лемма (о значениях выражения xe ) .(1) xe = 1 Û x = e.
(2) .
(3) = 1 Û (x1 = e1) Ù … Ù (xn = en) .
(4) .
Доказательство.Следующая таблица показывает, что xe = 1 тогда и только тогда, когда x = e , а также, что :
e | формула xe | x | значение xe | формула | x | значение | значение | |
0 | 0 | 1 | 1 | x | 0 | 0 | 0 | |
1 | 0 | 1 | 1 | 1 | ||||
1 | x | 0 | 0 | 0 | 0 | 1 | 1 | |
1 | 1 | 1 | 0 | 0 |
Остальные утверждения отсюда следуют:
( = 1) Û ( = 1) Ù … Ù ( = 1) Û (x1 = e1 Ù … Ù xn = en), .
Лемма доказана.
Элементарной конъюнкцией (соответственно дизъюнкцией) от n пропозициональных переменных x1 , … , xn назовём формулу вида (соответственно ), где k £ n, 1 £ i1 < … < ik £ n, Î {0, 1}. Менее формально, элементарная конъюнкция (дизъюнкция) – это выражение y1 Ù … Ù yk (соответственно y1 Ú … Ú yk ), где каждое ys является либо пропозициональной переменной, либо её отрицанием, причём переменные, участвующие в этом выражении упорядочены по возрастанию своих номеров. Если в элементарной конъюнкции (соответственно дизъюнкции) участвуют все переменные, т.е. k = n, то такая элементарная конъюнкция (соответственно дизъюнкция) называется совершенной элементарной конъюнкцией (соответственно дизъюнкцией). Любая дизъюнкция различных элементарных конъюнкций (соответственно конъюнкция различных элементарных дизъюнкций) называется дизъюнктивной нормальной формой (соответственно конъюнктивной нормальной формой). Любая дизъюнкция различных совершенных элементарных конъюнкций (соответственно конъюнкция различных совершенных элементарных дизъюнкций) называется совершенной дизъюнктивной нормальной формой, или кратко СДНФ (соответственно совершенной конъюнктивной нормальной формой, или кратко СКНФ). Таким образом, СДНФ (соответственно СКНФ) может быть записана так: (соответственно ).
Примеры: 1. конъюнкция x Ù не является элементарной конъюнкцией, т.к. одна переменная в ней участвует дважды – вначале без отрицания, а потом с отрицанием.
2. x Ù – совершенная элементарная конъюнкция от двух переменных x и y, но она не является совершенной элементарной конъюнкцией от трёх переменных x, y, z (т.к. переменная z не участвует в этом выражении). Эта формула будет совершенной дизъюнктивной нормальной формой от переменных x, y, но она не будет совершенной, если рассматривать её от трёх переменных.
3. (x1 Ú x2 Ú x3) Ù ( ) – совершенная конъюнктивная нормальная форма от переменных x1 , x2 , x3 .
4.(x1 Ú x2 Ú x3) Ù (x1 Ú x2 Ú x3) Ù ( ) – не является совершенной конъюнктивной нормальной формой от переменных x1 , x2 , x3 , т.к. содержит две одинаковые элементарные дизъюнкции.
5. Любая дизъюнктивная нормальная форма принимает значение 1 хотя бы на одном наборе пропозициональных переменных. Докажем это для совершенной дизъюнктивной нормальной формы – в общем случае рассуждения аналогичны. Действительно, формула истинна тогда и только тогда, когда истинна хотя бы одна её элементарная конъюнкция . Ввиду леммы она истинна при x1 = e1 , … , xn = en , что и требовалось доказать.
6. Как следует из предыдущего примера, для противоречий не существует СДНФ. Однако легко записать формулу от n переменных, равносильную противоречию: например, x1 Ù .
7. Любая конъюнктивная нормальная форма принимает значение 0 хотя бы на одном наборе пропозициональных переменных. Доказательство аналогично предыдущему.
8. Как следует из предыдущего примера, для законов логики не существует СКНФ. Однако, легко записать формулу от n переменных, равносильную закону логики: например, x1 Ú .
Возвращаемся к общей задаче построения формулы с заданной таблицей истинности.
Теорема (о СДНФ и СКНФ).(1) Для любой таблицы, последний столбец которой состоит не из одних нулей, существует СДНФ с этой таблицей истинности.
(2) Эта СДНФ единственна с точностью до порядка совершенных элементарных конъюнкций.
(3) В частности, для любой формулы A(x1 , … , xn ), не являющейся противоречием, существует единственная (с точностью до перестановки элементарных конъюнкций) равносильная ей СДНФ.
(1¢) Для любой таблицы, последний столбец которой состоит не из одних единиц, существует СКНФ с этой таблицей истинности.
(2¢) Эта СКНФ единственна с точностью до порядка совершенных элементарных дизъюнкций.
(3¢) В частности, для любой формулы A(x1 , … , xn ), не являющейся законом логики, существует единственная (с точностью до перестановки элементарных дизъюнкций) равносильная ей СКНФ.
x1 | … | xn | A(x1 , … , xn ) |
… | … | … | … |
e1 | … | en | A(e1 , … , en ) |
… | … | … | … |
Доказательство. (1) Вначале докажем существование СДНФ для таблицы слева с неизвестной формулой A(x1 , … , xn ) 0. Для этого по данной таблицеобразуем следующее выражение Д(x1 , … , xn ) = . Это – СДНФ, причём
(Д(e1 , … , en ) = 1) Û (найдётся такая интерпретация (d1 ; … ; dn ), что
A(d1 , … , dn) = 1, и = 1) Û (найдётся такая интерпретация
(d1 ; … ; dn ), что A(d1 , … , dn) = 1, и (d1 = e1) Ù … Ù (dn = en )) Û
Û (A(e1 , … , en) = 1), что и требовалось.
(2) Докажем теперь единственность (с точностью до перестановки элементарных конъюнкций) СДНФ с заданной таблицей истинности. Пусть нашлись две такие СДНФ Д1(x1 , … , xn ) и Д2(x1 , … , xn ), что Д1(x1 , … , xn ) º Д2(x1 , … , xn ). Будет показано, что любая элементарная конъюнкция формулы Д1(x1 , … , xn ) участвует и в Д2(x1 , … , xn ), и наоборот, любая элементарная конъюнкция формулы Д2(x1 , … , xn ) участвует в Д1(x1 , … , xn ). Таким образом, будет показано, что эти СДНФ состоят из одного и того же набора элементарных конъюнкций.
Пусть элементарная конъюнкция участвует в Д1(x1 , … , xn ). Тогда эта конъюнкция принимает значение 1 при x1 = e1 , … , xn = en , а значит, Д1(e1 , … , en ) = 1. Ввиду Д1(x1 , … , xn ) º Д2(x1 , … , xn ) имеем Д2(e1 , … , en ) = 1. Значит, найдётся такая элементарная конъюнкция в Д2(x1 , … , xn ), что = 1. Однако, ( = 1) Û (d1 = e1 Ù … Ù dn = en ), т.е. элементарная конъюнкция участвует и в формуле Д2(x1 , … , xn ).
Аналогично доказывается, что любая элементарная конъюнкция формулы Д2(x1 , … , xn ) участвует и в формуле Д1(x1 , … , xn ), а значит, эти СДНФ состоят из одних и тех же совершенных элементарных конъюнкций (с точностью до их перестановки).
(3) следует из (1) и (2): достаточно по заданной формуле A(x1 , … , xn ) 0 построитьтаблицу истинности, и найти единственную СДНФ Д(x1 , … , xn ) с этой таблицей истинности. Тогда A(x1 , … , xn ) º Д(x1 , … , xn ).
(1¢) выведем это из (1). По условию, искомая формула A(x1 , … , xn ) не тождественно истинна,так что (x1 , … , xn ) 0. По доказанному в (1), найдётся СДНФ Д(x1 , … , xn ) = º (x1 , … , xn). Значит,
A(x1 , … , xn ) º (x1 , … , xn ) º º {де Морган} º
º
– искомая СКНФ.
(2¢) Если найдены две равносильные СКНФ К1(x1 , … , xn ) º К2(x1 , … , xn ), то у формулы (x1 , … , xn ) существовали бы две СДНФ (x1 , … , xn ) и (x1 , … , xn ). По доказанному в (1), (x1 , … , xn ) и (x1 , … , xn ) отличаются только порядком элементарных конъюнкций, а значит, К1(x1 , … , xn ) и К2(x1 , … , xn ) отличаются только порядком элементарных дизъюнкций, что и требовалось.
(3¢) выводится из (1¢) и (2¢) аналогично тому, как (3) выведено из (1) и (2).
Теорема доказана.
На практике СКНФ можно получать, как следует из приведённых при доказательстве теоремы вычислений, без привлечения отрицания формулы. По заданной таблице истинности формулы для каждого набора значений (e1 ; … ; en ) со свойством A(e1 , … , en) = 0 построим элементарную дизъюнкцию и конъюнкцию всех таких дизъюнкций: , которая и будет СКНФ для исходной не тождественно истинной формулы A(x1 , … , xn ).
Примеры: 1. Построить СКНФ для формулы (x ® y) Ù z Ú (y ® x) Ù .
x | y | z | x ® y | ((x ® y) Ù z | y ® x | ((y ® x) Ù | A | |
0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 |
0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
Вначале строим таблицу истинности формулы. Далее, выбираем нулевые значения формулы с интерпретациями (0; 1; 0) и (1; 0; 1) соответственно и строим по этим наборам элементарные дизъюнкции
.
Таким образом, СКНФ такова: К(x, y, z) = .
2. Предыдущую задачу можно решить и без построения таблицы истинности, воспользовавшись основными равносильностями:
((x ® y) Ù z) Ú ((y ® x) Ù ) º (( Ú y) Ù z) Ú (( Ú x) Ù ) º {дистрибутивность} º (( Ú y) Ú (( Ú x) Ù ))) Ù (z Ú (( Ú x) Ù ))) º
º (( Ú y)Ú ( Ú x)) Ù (( Ú y) Ú ) Ù (z Ú ( Ú x)) Ù (z Ú ) º
º { Ú yÚ Ú x º 1, z Ú º 1} º ( Ú y Ú ) Ù (x Ú Ú z) – СКНФ.
3. Построим СДНФ для формулы примера 1.
Выбираем все единичные значения формулы, которым отвечают интерпретации (0; 0; 0), (1; 0; 0), (1; 1; 0), (0; 0; 1), (0; 1; 1) и (1; 1; 1) соответственно. Строим по этим наборам элементарные конъюнкции x0 Ù y0 Ù z0 = , x1 Ù y0 Ù z0 = , x1 Ù y1 Ù z0 = , x0 Ù y0 Ù z1 = , x0 Ù y1 Ù z1 = и x1 Ù y1 Ù z1 = x Ù y Ù z . Таким образом, СДНФ такова:
.
4.Предыдущую задачу можно решить и без построения таблицы истинности, воспользовавшись основными равносильностями:
((x ® y) Ù z)Ú ((y ® x) Ù ) º (( Ú y) Ù z)Ú (( Ú x) Ù ) º {дистрибутивность} º ( Ù z)Ú (y Ù z)Ú ( Ù )Ú (x Ù ) º {склейка} º
º ( Ù y Ù z)Ú ( Ù Ù z)Ú (x Ù y Ù z)Ú ( Ù y Ù z)Ú (x Ù Ù )Ú
Ú ( Ù Ù ) Ú (x Ù y Ù )Ú (x Ù Ù ) º {идемпотентность} º
º ( Ù y Ù z) Ú ( Ù Ù z) Ú (x Ù y Ù z)Ú ( Ù Ù )Ú (x Ù y Ù )Ú (x Ù Ù ).
Упражнение.Постройте СДНФ и СКНФ для следующих формул:
а) a Ú b ® Ù , б) a « , в) , г) a ® b Ù c « c Ù , д) Ú a Ù bÚ , е) (a « b) Ù c ® c Ú .
Зададимся следующим вопросом: сколько можно выписать подряд попарно неравносильных формул исчисления высказываний от n пропозициональных переменных ? С одной стороны, каждая формула имеет таблицу истинности. С другой стороны, в этом параграфе было доказано, что для каждой таблицы значений существует реализующая её формула исчисления высказываний. Поэтому максимальное количество попарно неравносильных формул равно количеству различных таблиц истинности (при фиксированном порядке перечисления наборов значений переменных в первых n столбцах этих таблиц).
Сколько же существует таблиц истинности ? Если зафиксировать один и тот же порядок перечисления наборов значений переменных в первых n столбцах этих таблиц, то каждая таблица полностью определяется своим последним столбцом, который является набором из нулей и единиц длины 2n. Всего существует таких наборов, т.е. всего существует таблиц истинности, а значит, и попарно неравносильных формул от n переменных.
Поскольку каждая не тождественно ложная формула имеет однозначно определённую СДНФ, общее количество СДНФ (с точностью до перестановки их совершенных элементарных конъюнкций) равно – 1. Столько же существует и различных СКНФ (с точностью до перестановки их совершенных элементарных дизъюнкций). Значит доказана
Теорема (о количестве неравносильных формул от n переменных).(1) Максимальное количество попарно неравносильных формул исчисления высказываний от n пропозициональных переменных равно .
(2) Существует ровно – 1 неравносильных между собой СДНФ и столько же неравносильных между собой СКНФ.
Булевы функции
После того как каждой формуле A(x1 , … , xn) при любом наборе x1 = e1 , … … , xn = en (ei Î {0, 1}, 1 £ i £ n) значений её пропозициональных переменных приписано единственным образом некоторое значение A(e1 , … , en ) Î {0, 1}, такую формулу можно рассматривать как функцию A : ® B от n переменных x1 , … , xn Î B = {0, 1} со значениями во множестве B. Любая всюду определённая функция f : ® B называется булевой. Таким образом, каждая формула исчисления высказываний является булевой функцией. При этом две формулы равносильны тогда и только тогда, когда совпадают определеяемые ими булевы функции. С другой стороны, произвольная булева функция
x1 | … | xn | f(x1 , … , xn ) |
… | … | … | … |
e1 | … | en | f(e1 , … , en ) |
… | … | … | … |
f : ® B может быть задана с помощью таблицы,являющейся (в силу § 5) таблицей истинности некоторой формулы исчисления высказываний. Таким образом, доказана
Теорема (о реализации булевых функций формулами).Любая булева функция реализуется формулой исчисления высказываний.
Эту теорему можно было доказать иначе: подсчитав количество булевых функций от заданного числа переменных и сравнив его с максимальным количеством попарно не равносильных формул исчисления высказываний от тех же переменных. Булевых функций от n переменных x1 , … , xn будет столько же, сколько таблиц вышеприведённого вида, задающих эти функции, т.е. столько же, сколько таблиц истинности от тех же переменных, – а именно – . Это совпадает с максимальным количеством попарно неравносильных формул исчисления высказываний от переменных x1 , … , xn .Учитывая, что множество формул содержится во множестве функций, причём две формулы равносильны тогда и только тогда, когда совпадают определеяемые ими булевы функции, получим, что булевых функций столько же, каково максимальное число попарно неравносильных формул исчисления высказываний. Значит, любая булева функция реализуется формулой исчисления высказываний.
Можно перечислить все булевы функции от заданного числа n аргументов. Например, следующие таблицы задают все = 16 булевых функций от n = 2 аргументов:
x | y | f1 = 0 | x | y | f2 = x Ù y | x | y | f3 = Ù y | x | y | f4 = y | |||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||
1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | |||
0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | |||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
x | y | f5 = x Ù | x | y | f6 = x | x | y | f7 = x Å y | x | y | f8 = x Ú y | |||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||
1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | |||
0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | |||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
x | y | f9 = Ù | x | y | f10 = x « y | x | y | f11 = | x | y | f12 = Ú y | |||
0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | |||
1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | |||
0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | |||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
x | y | f13 = | x | y | f14 = x Ú | x | y | f15 = Ú | x | y | f16 = 1 | |||
0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | |||
1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | |||
0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | |||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
Подписанные обозначения функций не единственны: их можно заменить на любые равносильные формулы. Здесь x Å y = (x Ù ) Ú ( Ù y) º – операция “исключающего или”, называемая также сложением по модулю 2 (т.к. с точки зрения программиста x Å y = (x+y) mod 2). Специальные названия есть и у других важных функций. Например, функция f15 , подписанная Ú ,носит название штрих Шеффера и обозначается x | y, а функция f9 ( Ù ) – стрелка Пирса и обозначается x ¯ y.
Чтобы уяснить связь между булевыми функциями от разного количества аргументов докажем следующую лемму:
Лемма (о разложении булевой функции по k переменным).Пусть f : Bn ® B – булева функция от n аргументов. Тогда для любого k от 1 до n верна формула:
,
где дизъюнкция берётся по всем интерпретациям (e1 ; … ; ek) Î Bk.
Доказательство. Рассмотрим формулу , где дизъюнкция берётся по всем интерпретациям (e1 ; … ; ek) Î Bk , и проверим, что она тождественно истинна. Действительно, пусть e = (e1 ; … ; ek) – произвольная интерпретация. Тогда совершенная элементарная конъюнкция от k переменных участвует в Ф(x1 , … , xk), и по лемме о значениях выражения xe из прошлого параграфа имеем , и значит, будучи дизъюнкцией, Ф(e1 , … , ek) = 1. Таким образом, Ф(x1 , … , xk) º 1.
Теперь сразу получаем
.
Остаётся доказать, что . Для этого вычислим значения левой и правой частей при произвольной интерпретации (d1 ; … ; dn) Î Bn : =
.
Аналогично получим
=
.
Таким образом, , а значит, .
Лемма доказана.
Эта лемма не только позволяет выражать булевы функции от n переменных через булевы функции от меньшего числа аргументов, но и открывает другой путь к получению СДНФ :
Следствие (о СДНФ). Если f(x1 , … , xn) – не тождественно нулевая булева функция, то .
Доказательство: Из предыдущей теоремы при k = n получаем разложение:
.
Если f(e1 , … , en) = 0, то конъюнкцию º 0 в этой дизъюнктивной форме можно опустить. Таким образом, в правой части останутся только конъюнкции, в которых f(e1 , … , en) = 1, т.е. º º , что и требовалось.
Следствие доказано.
Теорема о СДНФ и СКНФ показывает, что любую булеву функцию можно записать, используя только три логических связки: – отрицание, Ù – конъюнкцию и Ú – дизъюнкцию. На самом деле, используя равносильности (A Ù B) º º , (A Ú B) º , можно обойтись и двумя связками – либо отрицанием и конъюнкцией, либо отрицанием и дизъюнкцией.
Примеры: 1.Записать формулу x Ú Ú z, используя только отрицание и конъюнкцию.
x Ú Ú z º (x Ú )Ú z º Ú z º = .
2.Записать Ù Ù , используя только отрицание и дизъюнкцию.
Имеем Ù Ù º = .
3. Функцию f1(x, y) = 0 невозможно выразить, используя только конъюнкцию и дизъюнкцию. Действительно, любая формула A(x1 , … , xn ), выразимая через конъюнкцию и дизъюнкцию, принимает значение 1 при x1 = … = xn = 1.
Таким образом, предыдущие примеры показывают, что через некоторые наборы функций можно выразить любую булеву функцию, а через некоторые – нельзя. Это приводит к следующему определению: множество булевых функций {f1 , … , fk} называется полным, если любую булеву функцию можно выразить через f1 , … , fk , используя операцию подстановки значений одних ф
Дата добавления: 2021-12-14; просмотров: 302;