Логическая игра Кэрролла!, Силлогизмы |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Логическая игра Кэрролла!, Силлогизмы |
Руслан |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Руслан Репутация: 0 |
Ребяты, нужно написать программу, которая бы решала Силлогизмы, самые обыкновенные (хотя бы) с двумя посылками. Не могу разработать алгоритм! Может кто-нить может подсказать что по этому поводу, а то ощущаю себя полным дураком!
|
Michael_Rybak |
Сообщение
#2
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Цитата Сначала определяешь M, потом S и P. Сразу получаешь фигуру... Это что касается классификации. А вот что касается решения. Силлогизм записываешь в терминах теории множеств. Код Все А суть В - A^B = A - -A^ B пусто Все А не суть В - A^-B = A - -A^-B пусто Некоторые А суть В - A^ B не пусто Некоторые А не суть В - A^-B не пусто Некоторые А суть не В - A^-B не пусто Ни один А не суть В - А^ B пусто Ни один А не суть не В - А^-B = A - A^ B = не пусто Записываешь обе предпосылки в такой форме. Получается, у тебя есть утверждения для (M, P) и для (S, M), а тебе надо для (S, P). Т.е. тебе нужно получить S ^ P, S ^ -P, -S ^ P, -S ^ -P. Для каждого из мы либо скажем, пусто ли оно, либо скажем, что сказать нельзя. Для этого переберем все способы заполнения такой матрицы Код S M P ? 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 В каждой строке мы запишем в четвертом столбике либо "пусто", либо "не пусто", и проверим, чтобы обе предпосылки выполнялись. Например, "не пусто", записанно в пятой строке (1 0 0) означает, что пересечение множеств S, -M и -P - не пусто. Поскольку нас интересует результат сравнения S и P, то, если обе предпосылки выполняются, мы вычисляем S^P, S^-P, -S^P и -S^-P, постоянно накапливая результат. Как проверять, выполняются ли предпосылки, и накапливать результат, лучше сразу посмотреть на примере. Все люди смертны Некоторые ученые люди _______________ Некоторые ученые смертны. S = ученые, M = люди, P = смертны Пусть в переборе сейчас получена такая матрица: Код S M P ? 0 0 0 не пусто 0 0 1 пусто 0 1 0 пусто 0 1 1 не пусто 1 0 0 пусто 1 0 1 не пусто 1 1 0 не пусто 1 1 1 пусто Проверим предпосылки Все люди смертны = M ^ P = M = -М ^ P пусто Некоторые ученые люди = S ^ M не пусто Проверим, что -М ^ P пусто. Выполняем операции так: V берет лучшее из двух ("пусто" хуже "не пусто"). -M ^ P = -M^P^S V -M^P^-S = S^-M^P V -S^-M^P = f(101) V f(001) = "пусто" V "пусто" = "пусто". Проверим, что S ^ M не пусто. S ^ M = S^M^P V S^M^-P = f(111) V f(110) = "пусто" V "не пусто" = "не пусто". Предпосылки выполняются. Вычисляем S^P, S^-P, -S^P и -S^-P. Рассмотрим, например, S^P. S^P = S^P^M V S^P^-M = S^M^P V S^-M^P = f(111) V f(101) = "пусто" V "не пусто" = "не пусто". Итак, только что получен результат: существует возможность того, что предпосылки выполняются, и S^P не пусто. Если потом, для других вариантов заполнения матрицы (всего их 2^8), будет получен результат, существует возможность того, что предпосылки выполняются, и S^P пусто, это будет означать, что из данного силлогизма нельзя однозначно сказать, пусто ли S^P. То же самое проделываем для S^-P, -S^P и -S^-P. В результате получаем выводы, которые толкуем по той же таблице: Код Все А суть В - A^B = A - -A^ B пусто Все А не суть В - A^-B = A - -A^-B пусто Некоторые А суть В - A^ B не пусто Некоторые А не суть В - A^-B не пусто Некоторые А суть не В - A^-B не пусто Ни один А не суть В - А^ B пусто Ни один А не суть не В - А^-B = A - A^ B = не пусто Твой препод довольно крут, если ему это всё (с классификацией) писать часа 3 ;) Может он все таки хочет чтобы ты просто всё if'ами расписал? Это будет проще. |
Текстовая версия | 17.05.2024 13:07 |