Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.intsys.msu.ru/study/practicum/solver.pdf
Дата изменения: Mon Sep 6 18:12:35 2010
Дата индексирования: Mon Oct 1 21:59:20 2012
Кодировка: Windows-1251
План занятий по практикуму Компьютерный решатель задач (А.С. Подколзин)
Целью практикума является приобретение простейших навыков компьютерного моделирования логических процессов. Практикум будет проходить в форме еженедельных семинарских занятий, на которых предполагается ознакомиться с архитектурой и языками решателя задач, а также подробно разобрать упражнения по работе с ним на уровне пользователя и по обучению решателя. Примерный список таких упражнений приводится ниже. Все они снабжены детальными указаниями. В качестве справочного пособия можно использовать книгу "А.С.Подколзин. Компьютерное моделирование логических процессов имеющуюся на кафедре, в том числе в виде электронной версии. Для получения зачета необходимо будет выполнение трех сравнительно несложных индивидуальных заданий - по работе с решателем на уровне пользователя, по программированию на ЛОСе, и по созданию новых приемов. Ниже приводится план занятий: 1. Знакомство с общей арихитектурой решателя. Логический язык решателя. Представление задач в решателе. 2. Организация базы приемов решателя. Схема сканирования задачи. Трассировка процесса решения задачи. 3. Простейшие навыки работы с решателем на уровне пользователя. 4. Алгоритмический язык ЛОС для записи приемов решателя. Упражнения по программированию на ЛОСе. 5. Задание приемов на уровне логического языка предметной области. Язык задания приемов ГЕНОЛОГ как связующее звено между логическим языком и языком программирования. 6. Редактор приемов и отладчик ГЕНОЛОГа. Упражнения по анализу процессов решения.

1


7. Упражнения по программированию на ГЕНОЛОГе и дополнительному обучению решателя. 8. Простейшие средства автоматизации синтеза приемов.

1. Упражнения по работе с решателем
Ввести перечисленные ниже задачи в соответствующие разделы задачника и просмотреть процесс их решения.

1.1. Элементарная алгебра
1. Упростить выражение:

1 4 + -1 - 2 + x 4x
2. Решить уравнение:

2-2 1 1 + + 4x-1 x 2

x2 4 +1= x+2 x+2
3. Решить неравенство:



x2 + x - 6 + 3x + 13 >1 x+5

4. Решить систему уравнений:

(x + y )(x2 - y 2 ) = 16 (x - y )(x2 + y 2 ) = 40.
5. Решить уравнение:

(tg x)cos
6. Решить неравенство:

2

x

= (ctg x)sin

x

|x - 2|log
7. Для всех

4

(x+2)-log2 x

<1

a

решить неравенство

ax2 + (a + 1)x + 1 > 0.

2


8. При каких

a a

неравенство

sin6 x + cos6 x + a sin x cos x 0

выполнено для

всех значений 9. Найти все

x
2

?

, при которых из неравенства

x2 - a(1 + a2 )x + a4 < 0

следует

неравенство 10. При каких

x + 4x + 3 > 0.
система

a

x2 + y 2 = 2(1 + a) (x + y )2 = 14
имеет ровно два решения ?

Указания
1. Находясь в главном меню, выбрать пункт "Оглавление задачника" (клавиша "з" либо левая кнопка мыши в прямоугольнике указанного пункта). Используя клавиши курсора, найти в корневом меню оглавления раздел "Элементарная алгебра" (возможно, сначала понадобится несколько раз нажать "курсор влево"). Войти в этот раздел, далее войти в подраздел "Упрощение выражений затем - в любой из подразделов "Упрощение иррациональных выражений - 1,2,3". В действительности выбор раздела несущественен; решатель будет работать вне зависимости от того, в каком разделе находится задача, и классификация задач по разделам нужна лишь для упрощения поиска нужной задачи вручную. Используя "PageDown" либо "курсор вниз вывести на экран последний пункт выбранного концевого раздела (все его пункты - номера с тремя штрихами). Затем нажать клавишу "к" (кир.) для создания бланка новой задачи. Далее нажимается "ц" и в оглавлении типов целевых установок выбираются разделы "Преобразовать выражение" - "Упростить выражение в области допустимых значений причем после выбора последнего пункта нажимается "курсор вправо". Экран расчищается, и в верхней его части возникает текст "Упростить в о.д.з. выражение:". Далее нажимается "Enter и формульным редактором вводится упрощаемое выражение. В процессе набора можно получать справки о клавиатуре формульного редактора, нажимая F1. Точнее, нажатие F1 переводит в общее оглавление справочника по системе, и из его корневого меню нужно перейти в раздел "Формульный редактор". Далее полезно прочитать раздел "общие сведения"; для получения информации о вводе конкретных символов - переходить в соответствующие подразделы. Чтобы вернуться в набор формулы, достаточно нажать "End". По завершении набора упрощаемого выражения нажимается "Enter". В данном примере задача оказывается полностью введенной, и для решения ее без пошаговой трассировки

3


нажимается "о" (кир.), а для входа в пошаговую трассировку (она отображает лишь верхний уровень процесса решения - срабатывания приемов; такую трассировку, в отличие от отладочной трассировки, называем далее семантической) нажимается "р". Каждый очередной шаг трассировки - нажатие "Enter". Если в некоторый момент под кадром, поясняющим текущее действие, оказываются расположены другие кадры, то эти последние суть кадры обращений к вспомогательным задачам, решавшимся для выполнения текущего действия. Можно выбрать любой из них для детального просмотра решения вспомогательной задачи. При этом верхняя отделяющая линия кадра должна быть в точности верхней границей экрана; такое выравнивание обеспечивается клавишами "Ctr-курсор вверх либо вниз". Вход в решение вспомогательной задачи - нажатие "Enter". По завершении трассировки решения вспомогательной задачи нажатие "Enter"возвращает на предыдущий уровень (такое возвращение можно обеспечить в процессе трассировки нажатием "End"). 2. Действия аналогичны предыдущим, но выбирается раздел "Элементарная алгебра" - "Решение уравнений" - "Рациональные уравнения 1,2". Нажимаются "к "ц и выбирается раздел оглавления целевых установок "Найти значения неизвестных" - "Получить полное явное описание значений неизвестных". На экране появляется текст "Найти под которым размещен курсор формульного редактора. Этим редактором вводятся неизвестные задачи (отделенные запятой) - в данном примере единственная переменная

x

. После нажатия "Enter"ввод целевой установки завершается. Для ввода

уравнения снова нажимается "Enter и далее происходит набор уравнения. 3. Действия аналогичны предыдущим, но выбирается подраздел для неравенств. 4. Для вводы системы уравнений и (или) неравенств сначала вводится целевая установка (аналогично предыдущему, но число неизвестных может быть более одной). Затем по отдельности вводятся условия - уравнения и неравенства; ввод каждого нового условия начинается с "Enter" и завершается "Enter". После ввода последнего условия задача готова к запуску решателя. 5. Аналогично задаче 2; тригонометрические операции вводятся последовательным набором двух (в особых случаях трех) первых латинских букв обозначения этих операций: синус - s,i; косинус - c,o; тагенс - t,g; котангенс c,t, и т.д. Заметим, что степень тригонометрической операции набирается нестандартным образом: сначала набирается вся операция, затем - курсор вверх, затем - показатель степени и "Enter". Тригонометрическая операция

4


относится к наименьшему расположенному после нее осмысленному выражению (суммы и произведения под такой операцией следует заключать в скобки), и степень оказывается относящейся не к аргументу операции, а ко всей операции. 6. Аналогично задаче 3; вертикальные отрезки модуля вводятся с помощью клавиш "Ctr-м" (лат.), для ввода логарифма последовательно вводятся буквы l,o, после чего набирается основание логарифма. После набора основания нажимается "Enter и набирается выражение под логарифмом (суммы и произведения следует заключать в скобки). 7. Аналогично предыдущей задаче; параметр

a

не включается в число неиз-

вестных задачи, и никак более не выделяется. 8. Неизвестной задачи служит переменная

a

. Условие ее набирается в виде

x (x -
Для ввода "

число

sin x6 + cos x6 + a sin x cos x 0). x
, затем нажимается /, затем "ч".

x-

число" сначала вводится

9. Аналогично предыдущему; условие набирается в виде:

x (x2 - a(1 + a2 )x + a4 < 0 x2 + 4x + 3 > 0.
Заметим, что понятие "следует" здесь трактуется таким образом, что если левая от стрелки часть ложная (в частности, неравенство слева вообще не имеет решений), то вся импликация истинна. Это приводит к тому, что концевые точки указанного в ответе промежутка (для них левое неравенство не имеет решений) отнесены к ответу. 10. Условие задачи состоит в том, что множество пар

(x, y ),

удовлетворяющих

уравнениям, имеет мощность 2. Оно записывается в виде

card(setxy (x2 + y 2 = 2(1 + a) & (x + y )2 = 14)) = 2.
1.2. Планиметрия
1. Основание равнобедренного треугольника равно

a

, угол при вершине равен

b

. Найдите биссектрису, проведенную к боковой стороне.

2. В трапеции

AB C D

с основаниями

P

лежит на стороне

AB

, а точка

AD Q-

и

BC

имеем

на стороне

AD = 3, B C = 1. Точка C D, причем отрезок P Q

параллелен основаниям и проходит через точку пересечения диагоналей трапеции. Найти длину отрезка

P Q.
5


3. Известно, что треугольников ромба

AB C D - ромб и радиусы окружностей, описанных около AB C и AB D соответственно, равны R и r. Найти площадь AB C D биссектриса угла B AD пересекает сторону C D DM /M C = 2. Известно, что угол C AM равен a. Найти AиC AB C , пересекает что AD = 5, AC =

AB C D

.

4. В параллелограмме в точке угол

M, B AD.

причем

5. Окружность проходит через вершины сторону

треугольника

AB в точке D и сторону B C 2 7, B E = 4, B D/C E = 3/2. Найти

в точке угол

E . Известно, C DB .

Указания
1. Вычислительные задачи по геометрии вводятся в следующем порядке: сначала набираются посылки задачи, перечисляющие известные свойства чертежа; затем вводится целевая установка задачи; затем указываются неизвестные величины, которые должны быть вычислены. Перед набором посылок можно ввести чертеж, однако чертеж может быть создан системой и автоматически (по окончании набора задачи нажимается "Ctr-ч"). При наборе посылок следует обязательно обозначить все точки, участвующие в задаче, буквами (обычно большими; можно использовать натуральные индексы). Ссылаться на плоские фигуры (треугольники, многоугольники, окружности, прямые, и т.д.) можно только через их "базисные" точки. В нашем случае обозначим вершины треугольника буквами

A, B , C

и введем первую посылку "

(AB C )".

Для ввода посылки нажи-

мается "Enter затем последовательно нажимаются клавиши "т "р"(обычно используются первые две буквы вводимого понятия). Это приводит к прорисовке символа с расположенной после него открывающей скобкой. Да-

лее последовательно нажимаются

A,B ,C

и закрывающая скобка, после че-

го - завершающее набор формулы "Enter". Никакие разделители между буквами не ставятся. Заметим, что если в обозначении треугольника либо другой фигуры используется буква с индексом, то после такой буквы, перед набором следующей, обязательно нужно нажать на клавишу "умножение" (звездочка). После ввода первой посылки (она указывает только на то, что три точки

A, B , C

образуют вершины некоторого треугольника, то есть не лежат

на одной прямой) нужно ввести посылку, определяющую, что треугольник равнобедренный. Выберем в качестве основания треугольника вершины

A, C

и введем посылку

l(AB ) = l(B C ).

Для обозначения расстояния

6


дважды нажимается клавиша "l что приводит к появлению рукописной латинской буквы

l

с идущей после нее открывающей скобкой. Затем (как в

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

a

, и посылка

l(AC ) = a, обозначающая длину основания треуголь(AB C ) = b - для величины угла при основании.

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

D

биссектрисы треугольника

B AC

, можно использовать посылку "Биссектреуг(

AB C , проведенной из B AC D)". Другой B AC D D
)".

способ (более громоздкий, но не использующий специального обозначения "Биссектреуг") - пара посылок "

D

прямая

(B C )

"биссектриса(

В первом случае нажимаем "И "Т и далее - как в случае обозначения треугольника, но для четырех букв. Во втором случае сначала вводим нажимаем пробел, , затем

b, e

(лат.; появляется символ

).

Далее нажимаем "п "р"

(кир.; появляется слово "прямая" с открывающей скобкой), вводим буквы

B, C

и закрывающую скобку. Для ввода "биссектриса(

...

)" нажимаем кла-

виши "и "т". На этом ввод посылок завершен. Для ввода целевой установки нажимаем клавишу "ц переводящую в оглавление типов целевых установок. Из корневого меню этого оглавления переходим к пункту "Найти значения неизвестных" - "Выразить значения неизвестных через заданные параметры". Заметим, что применявшийся в элементарной алгебре пункт "Получить полное явное описание значений неизвестных" в планиметрических задачах на вычисление НЕ следует использовать. Это объясняется принципиальным различием понятий "известная" и "неизвестная" в задачах из двух этих разделов. В элементарной алгебре все переменные из списка посылок по умолчанию считались известными и могли входить в ответ задачи. В геометрической задаче на вычисление посылки содержат обозначения точек

A, B , C, . . .

, которые не должны появляться в ответе. Соответственно разли-

чаются и типы выбираемых целевых установок. После выбора указанного типа целевой установки нажимается "курсор вправо". Далее сначала вводится буква (или несколько отделенных запятыми букв) для неизвестной (неизвестных) и нажимается "Enter". Затем вводятся разделенные запятыми буквы для известных числовых параметров, через которые должны быть выражены неизвестные (если таких параметров вообще нет, сразу нажимается "Enter иначе оно нажимается после ввода параметров). В нашем примере обозначим неизвестную длину биссектрисы через суть

x

; параметры

a, b.
7


После ввода целевой установки вводим равенства, связывающие неизвестные (переменные) с теми выражениями, которые они обозначают и которые нужно вычислить. В ответ войдет сама неизвестная, а не обозначаемое ею выражение. Как уже говорилось выше, после ввода задачи по планиметрии можно ввести чертеж - либо попробовать сделать это автоматически (нажатием "Ctrч"), либо ввести чертеж вручную (нажать "ч" и далее воспользоваться геометрическим редактором; чертеж появится перед списком посылок, в начале задачи). Можно также скорректировать вручную чертеж, созданный автоматически (вход в редактирование уже созданного чертежа - снова через "ч"; удаление чертежа - выделить его левой кнопкой мыши и нажать "Ctr-Del"). 2. Напомним, что в решателе предусмотрены два варианта обозначения трапеции: "трапеция(

AB C D

)" и "Трапеция(

AB C D

)" - первый из них для слу-

чая трапеции с большим основанием

AD

и острыми углами при основании;

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

A, B , C, D

являются вер-

шинами соответствующей трапеции. Сама трапеция (как и любой другой четырехугольник) обозначается посредством выражения "фигура(

AB C D

)".

В нашем примере годится любой из указанных способов записи. Например, введем посылку "трапеция(

AB C D

)". Затем вводятся посылки

l(AD) =

3, l(B C ) = 1. Принадлежность точки P стороне AB , а точки Q - стороне C D, записываются в виде P отрезок(AB ), Q отрезок(C D). Параллельность отрезка P Q основаниям трапеции записывается как прямая(P Q) прямая(AD ) Чтобы сформулировать условие о том, что отрезок P Q проходит через точку пересечения диагоналей трапеции, нужно ввести обозначение для этой

.

M . То, что M является точкой пересечения диагоналей, записываем как M прямая(AC ), M прямая(B D ). Далее добавляем посылку M отрезок(P Q). На этом ввод посылок заточки. Например, обозначим ее через вершается. Как и в предыдущей задаче, выбираем целевую установку и вводим единственное условие

x = l(P Q)

для неизвестной

x

.

3. Начинаем со ввода посылки "ромб(

AB C D

)". Так как в задаче речь идет

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

M, N

. В случае описан-

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

8


ка (например, около фигура(

A). Тогда добавятся посылки "окружность(M A) описана AB C )"; "окружность(N A) описана около фигура(AB D)".

Заметим, что хотя эти тексты кажутся достаточно длинными, набираются они весьма малым числом нажатий клавиш: сначала нажимаем "о "к" (кир.) - появляется слово "окружность" с открывающей скобкой. Затем вводим буквы

M, A

и закрывающую скобку. Далее нажимаем "Ctr-ф" - по-

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

A ,B , C

и

закрывающую скобку. Радиусы окружностей указываем с помощью посы-

l(M A) = R, l(N A) = r. При вводе целевой значение неизвестной x должно быть выражено раем условие x = S (фигура(AB C D )). Заметим,
лок нажатием клавиши большой латинской

установки указываем, что через

R, r s

. Наконец, наби-

что знак площади

S

здесь

вводится двукратным нажатием малой латинской буквы

; если его ввести

S

, то задача окажется набранной

неверно и не будет решена (вместо площади окажется введенным значение какой-то неопределенной функции

S

).

4. Вводятся посылки "параллелограмм(

AB C D) "биссектриса(B ADM ) M отрезок(C D ), l (D M )/l (M C ) = 2, (C AM ) = a. Затем выбирается целевая установка "Выразить x через a и вводится условие x = (B AD ). (AB C ), C окружность(P A), D окружность(P A), D отрезок(AB ), E окружность(P A), E отрезок(B C ), l(AD) = 5, l(AC ) = 2 7, l(B E ) = 4, l(B D)/l(C E ) = 3/2. Затем вводятся целевая установка и условие x = (C D B ).

5. Вводятся посылки

1.3. Математический анализ
1. Вычислить производную функции

e-x arcsin(e-x ) 1 + ln(1 - e 2 1 - e-2x2
2. Вычислить предел функции
x x+1 x2 +1 x

2

2

-2x

2

)

(2e
при

- 1)

x 0. 3 y = (x - 5) x
2.

3. Исследовать поведение функции

4. Найти точки экстремума для функции

y = x2 - ln(x2 ).

9


5. Исследовать на непрерывность функцию 6. Найти неопределенный интеграл

y = arctg(1/x + 1/x - 1 + 1/x - 2)

.

2 sin x - cos x + 3 dx 3 sin x + cos x + 1
7. Вычислить определенный интеграл

ln2 0

ex - 1dx |x - y 2 | (x, y ) : |y | 1, 0 y2 =
b2 a

8. Вычислить двойной интеграл от

по области

x 2.
9. Найти площадь области, заключенной между параболой

x

и прямой

y=

b x; a

0 < a, 0 < b. x2 ay bx, x2 + y 2 hz 2x2 + 2y 2 ; 0 < a, 0 < b, 0 < h. z = xy , x2 + y 2 R p
2
.

10. Найти объем тела

11. Найти площадь поверхности

12. При каких значениях параметра

сходится ряд



i=1

1 sin ? p i i x
в точке 0 функцию

13. Разложить в ряд Тейлора по переменной

y = (x - tg x) cos x
14. Разложить в ряд Фурье на отрезке 15. Найти сумму ряда

[- , ]

функцию

y = ( 2 - x2 )

2

.



n=1

3n2 + 3n + 1 . n3 (n + 1)3

10


Указания
1. Прежде всего нужно войти в оглавление целевых установок и выбрать пункт "Упростить выражение в области допустимых знчений". Затем набирается производная указанного выражения. Она вводится как дробь вида

dA ; dx

A

- дифференцируемое выражение. После символа

d

нужно ставить

знак умножения; дифференцируемое выражение заключается в скобки. В принципе, переменную

d

можно использовать и внутри выражения

A



даже взять ее в качестве некоторой точке

x

. Если нужно найти значение производной в

t

, то вместо

dx

набирается

d(x = t)

, причем и здесь после

d

ставится знак умножения.

2. Снова вводится установка "Упростить выражение в области допустимых значений". Затем набирается условие: сначала нажимаются клавиши появляется символ ем

l, i

-

lim,

справа внизу от которого размещен курсор. Набира-

x0 lim.

(стрелка вводится клавишей "курсор вправо") и нажимаем Enter

- курсор перемещается вверх в ту же строку, в которой расположен символ Здесь набираем выражение под знаком предела. Это выражение

обязательно нужно заключить в скобки, иначе знак предела будет отнесен к минимальному осмысленному его началу. В нашем примере, если не заключить все выражение в скобки, то степень окажется вне предела и ответ будет другим. 3. Выбирается целевая установка "Исследовать поведение функции в которой указывается обозначение функции 3 y = x ((x - 5) x2 , x - число). - переменная

y

. Затем вводится условие

4. Выбираем переменные, которые будут обозначать, соответственно, точку экстремума, значение функции в этой точке, и тип экстремума (максимум либо минимум). Например, пусть это будут переменные

u, v , w

. Вводим це-

левую установку "Найти полное явное описание значений неизвестных" в которой указываем выбранные неизвестные. Затем вводим условие

E xtr(x (x2 - ln(x2 ), x -

число

), u, v , w).

Аналогично вводятся задачи на поиск множества точек минимума либо максимума некоторой функции внутри заданной области, но число неизвестных здесь будет равно двум (искомое множество точек и значение функции в этих точках). Вместо

E xtr

используются символы

M in, M ax,

причем после функции должна быть указана область, по которой берется минимум или максимум. 5. Отличие от общего исследования поведения функции - только в том, что выбирается целевая установка "Исследовать функцию на непрерывность".

11


6. Выбирается целевая установка "Упростить выражение в области допустимых значений". Затем набирается неопределенный интеграл: нажимается "Ctr-j"и вводится подынтегральное выражение, которое умножается справа на произведение

dx

.

7. Аналогично неопределенному интегралу, но нажимается "Ctr-i". Тогда курсор сначала оказывается под знаком интеграла, где набирается нижний предел. После нажатия "Enter" курсор переводится вверх, где набирается верхний предел. Еще одно нажатие "Enter" - и набирается подынтегральное выражение, умножаемое на

dx.

8. При вычислении двойных интегралов область интегрирования обычно задается в списке посылок. Выбираем для нее обозначение - например, переменную

P

, и введем посылку

P = setxy (|y | 1 & 0 x & x 2)

.

Затем вводим целевую установку "Упростить выражение в области допустимых значений". Затем набираем двойной интеграл - нажимаем "Ctr-2"; под интегралом вводим обозначение области

P

, нажимаем "Enter и далее

набираем подынтегральное выражение, умноженное на произведение

dxdy

.

9. Плоскую область определяем в списке посылок, обозначив ее вспомогательной переменной (например,

P

). Эту область задаем, используя ссыл-

ку на прямоугольную систему координат, которую тоже обозначаем вспомогательной переменной (например, дим посылки

K

). После этого в нашем примере вво-

P=

точки областьграницы

(

(setxy (y 2 =

b b2 x) setxy (y = x)), K ), a a

0 < a, 0 < b,

"прямкоорд(

K

)". Заметим, что операция "областьграницы"

применяется к теоретико-множественному объединению пар координат точек кривых, ограничивающих область, а значением этой операции служит множество пар координат точек области. Для перехода от пар координат к точкам плоскости используется операция "точки". Далее выбирается целевая установка "Упростить выражение в области допустимых значений" и вводится условие площади

S (P ).

Как и в случае геометрических задач, символ

S

вводится двойным нажатием клавиши

s

.

10. В случае нахождения объемов применяется аналогичная конструкция, но множество троек координат трехмерной области задается непосредственно, с помощью неравенств. В нашем примере вводим посылки

P=

точки

(set

xy z

(x2 ay & ay bx & x2 + y 2 hz & hz 2x2 + 2y 2 ), K ),

12


0 < a, 0 < b, 0 < h,
клавиши "О кир.).

"прямкоорд(

K

)". Целевая установка - та же, что и в

предыдущем примере; условие имеет вид "объем(

P

)" (двукратное нажатие

11. Посылки вводятся аналогично предыдущей задаче, причем вместо множества троек координат точек трехмерной области задается множество троек координат точек поверхности. Условие имеет вид

S (P ).

12. Целевая установка при наличии параметров ряда - "Получить полное явное описание значений неизвестных" (при их отсутствии - "Проверить истинность утверждения"); неизвестная - параметр ряда

p

. Условие имеет вид

утверждения о сходимости последовательности частичных сумм ряда:

n
сходится

(n (
i=1

(

1 sin ), n - p i i

натуральное

))

13. Выбирается установка "Разложить в ряд Тейлора в которой указываются переменная разложения и точка разложения. Условием задачи служит выражение

(x - tg x) cos x

.

14. Аналогично предыдущему - с установкой "Разложить в ряд Фурье". 15. Установка - "Упростить выражение в области допустимых значений". Условие задачи набирается непосредственно в виде бесконечной суммы.

1.4. Аналитическая геометрия и линейная алгебра
1. Даны три вектора воряющий

a(4, 1, 5), b(0, 5, 2) и c(-6, 2, 3). Найти вектор x, системе уравнений (x, a) = 18, (x, b) = 1, (x, c) = 1. A(-1, 3), B (2, 5)

удовлетСистема

координат прямоугольная. 2. Даны координаты двух вершин треугольника ресечения его высот и точки пе-

H (1, 4)

в прямоугольной системе координат. Найти

координаты третьей вершины треугольника и составить уравнения его сторон. 3. Составить уравнения плоскостей, проходящих через прямую

z +2 и равноудаленных от точек 4

A(1, 2, 5)

и

B (3, 0, -1).

x- 1 3

=

y -1 5

=

4. Составить уравнение касательной к параболе между точкой касания и директрисой делится координат прямоугольная.

y 2 = -8x, отрезок осью O y пополам.

которой Система

13


5. Найти уравнение плоскости, пересекающей эллипсоид эллипсу, центр которого находится в точке прямоугольная. 6. Поверхность задана уравнением

x2 + 2y 2 + 4z 2 = 9

по

C (3, 2, 1)

. Система координат

6xy - 8y 2 - z 2 + 60y + 2z + 89 = 0

в пря-

моугольной системе координат. Найти каноническую систему координат и каноническое уравнение этой поверхности. Определить тип поверхности. 7. Решить матричное уравнение:



2 -3 1 976 2 0 -2 4 -5 2 ћ X ћ 1 1 2 = 18 12 9 5 -7 3 111 23 15 11
8. Вычислить определитель

sin a cos a sin(a + d) sin b cos b sin(b + d) sin c cos c sin(c + d)
9. Найти собственные значения и собственные векторы линейного преобразования, заданного матрицей:



3 -1 1 1 3 0 4 -1

00 0 0 5 -3 3 -1

10. Найти каноническую жорданову форму для матрицы:



1 0 0 0

2 1 0 0

3 2 1 0

4 3 2 1

Указания
1. В задачах по аналитической геометрии обычно приходится вводить обозначение для используемой системы координат. Обозначим ее в нашем примере через

K

и введем посылку "прямкоорд(

K

)". Напомним, что в решателе си-

стемы координат на плоскости отождествляются с тройками точек общего положения (первая точка - начало системы координат, две последние - концы координатных векторов), а в пространстве - с четверками таких точек.

14


Если в задаче имеются ссылки на координатные оси либо плоскости, то приходится явным образом вводить такие тройки либо четверки точек. В нашем примере этих ссылок нет, поэтому далее вводим посылки, определяющие координаты векторов "коорд

a, b, c относительно K : "коорд(a, K ) = (4, 1, 5)"; (b, K ) = (0, 5, 2)"; "коорд(c, K ) = (-6, 2, 3)". Затем вводим посылки "скалумнож(a, x) = 18 "скалумнож(b, x) = 1 "скалумнож(c, x) = 1". Выбираем целевую установку "Выразить значения неизвестных через заданные параметры" и вводим переменную y для неизвестной. Наконец, вводим условие задачи "y = коорд(x, K )". K K
для прямоугольной системы координат и заносим )

2. Вводим обозначение

посылки "прямкоорд(

(2, 5)".

Чтобы определить

(AB C ) H как

, "коорд

(A, K ) = (-1, 3)

"коорд

(B , K ) =

точку пересечения высот, проводим две

B . Это можно сделать, добавив B C AN )"; M , N - основания высот. Далее добавляем посылки, связанные с точкой H : H прямая(AM ); H прямая(B N ); "коорд(H, K ) = (1, 4)". Выбираем в качестве неизвестных переменные x, y , z , v - для уравнений сторон треугольника и коордивысоты - из вершины вершины две посылки "Высота( и "Высота( нат его третьей вершины. Наконец, создаем целевую установку (так же, как в предыдущей задаче) и вводим условия:

A и из AB C M )"

x=

коорд прямая

(

(AB ), K )

,

y = коорд(прямая(AC ), K ), z = (B C ), K ),v = коорд(C, K ).

коорд прямая

(

3. В этой задаче система координат не предполагается прямоугольной. Поэтому выбираем обозначающую ее переменную посылок для

K

, но никаких специальных

K

не вводим. Так как в условии задачи говорится о прямой,

а прямые в решателе обозначаются только с помощью пары точек, выбираем переменные

P, Q

для обозначения этих точек. После этого можно

ввести посылку, задающую уравнение прямой: "коорд прямая

(

(P Q), K ) =

set

xy z

(

пропорцнаборы

((x - 1, y - 1, z + 2), (3, 5, 4)))".

Заметим, что исполь-

зование отношения "пропорцнаборы" пропорциональности двух числовых наборов при задании канонического уравнения прямой в пространстве является для решателя стандартом. Чтобы обозначить плоскость, выбираем переменные

C, D , E

для трех точек общего положения на этой плоскости.

Затем вводим посылку, выражающую включение прямой плоскость: "прямая

PQ

в искомую

ющие координаты указанных в задаче точек

(C DE )". Вводим посылки, определяA, B : "коорд(A, K ) = (1, 2, 5) "коорд(B , K ) = (3, 0, -1)". Наконец, указываем на равноудаленность плоскости C D E от точек A, B : "расстдоплоскости(A, плоскость(C D E )) = расстдоплоскости(B , плоскость(C D E ))". Затем вводим целевую установку (так же, как в предыдущих задачах), указывая в ней неизвестную x
плоскость

(P Q)

15


для координат плоскости коорд плоскость

C DE

. Завершаем набор задачи условием

x=

(

(C DE K )". "коорд(E , K ) =

), K ).
4. Так как система координат прямоугольная, вводим посылку "прямкоорд( Обозначаем параболу через

E

и указываем ее уравнение:

setxy (y 2 = -8x)".

Выбираем обозначение "прямая(

AB

)"для касательной и вво-

дим посылку "прямая

(AB ) -

касательная к

E

". Для точки касания можно

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

A

. Поэтому вводим

AE

. Для директрисы вводим обозначение "прямая(

F G)". C

Так

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

C, B
;

E

) "директриса(прямая(

F G),C, E

)". В качестве точки пересечения касатель-

ной с директрисой можно без ограничения общности выбрать точку соответствующая посылка имеет вид середины отрезка отрезок

B

прямая

(F G).

Для обозначения

AB выбираем переменную D и (AB ), l(AD) = l(B D). Чтобы указать на K
:

заносим посылки

D

принадлежность точки

D

оси ординат, вводим явное обозначение для тройки точек, образующих

K = (M , N , P ). Теперь принадлежность точки D оси ординат записывается в виде D прямая(M P ). Чтобы предотвратить недопустимый в задаче случай совпадения прямой AB с осью ординат, добавляем посылку ѓ(A прямая(M P )). Далее вводим целевую установку (как в предыдущей задаче) с упоминанием неизвестной x и добавляем условие "x = коорд(прямая(AB ), K )".
систему координат 5. Вводим посылки "прямкоорд(

K

)" и "коорд

(E , K ) = set

xy z

( x2 + 2 y 2 + 4 z 2 =

9) E

"; - обозначение эллипсоида из условия задачи. Обозначаем искомую плос-

AB C ) а сечение ею эллипсоида - F , после чего вводим посылки E плоскость(AB C ) = F и "эллипс(F )". Обозначив центр эллипса через D , добавляем посылки "центр(D , F )" и "коорд(D , K ) = (3, 2, 1)". Далее вводим целевую установку с неизвестной x и условие "x = коорд(плоскость(AB C ), K
кость "плоскость( 6. Вводим посылку "прямкоорд(

K

)" и выбираем целевую установку "Исследо-

вать свойства поверхности, заданной своим уравнением". В этой установке обозначаем исследуемую поверхность через

E

, и вводим условие задачи:

(E , K ) = setxyz (6xy - 8y 2 - z 2 + 60y + 2z + 89 = 0)".
"коорд

16


7. Для решения матричного уравнения используем обычную целевую установку уравнений "Получить полное явное описание значений неизвестных". Для набора матрицы нажимаем клавиши "м "а" (кир.) - появляется левая скобка матрицы. Затем вводится первая строка, причем после каждого элемента нажимается "Enter". Чтобы перейти к следующей строке, после набора последнего элемента вместо "Enter" нажимается "Page Down". После набор последней строки нажимается "End" - возникает правая скобка матрицы. Для отката в случае ошибочных действий при наборе матрицы используется "Backspace". После набора первой матрицы вводится обычный символ умножения (клавиша "звездочка"), затем

X

, затем снова

умножение, далее - вторая матрица, и после знака равенства - третья. Преобразование умножения чисел в матричное умножение предпринимается автоматически при запуске решения задачи. 8. Для вычисления определителя выбирается целевая установка "Упростить выражение в области допустимых значений". При наборе условия сначала нажимаются клавиши "d "e"(лат.) - возникает символ матрица. 9. Выбираем обозначение для матрицы - переменную ку - равенство с переменной

det.

Затем водится

A.

Затем вводим посыл-

A

в левой части и матрицей в правой. Выби-

раем в качестве неизвестных переменные

x, y , z ; x

- собственное значение,

y

- его кратность,

z

- собственный вектор, отвечающий данному собствен-

ному значению. Затем выбираем целевую установку "Получить полное явное описание значений неизвестных" для указанных неизвестных и вводим условия "собствзначение(

A, x, y

) "собствектор(

A, x, z

)". В ответе для

z

при-

водится условие принадлежности множеству линейных комбинации базиса собственных векторов, соответствующих собственному значению

x

.

10. Выбираем целевую установку "Получить полное явное описание значений неизвестных" для неизвестных

x

(жорданова форма) и

y

(матрица, преоб-

разующая к жордановой форме, т.е. такая, что произведение обратной к ней матрицы, исходной и снова матрицы "жордформа( y) где

y

, равно

x

). Затем вводим условие

A,x,

A

- исходная матрица.

1.5. Дифференциальные уравнения
1. Решить уравнение

2(y - 2xy - x

2



y ) + x2 y = 0

17


2. Решить уравнение

xy y + xy 2 - y y = 0
3. Найти решения уравнения

y = xy - 2y

2

, проходящие через точку (4,2).

4. Найти решение системы дифференциальных уравнений:

dx dt dy dt

= x - y + 4 cos(2t) = 3x - 2y + 8 cos(2t) + 5 sin(2t).

Указания
1. Выбираем целевую установку "Решить функциональные уравнения" (эта установка берется и для остальных задач на решение дифференциальных уравнений). В качестве неизвестной указываем уже не переменную ражение

y

, а вы-

y (x). y

Затем вводим условие задачи - уравнение, в котором везде

вместо функции изводной

y

записывается ее значение

y (x)

в точке

x

, а вместо про-

dy (x) . Напомним, что по всем произвольным постоянным, возdx

никающим при интегрировании уравнения, в ответе навешивается квантор существования. 2. Задача вводится аналогично предыдущей; производная второго порядка набирается в виде

d2 y (x) . Символ дифференцирования dx2

d

здесь рассматри-

вается как переменная - то есть после него или его степени нужно нажимать клавишу "звездочка" для умножения. 3. После ввода дифференциального уравнения добавляем условие 4. В целевой установке указываем две неизвестных функции -

y (4) = 2

.

x(t), y (t)

. Урав-

нения системы набираются аналогично предыдущим задачам; вместо в них используются записи

x, y

x(t), y (t).

2. Упражнения по программированию на ЛОСе
2.1. Просмотр программ
1. Войти из главного меню в корневой фрагмент программы символа "синус". 2. Найти в программе символа "синус" фрагмент, содержащий оператор "уровень (1 3)". Найти фрагменты, содержащие операторы "уровень(2)" и "уровень(8)".

18


3. Найти все вхождения в программу символа "синус" оператора "символ(х20 косинус)". Сколько таких вхождений ? 4. Находясь в программе символа "синус посмотреть справочную информацию для символа "синус". Находясь в той же программе, посмотреть справочную информацию для символа "степень". 5. Находясь в корневом фрагменте программы символа "синус" и используя только мышь, посмотреть справочную информацию символа "заменавхождения". Просмотреть все страницы этой информации. 6. Находясь в корневом фрагменте программы символа "синус" и не выходя в главное меню, перейти к просмотру корневого фрагмента программы символа "заменавхождения". После этого, опять же не выходя в главное меню, вернуться к корневому фрагменту программы символа "синус". 7. Находясь в корневом фрагменте программы символа "синус перейти в оглавление операторов ЛОСа; найти в нем цепочку подразделов "Операторы для работы с логическими структурами данных" - "Списки термов" - "Лексикографическое упорядочение набора термов" и просмотреть справочную информацию для логического символа "лексупорядочение". Затем вернуться в программу символа "синус". 8. Войти в корневой фрагмент программы символа "заменавхождения"и перейти от него к подфрагменту вдоль цепочки переходов с номерами: 2, 1, 1, 2. Перейти к пункту оглавления программ, соответствующему ссылке "прием(5 9) имеющейся в найденном фрагменте. 9. Войти в корневой фрагмент программы символа "синус" и, не выходя в главное меню, просмотреть корневые фрагменты программ нескольких следующих после синуса логических символов. 10. Войти в корневой фрагмент программы символа "биссектриса перейти в режим просмотра подтермов операторов и выделить в предпоследнем операторе фрагмента многоцветной указкой подтерм "списокпосылок(х1)". Далее вернуться в режим обычного просмотра программы. Проделать эту операцию дважды - сначала только с помощью клавиатуры, затем - только с помощью мыши. 11. Войти в программу символа "синус"и, используя только клавиши курсора, найти фрагмент, содержащий оператор "обращение(тип)". Далее вернуться к корневому фрагменту программы "синус используя единственное нажатие клавиши.

19


12. Войти из главного меню в оглавление операторов ЛОСа и найти в нем операторное выражение, определяющее номер вхождения в набор. Перейти в просмотр программы этого операторного выражения, после чего снова вернуться в оглавление операторов ЛОСа. 13. Найти в оглавлении операторов ЛОСа оператор, проверяющий отсутствие в терме повторных вхождений одной и той же переменной. 14. Найти в оглавлении операторов ЛОСа оператор, проверяющий, что один терм получается из другого вычеркиванием части операндов некоторой операции. 15. Найти в оглавлении операторов ЛОСа все операторы, обращающиеся к решению вспомогательной задачи на доказательство.

Указания
1. В главном меню нажать клавишу "п" либо нажать левую кнопку мыши в окне "Просмотр программы логического символа затем набрать текстовым редактором слово "синус" и нажать "Enter". 2. Обычно операторы "уровень(

...

)"располагаются вдоль главного ствола вет-

ви программы логического символа, содержащей приемы сканирования задачи. Эта ветвь располагается после оператора "решить". В корневом фрагменте видим операторы "уровень(0) иначе 2 так что для поиска операторов "уровень(1 3) "уровень(2)" и "уровень(8)"переходим по указателю перехода "иначе 2". Напомним, что клавиши "курсор влево - вправо" позволяют выбрать текущий указатель перехода, клавиша "курсор вниз" - переводит по этому указателю, "курсор вверх" - возвращает обратно. После перехода видим операторы "ветвь 1 уровень(1)". Наши операторы выбора уровня не могут размещаться после оператора "уровень(1) так что перемещаемся по указателю "ветвь 1". Это перемещение приводит к фрагменту с оператором "уровень(1 3)" - один из искомых операторов. Продолжая далее перемещаться вдоль главного ствола (переходы до операторов "уровень" либо непосредственно после них), находим операторы "уровень(2)" и "уровень(8)". Заметим, что иногда сначала идет оператор "уровень(

N1 . . . Nm

) объ-

единяющий несколько уровней, а после него размещается ветвь, в которой операторы "уровень" указывают различные сужения исходного списка

N1 , . . . , N

m.

3. Чтобы найти в некоторой ветви программы логического символа все вхождения заданного логического символа либо терма, следует сначала перейти

20


в корень этой ветви, затем нажать клавишу F4 и набрать текстовым редактором искомый логический символ либо терм. После нажатия "Enter завершающего набор, начинается поиск требуемых вхождений. Если вхождение найдено, то на экране изображается содержащий его фрагмент, в котором оно выделено многоцветной указкой. Каждое последующее нажатие F4 приводит к поиску очередного вхождения. По завершении поиска возникает пустой экран, и по нажатии любой клавиши далее восстанавливается изображение на момент начала поиска. 4. Для получения справочной информации о логическом символе, программа которого просматривается, достаточно нажать F3. Если нужно получить информацию о каком-либо другом символе, то нажимается F2 и набирается нужный символ. 5. Перевести курсор мыши на заголовок оператора "заменавхождения(

...

)" и

нажать левую клавишу мыши, чтобы этот оператор выделить многоцветной указкой. Затем нажать правую клавишу мыши. Для перелистывания использовать либо "PageUp-PageDown либо нажатия левой кнопкой мыши на стрелках в меню. Для возвращения в просмотр фрагмента программы нажать любую кнопку мыши внутри текста. Чтобы убрать мышью выделенный подтерм, нажать ее левую кнопку вне области операторов программы. 6. Выделить левой кнопкой мыши вхождение логического символа "заменавхождения" и нажать клавишу "с". Для возвращения в программу символа "синус" нажать "End". 7. Нажать клавишу "Ctr-л переводящую в оглавление операторов ЛОСа. Для возвращения в просмотр фрагмента программы нажать "End". 8. Чтобы перейти в пункт оглавления программ ЛОСа, соответствующий указателю "прием(

N

) найденному в некотором фрагменте программы, нужно

выделить многоцветной указкой какой-либо оператор, расположенный после данного указателя, и нажать "Ctr-End". Возвращение в программу нажатие "курсор вправо" на выбранном пункте оглавления. Данная операция работает только в случаях, когда просмотр программы был начат из главного меню. 9. Для перехода в корневой фрагмент программы следующего (по номеру - первого после текущего, для которого создана программа) логического символа достаточно нажать клавишу "ш".

21


10. Для входа в режим многоцветной указки (режим просмотра подтермов операторов) нажимается клавиша "о"(кир.). Далее клавишами "курсор влево - вправо" выбирается нужный оператор, клавишей "курсор вниз осуществляется вход в выделение его подоператоров, и т.д. вплоть до нужного подтерма. Этого же можно добиться, нажав левую кнопку мыши на заголовке выделяемого подтерма. При единичном выделении удобнее пользоваться мышью, при последовательном просмотре операторов и их подтермов удобнее пользоваться клавишами курсора. 11. Указатели типов обращений "решить "программа "обращение(

A

)" разме-

щаются в виде линейной цепочки, начинающейся в корневом фрагменте программы. Начало корневого фрагмента программы символа "синус" имеет вид "решить иначе 1". Переходим по указетлю "иначе 1" - появляется фрагмент с началом "обращение(блокредактора) иначе 1". Снова переходим по указателю "иначе 1 и т.д., пока не найдем фрагмент с началом "обращение(тип)". Для возвращения в корневой фрагмент достаточно нажать "End". Последняя операция работает только в случае, если просмотр программы был начат из главного меню. 12. Для входа в оглавление операторов из главного меню нажимаем клавишу "о" (кир.). Находим в корневом меню оглавления раздел "Операторы и операторные выражения, реализованные на ЛОСе". Далее смотрим подраздел "Операторы для работы с наборами и вхождениями в наборы". Затем выбираем пункт "Вхождения в набор и наконец - "Номер вхождения в набор". Остальные упражнения на поиск в данном оглавлении делаются аналогично.

2.2. Логические символы
1. Определить номер логического символа "синус". 2. Определить название логического символа с номером 1000. 3. Просмотреть названия логических символов с номерами от 290 до 294. Просмотреть справочную информацию об этих символах. 4. Найти логический символ, для которого имеется программа, но нет справочной информации. 5. Найти логический символ, для которого имеется справочная информация, но нет программы. 6. Найти номер логического символа, для которого не введено название.

22


7. Ввести новый логический символ с названием "рррр". 8. Изменить название логического символа "рррр" на "тттт". 9. Удалить логический символ "тттт".

Указания
1. Войти в пункт "Ресурсы и установки" главного меню, выбрать далее пункт "определение номера символа по его названию нажав клавишу "с" либо используя левую кнопку мыши, и ввести текстовым редактором слово "синус". Затем нажать "Enter". Для возвращения в главное меню нажать любую клавишу. 2. Войти в пункт "Реcурсы и установки" и выбрать подпункт "Определение названия символа по его номеру". Затем набрать номер 1000 и нажать "Enter". Эту же операцию (и все остальные операции подменю "Ресурсы и установки кроме описанной в предыдущем пункте) можно выполнять непосредственно из главного меню - начиная ее сразу с нажатия "Ctr - с"). 3. Для просмотра списка упорядоченных по номерам логических символов войти из главного меню в пункт "Логические символы". Затем перелистывать страницы с помощью "PageDown - PageUp" до нахождения нужного диапазона номеров символов. Выделить нужный символ голубым цветом, используя клавиши "курсор вниз-вверх" в рамках одного столбца и "курсор влево - вправо" для смены столбца. Для просмотра информации о выделенном символе нажать "и". Для возвращения в просмотр символов нажать любую клавишу, не используемую при просмотре справочной информации. 4. Войти в просмотр списка упорядоченных по номерам логических символов и перелистывать страницы до обнаружения символа, после которого располагается знак "&" и нет знака "!". 5. Аналогично предыдущему, но искать символ, после которого идет "! но нет "&". 6. Перелистывать список символов до номеров, после которых идут три знака "! "? "&". 7. Войти в пункт "Ресурсы и установки" главного меню. Выбрать подпункт "Ввод названия нового символа". Ввести текстовым редактором требуемое слово (если оно уже использовано в качестве названия, то об этом появляется сообщение) и нажать "Enter".

23


8. Войти в пункт "Ресурсы и установки" и выбрать подпункт "Изменение названия символа". Затем ввести изменяемое название (эту операцию требуется проводить осторожно, избегая вводить отсутствующее название) и нажать "Enter". После нажатия "Enter" старое название уже уничтожено; далее водится новое название. Если новое название уже было использовано, то будет выдано соответствующее сообщение, после чего по нажатии любой клавиши произойдет выход в главное меню. Чтобы в этом случае завершить операцию изменения названия, нужно дальше действовать так же, как при вводе нового логического символа - новое название будет сопоставлено первому свободному номеру символа, т.е. (в обычной ситуации) номеру, для которого только что было уничтожено старое название. 9. Войти в пункт "Ресурсы и установки" и выбрать подпункт "Удаление названия символа". Ввести название удаляемого символа (избегая вводить несуществующие названия) и нажать "Enter".

2.3. Редактирование программы
1. Ввести новый логический символ с названием "включсимв". Войти в просмотр программы этого символа. Войти в редактирование справочной информации для символа "включсимв" и набрать текст: "включсимв(х1 х2). х1,х2 - термы. Оператор проверяет, что каждый логический символ, встречающийся в терме х1, встречается также в терме х2". Затем вернуться в просмотр программы, войти в редактирование программы и набрать текст программы: "программа метка(икс(3)) равно(х3 перечисление(х4 и(входит(х4 х1) логсимвол(х4))х4)) равно(х4 перечисление(х5 и(входит(х5 х2)логсимвол(х5))х5)) включается(х3 х4) выход". 2. Разрезать программу символа "включсимв введенную в предыдущем упражнении, на два последовательно идущих фрагмента, так, чтобы второй начинался с оператора "равно(х4

...

)".

3. Склеить два фрагмента, на которые была разрезана программа символа "включсимв в один общий фрагмент. 4. Вставить в программу символа "включсимв"программу справочника "арность состоящую из операторов "обращение(арность) ответ(2)". Затем удалить эту введенную вручную программу и осуществить ее автоматический синтез. 5. Увеличить на 2 номера всех программных переменных, начиная с переменной х4, в операторах программы символа "включсимв идущих после

24


оператора "равно(х3 менных.

...

)". Затем восстановить исходные номера этих пере-

6. Войдя в редактирование программы символа "включсимв выполнить следующие стандартные операции текстового редактора: а) переставить местами операторы "равно(х3

...

)" и "равно(х4

...

) после чего восстановить

исходное их размещение; б) Найти для каких-либо открывающих и закрывающих скобок операторов программы двойственные им скобки; в) Перед оператором "равно(х3

...

)" вставить оператор "равно(х3 0) а затем удалить

этот оператор; г) после оператора "равно(х3 затем удалить эту копию.

...

)" разместить его копию, а

7. Войдя в редактирование программы символа "включсимв просмотреть справочную информацию для логического символа "включается после чего вернуться в редактирование. 8. Найти в программе логического символа "делит" ветвь фрагмента, начинающегося с оператора "обращение(программа) и скопировать эту ветвь в программу логического символа "включсимв после чего удалить добавленную ветвь. 9. Найти в программе логического символа "делит" фрагмент, начинающийся с оператора "обращение(выводсимвола) и вставить копию этого фрагмента в программу оператора "включсимв" между операторами "равно(х3 и "равно(х4

...

)"

...

) отбросив идущий после "обращение(выводсимвола)" опе-

ратор "иначе 1". Затем удалить вставленные операторы. 10. Войти в редактирование программы "включсимв" и ввести несколько ошибок в программу - исказить название какого-либо оператора; добавить лишнюю скобку либо удалить имевшуюся. Затем нажать "Enter" и исправить ошибку, на которую будет указано в верхней правой части экрана. 11. Войти в редактирование программы "включсимв" и внести в нее ошибку, изменив оператор "включается(х3 х4)" на "деление(х3 х4)". Затем выйти из редактирования и предпринять автоматическую проверку программы. После получения указания на ошибку исправить эту ошибку. 12. Аналогично предыдущему, но оператор "включается(х3 х4)" заменить на "включается(х3 х5)". 13. Удалить программу логического символа "включсимв удалить справочную информацию для этого символа, после чего удалить сам символ.

25


Указания
1. Введя название нового символа, вернуться в главное меню и набрать название этого символа в окне "Просмотр программы логического символа" (набор завершается нажатием "Enter"). После появления пустого экрана нажать F3 и набрать требуемый текст справочной информации. После этого вернуться в просмотр программы (будет восстановлен пустой экран) и нажать клавишу "р". В правом верхнем углу экрана появится предупреждающий о режиме редактирования программы красный прямоугольник, а в левом верхнем углу - курсор текстового редактора. Далее выполняется набор текста программы, и по завершении набора нажимается "Enter". Если при наборе были допущены ошибки, то в правом верхнем углу появится сообщение об ошибке. При этом режим текстового редактора сохраняется, так что можно сразу же исправить ошибку и снова нажать "Enter". При отсутствии ошибок нажатие "Enter" завершает создание либо изменение фрагмента программы. 2. Для разрезания фрагмента программы на две части войти в режим просмотра подтермов операторов (клавиша "о кир.), выделить тот оператор, с которого должна начинаться вторая половина разрезанного фрагмента, и нажать клавишу "р"(кир.). 3. Если фрагмент программы заканчивается операторами "ветвь

N

продол-

жение то нажатие клавиши F6 приводит к тому, что текст фрагмента по ссылке "ветвь

N

" заносится в конец текущего фрагмента вместо двух его

последних операторов, а сам этот фрагмент исключается. 4. Нужно войти в редактирование корневого фрагмента программы символа "включсимв" и вставить после оператора "программа" оператор "иначе 1". Затем нажать "Enter". Тогда появится пустой экран, в левом верхнем углу которого будет прорисована цифра 1 - номер ссылки к редактируемому подфрагменту, а под ней - курсор текстового редактора для набора текста этого подфрагмента. После набор текста нажимается "Enter завершающее ввод ветви программы. Чтобы удалить ветвь программы, имеются два способа: а) в режиме обычного просмотра фрагмента программы выделить оператор перехода к удаляемой ветви и нажать "Ctr-Del"; б) войти в редактирование фрагмента программы и исключить оператор перехода к удаляемой ветви. Способ а) может быть применен лишь однократно; для повторного его применения необходимо сначала выйти в главное меню через "Esc". Это объясняется тем, что удаленная ветвь временно сохраняется в буфере и может быть восстановлена (до указанного выхода в главное меню) в другом месте программы. Способ б) можно применять без каких-либо

26


ограничений. Для автоматического контроля программы и ввода подфрагментов, указывающих арность оператора либо операторного выражения, реализованного этой программой, нужно в корневом фрагменте программы нажать клавишу "п". Синтез программы справочника "арность" (для перечисляющего оператора - также справочника "комментпосылок") выполняется только при условии, что после начинающего корневой фрагмент оператора "программа" либо "обращение(0)" не идет оператор перехода "иначе". 5. Для увеличения либо уменьшения номеров программных переменных сначала следует войти в режим просмотра подтермов операторов, затем выделить тот оператор, начиная с которого должны быть изменены номера переменных, и нажать клавишу "п". Тогда в левом верхнем углу появляется курсор текстового редактора. Для увеличения на начиная с переменной х "плюс(х

n

номеров переменных,

m

(включая эту переменную), набирается текст

m n)";

для уменьшения - "минус(х

m n)".

После нажатия "Enter"

происходит коррекция номеров переменных в данном фрагменте и всех его подфрагментах, достижимых через выделенный оператор. 6. Напомним используемые в данном упражнении операции текстового редактора: а) Для перенесения фрагмента текста на новое место курсор подводится к началу этого фрагмента и нажимается F2; затем курсор подводится к концу фрагмента и снова нажимается F2 (начало и конец фрагмента выделены зелеными маркерами). Наконец, курсор подводится к той позиции, начиная с которой должен быть размещен фрагмент, и опять нажимается F2; б) Для перехода от скобки к двойственной ей курсор устанавливается на скобку и нажимается F1; в) Для вставки фрагмента текста курсор подводится к тому месту, с которого должна начинаться вставка, и нажимается "Insert" курсор становится голубым. Каждый набираемый с клавиатуры символ вставляется на позицию курсора, а курсор перемещается на одну клетку вправо. Выход из режима вставки - повторное нажатие "Insert" либо (для исправления ошибки) "Backspace"; г) Для копирования фрагмент текста курсор подводится к его началу и нажимается "PageDown". Затем курсор подводится к концу фрагмента и снова нажимается "PageDown" фрагмент таким образом записан в буфере. Для извлечения его из буфера (что может происходить при повторных обращениях к текстовому редактору в произвольных интерфейсах системы) курсор подводится к тому месту, начиная с которого должна быть вставлена копия, и нажимается "PageUp". Для удаления фрагмента текста следует подвести курсор к началу фрагмента и нажать "Delete затем подвести его к первой позиции после конца фрагмента и повторно нажать "Delete".

27


7. Для просмотра справочной информации о логических символах непосредственно из текстового редактора следует нажать клавишу F4 и набрать название нужного логического символа. После просмотра будет восстановлена текущая ситуация редактирования. 8. Сначала следует войти в программу символа "делит" и, спускаясь вдоль "главного ствола найти фрагмент, начинающийся с оператора "обращение(программа)". Затем нажимается "Insert" - ссылка на ветвь этого фрагмента сохранена в буфере. После этого нужно выйти в главное меню по нажатию клавиши "PageUp"(при другом способе выхода ссылка на ветвь будет утеряна) и набрать в окне "Просмотр программы логического символа" название "включсимв". Внутри программы "включсимв" следует найти фрагмент оператора "обращение(арность) войти в его редактирование и вставить после первого оператора переход "иначе 1". Войдя в редактирование подфрагмента по ссылке "иначе 1 набрать единственный оператор "продолжение". Наконец, после нажатия "Enter" вернуться в созданный подфрагмент "продолжение выделить его оператор многоцветной указкой ("о кир.) и нажать клавишу "к" для копирования выделенной ветви вместо ветви подфрагмента "продолжение". 9. Эта операция выполняется с помощью буфера текстового редактора: сначала в программе символа "делит" находим фрагмент оператора "обращение(выводсимвола) входим в редактирование этого фрагмента и заносим (нажатиями "PageDown") его в буфер. Затем переходим в редактирование корневого фрагмента программы символа "включсимв устанавливаем курсор перед оператором "равно(х4

...

)" и нажимаем "PageUp".

10. При неправильном наборе логического символа в правой верхней части экрана появляется текст "ошибка в логическом символе причем курсор текстового редактора устанавливается на начало неправильно набранного символа. Если число закрывающих скобок больше числа открывающих, появляется текст "избыточная правая скобка" и курсор устанавливается на первую правую скобку, не имеющую двойственной левой. Если число открывающих скобок больше числа закрывающих, то появляется текст "незакрытая левая скобка" и курсор устанавливается в левый верхний угол экрана. В этом случае для поиска незакрытой скобки можно последовательно устанавливать курсор на все открывающие скобки, нажимая F1 для проверки наличия соответствующей закрывающей скобки. 11. Для автоматической проверки набранной программы нажимается клавиша "п". Если указать неправильное число операндов (у оператора "деление" оно равно 4), то в правом верхнем углу экрана появится текст "ошибка в

28


числе операндов причем ошибочный оператор будет выделен многоцветной указкой. Как обычно, для выхода из режима многоцветной указки нажимаем "о" и переходим в режим редактирования для исправления ошибки. Заметим, что такой контроль числа операндов распространяется только на операторы и операторные выражения, запрограммированные на ЛОСе. Если допущена ошибка в числе операндов для базисного оператора либо операторного выражения, то скорее всего она будет обнаружена немедленно, так как после нажатия "Enter" и перерисовки набранного текста программы произойдет искажение сразу нескольких операторов, соседних с тем, у которого число операндов не соответствует норме. 12. При автоматическом контроле правильности программы выявляются входные переменные, значения которых еще не определены, а также выходные переменные, значения которых уже были определены. 13. Для удаления программы логического символа следует войти в ее корневой фрагмент и нажать "Ctr-F7". Для удаления справочной информации о символе войти в ее просмотр (если она размещена на нескольких страницах, то найти последнюю станицу) и далее нажимать "Ctr-Del" столько раз, сколько понадобится для удаления всех ее страниц.

3. Упражения по работе с редактором приемов
3.1. Поиск приемов
Приемы решателя распределены по разделам подробного оглавления, устроенного по тематическому принципу. Ссылка на каждый прием осуществляется из единственного пункта оглавления, причем иногда бывают возможны различные естественные решения о выборе такого пункта. Поэтому для быстрой ориентации в накопленном материале полезна некоторая тренировка. Приведем ряд простых упражнений по поиску нужного приема либо раздела.

1. Найти корневое меню оглавления базы приемов. Найти разделы "Тригонометрия"; "Окружность"; "Эллипс"; "Вычисление определенных интегралов"; "Признаки сходимости знакопеременных рядов"; "Степень матрицы"; "Уравнение в полных дифференциалах"; "Суммы и разности мощностей множеств"; "Закон Пуассона"; "Движение по наклонной плоскости". 2. Найти приемы логарифмирования показательных уравнений. Выбрать те из них, у которых уравнение имеет ноль в правой части, а основанием логарифма служит основание неизвестной степени.

29


3. Найти приемы решения строгих квадратных неравенств. Объяснить назначение каждого из них. 4. Найти приемы, выводящие соотношение пропорциональности для длин сторон треугольника и длин отрезков, на которые биссектриса делит сторону треугольника. Определить отличие контекстов, в которых срабатывают эти приемы. 5. Найти приемы, выражающие площадь треугольника по формуле Герона. Объяснить контексты срабатывания этих приемов. 6. Найти прием проверочного оператора "усмменьшеилиравно усматривающий неотрицательность синуса угла, заключенного между 0 и пи. 7. Найти прием для доказательства индукцией по натуральному параметру. 8. Найти приемы для вычисления суммы геометрической прогрессии. 9. Найти приемы интегрирования с помощью подстановок Эйлера. 10. Найти прием вычисления математического ожидания по известной плотности распределения случайной величины. 11. Найти все приемы вывода, теорема которых содержит символы "биссектриса" и "трапеция". 12. Найти все приемы, вводящие комментарий "промежуток" к текущему терму задачи.

Указания
1. Из главного меню системы нажатием клавиши "г" войти в оглавление приемов. Затем нажимать клавишу "курсор влево" до тех пор, пока картинка не перестанет изменяться. Это и будет корневое меню оглавления базы приемов. Дальнейший поиск ведется сообразно названиям разделов - например, к разделу "Тригонометрия" через пункт "Элементарная алгебра". Раздел "Окружность" можно найти как в подразделе "Элементарная геометрия" (через подраздел "Фигуры"), так и в разделе "Аналитическая геометрия" (через подраздел "Линии второго порядка"). Естественно, приемы последнего раздела связаны только с уравнением окружности. 2. Нужные приемы расположены в подразделе ("Элементарная алгебра "Степени "Решение уравнений "Показательные уравнения "Логарифмирование

30


показательных уравнений"). В этом разделе имеется около десяти различных приемов. При записи нового приема в раздел он попадает в начало раздела, поэтому просмотр приемов раздела "в хронологическом" порядке нужно начинать с конца раздела, перейдя к нему нажатиями клавиши "курсор вниз" - пока картинка не перестанет изменяться. Наличие нескольких различных приемов логарифмирования уравнения объясняется следующими причинами. Во-первых, по-разному можно выбирать основание логарифма - иногда это основание одной из имеющихся в уравнении степеней с неизвестным показателем, иногда - основание другого логарифма, уже имеющегося в задаче, иногда, если из прочих соображений разумного основания выбрать не удается, просто константа 2. Далее, поразному может происходить группировка членов в уравнении. Если есть всего два неизвестных слагаемых, то оба они группируются в левой части, а правая часть - нулевая. Если одно слагаемое неизвестное, а другое - известное, то они находятся в разных частях уравнения. Наконец, выделено несколько особо простых случаев, для которых предусмотрены специальные приемы, срабатывающие на малом уровне. Приемы, которые требуется найти в упражнении - это второй и седьмой приемы, считая с конца. 3. Приемы находятся в разделе ("Элементарная алгебра "Неравенства "Меньше "Решение неравенств "Квадратные неравенства"). Их всего шесть. Просмотр их начинаем, как обычно, с конца списка. Первый и второй приемы относятся к случаю, когда вычисленный дискриминант

d

оказался отличным от нуля, причем не удалось усмотреть его от-

рицательность. В первом приеме квадратный двучлен расположен справа от знака "меньше во втором - слева от этого знака. Заметим, что известный свободный член при стандартизации неравенств попадает в противоположную часть неравенства. Оба приема совершенно аналогичны. Иногда в таких случаях удается создать один общий прием, используя указатели идентификации. Однако, не всегда для этого хватает возможностей текущей версии ГЕНОЛОГа. С другой стороны, интерфейс предоставляет возможность быстрого "тиражирования" уже введенной версии приема - она копируется, и вводятся необходимые изменения. Таким образом могут появляться достаточно большие группы (десяток и более) однотипных приемов. Надобность в этом "тиражировании" возникает не очень часто, а на быстродействии решателя оно практически никак не отражается, так что особых стимулов в развитии указателей ГЕНОЛОГа для борьбы с ним пока не имеется. Третий и четвертый приемы относятся к случаю, когда удалось усмотреть

31


равенство дискриминанта нулю; пятый и шестой - к случаю отрицательного дискриминанта. Хотя во всех этих приемах дискриминат вычисляется как бы заново, но в действительности он будет вычислен лишь однократно, а затем занесен в буфер, и все последующие приемы на протяжении достаточно большого отрезка времени будут брать его прямо из буфера. Это же замечание относится и к проверке знака дискримината - результаты ее (в том числе при неудаче) тоже хранятся в буфере. 4. Приемы расположены в разделе ("Элементарная геометрия "Фигуры "Треугольник "Отрезок, соединяющий вершину треугольника с точкой на противоположной стороне или ее продолжении "Биссектрисы треугольника "Отрезки, на которые основание биссектрисы делит противоположную сторону, пропорциональны боковым сторонам"). Всего имеется три таких приема. Первый прием (считая с конца) анализирует четыре участвующих в соотношении пропорциональности величины - длины боковых сторон и длины отрезков, на которые сторона делится биссектрисой. Если не менее трех из них выражены через числовые параметры, известные или неизвестные, то уровень срабатывания приема равен 6; в противном случае прием срабатывает, если две из них известны, но уровень срабатывания тогда повышается до 8. Второй прием срабатывает, если удается усмотреть соотношение пропорциональности с известными коэффициентами для длин боковых сторон; уровень срабатывания его равен 4. Третий прием аналогичен второму, но соотношение пропорциональности усматривается для длин отрезков, на которые сторона делится биссектрисой. 5. Приемы находятся в разделе ("Элементарная геометрия "Фигуры "Площадь "Треугольник "Формула Герона"). Число их равно трем. Первый прием срабатывает, если все три длины сторон треугольника известны, а соотношение для его площади еще не выписывалось; уровень срабатывания равен 6. Второй срабатывает, если выражения неизвестную

a, b, c

для длин сторон либо содержат

y

внешней задачи, входящую также в некоторое соотноше-

ние с площадью треугольника, либо известны, а указанная неизвестная

y

входит в соотношение с площадью треугольника. Наконец, третий срабатывает, если площадь треугольника известна, а выражения для длин сторон пропорциональны некоторой неизвестной. 6. Прием находится в разделе ("Элементарная алгебра "Неравенства "Меньшеилиравно "Проверочный оператор УСММЕНЬШЕИЛИРАВНО "Тригонометрические функции "Синус"). Он является третьим с конца списка. Фильтр этого приема - ускоряющий; он разрешает попытку применения приема лишь тогда, когда в посылках имеется обозначение какого - либо

32


угла либо имеется неравенство, содержащее хотя бы одну общую переменную с аргументом синуса. 7. Прием находится в разделе ("Элементарная алгебра "Целые числа "Доказательство индукцией по целочисленному параметру "Простейшая схема индукции по натуральному параметру"). 8. Приемы расположены в разделе ("Элементарная алгебра "Комбинаторные функции "Суммавсех "Сумма геометрической прогрессии и суммы, извлекаемые из нее почленным дифференцированием"). Первый из них (с начала списка) дает общую формулу суммирования, включающую случай равенства знаменателя прогрессии единице; второй - рассчитан на случаи, когда усматривается отличие этого знаменателя от 1. 9. Приемы расположены в разделе ("Математический анализ "Интегралы "Нормализатор нахождения первообразной НОРМИНТЕГРАЛ "Замена переменной интегрирования "Степенная функция "Квадратичная функция под радикалом"). Для каждой из подстановок Эйлера выделен свой подраздел. 10. Прием находится в разделе ("Теория вероятностей "Случайные величины "Математическое ожидание "Вычисление математического ожидания случайной величины, для которой известна плотность распределения"). Он является приемом вывода, заносящим в посылки равенство для математического ожидания. Если бы этот прием был реализован как прием замены, то при возникновении того же самого математического ожидания в той же задаче (например, при вычислении дисперсии) выкладки пришлось бы повторять. 11. Помимо оглавления базы приемов, для нахождения нужных приемов можно использовать реализованную на ЛОСе процедуру "текприем". Собственно говоря, программа этой процедуры представляет собой бланк запроса на поиск приемов, и для очередного поиска переписывается. Обращения к ней происходят в цикле полного просмотра всех приемов решателя, реализованных на ГЕНОЛОГе. При рассмотрении очередного приема процедуре сообщаются следующие данные: х1 - логический символ, за которым закреплен прием; х2 - номер узла статьи этого символа в 8-м информационном блоке, хранящем описания приемов ГЕНОЛОГа; х3 - теорема приема; х4 - заголовок приема; х5 - описание приема. Кроме того, ей сообщаются некоторые дополнительные сведения о хранении компонент описания приема в 8-м информационном блоке. Подробнее о том, как организовано это хранение, будет рассказано в следующей главе.

33


Программа процедуры "текприем" должна начинаться с операторов "обращение(0) иначе 1 метка(икс(десять)) которые при написании очередного запроса на поиск изменять не следует. Заканчиваться эта программа должна оператором "ответ(набор(См)) обращение к которому вызывает прерывание и выход в просмотр описания текущего приема. После этого продолжение поиска вызывается нажатием клавиши "курсор влево". Если же нужно прервать поиск и начать работу с найденным приемом, то нажимается клавиша "Esc выводящая в главное меню, далее нажимается клавиша "г возвращающая в оглавление базы приемов, причем в том именно концевой пункт, где находится найденный прием, и нажимается "курсор вправо" для входа в просмотр этого приема. В нашем случае нужно отобрать приемы, теорема которых содержит символы "трапеция" и "биссектриса". Для этого входим в просмотр программы ЛОСа для логического символа "текприем" (войти в просмотр и редактирование этой программы можно также нажатием F9 из любой точки оглавления базы приемов). Нажимаем "р" (кир.) и набираем текстовым редактором, после оператора "метка(

...

) операторы "не(логсимвол(х3)) вхо-

дит(трапеция х3) входит(биссектриса х3)". Затем должен быть размещен указанный выше оператор "ответ(

...

)". Заметим, что значением переменной х3 служит теорема приема, од-

нако для приемов операторов фильтра вместо нее используется логический символ "блок". Чтобы избежать замечаний о некорректном обращении к оператору, перед проверкой вхождения в х3 какого - либо символа, сначала нужно убедиться, что х3 действительно является термом, что и делает оператор "не(логсимвол(х3))". По окончании ввода программы, завершаемого, как обычно, нажатием Enter, для возвращения в оглавление базы приемов (если мы вышди из нее по F9), достаточно нажать "End". Далее поиск активируется нажатием F8 из любого пункта оглавления. В нашем случае будут найдены три приема. По завершении поиска произойдет выход в отладчик ЛОСа на операторы "трассировка(стоп 0) трассировка(0)"; далее для возвращения в главное меню нажимается Esc. 12. Как и в предыдущем случае, используем процедуру "текприем". Примечание к текущему терму задачи вводится указателем приема "примечание(

...

)".

Поэтому в программе "текприем" помещаем единственный (кроме стандартных начала и конца программы) оператор - "входит(запись(примечание промежуток) х5)". Напомним, что х5 - набор указателей приема, к которому добавлен элемент "условие(и( приема

F1 . . . Fn

)) перечисляющий все фильтры

F1 , . . . , F

n . При просмотре обнаруживается единственный прием,

34


вводящий комментарий "промежуток". Заметим, что процедуру "текприем" можно использовать не только для поиска приемов нужного типа, но и для автоматического изменения всей базы приемов, согласно заданной программе. Это позволяет предпринимать различные глобальные преобразования решателя при его оптимизации. Впрочем, после любого такого преобразования необходима полная прогонка по задачнику - для выявления остаточных случаев, требующих дополнительной проработки. Часто эти случаи возникают из-за небольших изменений траектории решения, приводящих к необходимости применять отсутствующий пока прием. Вообще, даже обычная перекомпиляция нескольких приемов не в том порядке, в каком они были скомпилированы изначально, может (хотя и достаточно редко) изменить поведение решателя. Разумеется, по мере развития исследований по взаимодействию между приемами устойчивость поведения решателя (в том числе и по отношению к случайным изменениям порядка размещения приемов после перекомпиляций) будет повышаться. Даже сейчас она не так уж мала. Однако, единичные случаи потери или замедления решений задач могут возникать, и при перекомпиляции лучше либо сохранять первоначальное размещение приемов, либо убеждаться прогонкой по задачнику, что нежелательные ситуации не возникли.

3.2. Просмотр описания приема
Первые упражнения этого раздела относятся к приему решения квадратного уравнения. Поэтому перед их выполнением следует найти данный прием в оглавлении базы приемов, нажать клавишу "курсор вправо и выбрать последний из приемов списка.

1. Перейти от формульного режима просмотра теоремы к текстовому и обратно. 2. Выделить цветовой указкой в теореме приема левую часть эквивалентности. Убрать выделение, перейти в текстовый режим просмотра, и в нем снова выделить цветовой указкой данную часть. 3. Активизировать для просмотра последовательно первое, второе, третье и четвертое окна приема. 4. Убрать с экрана первое окно приема, затем восстановить его на экране. 5. Выделить многоцветной указкой фильтр "альтернатива(

...

)". Внутри этого

фильтра выделить терм "неизвестные(2)". Прочитать пояснения к символу

35


"неизвестные". Прочитать пояснения к подтерму "числонеизвестных(корень) встречающемуся в фильтрах приема. Продолжить рассмотрение фильтров и указателей приема, получая информацию о всех встречающихся в них служебных словах ГЕНОЛОГа. 6. Просмотреть нормализаторы к подтерму реть все нормализаторы приема. 7. Просмотреть текстформульный шаблон пояснений к срабатыванию приема. Найти ссылки на его фрагменты из различных точек описания приема. 8. Прочитать пояснения к заголовку приема. Войти в оглавление заголовков приемов ГЕНОЛОГа и найти в нем тот же поясняющий текст. 9. Войти в оглавление типов фильтров ГЕНОЛОГа и найти в нем несколько типов фильтров, использованных в приеме. Аналогичное упражнение проделать для оглавления типов указателей приемов. 10. Из просмотра приема перейти в просмотр справочной информации о логическом символе "целое затем вернуться обратно. 11. Перейти к просмотру программы приема. Прочитать несколько первых операторов этой программы и объяснить смысл выполняемых ими действий. Вернуться к просмотру описания приема. 12. Перейти из просмотра описания приема в оглавление задачника, затем снова вернуться к просмотру описания приема. Аналогичное упражнение - для перехода в оглавление программ. 13. Найти последний из приемов раздела "Соотношение пропорциональности длин отрезков, отсекаемых параллельными прямыми". Просмотреть все фильтры этого приема, учитывая то, что список их разбит на несколько последовательно выдаваемых на экран фрагментов.

0e

теоремы приема. Просмот-

Указания
1. Для перехода к текстовому режиму нажимаем "т для перехода к формульному - "ф". Текущий режим будет сохранен при переходе через оглавление базы теорем к другому приему. Однако, при возвращении в главное меню установка на него будет забыта, и при последующем переходе к просмотру приемов будет, по умолчанию, выбран формульный режим.

36


2. Чтобы выделить цветовой указкой часть теоремы, нужно сначала инициировать ее просмотр - либо нажать левую кнопку мыши, курсор которой находится в первом окне, либо нажать клавишу "1 либо нажать два раза клавишу "курсор вправо". Первое нажатие клавиши выделит малиновым цветом номер "1" первого окна; второе - переведет в режим просмотра теоремы. Сначала малиновым цветом будет выделен первый антецедент. Используя клавишу "курсор вправо выделим сначала весь консеквент. Затем нажмем "курсор вниз выделяя первый операнд консеквента, что и требуется. Для сброса режима просмотра теоремы нажимаем клавишу пробела. Чтобы перейти в текстовый режим просмотра, нажимаем далее "т". После этого можно либо войти в режим просмотра теоремы двумя нажатиями "курсор вправо и далее манипулировать клавишами курсора для выделения нужного подтерма, либо сразу подвести курсор мыши к началу нужного подтерма теоремы и нажать левую кнопку мыши. Для сброса режима просмотра снова нажимаем клавишу пробела. 3. Для входа в режим просмотра

i

- го окна;

i = 1, 2, 3, 4,

можно нажать

клавишу " " номера этого окна. Другой способ - нажать сначала клавишу "курсор вправо". Тогда будет выделен малиновым цветом номер "1" первого окна. С помощью клавиш "курсор вверх" - "курсор вниз" можно менять текущее окно. Однако, выделение номера окна - это еще не вход в режим просмотра окна. Для перехода к такому просмотру нужно, выделив текущее окно, нажать клавишу "курсор вправо". Заметим, что для второго окна, состоящего только из заголовка приема, надобности в просмотре с применением цветовой указки не возникает, и в этом случае нажатие "курсор вправо" игнорируется. При входе в просмотр 1,3 либо 4 окон происходит выделение первого терма цветовой указкой (для первого окна выделяется малиновым цветом первый антецедент теоремы, для 3 и 4 - светло-голубым цветом выделяется первый фильтр либо первый указатель). Для выхода из просмотра нажимается клавиша пробела. 4. Если описание приема не помещается на экране целиком, то можно убирать некоторые из окон. Для этого служат клавиши Ctr-Fi;

i

i

- номер окна,

i=

1, 2, 3, 4.
приема.

Восстановление убранных окон - нажатием той же клавиши, либо

за счет выхода в оглавление базы приемов и повторного входа в просмотр

5. Есть две возможности - либо выделить слово "альтернатива" курсором мыши и нажать ее левую кнопку, либо войти в просмотр третьего окна и выделить фильтр "альтернатива(

...

) используя клавишу "курсор вправо".

Подтерм "неизвестные(2)" теперь можно выделить, нажав клавишу "курсор вниз либо переведя курсор мыши на слово "неизвестные" и нажав ее

37


левую кнопку. Мышью можно было выделить этот подтерм и сразу, не выделяя "альтернатива(

...

)".

Чтобы прочитать пояснения к выделенному терму, нажимаем либо правую кнопку мыши (безотносительно к тому, использовалась ли мышь при выделении), либо клавишу "Ctr-у" (кир.). Снизу, под четвертым окном, появляется текст пояснений. Иногда одно и то же служебное слово используется в различных контекстах, и тогда можно просмотреть пояснения ко всем возможным его использованиям. Сначала выдается какой - то один текст; для смены текстов списка используются клавиши "курсор вверх" "курсор вниз". В нашем случае сначала будет выдан текст пояснений к использованию "неизвестные(х1)" в качестве фильтра, уточняющего число неизвестных задачи. После нажатия "курсор вниз" появится другой текст - "неизвестные(х1)" может служить обозначением списка неизвестных задачи. Обычно такая неоднозначность легко устраняется из контекста. Очевидно, "неизвестные(2)" подпадает под первый текст пояснений. Чтобы убрать с экрана тексты пояснений, нажимаем либо произвольную кнопку мыши, либо клавишу пробела. После этого выделяем слово "числонеизвестных" курсором мыши и нажимаем правую ее кнопку. Сначала появится текст "Число неизвестных задачи"; после нажатия "курсор вниз" - "Число неизвестных в терме, определяемом выражением х1". Так в нашем случае символ "числонеизвестных" относится к выражению "корень то берем второй поясняющий текст. Можно посмотреть пояснения к слову "корень" будут выданы тексты "Заменяемый подтерм является корневым" и "Текущий терм задачи". Первый из них явно относится к случаю использования слова "корень" как фильтра, у нас же оно используется как выражение. Поэтому берем второй текст. Окончательно получаем, что "числонеизвестных(корень)" означает число неизвестных в текущем терме задачи, т.е. в рассматриваемом квадратном уравнении. Чтобы привыкнуть к простейшим конструкциям ГЕНОЛОГа, можно рекомендовать последовательный просмотр фильтров и указателей приема с выделением их левой клавишей мыши и вызывом сопровождающих текстов правой клавишей. 6. Чтобы просмотреть нормализаторы к заданному вхождению в теорему, фильтр либо указатель, сначала нужно выделить это вхождение. Заметим, что не все вхождения в теорему могут быть выделены при формульном режиме. Поэтому в сомнительных случаях (они бывают сравнительно редко и связаны с различными специальными логическими конструкциями) лучше переходить в текстовый режим просмотра теоремы. В нашем примере

38


можно выделить

0e

и непосредственно из формульного просмотра.

После того, как нужное вхождение выделено, нажимается Enter. Тогда под четвертым окном возникает текст нормализаторов, относящихся к выделенному вхождению. При этом появляется также курсор текстового редактора, чтобы при необходимости изменить нормализаторы. Если вхождение не сопровождалось нормализаторами, то курсор текстового редактора возникает на пустой строке. Так как в данном упражнении не нужно изменять нормализаторы, то после просмотра нажимается Esc либо Enter (последнее - только при отсутствии изменений в тексте). Чтобы последовательно просмотреть все нормализаторы приема, следует нажать клавишу "5 и далее менять текущий выделенный подтерм клавишами "PageUp" - "PageDown". Как и ранее, нормализаторы будут прорисовываться под четвертым окном. Выход из такого просмотра - только по нажатию "End" (!). 7. Просмотр текстформульного шаблона вызывается нажатием клавиши "6". Этот шаблон оказывается состоящим из двух фрагментов: "

ѓ1

Решаем

квадратное уравнение относительно (). Дискриминат равен ()"; "

ѓ2

Раз-

ложение на множители дискриминанта". Очевидно, первый из них комментирует срабатывание приема "в целом два последних - комментируют вспомогательные преобразования, выполняемые приемом. Для первого легко находится относящийся к нему указатель "титр(набор(1 терм(х4 х5)))". Согласно этому указателю, вместо первых скобок будет подставляться неизвестное выражение

d

, вместо вторых - результат

e

вычисления

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

b2 + 4ac

. Выделяя в теореме его

вхождение, просматриваем список нормализаторов. В этом списке находим элемент "видумножение(замечание( нормстепень) замечание(новый) замечание(титр(набор(2)))) содержащий ссылку на второй фрагмент. 8. Для просмотра пояснений к заголовку нужно выделить номер "2" окна заголовка малиновым цветом и нажать "Ctr-з" (кир.). Пояснение появится под четвертым окном. Для входа в оглавление типов заголовков нажимаем ту же клавишу "Ctr-з но без выделения второго окна приема. Находим корень оглавления, и от него прослеживаем цепочку переходов ("Замена подтерма "Замена слева направо"). Нажимая далее "курсор вправо находим соответствующий заголовок "второйтерм". 9. Для входа в оглавления типов фильтров и типов указателей используем, соответственно, клавиши "Ctr-у" (кир.) и "Ctr-х". Заметим, что эти оглавления немного более полны, чем приведенные в книге списки типов филь-

39


тров и указателей, так как они постоянно пополняются в процессе развития языка. 10. Для получения общей справочной информации о логическом символе нажимаем клавишу "с и далее вводим текстовым редактором этот логический символ. После нажатия Enter, завершающего ввод символа, появляется требуемая информация. По нажатии любой клавиши, отличной от используемых для просмотра информации служебных клавиш (например, при нажатии пробела) - возвращение в просмотр описания приема. 11. Для просмотра программы приема нажимаем клавишу Home. Сразу после этого появляется текст фрагмента программы, содержащий ключевой оператор "контрольприема(

...

) адресующий данный прием. В нашем

случае это оператор "контрольприема(степень набор(1 6 0) второйтерм)". Здесь логический символ "степень" и число 160 - координаты описания приема в восьмом информационном блоке. Заметим, что хотя прием закреплен в этом блоке за символом "степень программа его закреплена за символом "плюс и попытка применения приема будет предприниматься при обнаружении вхождения в терм задачи последнего символа. Напомним, что при сканировании задачи имеются следующие стандартные значения программных переменных: х1 - задача; х2 - вхождение текущего логического символа; х3 - вхождение текущего терма задачи (посылки либо условия) в соответствующий список задачи; х4 - указатель посылки (0) либо условия (1); х5 - текущий уровень сканирования. Переменные, начиная с переменной х6, изначально не определены. Однако, до того момента, как программа обратилась к фрагменту, содержащему оператор "контрольприема(

...

) уже могли быть предприняты некоторые проверки

и присвоения. Поэтому, для анализа той ситуации, которая сложилась на момент входа в фрагмент, прежде всего нужно просмотреть цепочку предшествовавших ему фрагментов. Это делаем, используя клавиши курсора: "курсор вверх" - к надфрагменту; "курсор влево - курсор вправо" - выделение желтым цветом того оператора перехода в текущем фрагменте, через который требуется войти в подфрагмент; "курсор вниз" - вход в подфрагмент. В нашем случае, нажав "курсор вверх оказываемся в фрагменте, имеющем начальные операторы "ветвь 1 уровень(1 2) новый равно(х4 1) ветвь 2 тип(х1 описать) равно(второйоперанд(х2) последнийоперанд(х2)) ветвь 3 причем через "ветвь 3" переходим обратно к начальному фрагменту приема. Эти несколько операторов оказались общими у нашего приема с другими приемами, и они вынесены наружу. Оператор "уровень(1 2)" проверяет равенство текущего уровня сканирования единице либо двойке; оператор

40


"новый" блокирует попытки применения приема при локальных циклах повторного сканирования, предшествующих переводу терма задачи из "теневой" зоны в активную; оператор "равно(х4 1)" проверяет, что символ "плюс" встретился в условии задачи. Оператор "тип(х1 описать)" фиксирует тип текущей задачи; оператор "равно(второйоперанд(х2)последнийоперанд(х2))" - проверяет, что сумма имеет два слагаемых. Одно из них соответствует квадрату неизвестного выражения, другое - его первой степени. Если уравнение изначально имело несколько членов с квадратом либо с первой степенью, то после срабатывания приемов приведения подобных членов с известными коэффициентами слагаемых останется ровно два. Можно было бы просмотреть и фрагменты, предшествующие данному, однако в них ничего существенного не происходит - идет "главный ствол" программы символа "плюс ответвления от которого соответствуют различным значениям уровня срабатывания. Поэтому возвращаемся через "ветвь 3" в начальный фрагмент приема. Пропуская фиктивный оператор "контрольприема переходим к следующим операторам. Оператор "равно(х6 неизвестные(х1))" присваивает переменной х6 цель задачи х1, перечисляющую ее неизвестные. Эта цель имеет вид (неизвестные

x1 . . . xn

). Оператор "аль-

тернатива(не(длинаменее(х6 3)) равно(х5 1) равно(х5 2))" проверяет, имеет ли задача одну неизвестную - тогда длина набора х6 будет меньше 3, или больше одной - тогда эта длина будет не менее 3. Соответственно, в первом случае текущий уровень сканирования должен быть равен 2, а во втором случае - 1. Оператор "операнд(х7 х2)" переводит от текущего символа "плюс" к внешнему символу, присваивая переменной х7 вхождение этого символа. Оператор "символ(х7 равно)" проверяет, что по вхождению х7 расположен символ "равно". Оператор "корень(х7)" проверяет, что вхождение х7 - корневое, т.е. рассматриваемое условие имеет вид равенства, и т.д. По окончании анализа программы можно вернуться в просмотр описания приема, нажав клавишу End. Заметим, что нажатие End приведет к этому результату вне зависимости от того, в каком фрагменте программы символа "плюс" она была нажата. Если при просмотре окрестности начального фрагмента программы нужно быстро вернуться к этому начальному фрагменту, то нажимается клавиша F8. 12. Для перехода к оглавлению задачника нажимаем Shift-3. Чтобы вернуться оттуда в оглавление приемов, нажимаем Shift-2. Для перехода к оглавлению программ далее нажимается Shift-1; обратно - снова Shift-2. 13. Прием находится в разделе ("Элементарная геометрия "Параллельны "Пропорциональность отрезков, отсекаемых параллельными прямыми "Соотно-

41


шение пропорциональности длин отрезков, отсекаемых параллельными прямыми"). Нажимая "3 входим в просмотр окна фильтров. Перемещая с помощью клавиши "курсор вправо" выделенный текущий терм, доходим таким образом до запятой, и снова нажимаем "курсор вправо". В результате появляется второй фрагмент списка фильтров. Проходим через него аналогичным образом, и попадаем в третий, последний фрагмент. Обратные переходы - с помощью "курсор влево". Этот процесс можно ускорить, используя мышь: нажатие ее левой кнопки на запятой приводит к переходу через эту запятую - вперед либо (для запятой в начале фрагмента) назад.

3.3. Редактирование приема
На нескольких простых упражнениях продемонстрируем технику ввода нового приема, изменения старого, а также тестирования приема после редактирования. Для ввода новых приемов следует сначала создать специальный концевой пункт оглавления базы приемов, разместив его там, где покажется удобнее (можно и в соответствии с имеющейся классификацией разделов). При первом знакомстве с редактором приемов лучше не размещать учебные приемы в "старых" концевых пунктах, чтобы случайно не удалить имеющиеся там приемы. Впрочем, такие случайности не очень страшны - первоначальная версия удаленного либо измененного приема попадает в буфер, откуда ее можно вернуть обратно.

1. Ввести прием, упрощающий тригонометрические выражения c помощью тождества для суммы квадратов синуса и косинуса. Сначала набрать теорему приема

ax (a(sin x)2 + a(cos x)2 = a).

Затем ввести заголовок приема

"второйтерм". Далее ввести единственный фильтр - "уровень(0)". Ввести указатели "единица(1 х1)" и "заменазнака(минус х1)". Сохранить введенный прием и откомпилировать его. 2. Проверить, что прием работает, введя какую-либо тестовую задачу на упрощение, например,

2(sin b)2 + 2(cos b)2

, и найдя в трассировке по шагам ре-

шения задачи срабатывание введенного приема. Войти в просмотр описания приема из текущего шага трассировки. Перейти к просмотру текущего фрагмента программы и найти программные переменные, значениями которых служат: а) вхождение косинуса; б) вхождение операции сложения; в) терм, идентифицированный с квадратом синуса. 3. После тестирования вернуться в редактор приемов и проделать следующие действия: а) удалить программу приема, не удаляя самого приема; б) восстановить программу приема; в) добавить фильтр "тип(преобразовать)" и сохранить измененный прием, не изменяя пока его программу; г) еще раз перекомпилировать прием, причем провести компиляцию так, чтобы при

42


тестировании можно было определять те термы, с которыми идентифицируются переменные теоремы приема. 4. После выполнения предыдущего упражнения снова войти в тестирование приема и, остановившись на моменте его применения, найти идентифицированные с теоремными переменными термы, не переходя в отладчик ЛОСа. 5. Создать в оглавлении базы приемов какой-нибудь новый концевой пункт и перенести в него созданный прием из того концевого пункта, где он находился до этого. Старый концевой пункт (если он после этого оказался пустым) удалить. 6. Сбросить буфер базы приемов. Затем удалить введенный прием, после чего вернуть его на старое место из буфера базы приемов. Снова сбросить буфер базы приемов. Изменить прием, убрав из него фильтр "тип(преобразовать)". Посмотреть старую версию приема в буфере. Восстановить по буферу версию приема, имевшуюся до изменения. 7. Создать копию приема, изменив в ней фильтр "уровень(0)"на "уровень(1)". 8. Создать простую версию приема, использующего теорему Пифагора. Сначала изобразить на чертеже прямоугольный треугольник углом

AB C

с прямым

B

. Ввести теорему приема: прямая

AB C (

(AB )прямая(B C ) (l(AC ))2 = (l(AB ))2 + (l(B C ))2 ).

Затем ввести заголовок приема "вывод" и фильтры "уровень(1) "посылка "тип(исследовать) "лексикопредшествует(х26 х28) "усм(актив(расстояние( х26 х28))) "усм(актив(расстояние(х26 х27))) "усм(актив(расстояние(х27 х28 )))". Ввести указатели приема: "усм(1) "теквхожд(1) "биключ(перпендикулярно х27 интервал(х26 х28))". Ввести нормализаторы общей стандартизации для обработки подтермов выводимого утверждения. Ввести нормализатор "норминтервал" для обработки терма "интервал(х26 х28) встречающегося в указателе. Сохранить прием и откомпилировать его. 9. Разбить список фильтров приема на две части, оборвав первую часть на фильтре "лексикопредшествует(х26 х28)". Найти в оглавлении базы приемов старый прием на теорему Пифагора, срабатывающий на уровне 10, и перенести из него в только что созданный прием фильтр "контекст(посылка(х1) заголовок(х1 равно) вхождениетерма(х1 расстояние(х26 х28)))". 10. Ввести простую геометрическую задачу на нахождение длины одного из катетов прямоугольного треугольника, у которого длина гипотенузы равна 5, а другого катета - 4. Протестировать на ней созданный прием, установивши прерывание при его применении.

43


11. Удалить все нормализаторы приема, после чего ввести их в режиме автоматического пополнения описания приема. 12. Ввести прием для сложения дробных выражений. Теорема приема имеет вид:

abcdef (ѓ(c = 0) & ѓ(d = 0) & ѓ(f = 0)

a(bf + de) ab ae + = ). cd cf cdf

Заголовок приема - "второйтерм"; фильтры - "уровень(1) "условие "тип( преобразовать) "или(заголовок(фикс(0 1 1)дробь) и(заголовок(фикс(0 1 1)минус) первыйсимвол(фикс(0 1 1)дробь))) "или(заголовок(фикс(0 1 2)дробь) и(заголовок(фикс(0 1 2) минус) первыйсимвол(фикс(0 1 2) дробь)))". При вводе фильтров использовать автоматическое выписывание в третьем окне приема указателей вхождения "фикс(

...

)" после выделения этих вхож-

дений в теореме цветовой указкой, заметив, что "фикс(0 1 1) "фикс(0 1 2)" здесь ссылаются на вхождения первого и второго дробных слагаемых. Смысл этих фильтров в том, чтобы при обращении в единицу некоторых переменных из знаменателей не пропали дроби. Указатели приема - "блокпроверок(1 2 3) "единица(1 х1 х2 х3 х4 х5 х6) "заменазнака(минус х2 х5)". Снабдить прием указателями нормализации, причем сумму в числителе результата снабдить, кроме обычного нормализатора "нормплюс также нормализатором "видумножение выполняющим попытку разложения на множители. Ввести в прием какое-либо текст-формульное сопровождение, поясняющее срабатывание приема. Создать тестовую задачу для приема, выйти в точку срабатывания при трассировке и убедиться в том, что пояснение выдается. 13. Удалить все приемы, введенные в перечисленных выше упражнениях.

Указания
1. Выберем для нового приема какой-нибудь подходящий раздел. Например, в подразделе "Тригонометрия" раздела "Элементарная алгебра" выберем подраздел "Синус далее - "Общая стандартизация выражений и здесь введем новый концевой пункт, нажав клавишу "к". При появлении курсора текстового редактора нужно набрать какое-либо название пункта; пусть это будет "Тест". Далее нажимаем "курсор вправо" и попадаем в чистый экран - обычное начало ввода приема. Для набора теоремы формульным редактором нажимаем Ctr-ф. Возникает курсор формульного редактора, и далее набираем указанное выше тождество, не забыв начать его с квантора общности и перечислить в кванторной приставке все переменные теоремы.

44


Напомним, что неполное перечисление переменных в кванторной приставке может, хотя и редко, привести к неправильной компиляции. Если переменная оказывается связана внутри теоремы, то она в общую кванторную приставку не выносится. Если при наборе формулы нужно вспомнить какую-либо клавишу формульного редактора, нажимается F1, переводящее в справочник по системе, и нужная информация находится в подразделе "Формульный редактор" корневого меню справочника. Чтобы продолжить набор формулы, далее нажимается End (сначала - для возвращения в оглавление справочника, затем - для возвращения в набор теоремы). По завершении набора теоремы нажимается Enter, и под теоремой прорисовывается горизонтальная линия. Далее нажимается Enter, и во втором окне набирается заголовок приема. После того, как заголовок введен и нажато Enter, появляется следующая горизонтальная линия, причем сразу же под ней появляется курсор текстового редактора для набора фильтров. Вводим фильтр "уровень(0)"; после завершающего набор нажатия Enter вводим указатели "единица(1 х1)" и "заменазнака(минус х1) и снова нажимаем Enter. Под четвертым окном появляется голубая линия, указывающая на то, что новый либо измененный прием еще не сохранен. Чтобы сохранить его без немедленной компиляции (что естественно делать, если прием еще не полностью проработан), нажимается F4, и тогда голубая линия меняет цвет на красный. В нашем случае сохраняем прием и одновременно компилируем его, нажимая F3. 2. Переходим из просмотра приема в задачник - либо через главное меню, либо за один переход, нажимая Shift-3. В задачнике выбираем какой-либо подходящий раздел, например, ("Элементарная алгебра "Упрощение выражений "Тригонометрические выражения "Упрощение выражений - 2"). Прокрутив меню номеров пунктов этого оглавления вверх так, чтобы внизу появилось свободное место, нажимаем "к" (кир.). Тогда появляется поле для ввода новой задачи, ограниченное сверху горизонтальной линией. Нажимаем "ц" для входа в оглавление типов целевых установок, выбираем пункт ("Преобразовать выражение "Упростить выражение в области допустимхы значений") и нажимаем "курсор вправо". Далее вводим упрощаемое выражение

2(sin b)2 + 2(cos b)2

- сначала нажимаем Enter, и ис-

пользуем формульный редактор. После набора этого выражения начинаем трассировку процесса решения. Здесь имеются две возможности. Одна - начать нажатием "р" (кир.) и просмотреть все шаги решения задачи, нажимая каждый раз Enter для перехода к следующему шагу. В нашем тривиальном случае это сразу выведет на срабатывание тестируемого приема. Другая возможность - сразу установить прерывание при срабатывании нужного приема. Для этого нужно сначала нажать "г" - появится оглав-

45


ление базы приемов, затем войти в просмотр нужного приема, и нажать либо Enter, либо Ctr-Enter. В первом случае прерывание произойдет после срабатывания приема, во втором - при выходе на начальный оператор "контрольприема(

...

)" программы приема, причем здесь включается

отладчик ЛОСа и устанавливается пошаговый режим трассировки. При отладке применяется именно второй способ, так как он позволяет понять причины несрабатывания приема. Мы нажимаем Enter. Чтобы войти из просмотра текущего преобразования в просмотр описания примененного приема, нажимается клавиша "б". Это делается не только для приемов, реализованных на ГЕНОЛОГе, но и для приемов, запрограммированных непосредственно на ЛОСе. В первом случае появится описание приема, во втором - пункт оглавления программ, соответствующий примененному приему. Чтобы вернуться в просмотр текущего преобразования, нажимаем End. Отсюда можно выйти в отладчик ЛОСа для просмотра текущего фрагмента программы - нажатием клавиши "ф". Чтобы теперь проанализировать значения программных переменных, нужно помнить смысл первых пяти переменных, определенных при сканировании задачи: х1 - текущая задача; х2 - вхождение в нее текущего символа (название его прорисовано в верхней левой части экрана); х3 - вхождение текущего терма задачи (посылки либо условия) в его внешний список; х4 - указатель посылки (0) либо условия (1); х5 - текущий уровень сканирования. Сразу ясно, что вхождение косинуса является значением переменной х2 - так как прием инициализируется при обнаружении косинуса. Для получения предыстории текущего фрагмента нажимаем Home - переходим в просмотр фрагмента, из которого по "иначе 2" перешли в данный фрагмент. Замечая оператор "операнд(х6 х2) запоминаем, что значением переменной х6 является вхождение внешней по отношению к косинусу операции. После этого нажимаем End и возвращаемся в первоначально выданный на экран фрагмент программы. Видно, что в начале этого фрагмента расположены операторы "символ(х6 степень) "равно(х2 первыйоперанд(х6)) фиксирующие размещение косинуса в основании некоторой степени. Можно не читать программу оператор за оператором, а сразу искать оператор "символ(

...

плюс) находящий корневую сумму преобразуе-

мого выражения. Такой оператор имеется - это "символ(х9 плюс) так что вхождение суммы является значением переменной х9. Аналогичным образом, не читая подробным образом всего текста программы, обнаруживаем операторы "заголовок(х19 степень) "первыйсимвол(х19 синус) что и дает нам программную переменную х19, значением которой служит терм

(sin x)2

.

46


3. Для обрыва трассировки нажимаем Esc, возвращаясь к просмотру исходного условия задачи. Возвращаемся в базу приемов - либо через главное меню, либо выйдя в оглавление задачника и нажа Shift-2. Переходим к просмотру нашего приема. Чтобы удалить его программу, не удаляя приема, достаточно нажать F7. Нижняя горизонтальная линия перекрасится из черного цвета в красный - сигнал об отключении приема. Для восстановления программы нажимаем F5. Надо заметить, что время на восстановление программы приема, затрачиваемое компилятором ГЕНОЛОГа, совсем невелико, и если сравнивать его со временем решения иных задач средней сложности, то станет ясно, что во многих случаях можно было бы прибегать к помощи компилятора и генератора приемов "в реальном времени практически не замедляя хода решения задачи. Это означает, что по мере развития техники автоматического синтеза приемов можно будет сохранить в базе приемов лишь малую ее часть - наиболее часто работающие приемы, а остальные создавать по мере надобности на основе базы теорем для одноразового применения. Для вставки нового фильтра нажимаем Ctr-3 (это легко запомнить - Ctr и номер изменяемого окна, за исключением случая первого окна). В третьем окне открывается текстовый редактор; с его помощью вводим фильтр "тип(преобразовать)". В данном приеме этот фильтр, конечно, совсем не нужен, и вводится здесь лишь для знакомства с редактором приемов. Чтобы сохранить измененное описание приема, не изменяя его программы, нажимаем F4. Заметим, что при этом нижняя линия приема перекрасится из голубого цвета в черный - так как программа приема все-таки есть, хотя это и старая версия. Для приведения программы приема в соответствие с его описанием нужно было бы нажать F5. Однако, в упражнении требуется применить другой режим компиляции, после которого просмотр термов, идентифицированных с теоремными переменными, станет возможен без помощи отладчика ЛОСа. Такая компиляция включается нажатием клавиши F6. Внешне она ничем не отличается от обычной, но в специальном информационном блоке запоминается соответствие между теоремными и программными переменными, устанавливаемое компилятором. Если впоследствии перекомпилировать прием с помощью F5, то эта информация сбрасывается. 4. Начнем с того момента, как при трассировке появляется кадр преобразования, выполняемого нашим приемом. Заметим, что в отсутствии специально созданного текст-формульного сопровождения, при срабатывании приема будет выдаваться текст того концевого пункта оглавления базы приемов, где размещен прием. Этот текст заключается в скобки и располагается после описания преобразования.

47


Для входа в просмотр описания примененного приема нажимаем "б и после прорисовки приема нажимаем клавишу "п" ("переменные"). Тогда все окна приема, кроме первого, удаляются с экрана, и под теоремой прорисовывается равенство

a=2

- т.е. теоремная переменная

a

идентифицирована

с двойкой. Чтобы перейти к просмотру следующей переменной, нажимаем PageDown - появляется равенство идентифицирована с термом

x=b

, т.е. теоремная переменная

x

b

. Для возвращения к ранее просмотренным

переменным используется клавиша PageUp. Для обрыва просмотра нажимаем любую другую клавишу, например, пробел. Описанная возможность уточнения идентификации переменных при срабатывании приема - отладочная и обычно дополняется информацией, предоставляемой отладчиком ЛОСа. При наличии подробного поясняющего срабывание приема текста она становится излишней. По окончании упражнения выходим из трассировки и возвращаемся в просмотр приема. 5. Чтобы перенести прием в другое место оглавления базы приемов, сначала нажимаем Insert. Это можно делать, даже если тот концевой пункт, куда предполагается перенести прием, еще не создан. Например, выйдя в оглавление, переходим в раздел ("Косинус "Общая стандартизация выражений"), и вводим новый концевой пункт "Тест" в этом разделе. Введя его и выделив голубым цветом, но не входя внутрь, снова нажимаем Insert. Теперь можно зайти внутрь пункта - наш прием окажется там. Из старого пункта он при этом удаляется. Возвращаемся к старому пункту "Тест проверяем, что он пуст, выделяем его в оглавлении и нажимаем для удаления Ctr-Del. 6. Для сброса буфера базы приемов нужно выйти в оглавление этой базы и нажать "О" (кир.). Если текущие пункты оглавления относились к сбрасываемому буферу, то после сброса буфера произойдет выход в главное меню, иначе - сохранится текущий пункт оглавления. Обычно буфер сбрасывается тогда, когда все новые или измененные приемы уже протестированы - например, предпринята прокрутка по тем разделам задачника, где они могут проявить активность. После сброса буфера возвращаемся в просмотр приема, и для удаления его нажимаем Ctr-Del. Прием будет удален, программа его - тоже. Однако, исходная версия удаленного приема будет сохранена в буфере базы приемов. Чтобы перейти к ней, нужно выйти в оглавление базы приемов и нажать "ф". Буфер представляет собой автоматически вводимую ветвь корневого меню оглавления базы приемов. Нажатие "ф" переводит в некоторый раздел этой ветви. В корневой части ветви находим раздел "Удаленные приемы в нем - подраздел "Тест". Входим в подраздел и обнаруживаем в нем только что удаленный прием, причем нижняя его

48


линия - красная, так как программа приема отсутствует. Далее обычными средствами переносим прием на старое место - сначала нажимаем Insert в описании данного приема, затем выходим в оглавление, находим в разделе "Косинус" пустой теперь концевой пункт "Тест и снова нажимаем Insert, выделив этот пункт. Чтобы еще раз сбросить буфер, перед входом в просмотр описания приема нажимаем "О". Войдя в просмотр описания приема, нажимаем Ctr-3 и удаляем текстовым редактором фильтр "тип(преобразовать)". Затем сохраняем прием и компилируем его, нажав клавишу F3. Чтобы просмотреть старую версию, сохраненную в буфере, далее нажимаем "б". Появляется старая версия приема, у которй нижняя линия - красная (программы это версии нет). Чтобы вернуться от нее к текущей (основной) версии, нажимаем "о" (кир.). Наконец, для восстановления старой версии приема нажимаем "Б". Новая версия уничтожается; старая извлекается из буфера, компилируется и переносится на ее место. Нужно предупредить, что такое восстановление старой версии приема не гарантирует восстановления исходного размещения ее программы. Обычно компилятор присоединяет ветвь новой программы, при прочих равных условиях, после ранее введенных ветвей. Если точка входа в программу измененного приема располагалась в середине некоторого линейного списка точек входа в другие приемы, то после перекомпиляции она попадет в конец этого списка. Чаще всего, это несущественно, однако иногда имеются "состязания" между приемами одного списка, и тогда перекомпиляция может существенно повлиять на поведение решателя в отдельных задачах (не всегда, впрочем, в худшую сторону). В особых случаях после перекомпиляции можно переставить ветви программ вручную, используя редактор ЛОСа, хотя более радикальный способ здесь - обычное уточнение решающих правил приемов. 7. Чтобы создать копию приема, нажимаем из просмотра его клавишу Ctr-д. Появляется тот же самый текст описания, но нижняя его линия - синия. На самом деле, это уже копия приема. Сначала сохраняем ее без компиляции (F4). Затем нажимаем Ctr-3, входим в редактирование окна фильтров и изменяем первый фильтр на "уровень(1)". Далее сохраняем прием и компилируем (F3). Заметим, что можно было откомпилировать копию приема и не изменяя его - тогда программы приемов склеятся вплоть до последних операторов, выполняющих преобразование, а перед ними произойдет ответвление одной программы от другой. 8. Прием поместим в том же самом разделе "Тест что и предыдущий. Для инициализации его нажимаем "Ctr-п" (когда раздел был пустой, нажатия

49


специальной клавиши для инициализации приема не требовалось - можно было сразу вводить теорему). Появляется чистый экран, и начинается ввод компонент приема. Заметим, что если оборвать набор приема до его сохранения и выйти, например, в оглавление либо даже в просмотр соседних приемов того же самого концевого пункта (это делают клавиши "курсор вверх "курсор вниз"), то вся работа по набору начальной части приема пропадет - как если бы клавиша Ctr-п не нажималась вовсе. В нашем случае новым является наличие чертежа. Он вводится до набора теоремы. Нажимаем Ctr-ч, после чего появляется синяя рамка геометрического редактора. Выбираем курсором мыши в верхней левой части экрана пункт меню "Точка" и нажимаем левую кнопку мыши. В правом верхнем окне рамки редактора возникает указатель режима "Точка". Теперь можно вводить точки чертежа. Выбираем подходящее место для вершины

A

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

B

и место для вершины

C

, нажимая каждый раз

левую кнопку мыши. Введя точки, включаем режим "Отрезок" (см. меню в верхней части экрана). Далее проводим стороны треугольника: подводим курсор к точке к точке

A

и нажимаем левую кнопку мыши; затем подводим курсор

B

и снова нажимаем левую кнопку мыши. Появляется отрезок

AB

.

Таким же образом создаем отрезки

AC

и

BC

. Если точки легли не очень

удачно, то выбираем ту из точек, которую желательно сдвинуть - опять нажатием левой кнопки мыши. Для сдвига используем клавиши курсора каждое нажатие сдвигает выделенную точку на один пиксел в соответствующем направлении. Чтобы одновременно сдвигать и букву, обозначающую точку, аналогичным образом используем клавиши "Ctr-курсоры". Наконец, чертеж сдвигаем в верхнюю часть экрана, чтобы как можно больше места оставить для прочих компонент описания приема. Для этого включаем режим "перемещение". Перемещение производится указанием начала и конца вектора перемещения - нажатиями левой кнопки мыши. Этот вектор можно откладывать от любой точки на экране, не связывая ее с чертежом. После указания конца вектора смещается все изображение, причем если места для сдвига не хватает, то он блокируется. Для инициализации нового сдвига - повторное указание его вектора. Ввод чертежа завершается нажатием Enter, и сразу возникает курсор текстового редактора для ввода теоремы. Все остальные шаги по вводу приема аналогичны первому разобранному примеру - только при вводе нормализатора "норминтервал" придется выделять цветовой указкой не вхождение в теорему, а вхождение в указатель

50


"биключ(

...

)" из четвертого окна приема. Когда это вхождение выделено, нажима-

ется Enter и вводится нормализатор. 9. Чтобы разрезать список фильтров на две части, выделяем нажатием левой кнопки мыши фильтр "лексикопредшествует(х26 х28)" и нажимаем "р" (кир.). После данного фильтра появляется запятая, а оставшиеся фильтры переносятся "на следующую страницу". Для перенесения фильтра из другого приема сначала находим последний - это второй от конца прием раздела "Теорема Пифагора расположенного в конце цепи ("Элементарная геометрия "Фигуры "Треугольник "Прямоугольный треугольник"). Выделяем нужный фильтр "контекст(

...

)" левой кнопкой мыши и нажимаем

"у" (кир.). Затем клавишей пробела сбрасываем выделение. Возвращаемся в просмотр "своего" приема и нажимаем клавишу "у" повторно, но не выделяя каких-либо окон или фильтров. Тогда фильтр "контекст(

...

)" ав-

томатически добавится к списку фильтров рассматриваемого приема. Так как наш список фильтров разрезан на две части, а новый фильтр заносится в конец списка фильтров, то на экране он не появится, пока не будет вызвана для просмотра последняя "страница" списка фильтров. Чтобы сохранить добавленный фильтр и перекомпилировать прием, лучше до этого нажать F3. 10. Вводим посылки задачи - "прямая(

AD)

прямая(

DC

)";

l(AC ) = 5; l(AD) =

4.

Входим в меню выбора целевой установки и выбираем пункт ("Най-

ти значения неизвестных "Выразить значения неизвестных через заданные параметры"). После подсказки "Выразить" набираем

x

и нажимаем Enter.

Так как известных параметров в задаче нет, подсказку "через" игнорируем и сразу нажимаем Enter. Под целевой установкой набираем условие:

x = l(C D).

Чертеж вручную строить не нужно - для его автоматического

создания нажимаем Ctr-ч. На точку срабатывания приема попадаем так, как это уже объяснялось выше. 11. Для удаления нормализаторов входим в просмотр описания приема и нажимаем Ctr-End. Чтобы восстановить эти нормализаторы, нажимаем "н" (кир.). Тогда включается режим ручного анализа последовательности предложений, вносимых генератором приемов. Здесь могут появляться предложения на добавление либо удаление нормализаторов и указателей. Если предлагается добавить элемент, то первый пункт меню в левой верхней части экрана имеет вид "Новый указатель иначе - вид "Старый указатель". Чтобы ввести новый элемент либо сохранить старый, нужно нажать Insert; чтобы отказаться от нового элемента либо удалить старый - нажать Delete.

51


В нашем случае последовательно появляются нормализаторы, так что естественно все время нажимать Insert - пока предложения не будут исчерпаны. После этого нажимаем F3. 12. Ввод теоремы приема сложения дробных выражений и его заголовка происходит обычным образом. При наборе фильтра "или(заголовок(

. . .). . .

)" по-

сле открывающей скобки символа "заголовок" нажимаем клавишу Shift-1, приводящую к появлению цветовой указки в первом окне. Выбираем этой указкой первое слагаемое и нажимаем клавишу "ф". Сразу вслед за этим в третьем окне начиная с текущей позиции курсора будет прорисован указатель вхождения "фикс(0 1 1) а цветовая указка в первом окне пропадет. Остальные указатели вхождения вводятся таким же образом. Нормализаторы приема можно создать частично с помощью клавиши "н а частично добавить вручную. Для ввода текст-формульного шаблона нажимаем клавишу "6" и вводим, например, следующий текст: "Выражение () равно сумме дробей () и ()". Чтобы первая буква слова "Выражение" не пропала при выдаче на экран, отступаем при наборе этого слова от левого края экрана на один символ. По завершении набора нажимаем Enter. Если понадобится изменить текст шаблона, то снова нужно будет нажать "6 затем - Enter для входа в текстовый редактор. Чтобы определить выражения, подставляемые в шаблон вместо скобок, вводим указатель "титр(набор(1 терм(фикс(0 2))терм(фикс(0 1 1))терм(фикс(0 1 2)))) в котором указатели вхождений выделяют, соответственно, правую часть тождества и вхождения дробных слагаемых. Здесь снова применяется описанный выше интерфейс полуавтоматического набора указателей вхождения. Для тестирования приема вводим, например, задачу на упрощение выражения

a/3b + c/b2 d

. При срабатывании приема, кроме поясня-

ющего текста, появятся также сообщения о вспомогательных проверках отличия от нуля знаменателей. При желании, эти проверки можно будет тут же повторить. Однако, ввиду тривиальности проверок, сообщения о них лучше вообще не выдавать. Чтобы убрать сообщения, следует вернуться в прием и добавить указатели "комментарий(1 титр(стоп)) "комментарий(2 титр(стоп)) "комментарий(3 титр(стоп)) передающие комментарии (титр стоп) проверочным операторам первых трех антецедентов. 13. Для удаления всех введенных в упраженениях приемов последовательно нажимаем Ctr-Del из просмотра их описаний. Затем убираем пустой концевой пункт "Тест выходим в оглавление базы приемов и нажимаем "О".

52


3.4. Анализ приема
Разберем ряд простых упражнений на анализ описаний уже созданных приемов. Так как многие компоненты приема имеют эвристический характер, то чтобы понять их назначение, нужно прежде всего найти задачи, ради которых они были введены. Если возникло предположение о целесообразности изменения данных компонент, то необходимо провести тестирование измененного приема на тех же задачах, а при ослаблении ограничений на срабатывание - также и на дополнительных.

1. Найти раздел "Углы при параллельных прямых и секущей и в этом разделе войти в просмотр описания третьего с конца приема. Объяснить фильтры этого приема. Найти в разделе задачника ("Элементарная геометрия "Задачи на вычисление") все задачи, в которых данный прием срабатывает.

Определить, для каких из них его срабатывание избыточно. Предложить дополнительный фильтр, блокирующий хотя бы часть ненужных срабатываний. 2. Найти раздел "Произведение в основании степени и в этом разделе войти в просмотр описания последнего приема. Объяснить фильтры этого приема. Найти в разделе задачника "Исследование сходимости числовых рядов 3" задачу, для которой удаление фильтра "не(контекст( зацикливанию процесса решения. 3. Найти раздел "Потенцирование логарифмических уравнений и в этом разделе войти в просмотр второго с конца приема. Объяснить фильтры этого приема. Найти в задачнике задачу, в которой данный прием срабатывает, и выйти на точку его срабатывания. 4. Найти раздел "Возведение в квадрат уравнения с одним неизвестным радикалом и в нем войти в просмотр последнего приема. Объяснить фильтры этого приема. Придумать систему уравнений, в которой фильтр "или(равно(числонеизвестных(корень)1) стему в задачнике. 5. Найти в ветви раздела "Плюс" концевой подраздел "Вычитание уравнения, домноженного на известный коэффициент, с целью получения линейного уравнения, либо уравнения с одной неизвестной, либо разложения на множители левой части уравнения и войти в просмотр единственного приема этого подраздела. Объяснить фильтры приема. Придумать задачу, в которой прием сработал бы, занести ее в задачник, и выйти на точку срабатывания приема.

...

))" приводит к

...

)" ускоряет получение ответа. Найти такую си-

53


6. Чтобы найти прием, суммирующий квадраты синусов элементов арифметической прогрессии, занести в задачник пример на такое суммирование, выйти при трассировке на срабатывание искомого приема, и определить его место в оглавлении базы приемов. 7. Найти в ветви раздела "Описанная около фигуры окружность" концевой подраздел "Теорема синусов". Рассмотреть последние четыре приема этого подраздела, и для каждого из них найти все задачи на вычисление по планиметрии, в которых он срабатывает. Определить, в каких задачах срабатывание приема являлось избыточным. Предложить фильтры, отсекающие хотя бы часть таких срабатываний. 8. Найти в ветви раздела "Касательная" концевой подраздел "Длина касательной и длины отрезков секущей". Рассмотреть последние три приема этого подраздела, и для каждого из них найти все планиметрические вычислительные задачи, в которых он срабатывает. Объяснить различия между контекстами срабатывания этих приемов. Определить, в каких задачах срабатывание приема было избыточным. 9. Найти раздел ("Тангенс "Уравнения "Переход к тангенсу половинного аргумента") и войти в просмотр его последнего приема. Объяснить фильтры этого приема. Придумать задачу, в которой прием сработал бы; занести ее в задачник, и выйти на точку срабатывания. 10. В ветви раздела "Плюс" найти концевой подраздел "Выражение неизвестной

X

из уравнения

X +A = B

" и войти в просмотр единственного приема

этого подраздела. Определить последствия удаления фильтра "или(и(тип(описать) уровень(5))

...

)".

Указания
1. Прием находится в разделе ("Элементарная геометрия "Параллельны "Углы при параллельных прямых и секущей"). Уровень срабатывания его равен 9, причем срабатывание происходит при рассмотрении некоторой посылки задачи на доказательство либо на исследование. Заметим, что почти все приемы по элементарной геометрии предназначены для срабатывания в списке посылок задач этих типов. Задачи на вычисление либо на построение, изначально оформляемые как задачи на описание, решаются (в особенности первые) с помощью вывода следствий в своем блоке анализа. Фильтр "неизв(

...

)" означает, что величина угла

DF E

между касательной

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

54


нимается либо как вхождение неизвестной в выражение

t

для величины

угла, либо как наличие цепочки уравнений, в первое из которых входит какой-либо угол или расстояние из

t

, в последнее - неизвестная, а любые

два соседних уравнения имеют какое - либо общее расстояние либо угол. Заметим, что выражение

t

для величины угла

DF E

находится в приеме с

помощью нормализатора "нормугол". Следующий фильтр отсекает вырожденный случай совпадения рассматриваемых параллельных прямых (хотя и не гарантирует этого несовпадения, так как совпадающие прямые могут иметь различные обозначения). Последний фильтр отсекает случаи, когда отрезок секущей является стороной параллелограмма, трапеции либо ромба - для углов этих фигур имеются свои приемы. Квадрат и прямоугольник не рассматриваются потому, что для них угол

DF E

известен.

В общем-то, этот фильтр не доведен до конца - нужно было бы еще уточнить, что смежные стороны не лежат на наших параллельных прямых. Такого рода недоработок в текущей версии решателя имеется немало; обычно они легко устраняются, хотя иногда для этого может понадобиться дальнейшее пополнение ГЕНОЛОГа. Наличие их объясняется, во-первых, объемом системы, а во-вторых, теми целями, которые ставились при ее развитии - проверкой и уточнением общих принципов моделирования логических процессов, выявлением общих архитектурных и технологических подходов. На этом этапе работы решатель должен рассматриваться не как готовый продукт, а лишь как первая черновая версия проработки предметных областей, которая могла бы стать организующим началом для последующего систематического их освоения. Впрочем, принцип преодоления при обучении решателя "всех задач из задачника подряд" делает свое дело - в тех случаях, где недоработки действительно ощутимы на реальном потоке задач, они достаточно быстро обнаруживаются и, так или иначе, подправляются. Это приводит к тому, что даже данная версия уже может рассматриваться как некоторая заявка на создание системы компьютерной математики нового типа, в особенности если сравнивать ее возможности по решению плохо алгоритмизируемых задач с возможностями других систем компьютерной математики. Следующий пункт упражнения - поиск задач, на которых прием срабатывает. Чтобы можно было выполнить быстрый поиск в заданном разделе задачника всех таких задач, должна была иметь место хотя бы одна прокрутка решателя на этом разделе после того, как прием был введен. Если после прокрутки прием был изменен, то поиск даст задачи, в которых прием срабатывал до изменения. Для инициализации поиска следует перейти

55


от просмотра приема к задачнику, нажав клавишу Shift-3. Затем следует выделить тот раздел, для которого будет выполняться поиск, нажать Shift2 и таким образом снова оказаться в оглавлении базы теорем. Здесь нужно войти в просмотр приема и нажать "А" (кир.). Если нужно получить данные для серии приемов, то после нажатия "А" можно перейти к другим приемам, нажимая при просмотре каждого из них на "А". После нажатия на "А" происходит просмотр протоколов задачника, который может создавать небольшую паузу (обычно только для первого нажатия "А"). По завершении указанных действий нажимается клавиша Shift-3, снова переводящая в оглавление задачника. Данные просмотра сохраняются в буфере задачника, и для перехода к нему нажимается "ф". В нашем примере, после выполнения перечисленных действий, находим в буфере раздел "Углы при параллельных прямых и секущей" - в нем и будут собраны все найденные задачи. Нажимаем "курсор вправо" и обнаруживаем номера 8 отобранных задач. В действительности это лишь повторные ссылки на задачи, уже имеющиеся в основных разделах задачника. Поэтому изменять задачи в буфере не следует. Однако, можно запускать процессы решения их так же, как для основной части задачника - поштучно либо сразу серией из 8 задач. Нам нужно определить, в каких из 8 задач рассматриваемый прием в действительности не нужен. Чтобы сделать это, можно было бы зайти в оглавление базы приемов, отключить прием нажатием клавиши F7, запустить процессы решения отобранных задач, и посмотреть, каковы будут результаты. Для начала рекомендуем реализовать этот способ. Здесь надо иметь в виду, что при решении задачи с отключенным приемом решение ее может замедлиться настолько, что для перехода к следующей задаче серии нужно будет нажать последовательно Break и Esc (впрочем, в нашем примере этого делать не нужно). Напоминаем, что серийный запуск выполняется, после возвращения в буфер, нажатием Ctr-з. По окончании серийного решения просматриваем его итоги, нажав клавишу "з". Видно, что одна задача вообще не решена, а решение трех очень сильно замедлилось. Для выхода на задачу с утерянным решением нажимаем "у для просмотра серии задач с замедлением решения (упорядоченных по убыванию замедления) - нажимаем "з и для перехода к каждой очередной задаче - "ш". Любую из этих задач можно выбрать для пошагового просмотра решения и анализа возможностей его доработки. Впрочем, нам известна причина перечисленных ухудшений; интерес представляют в первую очередь другие задачи - те, где ответ не изменился, а решение ускорилось. Если анализ точек срабатывания приема в этих задачах покажет, что оно бессмысленно или крайне слабо мотивировано, то появится воз-

56


можность ввести дополнительный фильтр, отсекающий данные точки. Разумеется, после этого нужно будет еще проверить, не оказались ли отсечены срабатывания приема в тех задачах, которые без него не решаются либо замедляются. Здесь могут появиться еще какие-то коррекции фильтра, и т.д. В этом итеративном процессе нужно помнить, что замедление либо потеря решения после отключения приема, вообще говоря, еще не означают, что он действительно необходим. К сожалению, достаточно часто задача решается из-за случайного "рикошета возникшего после срабатывания приема, и тогда приходится продолжать работу с ней до выявления тех средств, которые в действительности ей нужны. Мы не будем использовать данные серийной прокрутки, полученные указанным выше способом. Вместо этого восстановим программу приема нажатием клавиши F5 (из просмотра приема) и повторим прокрутку отобранных 8 задач при подключенном приеме - для восстановления исходной ситуации. Дело в том, что анализ избыточности приема на отобранных задачах можно выполнить автоматически. Для этого достаточно нажать клавишу "й инициирующую серийный запуск с блокировкой срабатываний нашего приема без удаления его программы. Если время решения задачи с заблокированным приемом оказывается значительно больше исходного, то процесс ее решения обрывается автоматически, и начинается рассмотрение следующей задачи. За ходом процесса можно следить по тому, как выделенный синим цветом номер текущей задачи перемещается вниз. В тех случаях, когда ответ на задачу сохранился, а время решения сократилось, после номера задачи ставится знак вопроса - здесь применение приема не нужно. После прокрутки возникают знаки вопроса на третьей, четвертой и шестой задачах. Чтобы теперь анализировать контексты срабатывания приема, лучше всего дополнить его указателем "стоп" и перекомпилировать. Тогда при каждом его применении, непосредственно до выполнения преобразования, будет происходить выход в отладчик ЛОСа. Чтобы просмотреть преобразование, достаточно будет в этой ситуации нажать "пробел" для перехода в трассировку по шагам решения задачи и Enter - для начала такой трассировки. На первом же шаге будет выведена информация о текущем применении приема. В дальнейшем, по завершении работы с приемом, указатель "стоп" следует удалить - вручную либо, если не было внесено других изменений в прием, нажатием "Б" для восстановления исходной версии. Чтобы понять, какие фильтры можно было бы ввести для отсечения найденных трех ненужных срабатываний, сначала стоит посмотреть на те задачи, в которых преобразование оказалось нужным. Возможно, при этом выяснятся какие-то дополнительные связи величин, входящих в выводимое

57


приемом соотношение, с прочими объектами задачи, при наличии которых увеличивается вероятность извлечь пользу из соотношения. Просматривая контексты срабатывания приема в пяти задачах, не помеченных знаком вопроса, обнаружим, например, что в каждой из них вершина

E

нового угла

BEF

, вводимого приемом, уже являлась вершиной некоторого рассматри-

ваемого в задаче угла. Просматривая после этого контексты срабатывания в остальных трех задачах, обнаруживаем, что для них это условие выполнялось не всегда. Это уже дает основание для ввода нового фильтра "контекст(усм(актив(угол(х2 х30 х3)))) означающего наличие выделенного в задаче угла с вершиной

E

; здесь вместо переменной

E

формульного

редактора используем ее обозначение х30 текстовым редактором. Вводим данный фильтр в третье окно описания приема, удаляем указатель "стоп" и перекомпилируем прием нажатием F3. После тестовой прокрутки восьми задач из буфера обнаруживаем, что решение четвертой задачи ощутимо ускорилось - вместо 53 млн.шагов интерпретатора оно стало требовать лишь 40 млн. шагов. Разумеется, проведенный здесь анализ весьма поверхностный, и в данном примере можно было бы попытаться продолжить оптимизацию решения выделенных задач, добиваясь более веской мотивировки применения приема. В тех случаях, когда эта мотивировка неясна, а без приема задача решается хуже, нужно искать другие хорошо мотивированные действия, идущие в обход применения данного приема, и создавать для них новые приемы. Материала для подобной оптимизации в решателе более чем достаточно. Продолжение ее нужно не только ради получения эффективной системы для пользователя, но главным образом для создания средств автоматического синтеза приемов. Многие компоненты описаний приемов вынужденным образом имеют эвристический характер, однако даже в них прослеживается определенная логика. Расшифровка такой логики неразрывно связана с оптимизацией решателя, отсечением "предрассудков" и выявлением тех взаимодействий между приемами, которые реально нужно учитывать при принятии решений. Можно надеяться, что продвижение в этом направлении позволит постепенно перейти к автоматическому развитию решателей. 2. Путь к разделу в оглавлении базы приемов - ("Элементарная алгебра "Степени "Общая стандартизация выражений "Простейшие свойства степени "Произведение в основании степени"). Прием предназначен для преобразования степени произведения двух неотрицательных сомножителей в произведение их степеней. Он срабатывает сразу же, как только предоставляется такая возможность - на уровне 0. Переход к степеням с более простыми основаниями рассматривается в решателе как направление общей стандартизации

58


выражений, принимаемое на промежуточных этапах решения задачи. Как правило, перед выдачей ответа выполняется обратный переход - группировка под общий показатель степени. Однако, в ряде случаев разгруппировка степени произведения в произведение степеней сомножителей блокируется, и для ознакомления с тем, когда это признано целесообразным, рассматриваем фильтры приема. Прежде всего, идет фильтр, запрещающий срабатывание приема в условии задачи на преобразование, имеющей комментарий "длина". Такой комментарий означает, что в задаче уже предпринималась итоговая компактная переформулировка результата; в частности, могла быть предпринята группировка сомножителей под общую степень. После этого срабатывание данного приема, конечно, нежелательно. Аналогичным образом объясняется следующий фильтр: срабатывание приема блокируется при завершающем редактировании ответа задачи на описание. Исключение могут составлять лишь случаи, в которых цель "редакция" появляется не на завершающем этапе поиска неизвестных, а для специального преобразования списка утверждений. В фильтре и указан один из таких случаев - наличие цели "редуцирование используемой при логическом выводе в базе теорем. Далее идет ускоряющий фильтр: если число сомножителей равно двум, то в силу симметрии можно потребовать, чтобы тот из них, который идентифицируется с

a

, лексикографически предшествовал идентифицированному с

b

. Таким образом вместо двух случаев будет рассматриваться только один.

Заметим, что если число сомножителей более двух, то один из множителей (какой именно - решает компилятор) будет идентифицроваться как одиночный операнд произведения, а другой - как произведение всех оставшихся операндов. Далее - фильтр, запрещающий разгруппировку основания степени, если показатель

c

ее связан внешним описателем "класс" либо "отображение а

основание не имеет связанных этим описателем переменных. В таких случаях выгоднее упрощать выражение в первую очередь относительно переменных связывающей приставки описателя, так как это может позволить устранить описатель. Например, применение разгруппировки степени при рассмотрении суммы геометрической прогрессии нецелесообразно - выражение потеряет "явный" вид геометрической прогрессии, и прием ее суммирования может не сработать. Следующий фильтр аналогичен только что рассмотренному - он блокирует разгруппировку степени при рассмотрении показательных уравнений, если основание не содержит неизвестных, а показатель содержит. Общая эвристическая мотивировка похожая - в уравнениях выгодно, при отсут-

59


ствии особых соображений, упрощать выражения по числу вхождений неизвестных. Для рассматриваемого приема такие конкурирующие соображения в задачах не возникали, что и нашло свое отражение в данном фильтре. Наконец, последний фильтр нужен для указания на разделение труда между различными приемами. Данный прием срабатывает, если усматривается неотрицательность обоих сомножителей основания степени. Однако, если бы показатель степени имел вид числовой дроби с нечетным знаменателем, то проверки неотрицательности были бы излишни, и для этого случая предусмотрен другой прием (в данном разделе он идет вторым от конца). Так как уровни срабатывания обоих приемов одинаковы (равны 0), то приходится вставлять фильтр, блокирующий применение данного приема в ситуациях, подпадающих под область действия другого. Разумеется, этот фильтр имеет лишь ускоряющий характер - при его отсутствии задачи все равно решались бы, но с несколько большей трудоемкостью. Чтобы протестировать фильтр "не(контекст(

...

)) нужно найти такие зада-

чи, в которых степенное выражение входит в определение функции, причем показатель степени содержит варьируемую переменную, а основание - не содержит. Удалим этот фильтр из описания приема и перекомпилируем прием; затем (как сказано в задании) войдем в раздел задачника ("Математический анализ "Ряды "Исследование сходимости числовых рядов 3"). Для серийного запуска решателя в этом разделе нажимаем Ctr-з. Через некоторое время одна из задач "залипает" на экране. Нажимаем Break и выходим в просмотр отладчиком ЛОСа какого-то момента выполнения программы. Для выхода на уровень трассировки "по шагам решения" нажимаем клавиши "пробел" и Enter. Используя для смены кадров нажатия Enter, обнаруживаем зацикливание: сначала срабатывает анализируемый прием, заменяющий

(2(sin x)2 )i

на

2i (sin x)2i ),

затем - прием, устраняющий

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

i

два только что возникших

множителя. Последний прием при суммировании действительно бывает нужен - например, для выявления геометрической прогрессии либо какихлибо других стандартных сумм с "показательными" подвыражениями, а значит, рассматриваемый фильтр в этих ситуациях тоже придется вводить - без него решатель будет зацикливаться. Для обрыва серийного решения возвращаемся в отладчик ЛОСа (нажатие "ф") и нажимаем Ctr-з, Esc. Затем возвращаемся в просмотр нашего приема и нажимаем "Б" для восстановления его исходного вида. 3. Прием находим в разделе ("Элементарная алгебра "Логарифмы "Решение уравнений "Потенцирование логарифмических уравнений"). Прием имеет в

60


качестве возможных уровней срабатывания значения от 1 до 5. Он применяется для преобразования условия задачи на описание либо посылки задачи на исследование. Вообще, посылки задачи на исследование, содержащие неизвестные, часто преобразуются так же, как условия задачи на описание, хотя полного совпадения здесь нет. Теорема приема выделяет логарифмический множитель слагаемого левой части уравнения, причем этот множитель должен содержать неизвестную - либо в основании логарифма, либо в выражении под логарифмом. Если решается система уравнений (число неизвестных более одной), то уровень срабатывания 2 отбрасывается, иначе - отбрасывается уровень 3. С учетом ограничений на уровень срабатывания, определяемых дальнейшими фильтрами, это означает, что для систем уравнений прием не спешит с потенцированием - здесь имеются возможности решить задачу и другими средствами, в то время как для одного уравнения его необходимость более вероятна. Далее идет фильтр, учитывающий наличие комментария "логарифм". Такой комментарий к задаче вводится приемом, выполняющим логарифмирование показательного уравнения. Чтобы понять это, можно было бы, например, воспользоваться оператором "текприем занеся в него условие проверки наличия указателя "замечание(логарифм)" и просмотрев все приемы, имеющие данный указатель. Ясно, что если уже был предпринят шаг перехода от показательных уравнений к логарифмическим, то обратный переход нужно как-то заблокировать. Но даже и здесь, когда потенцирование очевидным образом приводит к упрощению ситуации, его все же следует разрешать. Фильтр допускает потенцирование уравнения при наличии комментария "логарифм" лишь в тех случаях, когда левая часть уравнения представляет собой линейную комбинацию логарифмов, у которой все основания и коэффициенты известны - тогда после потенцирования неизвестные не будут входить в показатели степени. Далее располагается фильтр, разрешающий срабатывание данного приема в двух случаях: а) Под логарифмом находится степенное выражение с неизвестным показателем. Тогда исключение логарифма может привести к обычному показательному уравнению. Уровень срабатывания 1 выбран здесь потому, что маловероятно решение такого "двухэтажного" по логарифмическим и показательным конструкциям уравнения другими средствами. б) Каждое неизвестное слагаемое остатка

d

левой части уравнения, име-

ющее общую неизвестную с выделенным логарифмом, является произведением логарифма по основанию

a

на известный коэффициент. При этом

уровень срабатывания 1 разрешается лишь для системы уравнений, в кото-

61


рой другие уравнения не имеют ни логарифма выражения основанием

b

, ни степени с

b

. Если бы такое уравнение нашлось, то имелась бы некоторая

вероятность решить систему без потенцирования - рассмотрением линейных комбинаций уравнений и логарифмированием других уравнений.

Далее идет фильтр, запрещающий наличие неизвестных логарифмов внутри выражения

c

- здесь либо возможно упрощение логарифмических вы-

ражений до потенцирования, либо потенцирование приводит к столь же сложной для решения уравнения ситуации, что и исходная. Два последних фильтра связаны с задачами, возникающими в математическом анализе и дифференциальных уравнениях; их пока рассматривать не будем. Чтобы распознавать такие фильтры, заметим только, что обычно в них встречаются символы "связка "нормИнтеграл "диффильтр". Чтобы найти задачу, в которой данный прием срабатывает, выходим в оглавление задачника, выделяем раздел "Элементарная алгебра нажимаем Shift-2 для перехода в оглавление приемов, входим в просмотр приема, нажимаем из этого просмотра "А" (кир.), и далее нажимаем Shift-3 (после небольшой паузы, в течение которой происходит просмотр архива задачника). Тогда снова возникает оглавление задачника, в котором нажимаем "ф" для перехода к буферу. В буфере обнаруживаем список всех задач раздела "Элементарная алгебра в которых срабатывает рассматриваемый прием. Этот список находится в разделе, заголовок которого воспроизводит заголовок раздела приема в базе приемов. Выбираем, например, первую задачу списка, нажимаем "г" для запуска ее решения через оглавление приемов, входим в просмотр приема и нажимаем Enter. Первое срабатывание приема отображается на экране, и далее устанавливается режим трассировки по шагам решения задачи. По завершении упражнения расчищаем буфер задачника - в произвольном месте его оглавления нажимаем "О" (кир.). 4. Искомый прием находится в разделе ("Элементарная алгебра "Степени "Решение уравнений "Уравнение с радикалами "Возведение в квадрат уравнения с одним неизвестным радикалом"). Он используется для возведения в квадрат уравнения, имеющего в левой части ровно одно слагаемое, среди множителей которого есть неизвестные радикалы четной степени. Известно, что возведение в квадрат позволяет уменьшать число слагаемых с неизвестными радикалами лишь для малого числа таковых. Если их нельзя перегруппировать так, что в каждой части будет не более двух радикалов, то возведение в квадрат нецелесообразно. Поэтому в решателе отдельно рассмотрены все 4 случая для возможного числа слагаемых с радикалами - от 1 до 4. В случае нескольких радикалов

62


в приемы вводится учет особых обстоятельств, позволяющих рационально сгруппировать радикалы перед возведением в квадрат. Уровень срабатывания приемов достаточно высок - начиная с 5. Это сделано для того, чтобы перед возведением в квадрат был, хотя бы бегло, рассмотрен блок анализа задачи и, по мере возможности, использованы более простые средства решения. Например, в случае системы уравнений более эффективным может оказаться использование для исключения радикала линейных комбинаций уравнений; в случае одной неизвестной уравнение может быть решено как квадратное относительно радикала, и т.п. Первые фильтры рассматриваемого приема фиксируют общий контекст срабатывания: уровень 5; уравнение является условием задачи на описание; выражение под радикалом содержит неизвестные; правая часть уравнения известна. Далее идет фильтр, требующий, чтобы среди остальных слагаемых левой части не имелось ни одного, чьим множителем был бы радикал четной степени. Фактически в фильтре сформулировано немного более общее условие - отсутствие показателя степени, коэффициент знаменателя которого делился бы на 2. Далее расположено несколько странное, на первый взгляд, условие - если уравнение имеет более одной неизвестной, а число слагаемых его левой части более одного, то не должно иметься другого уравнения, в левой части которого находится не менее двух слагаемых с неизвестными радикалами. Оно возникло при рассмотрении задачи, где после возведения в квадрат второго уравнения появился такой же радикал, как и в первом, и далее для исключения неизвестного радикала удалось использовать линейную комбинацию уравнений. Эта ситуация подсказала, что разумнее начинать возведение в квадрат с уравнений, имеющих более одного радикала. Разумеется, такой фильтр можно было бы сделать более точно учитывающим возможность получения в разных уравнениях "подобных" членов с неизвестными радикалами после возведения в квадрат, но и в приведенной выше упрощенной версии он оказался пока вполне достаточным. Следующий фильтр запрещает наличие в оставшихся слагаемых левой части неизвестных логарифмов при отсутствии неизвестного логарифма под радикалом. Он возник из рассмотрения уравнений, которые вообще элементарными средствами не решаются. Такие уравнения часто появляются, например, при отыскании корней производной. Рассматриваемый фильтр ускоряет выдачу отказа в этих ситуациях, позволяя решателю переключиться во внешней задаче на другие пути решения. Наконец, последние фильтры, судя по встречающемуся в них символу "связка нужны при рассмотрении дифференциальных уравнений, и мы их про-

63


пускаем. Подбираем уравнение для проверки полезности указанного в упражнении фильтра согласно приведенным выше объяснениям. Например, можно расмот-



реть систему

2x + 3 2y + 1 + y = 45/8; 2y + 1 + 2x + 3 - x = 5.

Отклю-

чая рассматриваемый фильтр, убеждаемся, что система не решается, в то время как при использовании фильтра находим корни

x = -3/2, y = 5+5/8.

5. Раздел приема находим, следуя вдоль пути ("Элементарная алгебра "Плюс "Решение уравнений "Системы уравнений"). Прием срабатывает на втором уровне и предназначен для преобразования уравнения - условия задачи на описание путем перехода к линейной комбинации его с другим уравнением. Применяется в ситуациях, когда задача имеет более одной неизвестной. Фильтр "не(цель(редакция))" блокирует попытки применения его на том этапе, когда происходит завершающее редактирование найденного ответа. Выражение

a

идентифицируется как произведение всех неизвестных мно-

жителей некоторого слагаемого второго уравнения, причем оно же, домноженное на некоторый известный коэффициент

h,

встречается и среди сла-

гаемых первого (преобразуемого) уравнения. Левые части уравнений не должны иметь дробных слагаемых - так как для устранения таких слагаемых имеются другие приемы. Фильтр "или(числонеизвестных(

. . .). . .

)" требует, чтобы результирующее

уравнение либо имело единственную неизвестную, либо, после разложения на множители его левой части

f

, распалось на несколько уравнений, соеди-

ненных связкой "или либо было линейным по всем своим неизвестным, либо его левая часть имела меньшее число слагаемых с неизвестными дробными степенями, чем преобразуемое уравнение. Любая из этих ситуаций является некоторым эвристическим "достижением ради которого и выполняется преобразование. Фильтр "не(входит(независит цели))" относится к ситуациям, в которых значения неизвестных не должны зависеть от явно указанных "варьируемых" параметров задачи. Обычно в этих ситуациях значения неизвестных подбираются так, чтобы при подстановке их пропадала зависимость условий от варьируемых параметров (например, содержащее эти параметры выражение было бы домножено на 0). Поэтому надобность в данном приеме, ориентированном на обычные системы уравнений, отпадает. Следующий фильтр - "или(равно(число(неизвестная( коряющий. Его проверка предшествует вычислению

. . .). . .). . .). . . левой части f

)" - уснового

уравнения, и здесь происходит предварительная оценка преобразования. Он анализирует выражения

b, d,

которые составлены из слагаемых левых

64


частей уравнений, остающихся в линейной комбинации. Будем называть их "остальными слагаемыми". Фильтр разрешает продолжение действий в следующих случаях: общее число неизвестных в остальных слагаемых равно 1 (тогда и

f

будет иметь единственную неизвестную); остальные

слагаемые линейны относительно входящих в них неизвестных (тогда и

f

будет линейно); остальные слагаемые содержат члены, пропорциональ-

ные уничтожаемым в линейной комбинации выделенным слагаемым (тогда эти члены тоже пропадут в линейной комбинации); выражение

a

имеет сво-

им множителем неизвестную дробную степень, а слагаемые выражения

b

-

не имеют таких множителей (тогда в линейной комбинации станет одним слагаемым с дробными степенями меньше). Далее отсекается случай, когда до и после преобразования уравнение имеет ровно одну неизвестную. Без этого легко можно было бы привести пример с зацикливанием на данном приеме. Фильтр "не(Входит(известно цели))" - ускоряющий; он отсекает преобразования для задач, ответ которых должен быть выражен через специально заданное множество параметров. В этом случае решение происходит только за счет вывода следствий в блоке анализа. Заметим, что все перечисленные выше фильтры приема возникали в процессе проработки потока задач и аккумулировали в себе лишь те особые случаи, которые этим потоком были подсказаны. Никакого общего критического анализа их вне данного процесса не предпринималось - это лишь сырой материал. По-видимому, наиболее естественными рамками, в которых такой анализ стоило бы предпринять, является разработка процедур автоматического синтеза приемов. Этому будет посвящена третья книга данной монографии. Однако, даже и с такими фильтрами, решатель, в целом, оказывается достаточно работоспособен. В качестве примера системы уравнений, на которой прием должен сработать, рассмотрим какую-либо систему с двумя неизвестными, дающую линейную комбинацию с единственной неизвестной. Например, пусть это будут уравнения ны с

2x2 + 3y 2 = 8, 3x2 + 4y = 1

. Заметим, что если бы чле-

y

оба были линейными, то сработал бы другой прием для получения

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

n

sin(3n + 1)2 .
i=1
Напомним, что степень тригонометрической операции ставится формульным редактором не сразу после ее обозначения, а лишь после обозначе-

65


ния ее аргумента (чтобы получить степень аргумента, нужно взять ее в скобки). Далее нажатием "р" (кир.) запускаем трассировку по шагам решения. Первым же шагом выполняется суммирование, о чем и сообщает поясняющий текст. Нажимаем "б" и входим в просмотр приема, выполнившего преобразование. Затем последовательно нажимаем End (возвращение в просмотр текущего преобразования), Esc (возвращение в исходный текст задачи), End (возвращение в главное меню) и "г" (вход в оглавление базы приемов). В результате окажемся на концевом разделе, содержащем сработавший прием суммирования. Возвращаясь от него "обратным ходом" к корню оглавления приемов, определяем цепочку надразделов приема: ("Элементарная алгебра "Комбинаторные функции "Суммавсех "Тригонометрические суммы "Суммирование квадратов синусов либо косинусов"). 7. Прием находится в разделе ("Элементарная геометрия "Фигуры "Окружность "Описанная около фигуры окружность "Треугольник "Теорема синусов"). Переходим в оглавление задачника, входим в раздел "Элементарная геометрия нажимаем Shift-2 и, переходя в просмотр последних четырех приемов на теорему синусов, каждый раз нажимаем "А" (кир.). Затем возвращаемся в задачник, нажимая Shift-3. Переходим в буфер задачника и предпринимаем анализ избыточности срабатываний приемов - последовательно для каждого подраздела буфера, используя для запуска автоматического анализа клавишу "й". Для первого приема имеем серию из 49 задач, причем в 14 из них его срабатывание оказывается избыточным. Второй прием сработал в единственной задаче, да и там его срабатывание оказалось избыточно. Видимо, на момент создания приема он применялся в какой-то другой задаче, решение которой впоследствии пошло по другому руслу. Третий прием сработал тоже на единственной задаче, но здесь уже он оказался нужен. Наконец, четвертый прием срабатывает в 12 задачах, и в 4 из них - избыточен. Попытки оптимизации этих приемов предоставляем читателю. 8. Приемы расположены в разделе ("Элементарная геометрия "Фигуры "Касательная "Касательная и секущая "Длина касательной и длины отрезков секущей"). Последние три приема отличаются друг от друга только уровнями срабатывания и фильтрами. Каждый из них выписывает соотношение равенства квадрата длины касательной произведению длин отрезков секущей. Первый прием срабатывает при малых значениях текущего уровня - 3 либо 7. Условия срабатывания одинаковы для каждого из этих уровней; если на третьем уровне прием не сработает, то по достижении седьмого уровня могут появиться новые посылки, при которых его срабатывание уже ста-

66


нет возможным. Если бы не был предусмотрен дополнительный уровень срабатывания, то нужно было бы специально заботиться о переключении внимания - уменьшении до 3 веса посылки "касательная( инициализируется применение приема. Ограничения на срабатывание необременительны - они сводятся к тому, чтобы некоторое количество расстояний, относящихся к рассматриваемым объектам, уже были явно указаны в задаче. Один из фильтров требует, чтобы в задаче уже встречались либо длина касательной, либо обе длины отрезков секущей, либо чтобы секущая проходила через центр окружности. Другой фильтр требует, чтобы уже была рассмотрена длина хотя бы одного из трех отрезков, выделяемых на секущей. Последние два фильтра усиливают эти ограничения, если результирующее соотношение имеет более одного расстояния, не выраженного через числовые параметры. Второй прием срабатывает на уровне 9. Для его срабатывания нужно, чтобы хотя бы два из трех выделяемых на секущей отрезков были либо вычислены, либо достаточно тесно связаны с неизвестными (в стандартном для планиметрии смысле, определяемом фильтром "неизв(

...

) на которой

...

)"). Кроме того,

должно быть выделено расстояние от какого-либо конца рассматриваемого отрезка касательной до другой точки на этой же касательной. Уровень срабатывания третьего приема равен 13. Для его срабатывания нужно, чтобы длина отрезка касательной была сязана с неизвестными, а число проходящих через рассматриваемую вне окружности точку секущих было не более 2. В том же разделе есть еще четыре приема, выписывающих то же самое соотношение. Каждый раз, когда при решении задачи в нем возникала потребность, причем имелась какая-то специфическая особенность, отсутствовавшая в предыдущих ситуациях, - вводился дополнительный прием. Взятые вместе, все эти приемы составляют некоторую эвристическую аппроксимацию множества случаев, в которых данное соотношение оказывается полезным, разумеется, пока чрезвычайно сырую. Фильтры геометрических приемов, как правило, прослеживают возможность срабатывания каких-то других приемов, следующих за срабатыванием данного. Чтобы они не отсекали нужных срабатываний, такой учет последействий должен быть достаточно полным, а чтобы не происходило бесполезных срабатываний, он должен быть продолжаем на возможно большую глубину. Пока учет последействий в приемах достаточно эпизодический, и ценность его состоит главным образом в том, что он дает большое количество примеров для дальнейшего анализа. Для определения задач, в которых срабатывание приема избыточно, посту-

67


паем так же, как в предыдущем упражнении. Первый прием срабатывает в 22 задачах, причем в трех из них - избыточным образом; второй прием срабатывает в трех задачах, и во всех из них нужен; третий прием срабатывает в единственной задаче и для нее необходим. 9. Прием находится в разделе ("Элементарная алгебра "Тригонометрия "Тангенс "Уравнения "Переход к тангенсу половинного аргумента"). Прием срабатывает на шестом уровне, то есть после того, как все более простые попытки решения уравнения оказались неудачными. Некоторых пояснений требует вид теоремы приема. Левая часть эквивалентности - преобразуемое уравнение

a=b

; указатель "контекст(позиция(х7 х1)вид(х7 косинус(х4)))"

определяет идентификацию неизвестного тригонометрического аргумента

d

по косинусу этого аргумента, встречающемуся в уравнении. Нормализа-

тор "половинныйугол" выражает встречающиеся в левой части уравнения синусы, косинусы и тангенсы через тангенс половинного аргумента (тангенс выражается через половинный угол лишь тогда, когда этот половинный угол уже возник в выражении). Фильтры приемы требуют, чтобы кроме косинуса

d

уравнение имело либо синус

d

, либо тангенс половинного аргу-

мента. Кроме того, проверяется, что каждая неизвестная тригонометрическая операция в уравнении совпадает либо с синусом

d

, либо с косинусом

d

, либо с тангенсом

d,

либо с тангенсом половинного аргумента

e

. Чтобы

отсечь случаи чрезмерного возрастания сложности уравнения при переходе к половинному аргументу, не разрешаются степени неизвестных тригонометрических операций, отличные от второй и третьей. Наконец, прием блокируется при рассмотрении дифференциальных уравнений. В качестве задачи для тестирования приема будем искать уравнение вида

sin x + cos x + tg x = a

. Величину

a

подберем так, чтобы уравнение решалось:

проследим действия решателя до появления уравнения

(a + 1)y 4 - 2y 2 + 4y = a
решатель находит

a - 1 относительно вспомогательной y = 1/2 и определим a = 41/15. При
формула Кардано.

неизвестной

y

, после чего положим

таком значении

все корни. Уравнение имеет две их серии, и для одной из них применяется

10. Прием находится в разделе ("Элементарная алгебра "Плюс "Решение уравнений "Системы уравнений "Выражение неизвестной

A=B
к виду

"). Он преобразует уравнение

выражение с неизвестными, не содержащее

b + c = a, где b; a не содержит a-c
вместо

X b

из уравнения

X+ неизвестная; c неизвестных,

b=a-c

. Такое преобразование немедленно вызывает подстановку

в остальные условия задачи выражения

b

, т.е. фактически

равносильно исключению этой неизвестной. Указано три различных уровня срабатывания - 0,1 и 5. Фактически уров-

68


ни 0,1 - альтернативные: в случаи задачи на описание допустим только уровень 1, в случае задачи на исследование - уровень 0. Такое разделение уровней по типу задачи, видимо, объясняется тем, что в какой-то задаче на исследование (при анализе объединенного списка посылок и условий внешней задачи на описание) понадобилось ускорить выражение неизвестной из данного уравнения, чтобы не возникло состязание с другим приемом, срабатывающим на первом уровне. Подробности можно уточнить, скорректировав данный фильтр так, чтобы и в случае задач на исследование прием срабатывал на уровне 1, и выполнив прокрутку по задачнику для поиска тех задач, которые отреагируют на данное изменение негативным образом. Срабатывание приема на малых уровнях допускается в двух случаях: либо

a = 0,

а число неизвестных равно 2, либо уравнение линейно относительно

всех входящих в него неизвестных. В прочих случаях (и только для задачи на описание) уровень срабатывания равен 5. Кроме того, для срабатывания приема необходимо выполнение одного из следующих условий: уравнение имеет ровно две неизвестные; задача - на описание и имеет не более одного нелинейного уравнения; задача - на исследование, содержит ровно 3 неизвестных. Если неизвестная

a = 0, c

а уравнение

b

- целочисленная, а число неизвестных в

более двух,

то для задачи на описание прием блокируется: целочисленные уравнения обычно решаются другими средствами. Наконец, последний фильтр учитывает ограничения на зависимость ответа от заданных переменных - в этой ситуации также используются другие средства решения. Чтобы определить последствия удаления указанного в упражнении фильтра, проведем прокрутку по разделам задачника ("Элементарная алгебра "Решение уравнений "Системы алгебраических уравнений 1,2,3,4") с предварительным удалением фильтра. Так как здесь область применения приема не сужена, а расширена, определение списка задач, в которых прием срабатывал, не поможет. Придется прибегнуть к более трудоемкой полной прокрутке по избранным разделам. Обычная практика при развитии решателя - периодические (раз в несколько дней) полные прокрутки, занимающие около 2 часов. Есть не очень сильно развитые пока средства сужения класса задач, для которых предпринимается прокрутка. Они основаны на учете всех логических символов, встречавшихся при решении задачи; если для срабатывания приема необходимо наличие какого-то символа, а при решении он не возникал, то задачу можно не рассматривать. Однако, для простейших приемов, типа рассматриваемого, такое отсечение малоэффективно.

69


При удалении фильтра прокрутка первых двух разделов для систем уравнений, казалось бы, показывает его избыточность: несколько задач даже "ускоряются". Однако, на 44-й задаче третьего раздела неожиданно появляется сообщение "переполнение буфера текстов". Нажимая "ф входим в отладчик ЛОСа, поднимаемся до уровня кадра программы "исследовать" и просматриваем значение переменной х1 - текущей задачи на исследование (удобно сделать это нажатием К1). Видно, что в посылках задачи присутствует введенное данным приемом явное выражение неизвестной через

z

x, y

, а возникшие после исключения

z

уравнения чрезмерно громозд-

ки. Переполнение (получение слишком длинного набора) произошло при регистрации в задаче на исследование результатов вывода анализатором "сложениеуравнений" линейных комбинаций имеющихся уравнений. Такой результат неудивителен: при решении систем нелинейных уравнений выражение одной неизвестной через другие нужно применять очень осторожно. На ограничение этих действий и был направлен устраненный фильтр.

3.5. Создание нового приема
Приведем несколько несложных упражнений на самостоятельную разработку приемов. Иногда эти упражнения будут дублировать уже существующие в системе приемы. Рекомендуется сначала создать свою версию, не прибегая к подсказкам решателя, и протестировать ее на какой-либо специально введенной для этого задаче. Если при тестировании выяснится, что старые приемы решателя опережают новый прием и не дают ему сработать, то следует либо взять уровень срабатывания этого приема меньшим, чем у старых приемов, либо временно отключить старые приемы. Разумеется, приводимых здесь примеров недостаточно, чтобы научиться программировать на ГЕНОЛОГе. Технике такого программирования посвящен весь второй том данной монографии, в котором подробным образом будут рассматриваться разделы базы приемов решателя.

1. Создать прием, упрощающий тангенс утроенного арктангенса. 2. Создать прием для упрощения радикала второй степени, под которым расположен полный квадрат суммы с другим радикалом. То же самое - для радикалов третьей степени. 3. Создать прием, решающий простейшее уравнение для секанса:

sec x = a

.

4. Создать прием, находящий пересечение двух арифметических прогрессий с общим начальным членом, положительные разности которых относятся как целые числа.

70


5. Создать прием для суммирования кубов синусов элементов арифметической прогрессии. 6. Создать прием, связывающий площадь вписанного в окружность четырехугольника с длинами его сторон и полупериметром. 7. Создать прием, основанный на теореме о том, что точки пересечения высот, медиан и срединных перпендикуляров в треугольнике лежат на одной прямой. Придумать планиметрическую задачу на вычисление, которая могла бы быть решена решателем только после добавления данного приема. 8. Создать прием, переформулирующий через коэффициенты квадратного трехчлена условие, что заданная величина

x

больше его корней. Приду-

мать задачу, в которой этот прием мог бы понадобиться. 9. Создать прием, дающий разложение тангенса в ряд с использованием чисел Бернулли. 10. Создать прием, позволяющий вычислять длину кривой, заданной уравнением

y = y ( x)

в прямоугольной системе координат.

11. Создать прием, позволяющий переходить от прямоугольных координат множества точек в трехмерном пространстве к сферическим.

Указания
1. Разумеется, начинается синтез приема с того, что определяется его теорема. Обычно это связано с решением несложной задачи, приводящей к нужной теореме, либо с обобщением какого-то известного утверждения путем ввода в него дополнительных параметров, учитывающих типичные контексты его применения в задачах. В нашем случае нужно вывести формулу тангенса тройного арктангенса и получить теорему

tg(3 arctg a) = (3a - a3 )/(1 - 3a2 )

.

Так как это - теорема приема, то условие на область допустимых значений (отличие знаменателя от 0) можно опустить - при правильной работе других приемов оно должно усматриваться из контекста преобразуемого выражения. Далее выбираем раздел, в котором будет размещен прием. В нашем случае естественно пойти по цепочке подразделов ("Элементарная алгебра "Тригонометрия "Тангенс "Тангенс выражения, содержащего обратные тригонометрические функции"). Вводим для приема новый концевой раздел (нажатием "к"), сопроводив его, например, текстом: "Тангенс утроенного арктангенса". Далее набираем теорему приема и вводим его заголовок - "второйтерм". Так как прием выполняет преобразование, которое, по-видимому,

71


практически всегда будет полезным, уровень срабатывания его выбираем небольшим - например, равным 3 (все-таки, здесь лучше немного подождать - вдруг на уровнях от 0 до 2 этот тангенс тройного арктангенса будет устранен как-то иначе, например, умножен на 0). Других фильтров не вводим. Указатели приему также не требуются. Сохранив (F4) набранную заготовку приема, нажимаем "н" для получения подсказок от генератора приемов о возможных дополнительных элементах описания приема. Сначала возникает указатель "логсимвол(3 умножение) который говорит компилятору, что тройка здесь должна идентифицироваться как непосредственный операнд произведения. Однако, в нашем случае компилятор и сам это понимает, так что указатель можно не вводить. Далее идут подсказки о вводе нормализаторов общей стандартизации - их принимаем, нажимая каждый раз клавишу Insert. По окончании появления подсказок (возникает голубая линия) прием снова нужно сохранить. Так как он, по существу, уже готов, то вместо F4 сразу нажимаем F3. Наконец, тестируем работу приема. Например, вводим выражение трассировки получаем

tg(3 arctg(1/5)

и на первом же шаге

37/55. /12,
сразу приве-

Заметим, что попытки протестировать прием на каком-либо значении, для которого арктангенс известен, например, для тангенса

дут к срабатыванию старых приемов, и чтобы в этом случае протестировать новый прием, их придется найти и временно отключить. Если эта работа будет проделана, то мы обнаружим, что наш прием вводит сравнительно громоздкое выражение с радикалом, которое вызывает длинную цепочку упрощающих его простых преобразований. Чтобы избежать этого, можно добавить нормализаторы "видумножение" для обработки числителя и знаменателя - после этого пример будет решаться примерно вдвое быстрее. 2. Будем рассматривать простейший случай, когда под радикалом находится выражение жения

a + b c, представляющее p + q c, причем p, q не имеют q = (a +
2

собой полный квадрат другого вырарадикалов. Возводя в квадрат и рас, .

сматривая систему уравнений для неизвестных



получаем:

a2

p, q при известных a, b, c - cb )/2c q = (a - a2 - cb2 )/2c; p = b/2q
2 2

Это подсказывает следующую схему вычислений, выполняемых приемом. Сначала предпринимается попытка разложить на множители выражение

a2 - cb

2

и проверить, что результат является полным квадратом некоторого

выражения

r

. Затем рассматриваются выражения

a + r, a - r q

и предприни-

мается попытка представить какое-либо из них в виде произведения полный квадрат некоторого выражения - оно и будет равно

2c

на

. Наконец, по

b

и

q

определяется

p

. Теорема приема, соответствующая такой последова-

тельности действий, имеет вид:

72


abcpqr 2 = a2 - cb2 & (a + r = 2cq 2 a - r = 2cq 2 ) & b = 2pq (r |p + q c|)

a + b c) =

После набора этой теоремы вводим остальные компоненты описания приема: заголовок - "второйтерм"; фильтр для уровня срабатывания "уровень(0)" и проверяющий отсутствие радикалов в коэффициентах "не(контекст(список(х5 указатели "единица(1

a, b

фильтр

a b)позиция(х6 х5)вид(х6 степень(х7 дробь(1 2)))))"; b p q ) "заменазнака(минус b p)". Нулевой уровень

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

a + r, a - r

могут не иметь заголовка "умножение а быть числовыми

константами. В этом случае идентификация их с произведением заключаться в делении на число

2cq

2

будет

2c

и проверке того, что частное является

полным квадратом. Чтобы предусмотреть эту ситуацию, добавляем указатель "пересечениесписков(фикс(2 1 2)фикс(2 2 2)) отменяющий проверку наличия у данных выражений заголовка "умножение". Далее вводим указатель "идентификатор(1 2 3)" и расставляем указатели общей стандартизации. Наконец, добавляем указатели нормализации "видумножение" для разложения на множители выражений

a2 - cb2 , a + r
.

,

a-r

.

Тестируем прием на какой-либо задаче, например,

2 2+3

Создание аналогичного приема для радикалов третьей степени, а также возможные обобщения приведенного выше приема оставляем читателю. 3. Теорему приема нетрудно получить, перейдя от уравнения нению

sec x = a

к урав-

cos x = 1/a:

ax (sec x = a (0 1 + 1/a & 0 1 - 1/a & (n (целое(n) & x = arccos(1/a) + 2 n) n (целое(n) & x = - arccos(1/a) + 2 n)))).
Вместо приведенных здесь двух неравенств для вать неравенство для модуля

a

можно было бы использо-

1 |a|.

Однако, следует помнить, что эти

неравенства будут обеспечивать сопровождение по области допустимых значений для арккосинуса. Так как проверки здесь будут относится к выражению

1/a,

то переход к модулю существенно их затруднит, и лучше

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

ax (sec x = a (0 a(a + 1) & 0 a(a - 1) & (n (целое(n) & x = arccos(1/a) + 2 n) n (целое(n) & x = - arccos(1/a) + 2 n)))).

73


Уровень срабатывания приема выбираем равным 2 (как и для прочих тригонометрических операций). Контекст срабатывания задается фильтрами "условие "тип(описать) "корень "известно( ) "не(известно(

a

x

))". Добавляем

также имеющийся у других аналогичных приемов фильтр "конец(не(фильтрсерии( ) )) который блокирует данный переход из общих соображений. Например, если уже получено параметрическое описание для какой-либо неизвестной, встречающейся в

a

x

, то вместо применения данного приема выгоднее под-

ставить в выражение

x

явное значение этой неизвестной. Указатель приема

вводим единственный - "примечание(серия)". Он сопровождает преобразованное условие комментарием "серия поясняющим, что встречающиеся в нем кванторы существования дают параметрическое описание и нет смысла пытаться устранить их, получив явное разрешение подкванторного утверждения относительно связанной переменной. В заключение расставляем нормализаторы общей стандартизации. При этом нормализатор "нормарккосинус" сопровождаем указателем "посылки(и(целое(

n

)меньшеилиравно(0

a(a + 1)

)меньшеилиравно(0

a(a - 1))))".

4. Множество членов арифметической прогрессии будем записывать в виде

(i ( (i) & 0 i & x = a + bi)). Если есть две прогрессии, с положительными разностями b и c, отношение которых - рациональное число, то для определения такого отношения m/n будем использовать в теореме приема процедуру сокращения дробного выражения b/c. Чтобы убедиться в несократимости дроби m/n, добавляем проверку взаимной простоты чисел m и n - тогда результирующая прогрессия будет иметь разность bn. Таким
set

x

целое

образом, получаем теорему приема:

abcmn (b/c = m/n & натуральное(m) & натуральное(n) & взаимнопросты(m, n) setx (i (целое(i) & 0 i & x = a + bi)) setx (j (целое(j ) & 0 j & x = a + cj )) = setx (i (целое(i) & 0 i & x = a + bni))).
Единственный фильтр приема - "уровень(1) так как преобразование представляется полезнмы в любых ситуациях. Заголовок приема - "второйтерм". Указатели - "идентификатор(1) "блокпроверок(2 3) "единица(0 ца(1

a

) "едини-

bcn

)". Нормализаторы приема - обычные, в том числе нормализатор

"нормдробь" для частного

b/c. b, c

В принципе, можно было бы несколько уси-

лить прием, введя также нормализатор "видумножение" для разложения на множители выражений перед попыткой сокращения дроби.

Проверяем созданный прием на каком-либо простом примере; оказывается, что после его срабатывания применяется другой прием, преобразующий результат к виду "арифмпрогрессия(

a bn)".

Если бы существование последне-

го приема было известно заранее, то можно было бы прием для пересечения

74


формулировать сразу с использованием обозначения "арифмпрогрессия". 5. В решателе имеются приемы, позволяющие вычислять сумму синусов либо косинусов элементов арифметической прогрессии. Поэтому все, что требуется для вычисления суммы кубов синусов либо косинусов - это преобразование их к функциям кратного аргумента, так как дальше сработают указанные выше приемы. Это соображение позволяет нам создать даже более общий прием - для вычисления сумм проивзольных натуральных степеней синусов и косинусов. Теорема такого приема будет, по существу, вырожденной - в ней должно содержаться только обращение к нормализатору "стандплюс" - он выполняет не только раскрывание скобок, но и переход к кратному тригонометрическому аргументу, если при обращении ввести комментарий "видумножение". Записывается данное обращение так:

n

n

abmnkp ((sin(a + bi)) = p(i)
i=m
Здесь

k

(sin(a + bi)) =
i=m

k

p(i)).

p(i)

- вспомогательное обозначение для результата перехода к кратно-

му аргументу. Заголовок приема - "второйтерм". Уровень срабатывания его выберем равным единице. Добавим фильтры "натуральное( )" (показатель степени есть десятичная запись натурального числа) и "меньше(

k

k

6)" (отсе-

каем слишком большие показатели степени, так как пока неясно, нужно ли будет для них применять данный переход). Вводим стандартный набор указателей - "идентификатор(1) "отображение( ) "единица(0 х1) "заменазнака(минус х2) "единица(1 х2)". Левую часть антецедента теоремы снабжаем нормализаторами "стандплюс(замечание(видумножение)) "посылки(и(целое( ) меньшеилиравно( "посылки(

p

i

mi

) меньшеилиравно(

i n)))".

Указатель нормализации содержит нормали-

переменную

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

затору может понадобиться дополнительная информация о значении этой переменной. 6. Формулу, связывающую площадь вписанного четырехугольника с длина-

a, b, c, d и полупериметром p, нетрудно вывести или взять из (p - a)(p - b)(p - c)(p - d). Здесь имеются пять параметучебника: S = ров - S, a, b, c, d. Из общих соображений, выписывать соотношение для них
ми его сторон имеет смысл, если достаточно большая их часть известна либо представляет интерес для нахождения значений неизвестных. Желательно, чтобы хотя бы один из параметров при этом был неизвестен - иначе соотношение, в лучшем случае, может понадобиться лишь для усмотрения противоречивости описания чертежа. Вообще-то, новые приемы вводятся в решатель только в том случае, когда они понадобились для решения какой-то

75


конкретной задачи. Здесь мы отступаем от этого правила - и это может сказаться на качестве приема. Если нет примера, подтвержадющего полезность приема, то не исключено, что он вообще будет избыточен. Поэтому, доведя упражнение до конца, попробуем найти задачу, которая без данного приема решаться системой не будет. Прежде чем вводить теорему приема, нарисуем геометрическим редактором чертеж - проведем окружность рехугольник

EF

и изобразим вписанный в нее четы-

AB C D

. Теорема приема, кроме приведенного выше соотноше-

ния, должна содержать также описание геометрической ситуации:

AB

C DE F abcdpS (окружность

(E F )

описана около фигура

(AB C D) &

актив

(S (

фи-

гура

(AB C D))) & p = (l(AB )+l(B C )+l(C D)+l(AD))/2 S (

фигура

(AB C D)) =

(p - l(AB ))(p - l(B C ))(p - l(C D))(p - l(AD))).
Второй антецедент означает, что в задаче уже рассматривается площадь четырехугольника - в этом случае автоматически вводится явная ссылка на площадь, представляющая собой фиктивную посылку вида "актив(площадь( Третий антецедент вводит вспомогательное обозначение

...

))".

p

для полупери-

метра, который четырежды упоминается в консеквенте теоремы. Прием имеет заголовок "вывод". Уровень его срабатывания выберем средним - для геометрии в качестве такого уровня годится, например, шестой. Соответственно, имеем фильтры "уровень(6) "тип(исследовать)". Переходим к основному фильтру, который будет рассматривать список связываемых выводимым равенством параметров. Начнем этот фильтр с перечисления значений данных параметров: "контекст(равно(х5 набор(терм(расстояние(

AB

)) терм(расстояние(

BC

)) терм(расстояние(

CD

)) терм(расстояние(

AD

))

терм (площадь(фигура(набор(

AB C D

))))))

...

. Так как мы перечисляем в набо-

ре х5 термы, определяемые теоремными выражениями, то каждое из них заключаем внутри записи "терм(

...

)". В действительности, нас будут ин-

тересовать не выражения "расстояние(

...

) "площадь(

...

) а значения этих

выражений, определяемые на текущий момент из контекста задачи. Чтобы получить такие значения, будем обрабатывать выражения нормализаторами "нормрасстояние" и "нормплощадь". После того, как набор х5 значений параметров определился, продолжаем запись фильтра: не(известно( х7)) не(неизв(х7)))2) меньше(1 число(входит(х7 х5) известно(х7)))". Здесь требуется, чтобы хотя бы один параметр был не известен и связан по цепочке соотношений с неизвестными внешней задачи на описание; чтобы

...

входит(х6 х5) неизв(х6) меньше(число(входит(х7 х5)

76


имелось не более одного неизвестного параметра, не связанного таким образом с неизвестными внешней задачи; чтобы не менее двух параметров были известны. Разумеется, это - лишь нулевая версия возможного фильтра, и ее стоит проверить путем прокрутки по задачнику. Если окажется, что в каких-то задачах срабатывание приема является вредным, то фильтр придется усиливать. Заметим, что пока в область допустимых срабатываний попадают все ситуации прямого определения единственного неизвестного параметра через известные остальные параметры. Единственный указатель приема - "идентификатор(3)"; нормализаторы берем все, которые подсказывает система автоматического пополнения описания приема. Для тестирования приема вводим простейшую задачу, чертеж которой в точности совпадает с условием теоремы - четырехугольник, вписанный в окружность и имеющий известные длины своих сторон, например, 3,5,7,4. Требуется в задаче найти площадь четырехугольника. Нажимая Ctr-ч, получаем достаточно точно воспроизводящий значения длин сторон чертеж. При трассировке убеждаемся в том, что прием срабатывает. При его отключении (на момент написания данного примера) решатель задачи не решает. 7. Начинаем создание приема с построения геометрическим редактором чертежа. Рисуем треугольник

BF

и

AG,

а

до их точки

AD и B E , медианы также срединные перпендикуляры F Q и GQ, продолженные пересечения Q. Вводим также точки P , R пересечения высоты
, проводим высоты

AB C

и медиан соответственно. Затем переходим к набору теоремы:

AB

C DE F GP QR

( (AB C ) & D
прямая

прямая

(B C ) & E

прямая

(AC ) &

прямая

(AD)

прямая

(B C ) &

(B E )прямая(AC ) & G

прямая

(B C ) & l(B G) =
прямая

l(C G) & F
прямая

прямая

(AC ) & l(AF ) = l(C F ) &
прямая

прямая

(F Q)

(AC ) &

(GQ)прямая(B C ) & P (AG) & R
прямая

(AD) & P (P R)).

прямая

(B E ) & R

прямая

(B F ) Q

прямая

Заголовок приема - "вывод"; уровень срабатывания выбираем не очень большим, так как утверждение о принадлежности трех точек одной прямой может оказаться существенным для всего дальнейшего ходя решения. Например, можно взять его равным 4. Обычно такой произвольный выбор уровня срабатывания корректируется при регулировочной прокрутке приема на задачах. Вводим фильтр "или(тип(доказать)тип(исследовать))". Каких-то особых соображений об ограничениях на срабатывание данного приема не возникает, и других фильтров пока не вводим. Для ввода указа-

77


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

PR

и

RQ

. При срабатывании

приема решатель сравнительно быстро находит ответ; при его отключении ответ не выдается. 8. Условие на

x

запишем в таком виде:

y (ay 2 + by + c = 0 y < x).

Заметим,

что оно вовсе не означает наличие у трехчлена корней; если корни есть, то они должны быть меньше

x

, а если их нет, то никаких дополнительных

ограничений не требуется. В этой ситуации, как легко видеть, условие эквивалентно следующей альтернативе: либо дискриминант неотрицателен, значение трехчлена в точке сама точка

x

имеет тот же знак, что и коэффициент

a



x

расположена правее точки

-b/2a

экстремума трехчлена, либо

дискриминант отрицателен. Это дает следующую теорему приема:

abcx (ѓ(a = 0) (y (ay 2 + by + c = 0 y < x) (0 b2 - 4ac & 0 < a(ax2 + bx + c) & - b/2a < x) (b2 - 4ac < 0))).
Заголовок приема - "второйтерм". Уровень срабатывания его выберем не очень большим - устранение квантора может существенно упростить задачу, и откладывать его не имеет смысла. Пусть, например, этот уровень будет равен 2. Для ввода указателей и нормализаторов прибегаем к подсказкам системы автоматического доопределения приема; со всеми этими подсказками соглашаемся. Чтобы протестировать прием, вводим какую-либо несложную задачу, например, задачу с неизвестной

b

и условием

x (3x2 +

bx + 5 = 0 x < 4).

Запускаем трассировку по шагам решения, и обна-

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

x

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

такое решение, все же, более трудоемко, чем предлагаемое нашим приемом. Чтобы "опередить" старый прием, понижаем уровень срабатывания нового приема до 1. Снова запускаем трассировку, и опять оказывается, что прием не сработал. При более внимательном рассмотрении ситуации обнаруживаем, что решатель, учитывая условия на область допустимых значений, ввел под квантор, кроме условия равенства трехчлена нулю, также утверждение "число(

x

)". Такого рода пополнение антецедентов квантор-

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

78


под квантор общности дополнительный антецедент "число( )". Лишь после этого трассировка покажет срабатывание приема, а при выдаче ответа будет отмечено небольшое ускорение по сравнению с запуском без нового приема. Этот пример демонстрирует типичную ситуацию при обучении решателя как правило, новый прием обязательно приводит к каким-то неожиданностям, и лишь после некоторого цикла коррекций удается получить желаемый результат. К такому явлению при обучении системы придется привыкать. Не следует воспринимать его как что-то негативное, свидетельствующее либо о малом опыте учителя системы, либо о принципиально неправильном подходе к ее обучению. Это - совершенно нормальное явление, своего рода неизбежное "трение" процесса обучения. Создать и откомпилировать прием - это лишь малая часть труда, который приходится в него вкладывать. Основная работа состоит в том, чтобы после этого преодолеть все те неожиданные барьеры, которые выявляются при тестировании. В общем-то, это неудивительно - логические процессы сложны и разнообразны, а изучение их только начинается. Для преодоления трудоемкости дрессировки решателей необходимо иметь предусмотрительность, обеспечить которую, по-видимому, сможет лишь постепенное формирование, пусть хотя бы и эмпирическим путем, и пусть хотя бы и нематематической, но все же теории логических процессов. 9. Для разложения в ряд Тейлора решатель использует нормализатор "рядтейлора". Ему передается входной комментарий (рядтейлора щий переменную

y

xb

), указываю-

x

, для которой выполняется разложение, и точку

b



которой оно выполняется. Число Бернулли с индексом

i

обозначается в

решателе "числобернулли( )" (см. раздел "Элементарная алгебра "Комбинаторные функции"). Разложение в степенной ряд выражения обобщаем до разложения выражения вида получается следующая:

i

tg x

сразу

tg ((a(x + c)k )/d).

Теорема приема

abcdxk (
i=1
Здесь

натуральное

(k ) & c = -b tg((a(x + c)k )/d) =
2i-1

((-1) b

i-1 2i

2 (22i - 1)числобернулли(2i)a

(x + c)(2i

-1)k)

/((2i)!d

2i-1

)

.

- точка разложения, передаваемая приему через комментарий к

нормализатору. Заголовок приема - "замена(второйтерм рядтейлора)". Вводим фильтры приема "не(входит(

x a))

"не(входит(

x c))

"не(входит(

x d))

"не(входит(

xk

)) не-

обходимые для того, чтобы бесконечная сумма представляла собой степенной ряд. Комментарий, определяющий "вход(рядтейлора

x

и

b

, извлекаем указателем

xb

)". Далее вводим указатели "блокпроверок(1) "иден-

тификатор(2) "единица(0

c

) "единица(1

adk

) "заменазнака(минус

a

)" и

79


расставляем нормализаторы общей стандартизации. Заметим, что прием служит для получения бесконечной суммы; если нужно применить локальную формулу Тейлора и ограничиться заданным числом членов, то используется нормализатор "формулатейлора". Попробуйте самостоятельно ввести аналогичный прием для последнего нормализатора, отключив имеющийся в нем прием разложения тангенса через разложения синуса и косинуса. Нахождение чисел Бернулли осуществляется нормализатором общей стандартизации "нормчислобернулли". 10. Будем считать, что кривая

P A

задается выражением "точки(

AK

) определя-

ющим множество точек плоскости, координаты которых в системе координат

K

образуют множество

. На тот случай, если условие принадлежности

пары чисел ( тельно

x, y

) множеству

A

не имеет вида, явно разрешенного относи-

y

, предпримем в приеме попытку такого разрешения. Для получен-

ной в результате зависимости отрезка

y = f ( x)

и определившегося при разрешении

[a, b]

далее используем известную формулу длины кривой. Таким

образом, имеем следующую теорему приема:

abf

K P AB (прямкоорд

(K ) & P =

точки

(A, K ) & ((x, y ) A) = (y = f (x) & B (x))
b
длина

& B (x) = (a x & x b &

число

(x))

(P ) =
a

1+

df (x) dx

2

dx).

Второй антецедент теоремы идентифицирует определяющее кривую выражение "точки(

A,K

)". Либо изначально кривая задана таким выражением,

либо в контексте имеется равенство, дающее это выражение для антецедент нужен для получения явной зависимости

P

. Третий

y = f (x).

Он выража-

ет эквивалентность двух утверждений - утверждения о принадлежности

x, y ) множеству координат точек кривой A, и результата y = f (x) & B (x) явного разрешения этого условия относительно неизвестной y . Такие эквивалентности в посылках теорем приемов запи"произвольной" пары ( сываются в виде равенств - для удобства компиляции. После разрешения условия на координаты точки относительно

y

остаются какие-то условия

B (x)

на независимую переменную. Чтобы получить отрезок интегрирова-

ния, эти условия необходимо явно разрешить относительно четвертый антецедент теоремы.

x

. Это и делает

Заголовок приема - "второйтерм". Уровень срабатывания его выбираем сравнительно небольшим. Так как в решателе уже имеется прием для вычисления длины кривой, срабатывающий на третьем уровне, лучше положить уровень срабатывания нашего приема равным 2. Кроме стандартных указателей "идентификатор(2 3 4) "отображение( дим указатели "новаяпеременная(

fB

) вво-

x

)" и "новаяпеременная( ) объясняющие

y

80


компилятору, что переменные

x, y

он может выбрать произвольным обра-

зом (но без совпадения их с уже имеющимися в задаче). При разрешении условия

B (x)

относительно

x

вместо нестрогих неравенств могут появить-

ся строгие. Чтобы обобщить прием и на эти случаи, добавляем указатели "вариант(фикс(4 2 1)меньше) "вариант(фикс(4 2 2)меньше)". Они разрешают появляться строгим неравенствам вместо нестрогих в задании промежутка для

x

, не изменяя прочих действий приема.

Расставляем нормализаторы приема. Во-первых, для идентификации выражения "точки(

A ,K

)" снабжаем переменную

P

(изначально идентифици-

руемую с кривой из выражения "длина(

P

)") нормализатором "смточки".

Это - очень простой вспомогательный нормализатор, заменяющий выражение "точки( венство "

P

на

. . .) если в контексте идентификации встречается раP =точки(. . .)". Далее, для обработки левой части третьего антеy
. Оно имеет следующий вид: "задача(6

цедента вводим обращение к вспомогательной задаче на описание, разрешающей эту часть относительно

тип(описать)полный явное буфер прямойответ упростить цель(неизвестная( )))". Цель "буфер" добавлена для того, чтобы на некоторое время запомнить результат решения данной задачи и при повторных попытках ее решения, предприниаемых другими приемами, сразу извлекать из него готовый результат. Надобность в этом может возникнуть, если создать прием, предпринимающий попытку разрешения уравнения кривой относительно

y

y

для

усмотрения распадения кривой на несколько ветвей и разбиения задачи на подзадачи вычисления длин отдельных ветвей. Для обработки левой части четвертого антецедента вводим аналогичный указатель нормализации: "задача(5 тип(описать)полный явное буфер прямойответ упростить цель(неизвестная(

x

)))".

Наконец, для вычисления интеграла сопровождаем его указателем нормализации "задача(6 упростить)"; радикал под интегралом - указателем "задача(4 упростить одз)"; производную - указателем "задача(5 упростить одз)". Такое принудительное выделение этапов вычисления во многих случаях существенно ускоряет получение результата. 11. Пусть в прямоугольной системе координат соотношением коорд ло

K множество точек A задается (A, K ) = setxyz (f (x, y , z ) = 0 & число(x) & число(y ) & чис-

(z )).

Тогда для перехода к сферическим координатам можно записать

следующую теорему приема:

AK f (
ло

прямкоорд число

(K ) &

коорд

(A, K ) = set

xy z

(f (x, y , z ) = 0 &

число

(x) &

чис-

(y ) &

(z ))

сферкоорд

(A, K ) = setabc (f (a cos c cos b, a cos c sin b, a sin c)

= 0 & 0 a & - 2c & 2c & - b & b )).
81


Так как решатель обычно устраняет знаменатели в уравнениях и неравенствах с дробями, то неравенства для широты домножены на 2 уже в теореме. Заголовок приема - "вывод". Поводом для его срабатывания пусть будет упоминание в посылках задачи выражения "сферкоорд(

AK

)". В этом

случае уровень срабатывания можно сделать небольшим, например, равным 3. Лучше проявить предусмотрительность на тот случай, если соотношение для прямоугольных координат множества

A

появится в зада-

че несколько позднее, и добавить еще одну попытку применения приема на более высоком уровне - например, на шестом. В результате появится фильтр "уровень(3 6)". Далее добавляем стандартные фильтры "посылка "тип(исследовать)". Чтобы избежать повторных применений приема, нужно ввести еще какой-то ограничитель. Пусть это будет фильтр, проверяющий отсутствие в посылках равенства, дающего выражение для сферических координат множества

A

через описатель "класс" - "не(контек-

ст(посылка(х1)вид(х1 равно(сферкоорд( Далее вводим указатели "отображение(

AK

)х2))заголовок(х2 класс)))".

f

)" и "контрольвывода(сферкоорд(

A

K

))". Последний из них и обязывает компилятор начать программу при-

ема с усмотрения в задаче выражения "сферкоорд(

AK

)". Чтобы реша-

тель не поменял местами левую и правую части равенства (при прочих равных условиях влево переносится более длинное выражение), добавляем указатель "примечание(ориентацияравенства)". Он вводит комментарий "ориентацияравенства" к новой посылке, блокирующий на последующих шагах перестановку частей равенства. Далее, вводим указатель "примечание(нормкоорд)". Он сопровождает посылку комментарием "нормкоорд блокирующим попытки исключения описателя "класс" путем явного разрешения условия принадлежности этому классу. Такие попытки для множеств, заданных уравнениями, обычно бесполезны. Чтобы упростить уравнение для новых координат, сопровождаем утверждение под описателем "класс" нормализатором "задача(6 тип(описать) полный прямойответ явное упростить цель(неизвестная(

abc

)))". Это накла-

дывает достаточно сильные требования на уравнение множества - прием пытается получить явное соотношение, выражающее одну из сферических координат через две другие. Чтобы избежать слишком долгого времени его применения, вводим в заключение ограничитель трудоемкости - указатель "лимит(10000000)".

82