Естественно задать вопрос, отчего ученые выбрали именно этот мирок? Ну, понятно, он однообразен - легче делать программу. Ну, естественно, он формализован - еще удобнее для програмхмиста. Удобств много, а польза от него какая? Можно ли заставить "Логика-теоретика" сделать что-то практическое?
Кажется, и пробовать не стоит. Абстрактный и бесцветный, бродит "Логик-теоретик" на дальней окраине математики, никак не касаясь практических дел. Но в его абстрактности и в его бесцветности есть серьезные достоинства.
Абстрактный - значит подчиненный правилам формальной логики, законам исчисления предикатов. Это исчисление, конечно, далеко не исчисление человеческих мыслей, но кое-что, но некоторые черты, но серьезные оттенки человеческого мышления уловлены им верно, формализованы, превращены в алгебру. И потому средствами исчисления предикатов удается описать условия многих практических задач.
Бесцветный - значит не окрашенный в собственные цвета каждой задачи, значит, не однодум. Эвристики, добытые при доказательстве логических теорем, не узкие, как эвристики САИНТа, а общие, широкие, способные браться за разные задачи, описанные языком исчисления предикатов.
Абстрактность и бесцветность "Логика-теоретика" не уход от мышления человека, а приближение к нему настолько, насколько позволяет нынешняя математика. Кроме доказательства 38 теорем булевой алгебры, "Логик-теоретик" принес 39-е доказательство: наметил дорогу, по которой от программ-однодумов можно перейти к программам Искинта, решающим разные задачи. "Логик-теоретик" стал пробным камнем в поисках "Общего Решателя Задач".
Согласитесь, читатель, название новой программы выглядит странно. Что значит "общий" - принадлежащий всем, что ли? Нет, конечно, это ошибка перевода с английского языка на русский, ошибка, прижившаяся, ставшая привычной в специальной литературе. На самом деле А. Ныоэлл, Г. Саймон и К. Шоу назвали свою программу решателем всяких задач, или, если угодно, любых задач.
Итак, "решатель любых задач"! Теперь правильно, но длинно, целых три слова; переставим эти слова и, сократив, получим: ЛЮБОЗАР - ЛЮБой ЗАдачи Решатель. Надеюсь, читатель простит эту вольность; имя ЛЮБОЗАР мне нравится, в нем и любовь, и заря, и мужество.
Любозар
ЛЮБОЗАР действительно решает непохожие друг на друга задачи. Интегрирует функции, перестраивает "Ханойскую башню", доказывает теоремы булевой алгебры (эту способность он явно унаследовал от "Логика-теоретика"), проводит грамматический разбор английских предложений. ЛЮБОЗАР - свой человек в мире головоломок; задачи о кувшинах с водой, трех монетах, отце и сыновьях, миссионерах и людоедах - он раскусил их все.
Храбро взялся он и за знаменитую задачу о семи кенигсбергских мостах. Откуда ему, рожденному в наши дни, знать, что этими мостами в 1736 году интересовался знаменитый математик Л. Эйлер?
Задача была сугубо практической. Город Кенигсберг пересекает река Прегель, омывающая остров Кнейпхоф; через реку переброшено семь мостов. Может ли пешеход обойти все мосты один за другим, пройдя по каждому только один раз? Жители Кенигсберга, говорят, пытались решить эту задачу и головой и ногами, но тщетно. И обратились за помощью к Л. Эйлеру.
Ученый доказал, что экскурсия по семи мостам невозможна. Но ЛЮБОЗАР ничего не знал про неразрешимость задачи. Он трудился изо всех сил, нашел два маршрута по шести мостам, а по семи, естественно, ни одного. Память ЭВМ переполнилась, ЛЮБОЗАР изнемог и сдался, отпечатав: "Исчерпаны все методы для всех целей. Неуспех". О каких методах он говорит? И о каких целях?
Пора, по нашему обыкновению, проникнуть внутрь программы.
Главными ее шестернями служат четыре эвристики, которые авторы назвали методами. Четыре метода у ЛЮБОЗАРа, и каждый из них достоин отдельного рассказа.
Метод первый: "Действую!" Он самый простой и самый прямолинейный из всех любозаровских методов. Когда к данной ситуации можно применить какие-нибудь действия, известные программе, она непременно это сделает. Уточним наше "можно применить". Вспомним, ЭВМ перерабатывает "слова" и ничего, кроме "слов". Один из видов машинной переработки - сличение двух "слов". Пусть первое из "слов" описывает задачную ситуацию (начальную или промежуточную), а второе - стартовые условия для применения данного действия. Если эти два "слова" побуквенно совпадают, действие совершается, а если нет, то ничего не происходит. Например, если первое "слово" выглядит так: "человек стоит возле моста", а второе "слово" так: "возле моста стоит человек", то ЭВМ считает их разными "словами". Получается уж чересчур жестко и тупо; чтобы хоть немного смягчить неловкость, авторы ЛЮБОЗАРа включили в программу преобразователь "слов" в стандартную форму. Он причесывает "слова" на один фасон и после этого шлет их на сличение. В нашем примере действие совершится, ибо по сути оба "слова" одинаковы.
Написал я "по сути" и испугался. Никогда не надо забывать, что ЭВМ не понимает "сути"; сличить стандартные формы - пожалуйста, если "суть" заключена в этом - отлично; но если в понятии "суть" скрыто еще что-то туманное, то машине это невдомек и недосуг.
Второй метод ЛЮБОЗАРа мы назовем "Уменьшаю различия!". С его помощью машина стремится приблизиться к решению задачи. Она перебирает действия одно за другим и примеряет их к сложившейся ситуации. Если какое-то из действий производит положительный эффект, машина немедленно переходит к методу "Действую!". Старая ситуация сменяется новой, более благоприятной.
Третий метод ЛЮБОЗАРа - "Преобразую!". Он перестраивает, переделывает, перелицовывает ситуации. Была, положим, ситуация "пройден третий мост", а машина стремится переделать ее в ситуацию "пройден пятый мост". Она сличает эти две ситуации и выясняет, в чем состоят различия. Потом стремится стереть различия, пользуясь методом "Действую!". Если сразу не выходит, пытается хотя бы сократить различия, пуская в дело метод "Уменьшаю различия!", в результате чего удается перейти, скажем, от ситуации "пройден третий мост" к ситуации "пройден четвертый мост".
Прогресс налицо, и метод "Преобразую!" пытается идти дальше. Получится, машина вновь уменьшит различия и, чем черт не шутит, через несколько шагов сотрет вовсе, а не получится, что ж, выходит, метод "Преобразую!" здесь бессилен. Беда еще невелика, поскольку ЛЮБОЗАР владеет четвертым методом.
"Пренебрегаю мелочами, штурмую главное!" - вот девиз этого метода. Руководимая им машина отбрасывает некоторые черты рассматриваемой ситуации, отвлекается от мелочей и возникает новая - абстрактная - ситуация. Работа ведется теперь с этой абстрактной ситуацией, обычная работа ЛЮБОЗАРа, состоящая в разнообразных применениях трех других его методов для уменьшения и стирания различий. Когда он сотрет их, уничтожит различия, что же получится? Опять абстрактная ситуация, пусть замечательная, но абстрактная. Нужно опустить ее с неба на землю, вернуться к живой задаче, и ЛЮБОЗАР это делает.
Помните, решая задачу о кенигсбергских мостах, ЛЮБОЗАР напечатал: "Исчерпаны все методы для всех целей"? Теперь понятно, о каких методах речь. Методы ЛЮБОЗАРа, его золотой фонд - это эвристики, применимые для любых задач, пригодные на все случаи жизни.
А цели? Как обстоит дело с целями?
Присмотримся к ходу рассуждений программы. Вообразим, что к ней обратился некий молодой человек и попросил помочь ему жениться на кинозвезде. ЛЮБОЗАР, узнав у юноши все необходимые подробности, принимается рассуждать примерно так: "Я хочу жениться на кинозвезде. В чем различие между желаемым и действительным? В том, что кинозвезда меня не любит. Как сократить это различие? Понравиться девушке. Но нельзя понравиться, не познакомившись. Значит, моя цель - познакомиться. А средства к достижению цели? Пожалуй, справочное бюро; узнаю там адрес и буду бродить под ее окнами, пока она случайно не выйдет. Она-то выйдет, но хватит ли у меня смелости? Ой нет! Парни, не робеющие познакомиться на улице с девушкой, да еще с кинозвездой, и ростом повыше, и выглядят получше, чем я. Надо ликвидировать различия. В росте" - куплю туфли на платформе; во внешности - побреюсь, а то зарос, как полярник. Остается одно различие: они смелые, а я стесняюсь, не могу вдруг подойти к незнакомому человеку, думаю, что неинтересен ему. Как побороть стеснение? Попытаюсь прежде познакомиться хоть с какой-нибудь девушкой".
Ход рассуждения ЛЮБОЗАРа можно назвать анализом целей и средств. От главной своей цели, так сказать суперцели, программа переходит к средствам для ее достижения. Средства, если их нет у нас в руках, если для приобретения их приходится тратить умственные усилия, сами становятся целями более низкого, чем суперцель, уровня. Для достижения их требуются свои средства, и опять нет гарантии, что они доступны просто так. Значит, появляются подцели, и для них выискиваются подходящие средства.