Размышления по поводу:
http://community.livejournal.com/znanie_vlast/148404.html
Джохадзе Д.В. Диалектика Аристотеля
Любая наука без своего технического инструментария и, соответственно, инструментального выхода на практику, близка к шаманским пляскам с бубном. Или же прямо совпадает с такими плясками, как, например, астрология. Но появляется телескоп – и главной наукой о звездах становится астрономия.
Для такого раздела философии как логика таким инструментом является логический автомат, в просторечии называемый компьютером. Соответственно, предыдущее двухтысячелетнее топтание на месте можно с некоторым основанием назвать шаманством. А званием великого шамана наградить, конечно, Аристотеля. (А современных аристотелеведов, типа Джохадзе ... но умолчим об этом...)
Пора, наконец, разоблачить тощую суть этих многотомных и многовековых мудрствований.
Для иллюстрации будет использоваться самая известная и вполне удачная реализация логики предикатов – язык программирования Пролог.
человек("Сократ"). //по-человечески: Сократ – человек.
Собственно предикат(сказуемое) здесь "человек", а объект(подлежащее) - "Сократ". Аргументов у предиката м/б много, тогда им можно сопоставить другие части речи. Никакого "среднего термина" (связки "есть") – он просто подразумевается и опущен за ненадобностью.
Такой простой предикат в Прологе называется фактом.
А вот пример более сложной разновидности предикатов – правила:
смертен(Х):- человек(Х). //Если Х – человек, то он смертен. (Но не наоборот!)
Теперь можно задать цель: смертен("Сократ"). И получаем ответ: истина.
Чтобы это правило было интересней, имеет смысл его дополнить
смертен(Х):- зверь(Х). // можно было записать сразу смертен(Х):- человек(Х); зверь(Х). Для краткости и наглядности логическое "и" заменяют на знак "," , а "или" на ";"
зверь(Х):- кошка(Х); собака(Х). // Зверь – это кошка или собака.
кошка(Х):- имеет4ноги(Х), мяукает(Х). //У кошки 4 ноги и она мяукает.
собака(Х):- имеет4ноги(Х), лает(Х).
лает("Жучка"). мяукает("Мурка"). имеет4ноги("Жучка"). имеет4ноги("Мурка").
Теперь в ответ на кошка("Мурка") получаем ответ истина, а на собака("Сократ") или человек("Жучка") – ложь.
Результаты эти получаются в процессе логического вывода (бэктрекинга), когда машина, подставляя в правила заданный аргумент, обходит все ветви дерева вариантов до первого истинного результата (или специального оператора отсечка '!', который прерывает дальнейший перебор). Если истинный результат так и не получен – значит ложь.
Если же аргумент задан в виде неизвестной (Х), то ей присваивается первое подходящее значение, ведущее к истинному результату: кошка(Х) – да, кошка("Мурка"). Или же выдаются все правильные варианты.
Циклы описываются с помощью рекурсии и отсечки по достижению конечного условия цикла (на практике компилятор по возможности оптимизирует рекурсию в простой цикл). Вместо массивов используются списки. На каждом шаге рекурсии они последовательно делятся на голову и хвост. Поэтому Пролог не очень подходит там, где требуется произвольный доступ к элементам массивов.
Теперь посмотрим, какие философские глубины скрываются за всей этой технологией.
1. В процессе логического вывода неявно применяются законы логики: тождества – при сопоставлении аргумента факту; противоречия и исключения третьего – при применении правил. Нет запрета на написание противоречащих друг другу правил, но применено будет только одно – первое, оказавшееся истинным.
2. Категория сущность.
Факт определяет сущность (первичную), а правило – вторичную сущность.
"Категория сущности является отражением реальных свойств окружающих предметов" (Джохадзе, стр.128).
3. Категории общее и единичное.
Факт – единичное. Правило – общее.
Каждая предметная область (область применения логических автоматов, как статистика, бухучет, обработка текстов, моделирование того и сего, АСУ ТП и пр. и т.п., со своими подразделами ) определяется своим набором категорий. Для родственных областей можно вывести более общие категории. Аристотель знал весьма ограниченное количество предметных областей. Поэтому попытался определить некоторое окончательное количество категорий, смешав в одну кучу самые общие (как сущность) со случайными частными. На эту его ошибку в дальнейшем неоднократно указывали др. философы.
Только Канту удалось определить наиболее универсальные категории.
"Родоначальник классического немецкого идеализма И. Кант попытался дать учению о категориях более глубокое обоснование, думая, что категории соответствуют логическим функциям мышления в суждении. Утверждая, что категорий должно
быть столько же, сколько существует форм суждений, Кант делил их на четыре класса: количества, качества, отношения и модальности. К каждому классу немецкий философ относил по три категории; таким образом, Кант получил всего 12 категорий..."( Джохадзе, стр.122).
Эти 4 класса категорий каждый программист применяет на практике:
- качество – разные типы данных;
- количество – значения, которые принимают эти данные;
- отношения – всевозможные операции над данными (логические, арифметические и т.д.);
- модальность – состояние программы в процессе работы (как бы имитация хода времени), совокупность значения всех данных и текущего выполняемого шага программной инструкции.
Этими категориями исчерпывающе описывается процесс составления программы и работа логического автомата.
Т.о., каждый программист является практикующим логиком, хотя и не склонным к философским обобщениям.
4. Дедукция и индукция.
Процедура логического вывода, очевидно, и является той самой знаменитой дедукцией. Механический перебор всех логических комбинаций с железной необходимостью обеспечивает нахождение истины, неявно содержащейся в исходных посылках, если она там есть. Для такой работы не обязательно быть человеком.
Что же такое обратная процедура – индукция? Разумеется, индукция – это составление тех самых правил, исходных посылок, из которых состоит логическая модель предметной области.
Из примера ("Зверь – это кошка или собака.") хорошо видна неполнота индукции. В данном случае – вопиющая неполнота. Но даже если добавить в определение всех зверей, она всё равно будет неполной, т.к. сохранятся спорные случаи: зверь ли утконос или человек? Но для практических задач полнота и не нужна.
Индукция требует творческого подхода и последующей проверки практикой. Способностью к индукции (что связано с необходимостью ставить перед собой новые цели) отличается человеческий интеллект от машинного. С помощью дедукции невозможно реализовать индукцию того же порядка, только более низкого. Например, в Прологе можно динамически добавлять новые факты в базу знаний (т.е. программа сама по ходу работы может получать новые знания), но новые правила добавлять нельзя, даже непонятно, как это можно было бы сделать. Конечно, можно измыслить супер экспертную систему, способную генерировать новые правила, но эти правила будут лишь конкретизацией уже заложенных в эту систему более общих понятий и правил.
Т.о., искусственный интеллект всегда будет лишь реализацией крайне ограниченной части человеческого интеллекта.