2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Отрицание через дизъюгкцию
Сообщение16.09.2017, 16:37 


03/06/12
2763
Здравствуйте! Попалась такая задача:
Изображение
Это что, формализацию, к примеру, места условия "$A$ не тождественно $X$" надо делать так: $(A=\text{Ж})\vee(A=\text{У})\vee(A=\text{Т})$? Просто у меня есть склонность к откапыванию ненужно сложных решений. Есть подозрение, что и в этом случае идея неоправданно сложная.

 Профиль  
                  
 
 Re: Отрицание через дизъюгкцию
Сообщение16.09.2017, 17:25 
Заслуженный участник


27/04/09
28128
Т. е. подразумевается, что первые четыре попарно не равны и вторые четыре тоже попарно неравны, но при этом каждый первый равен кому-то из вторых (и требуется найти, какой какому)? Тогда так, как вы написали, по крайней мере можно делать. Насколько продуктивно, не знаю.

 Профиль  
                  
 
 Re: Отрицание через дизъюгкцию
Сообщение16.09.2017, 21:45 


03/06/12
2763
arseniiv в сообщении #1248193 писал(а):
Т. е. подразумевается, что первые четыре попарно не равны и вторые четыре тоже попарно неравны, но при этом каждый первый равен кому-то из вторых (и требуется найти, какой какому)

Дык вот об этом можно только догадываться, что подразумевается, а что нет.

-- 16.09.2017, 23:17 --

Сейчас пришло в голову. Еще вот это
Sinoid в сообщении #1248179 писал(а):
"$A$ не тождественно $X$"

можно еще и трактовать как "$X$ не тождественно $A$" - дополнительные конъюнкты...

 Профиль  
                  
 
 Re: Отрицание через дизъюгкцию
Сообщение17.09.2017, 12:24 


14/01/11
2919
Если совсем формально подходить, можно каждому возможному тождеству сопоставить свою булеву переменную:
А=Ж - x1
А=Х - x2
А=У - x3
А=Т - x4

В=Ж - x5
В=Х - x6,
...
Д=Т - x16.

Потом выписать все условия, которым они должны удовлетворять. Так, помимо условий 1-5, явно указанных в задаче, необходимо указать, что, к примеру, из всех переменных 1-й группы x1 - x4 истинное значение может принимать одна и только одна, x1 и x5 не могут быть истинными одновременно и т.д.
Ну и в конечном счёте преобразовать полученную формулу в ДНФ, чтобы увидеть все решения. Эту часть, на мой взгляд, лучше поручить компьютеру. :-)

 Профиль  
                  
 
 Re: Отрицание через дизъюгкцию
Сообщение17.09.2017, 20:14 


03/06/12
2763
Sender в сообщении #1248391 писал(а):
Ну и в конечном счёте преобразовать полученную формулу в ДНФ, чтобы увидеть все решения. Эту часть, на мой взгляд, лучше поручить компьютеру. :-)

И ответ стопудово не совпадет с книжным: задача еще из советской книги, тогда доступ к компам был ограничен, так что, наверняка, задача рассчитана на ручное решение.

(Оффтоп)

Sender в сообщении #1248391 писал(а):
Эту часть, на мой взгляд, лучше поручить компьютеру. :-)

А вы знаете софт, который выдает СДНФ, СКНФ и т. п.? Только не онлайновый.

 Профиль  
                  
 
 Re: Отрицание через дизъюгкцию
Сообщение17.09.2017, 20:57 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Sinoid в сообщении #1248511 писал(а):
А вы знаете софт, который выдает СДНФ, СКНФ и т. п.?
Wolfram Mathematica: BooleanConvert.

 Профиль  
                  
 
 Re: Отрицание через дизъюгкцию
Сообщение17.09.2017, 21:02 


14/01/11
2919
Sinoid в сообщении #1248511 писал(а):
И ответ стопудово не совпадет с книжным

Думаете, в советское время пользовались какой-то другой логикой? :-)

Конечно, можно и вручную решить. Возможных вариантов соответствия не так много - всего-то 24. Тут применять матпакет было бы и впрямь из пушки по воробьям, а так можно взять любой, способный управляться с символьными вычислениями в булевой алгебре.

Для решения вручную можно применить что-то вроде перебора с возвратом, только желательно выбирать предположения, отсекающие побольше вариантов.

 Профиль  
                  
 
 Re: Отрицание через дизъюгкцию
Сообщение17.09.2017, 21:29 


03/06/12
2763
Aritaborian в сообщении #1248515 писал(а):
Wolfram Mathematica: BooleanConvert
.

Там же покупать надо...
Sender в сообщении #1248518 писал(а):
Думаете, в советское время пользовались какой-то другой логикой? :-)

Как раз так я не думаю. Я думаю, что с первого раза из-за допущения довольно-таки вольной трактовки условия задачи ответ не совпадет, прокапаюсь где-то день с эквивалентными преобразованиями вариантов, а с матпакетом бы за 5 сек.

-- 17.09.2017, 22:32 --

Sender в сообщении #1248518 писал(а):
а так можно взять любой, способный управляться с символьными вычислениями в булевой алгебре.

Так а вы конкретно какой-нибудь можете порекомендовать? (Бесплатный).

 Профиль  
                  
 
 Re: Отрицание через дизъюгкцию
Сообщение17.09.2017, 21:48 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Sinoid в сообщении #1248524 писал(а):
Там же покупать надо
Надо было сразу уточнять, что хотите бесплатный. И потом, можно скачать пробную версию на 15 дней. Не говоря уж о возможных дальнейших, хм, незаконных с ней манипуляциях :roll:

 Профиль  
                  
 
 Re: Отрицание через дизъюгкцию
Сообщение17.09.2017, 22:11 


03/06/12
2763
Aritaborian в сообщении #1248527 писал(а):
И потом, можно скачать пробную версию на 15 дней. Не говоря уж о возможных дальнейших, хм, незаконных с ней манипуляциях :roll:

Но, к сожалению, не мне. Мне бы ваши навыки, да математику arseniiv'а.

 Профиль  
                  
 
 Re: Отрицание через дизъюгкцию
Сообщение17.09.2017, 23:03 


14/01/11
2919
Sinoid в сообщении #1248524 писал(а):
Так а вы конкретно какой-нибудь можете порекомендовать? (Бесплатный).


Ну вот чтобы далеко не ходить, есть онлайновая wolframalpha, например. А так - SymPy вроде что-то такое умеет.

-- Вс сен 17, 2017 23:04:26 --

Руками посчитать и впрямь может оказаться проще. :-)

 Профиль  
                  
 
 Re: Отрицание через дизъюгкцию
Сообщение17.09.2017, 23:38 
Заслуженный участник


27/04/09
28128
Sinoid в сообщении #1248511 писал(а):
И ответ стопудово не совпадет с книжным
Ну давайте сравним.

(Тут ответ и решение.)

Код:
(* Wolfram Mathematica 8 *)
abcd = {a, b, c, d};  (* АБСД *)
wxyz = {w, x, y, z};  (* ЖХУТ (кажется очевидным, что это WXYZ) *)

(* все возможные варианты в виде списка списков пар равных атомов *)
arrangements = Table[MapThread[{#1, #2} &, {abcd, wxyzn}],
    {wxyzn, Permutations[wxyz]}];

(* возможные равенства атомов (список пар) *)
possibilities = Join @@ Table[{i, j}, {i, abcd}, {j, wxyz}];

(* неявные ограничения на равенства и неравенства атомов *)
eqs0 = Or @@ Map[And @@ # &,
    Table[If[MemberQ[arr, p], e @@ p, ! e @@ p],
        {arr, arrangements}, {p, possibilities}]];

(* все ограничения, включая явные *)
eqs = eqs0 &&
    (! e[a, x] \[Implies] ! e[c, y]) &&
    (e[b, y] || e[b, z] \[Implies] e[a, x]) &&
    (! e[c, w] \[Implies] e[b, z]) &&
    (e[d, y] \[Implies] ! e[b, x]) &&
    (! e[d, x] \[Implies] e[b, x]);  (* в редакторе \[Implies] выглядит как ⇒ *)
eqs // LogicalExpand // Resolve
(* в выбранном мною пути без LogicalExpand не срабатывает, читайте предложение Aritaborian *)
(* зато с этим Resolve удачно выдаёт СДНФ (кажется, иногда не выдаёт, не помню) *)

Ответ:

Код:
e[a, y] && e[b, x] && e[c, w] && e[d, z] &&
    ! e[a, w] && ! e[a, x] && ! e[a, z] && ! e[b, w] &&
    ! e[b, y] && ! e[b, z] && ! e[c, x] && ! e[c, y] &&
    ! e[c, z] && ! e[d, w] && ! e[d, x] && ! e[d, y]

То есть, в наших терминах, А = У, Б = Х, С = Ж, Д = Т.

P. S. Знаю, что это в текущем контексте не совсем уместно, но уже переписал сюда код (а написал я его днём, заинтересовавшись единственностью и существованием решения), когда увидел новые ответы, а удалять не хочется… Вообще приводилку к СДНФ можно довольно быстро написать (заодно попрактиковавшись в понимании алгоритма в учебнике!). Вот задавать ей исходную формулу вручную я бы постеснялся, а чтобы генерировать её, нужно или добавлять к приводилке нехилый скриптовый движок, или, что выглядит разумнее, сгенерировать задание на том же языке, на котором написана она сама. Но любая смена задании тогда потребует перекомпиляции, если язык компилирующийся. Если б я хорошо разбирался в Python, посоветовал бы его — там и DSL должно быть легко сделать, чтобы вводить куски формул красиво и легко.

 Профиль  
                  
 
 Re: Отрицание через дизъюгкцию
Сообщение18.09.2017, 21:39 


03/06/12
2763
arseniiv, ответ-то правильный, только мне ваш код, к сожалению, вставить некуда (не для этой задачи, а на будущее).

 Профиль  
                  
 
 Re: Отрицание через дизъюгкцию
Сообщение18.09.2017, 22:00 
Заслуженный участник


27/04/09
28128
Да это я просто кому интересно.

 Профиль  
                  
 
 Re: Отрицание через дизъюгкцию
Сообщение18.09.2017, 22:29 


03/06/12
2763
Sender в сообщении #1248518 писал(а):
Конечно, можно и вручную решить. Возможных вариантов соответствия не так много - всего-то 24

А, вы вот к чему. Нет, задача явно рассчитана не на этот способ решения, она дана после изучения равносильности формул.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group