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

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]