Previous: Контексты, Up: Контексты   [Contents][Index]

10.1 Функции для работы с контекстами

Функция: activate (context_1, ..., context_n)

Активизирует контексты context_1, ..., context_n. Факты в этих контекстах становятся доступными для процедур дедукции. Факты в данных контекстах не отображаются функцией facts ().

Переменная activecontexts содержит список активных контекстов, активированных с помощью activate.

Системная переменная: activecontexts

Значение по умолчанию: []

activecontexts – список активных контекстов, активизированных при помощи функции activate, в отличии от контекстов, которые являются активными как подконтексты текущего контекста.

Функция: assume (pred_1, ..., pred_n)

Добавляет предикаты pred_1, ..., pred_n к текущему контексту. Если предикаты являются противоречивыми или избыточными в текущем контексте, то добавление не производится. Контекст объединяет все предикаты от всех вызовов assume.

assume возвращает список предикатов, добавленных к базе данных и атомы redundant или inconsistent для избыточных или противоречивых предикатов соответственно.

Предикаты pred_1, ..., pred_n могут быть только выражениями, содержащими операторы отношения < <= equal notequal >= и >. Предикаты не могут быть буквальными равенствами = или неравенствами # выражений, и не могут включать функции-предикаты integerp.

Распознаются составные предикаты вида pred_1 and ... and pred_n, но не предикаты pred_1 or ... or pred_n. Распознается not pred_k, если pred_k является предикатом отношения. Выражения вида not (pred_1 and pred_2) и not (pred_1 or pred_2) не распознаются.

Механизм дедукции Maxima не очень силен. Существует много очевидных следствий, которые не могут быть выведены is. Это известная слабость.

assume вычисляет свои аргументы.

См. также is, facts, forget, context и declare.

Примеры:

(%i1) assume (xx > 0, yy < -1, zz >= 0);
(%o1)              [xx > 0, yy < - 1, zz >= 0]
(%i2) assume (aa < bb and bb < cc);
(%o2)                  [bb > aa, cc > bb]
(%i3) facts ();
(%o3)     [xx > 0, - 1 > yy, zz >= 0, bb > aa, cc > bb]
(%i4) is (xx > yy);
(%o4)                         true
(%i5) is (yy < -yy);
(%o5)                         true
(%i6) is (sinh (bb - aa) > 0);
(%o6)                         true
(%i7) forget (bb > aa);
(%o7)                       [bb > aa]
(%i8) prederror : false;
(%o8)                         false
(%i9) is (sinh (bb - aa) > 0);
(%o9)                        unknown
(%i10) is (bb^2 < cc^2);
(%o10)                       unknown
Управляющая переменная: assumescalar

Значение по умолчанию: true

assumescalar определяет, что выражения expr, для которых nonscalarp (expr) равно false, рассматриваются как скаляры при некоторых преобразованиях.

Пусть expr есть выражение отличное от списка или матрицы, и [1, 2, 3] есть список (или матрица). Тогда expr . [1, 2, 3] дает [expr, 2 expr, 3 expr] если assumescalar равно true, или scalarp (expr) равно true, или constantp (expr) равно true.

Если assumescalar равно true, такие выражения трактуются как скаляры только для коммутативных операций, но не для некоммутативного умножения ..

Когда assumescalar равно false, такие выражения трактуются как не-скалярные.

Когда assumescalar равно all, такие выражения трактуются как скаляры для всех перечисленных выше операций, включая некоммутативное умножение.

Управляющая переменная: assume_pos

Значение по умолчанию: false

Если assume_pos равно true и знак параметра x не может быть определен исходя из текущего контекста или другим способом, тогда sign и asksign (x) дают true. Таким образом подавить некоторые автоматические запросы asksign, возникающие при работе integrate или других вычислениях.

По умолчанию параметр x таков, что symbolp (x) или subvarp (x) истинны. Класс выражений, которые могут рассматриваться в качестве параметров, может в некоторой степени изменяться с помощью переменной assume_pos_pred.

sign и asksign пытаются определить знак выражения исходя из знаков операндов. Например, если a и b оба положительны, тогда a + b тоже положительно.

Однако, невозможно совсем обойтись без интерактивных запросов asksign. В частности, когда аргумент asksign является разницей x - y или логарифмом log(x), тогда asksign всегда запросит пользователя о знаке параметра, даже если assume_pos равно true и assume_pos_pred есть функция, возвращающая true для всех аргументов.

Управляющая переменная: assume_pos_pred

Значение по умолчанию: false

Если assume_pos_pred присвоено значение, являющееся именем функции или лямбда-выражение с одним аргументом x, тогда эта функция вызывается для того чтобы определить является ли x параметрам для assume_pos. assume_pos_pred игнорируется, когда assume_pos равно false.

Функция assume_pos_pred вызывается sign и asksign с аргументом x, который является либо атомом, либо переменной с индексом, либо вызовом функции. Если assume_pos_pred возвращает true, тогда x рассматривается как допустимый параметр для assume_pos.

По умолчанию параметром является x ткой, что symbolp (x) или subvarp (x) истинно.

См. также assume и assume_pos.

Примеры:

(%i1) assume_pos: true$
(%i2) assume_pos_pred: symbolp$
(%i3) sign (a);
(%o3)                          pos
(%i4) sign (a[1]);
(%o4)                          pnz
(%i5) assume_pos_pred: lambda ([x], display (x), true)$
(%i6) asksign (a);
                              x = a

(%o6)                          pos
(%i7) asksign (a[1]);
                             x = a
                                  1

(%o7)                          pos
(%i8) asksign (foo (a));
                           x = foo(a)

(%o8)                          pos
(%i9) asksign (foo (a) + bar (b));
                           x = foo(a)

                           x = bar(b)

(%o9)                          pos
(%i10) asksign (log (a));
                              x = a

Is  a - 1  positive, negative, or zero?

p;
(%o10)                         pos
(%i11) asksign (a - b);
                              x = a

                              x = b

                              x = a

                              x = b

Is  b - a  positive, negative, or zero?

p;
(%o11)                         neg
Управляющая переменная: context

Значение по умолчанию: initial

context служит для обозначения набора фактов формируемого при помощи assume и forget. assume добавляет факты к набору, обозначаемому context, а forget удаляет факты.

Присваивание context имени foo изменяет текущий контекст на foo. Если контекст с таким именем foo пока еще не существует, то он автоматически создается вызовом функции newcontext. Указанный контекст автоматически активируется.

См. contexts для общего описания механизма контекстов.

Управляющая переменная: contexts

Значение по умолчанию: [initial, global]

contexts – список существующих на данный момент контекстов, включая активный.

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

Любой символ может быть контекстом, и факты содержащиеся в этом контексте сохраняются до тех пор пока не будут уничтожены поодиночке с помощью forget или целиком с помощью kill, уничтожающем весь контекст, которому они принадлежат.

Контексты имеют иерархическую структуру. Корневым элементом всегда является контекст global, который содержит информацию о Maxima нужную некоторым функциям. Когда мы находимся в определенном контексте, все его факты являются активными, т.е. используются в логических выводах. Аналогично активными являются все факты в подконтекстах текущего контекста.

При запуске Maxima, активным является контекст initial, подконтекстом которого является global.

См. также facts, newcontext, supcontext, killcontext, activate, deactivate, assume и forget.

Функция: deactivate (context_1, ..., context_n)

Деактивирует все указанные контексты context_1, ..., context_n.

Функция: facts (item)
Функция: facts ()

Если item является именем контекста, тогда facts (item) возвращает список содержащихся в нем фактов.

Если item не является именем контекста, тогда facts (item) возвращает список фактов известных о item в текущем контексте. Факты являющиеся активными, но принадлежащие другим контекстам не отображаются.

facts () (т.е. без аргументов) отображает все факты текущего контекста.

Декларация: features

Maxima "распознает" некоторые математические свойства (features) функций и переменных.

declare (x, foo) устанавливает свойство foo для функции или переменной x.

declare (foo, feature) объявляет новое свойство foo. Например, declare ([red, green, blue], feature) объявляет три свойства red, green и blue.

Предикат featurep (x, foo) возвращает true если x имеет свойство foo, и false в противном случае.

Информационный список features содержит все известные свойства. А именно integer, noninteger, even, odd, rational, irrational, real, imaginary, complex, analytic, increasing, decreasing, oddfun, evenfun, posfun, commutative, lassociative, rassociative, symmetric и antisymmetric, плюс свойства определенные пользователем.

features является списком математических свойств. Существует также список нематематических, системо-зависимых свойств. См. status.

Функция: forget (pred_1, ..., pred_n)
Функция: forget (L)

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

forget (L), где L есть список предикатов, удаляет все предикаты из данного списка.

Функция: killcontext (context_1, ..., context_n)

Уничтожает контексты context_1, ..., context_n.

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

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

killcontext вычисляет свои аргументы. killcontext возвращает done.

Функция: newcontext (name)

Создает новый пустой контекст с именем name, имеющий контекст global в качестве своего подконтекста. Новый контекст становится текущим активным контекстом.

newcontext вычисляет свои аргумент. newcontext возвращает name.

Функция: supcontext (name, context)
Функция: supcontext (name)

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

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


Previous: Контексты, Up: Контексты   [Contents][Index]