Задания
Версия для печати и копирования в MS Word
Тип 2 № 15814
i

Ло­ги­че­ская функ­ция F задаётся вы­ра­же­ни­ем (x ≡ ( wy)) ∨ ((w  → z ) ∧ (y  → w)).

Дан ча­стич­но за­пол­нен­ный фраг­мент, со­дер­жа­щий не­по­вто­ря­ю­щи­е­ся стро­ки таб­ли­цы ис­тин­но­сти функ­ции F.

Опре­де­ли­те, ка­ко­му столб­цу таб­ли­цы ис­тин­но­сти со­от­вет­ству­ет каж­дая из пе­ре­мен­ных x, y, z, w.

 

Пе­ре­мен­ная 1Пе­ре­мен­ная 2Пе­ре­мен­ная 3Пе­ре­мен­ная 4Функ­ция
????????????F
110
10
110

 

В от­ве­те на­пи­ши­те буквы w, x, y, z в том по­ряд­ке, в ко­то­ром идут со­от­вет­ству­ю­щие им столб­цы (сна­ча­ла  — буква, со­от­вет­ству­ю­щая пер­во­му столб­цу; затем  — буква, со­от­вет­ству­ю­щая вто­ро­му столб­цу, и т. д.). Буквы в от­ве­те пи­ши­те под­ряд, ни­ка­ких раз­де­ли­те­лей между бук­ва­ми ста­вить не нужно.

 

При­мер. Пусть за­да­но вы­ра­же­ние x  → y, за­ви­ся­щее от двух пе­ре­мен­ных x и y, и фраг­мент таб­ли­цы ис­тин­но­сти:

 

Пе­ре­мен­ная 1Пе­ре­мен­ная 2Функ­ция
??????F
010

 

Тогда пер­во­му столб­цу со­от­вет­ству­ет пе­ре­мен­ная y, а вто­ро­му столб­цу со­от­вет­ству­ет пе­ре­мен­ная x. В от­ве­те нужно на­пи­сать: yx.

Спрятать решение

Ре­ше­ние.

Рас­смот­рим дан­ное вы­ра­же­ние. Пре­об­ра­зу­ем ло­ги­че­ское вы­ра­же­ние (x ≡ ( wy)) ∨ ((wz ) ∧ (yw)) и по­лу­чим си­сте­му, при ко­то­рой оно ложно:

 си­сте­ма вы­ра­же­ний со­во­куп­ность вы­ра­же­ний w=1,y=1,z=0, конец си­сте­мы . x не равно w плюс y. конец со­во­куп­но­сти . левая круг­лая скоб­ка * пра­вая круг­лая скоб­ка

 

За­ме­тим, что пер­вый и четвёртый столб­цы таб­ли­цы ис­тин­но­сти  — это y и w. Из усло­вия x не равно w плюс y сле­ду­ет, что пе­ре­мен­ная x со­от­вет­ству­ет вто­ро­му столб­цу таб­ли­цы ис­тин­но­сти. Сле­до­ва­тель­но, тре­тье­му столб­цу со­от­вет­ству­ет пе­ре­мен­ная z.

 

При­ве­дем дру­гое ре­ше­ние.

Со­ста­вим таб­ли­цу ис­тин­но­сти для вы­ра­же­ния (x ≡ ( wy)) ∨ ((wz ) ∧ (yw)) вруч­ную или при по­мо­щи языка Python:

print("x y z w")

for x in range(0, 2):

for y in range(0, 2):

for z in range(0, 2):

for w in range(0, 2):

if not((x == (w or y)) or ((w <= z) and (y <= w))):

print(x, y, z, w)

Далее вы­пи­шем те на­бо­ры пе­ре­мен­ных, при ко­то­рых дан­ное вы­ра­же­ние равно 0. В на­бо­рах пе­ре­мен­ные за­пи­шем в по­ряд­ке х, y, z, w.

По­лу­чим сле­ду­ю­щие на­бо­ры:

(0, 0, 0, 1),

(0, 1, 0, 0),

(0, 1, 0, 1),

(0, 1, 1, 0).

Со­по­ста­вим эти на­бо­ры с при­ве­ден­ным в за­да­нии фраг­мен­том таб­ли­цы ис­тин­но­сти.

Пер­вая стро­ка таб­ли­цы (как ми­ни­мум две еди­ни­цы) может со­от­вет­ство­вать либо на­бо­ру (0, 1, 0, 1), либо на­бо­ру (0, 1, 1, 0).

Тре­тья стро­ка таб­ли­цы также может со­от­вет­ство­вать од­но­му из этих двух на­бо­ров.

За­ме­тим, что в каж­дом из этих двух на­бо­ров пе­ре­мен­ная y при­ни­ма­ет зна­че­ние 1. Сле­до­ва­тель­но, ей со­от­вет­ству­ет пер­вый стол­бец таб­ли­цы.

В дан­ных на­бо­рах еди­нич­ные зна­че­ния при­ни­ма­ют также пе­ре­мен­ные z и w. За­ме­тим, что пе­ре­мен­ная z при­ни­ма­ет еди­нич­ное зна­че­ние в един­ствен­ном на­бо­ре пе­ре­мен­ных. Сле­до­ва­тель­но, ей не может со­от­вет­ство­вать чет­вер­тый стол­бец. Тогда пе­ре­мен­ной z со­от­вет­ству­ет тре­тий стол­бец, а пе­ре­мен­ной w  — чет­вер­тый стол­бец.

Сле­до­ва­тель­но, пе­ре­мен­ной х со­от­вет­ству­ет вто­рой стол­бец.

 

Ответ: yxzw.

 

При­ведём ре­ше­ние Юрия Ко­ло­ме­ец на языке Python.

from random import *

from itertools import *

true_v = []

null = lambda x, y, z, w: True if (x == (w or y)) or ((not w or z) and (not y or w)) else False # (x ≡ ( w ∨ y)) ∨ ((w → z ) ∧ (y → w)).

act = True

while act:

f = [randint(0,1) for i in range(4)]

if null(f[0], f[1], f[2], f[3]) == False and f not in true_v and len(true_v) < 4:true_v.append(f)

if len(true_v) == 4:

for t in true_v:shuffle(t)

s = sample(true_v, 3)

for ind, val in enumerate(permutations([h for h in range(4)])):

if null(s[0][val[0]], s[0][val[1]], s[0][val[2]], s[0][val[3]]) == False and s[0][0] == 1 and s[0][3] == 1:

if null(s[1][val[0]], s[1][val[1]], s[1][val[2]], s[1][val[3]]) == False and s[1][3] == 1:

if null(s[2][val[0]], s[2][val[1]], s[2][val[2]], s[2][val[3]]) == False and s[2][0] == 1 and s[2][2] == 1:

for i in s:print(i)

print(f"Ответ: x = {val[0] + 1}; y = {val[1] + 1}; z = {val[2] + 1}; w = {val[3] + 1}")

act = False

s.clear()

 

При­ведём ре­ше­ние Глеба Гриш­ко на языке Python.

from itertools import *

def f(x,y,w,z):

return (x==(w or y)) or ((w<=z) and (y<=w))

for a1,a2,a3,a4,a5,a6,a7 in product([0,1], repeat = 7):

t=[(1,a1,a2,1),(a3,a4,a5,1),(1,a6,1,a7)]

if len(set(t))==3:

for p in permutations('xywz'):

if [f(**dict(zip(p,r))) for r in t]==[0,0,0]:

print(*p)

Раздел кодификатора ФИПИ: 1.5.1 Вы­ска­зы­ва­ния, ло­ги­че­ские опе­ра­ции, кван­то­ры, ис­тин­ность вы­ска­зы­ва­ния