4 @c OriginalRevision=1.14
5 @c TranslatedBy: (c) 2005-12 Vadim V. Zhytnikov <vvzhyt@gmail.ru>
8 * Функции для работы с контекстами::
11 @node Функции для работы с контекстами, , Контексты, Контексты
12 @section Функции для работы с контекстами
14 @deffn {Функция} activate (@var{context_1}, ..., @var{context_n})
15 Активизирует контексты @var{context_1}, ..., @var{context_n}.
16 Факты в этих контекстах становятся доступными для
17 процедур дедукции. Факты в данных контекстах
18 не отображаются функцией @code{facts ()}.
20 Переменная @code{activecontexts} содержит список активных контекстов,
21 активированных с помощью @code{activate}.
23 @opencatbox{Категории:}
24 @category{Факты и выводы}
29 @defvr {Системная переменная} activecontexts
30 Значение по умолчанию: @code{[]}
32 @code{activecontexts} -- список активных контекстов, активизированных
33 при помощи функции @code{activate}, в отличии от контекстов, которые
34 являются активными как подконтексты текущего контекста.
36 @opencatbox{Категории:}
37 @category{Факты и выводы}
43 @deffn {Функция} assume (@var{pred_1}, ..., @var{pred_n})
44 Добавляет предикаты @var{pred_1}, ..., @var{pred_n} к текущему контексту.
45 Если предикаты являются противоречивыми или избыточными
46 в текущем контексте, то добавление не производится.
47 Контекст объединяет все предикаты от всех вызовов @code{assume}.
49 @code{assume} возвращает список предикатов, добавленных к базе данных и
50 атомы @code{redundant} или @code{inconsistent} для избыточных
51 или противоречивых предикатов соответственно.
53 Предикаты @var{pred_1}, ..., @var{pred_n} могут быть только выражениями,
54 содержащими операторы отношения @code{< <= equal notequal >=} и @code{>}.
55 Предикаты не могут быть буквальными равенствами @code{=} или неравенствами @code{#} выражений,
56 и не могут включать функции-предикаты @code{integerp}.
58 Распознаются составные предикаты вида @code{@var{pred_1} and ... and @var{pred_n}},
59 но не предикаты @code{@var{pred_1} or ... or @var{pred_n}}.
60 Распознается @code{not @var{pred_k}}, если @var{pred_k} является предикатом отношения.
61 Выражения вида @code{not (@var{pred_1} and @var{pred_2})}
62 и @code{not (@var{pred_1} or @var{pred_2})} не распознаются.
64 Механизм дедукции Maxima не очень силен. Существует много очевидных следствий,
65 которые не могут быть выведены @code{is}.
66 Это известная слабость.
68 @code{assume} вычисляет свои аргументы.
70 См. также @code{is}, @code{facts}, @code{forget}, @code{context} и @code{declare}.
75 @c assume (xx > 0, yy < -1, zz >= 0);
76 @c assume (aa < bb and bb < cc);
80 @c is (sinh (bb - aa) > 0);
83 @c is (sinh (bb - aa) > 0);
88 (%i1) assume (xx > 0, yy < -1, zz >= 0);
89 (%o1) [xx > 0, yy < - 1, zz >= 0]
90 (%i2) assume (aa < bb and bb < cc);
91 (%o2) [bb > aa, cc > bb]
93 (%o3) [xx > 0, - 1 > yy, zz >= 0, bb > aa, cc > bb]
98 (%i6) is (sinh (bb - aa) > 0);
100 (%i7) forget (bb > aa);
102 (%i8) prederror : false;
104 (%i9) is (sinh (bb - aa) > 0);
106 (%i10) is (bb^2 < cc^2);
110 @opencatbox{Категории:}
111 @category{Факты и выводы}
116 @defvr {Управляющая переменная} assumescalar
117 Значение по умолчанию: @code{true}
119 @code{assumescalar} определяет, что выражения @code{expr},
120 для которых @code{nonscalarp (expr)} равно @code{false},
121 рассматриваются как скаляры при некоторых преобразованиях.
123 Пусть @code{expr} есть выражение отличное от списка или матрицы,
124 и @code{[1, 2, 3]} есть список (или матрица).
125 Тогда @code{expr . [1, 2, 3]} дает @code{[expr, 2 expr, 3 expr]}
126 если @code{assumescalar} равно @code{true}, или @code{scalarp (expr)} равно
127 @code{true}, или @code{constantp (expr)} равно @code{true}.
129 Если @code{assumescalar} равно @code{true}, такие выражения
130 трактуются как скаляры только для коммутативных операций, но не
131 для некоммутативного умножения @code{.}.
133 Когда @code{assumescalar} равно @code{false}, такие
134 выражения трактуются как не-скалярные.
136 Когда @code{assumescalar} равно @code{all}, такие выражения
137 трактуются как скаляры для всех перечисленных выше операций,
138 включая некоммутативное умножение.
140 @opencatbox{Категории:}
141 @category{Факты и выводы}
147 @defvr {Управляющая переменная} assume_pos
148 Значение по умолчанию: @code{false}
150 Если @code{assume_pos} равно @code{true}
151 и знак параметра @var{x} не может быть определен исходя из текущего контекста
152 @c WHAT ARE THOSE OTHER CONSIDERATIONS ??
153 или другим способом, тогда @code{sign} и @code{asksign (@var{x})} дают @code{true}.
154 Таким образом подавить некоторые автоматические запросы @code{asksign},
155 возникающие при работе @code{integrate} или других вычислениях.
157 По умолчанию параметр @var{x} таков, что @code{symbolp (@var{x})} или
158 @code{subvarp (@var{x})} истинны. Класс выражений, которые могут
159 рассматриваться в качестве параметров, может в некоторой степени
160 изменяться с помощью переменной @code{assume_pos_pred}.
162 @code{sign} и @code{asksign} пытаются определить знак выражения
163 исходя из знаков операндов. Например, если
164 @code{a} и @code{b} оба положительны, тогда @code{a + b}
167 Однако, невозможно совсем обойтись без интерактивных запросов @code{asksign}.
168 В частности, когда аргумент @code{asksign} является разницей
169 @code{@var{x} - @var{y}} или логарифмом @code{log(@var{x})},
170 тогда @code{asksign} всегда запросит пользователя о знаке параметра,
171 даже если @code{assume_pos} равно @code{true} и @code{assume_pos_pred}
172 есть функция, возвращающая @code{true} для всех аргументов.
174 @c NEED EXAMPLES HERE
176 @opencatbox{Категории:}
177 @category{Факты и выводы}
183 @defvr {Управляющая переменная} assume_pos_pred
184 Значение по умолчанию: @code{false}
186 Если @code{assume_pos_pred} присвоено значение, являющееся именем
187 функции или лямбда-выражение с одним аргументом @var{x},
188 тогда эта функция вызывается для того чтобы определить
189 является ли @var{x} параметрам для @code{assume_pos}.
190 @code{assume_pos_pred} игнорируется, когда @code{assume_pos} равно @code{false}.
192 Функция @code{assume_pos_pred} вызывается @code{sign} и @code{asksign}
193 с аргументом @var{x}, который является либо атомом, либо переменной
194 с индексом, либо вызовом функции.
195 Если @code{assume_pos_pred} возвращает @code{true},
196 тогда @var{x} рассматривается как допустимый параметр для @code{assume_pos}.
198 По умолчанию параметром является @var{x} ткой, что
199 @code{symbolp (@var{x})} или @code{subvarp (@var{x})} истинно.
201 См. также @code{assume} и @code{assume_pos}.
204 @c EXAMPLE OUTPUT GENERATED FROM:
206 @c assume_pos_pred: symbolp$
209 @c assume_pos_pred: lambda ([x], display (x), true)$
212 @c asksign (foo (a));
213 @c asksign (foo (a) + bar (b));
214 @c asksign (log (a));
218 (%i1) assume_pos: true$
219 (%i2) assume_pos_pred: symbolp$
224 (%i5) assume_pos_pred: lambda ([x], display (x), true)$
229 (%i7) asksign (a[1]);
234 (%i8) asksign (foo (a));
238 (%i9) asksign (foo (a) + bar (b));
244 (%i10) asksign (log (a));
247 Is a - 1 positive, negative, or zero?
251 (%i11) asksign (a - b);
260 Is b - a positive, negative, or zero?
266 @opencatbox{Категории:}
267 @category{Факты и выводы}
273 @defvr {Управляющая переменная} context
274 Значение по умолчанию: @code{initial}
276 @code{context} служит для обозначения набора фактов формируемого при
277 помощи @code{assume} и @code{forget}.
278 @code{assume} добавляет факты к набору, обозначаемому @code{context},
279 а @code{forget} удаляет факты.
281 Присваивание @code{context} имени @var{foo} изменяет текущий контекст
282 на @var{foo}. Если контекст с таким именем @var{foo} пока еще не
283 существует, то он автоматически создается вызовом функции
285 @c ISN'T THIS NEXT BIT EQUIVALENT TO THE FIRST ??
286 Указанный контекст автоматически активируется.
288 См. @code{contexts} для общего описания механизма контекстов.
290 @opencatbox{Категории:}
291 @category{Факты и выводы}
296 @c UMM, I'M HAVING TROUBLE GETTING THE CONTEXT-SWITCHING STUFF TO BEHAVE AS EXPECTED
297 @c SOME EXAMPLES WILL HELP A LOT HERE
298 @defvr {Управляющая переменная} contexts
299 Значение по умолчанию: @code{[initial, global]}
301 @code{contexts} -- список существующих на данный момент контекстов,
304 Механизм контекстов позволяет пользователю создавать
305 поименованные наборы фактов (контексты).
306 В результате можно легко активировать или деактивировать
307 большие наборы фактов просто активируя или деактивируя
308 соответствующие контексты.
310 Любой символ может быть контекстом, и факты содержащиеся в этом
311 контексте сохраняются до тех пор пока не будут уничтожены
312 поодиночке с помощью @code{forget} или целиком с помощью @code{kill},
313 уничтожающем весь контекст, которому они принадлежат.
315 Контексты имеют иерархическую структуру. Корневым элементом
316 всегда является контекст @code{global}, который содержит информацию о
317 Maxima нужную некоторым функциям. Когда мы находимся в определенном
318 контексте, все его факты являются активными, т.е. используются
319 в логических выводах. Аналогично активными являются все факты
320 в подконтекстах текущего контекста.
322 При запуске Maxima, активным является контекст @code{initial},
323 подконтекстом которого является @code{global}.
325 См. также @code{facts}, @code{newcontext},
326 @code{supcontext}, @code{killcontext}, @code{activate},
327 @code{deactivate}, @code{assume} и @code{forget}.
329 @opencatbox{Категории:}
330 @category{Факты и выводы}
335 @deffn {Функция} deactivate (@var{context_1}, ..., @var{context_n})
336 Деактивирует все указанные контексты @var{context_1}, ..., @var{context_n}.
338 @opencatbox{Категории:}
339 @category{Факты и выводы}
344 @deffn {Функция} facts (@var{item})
345 @deffnx {Функция} facts ()
346 Если @var{item} является именем контекста, тогда
347 @code{facts (@var{item})} возвращает список
348 содержащихся в нем фактов.
350 Если @var{item} не является именем контекста, тогда
351 @code{facts (@var{item})} возвращает список фактов известных о
352 @var{item} в текущем контексте. Факты являющиеся активными, но
353 принадлежащие другим контекстам не отображаются.
355 @code{facts ()} (т.е. без аргументов) отображает все факты
358 @opencatbox{Категории:}
359 @category{Факты и выводы}
364 @defvr {Декларация} features
365 Maxima "распознает" некоторые математические свойства (features)
366 функций и переменных.
368 @code{declare (@var{x}, @var{foo})} устанавливает свойство @var{foo}
369 для функции или переменной @var{x}.
371 @code{declare (@var{foo}, feature)} объявляет новое свойство @var{foo}.
373 @code{declare ([red, green, blue], feature)} объявляет три свойства
374 @code{red}, @code{green} и @code{blue}.
376 Предикат @code{featurep (@var{x}, @var{foo})}
377 возвращает @code{true} если @var{x} имеет свойство @var{foo},
378 и @code{false} в противном случае.
380 Информационный список @code{features} содержит все известные свойства.
382 @code{integer}, @code{noninteger}, @code{even}, @code{odd}, @code{rational},
383 @code{irrational}, @code{real}, @code{imaginary}, @code{complex},
384 @code{analytic}, @code{increasing}, @code{decreasing}, @code{oddfun},
385 @code{evenfun}, @code{posfun}, @code{commutative}, @code{lassociative},
386 @code{rassociative}, @code{symmetric} и @code{antisymmetric},
387 плюс свойства определенные пользователем.
389 @code{features} является списком математических свойств.
390 Существует также список нематематических, системо-зависимых свойств.
393 @opencatbox{Категории:}
394 @category{Факты и выводы}
399 @deffn {Функция} forget (@var{pred_1}, ..., @var{pred_n})
400 @deffnx {Функция} forget (@var{L})
401 Удаляет предикаты установленные @code{assume}.
402 Предикаты могут быть выражениями эквивалентными (но не
403 обязательно идентичными) тем, которые первоначально
404 были установлены с помощью @code{assume}.
406 @code{forget (@var{L})}, где @var{L} есть список предикатов,
407 удаляет все предикаты из данного списка.
409 @opencatbox{Категории:}
410 @category{Факты и выводы}
415 @deffn {Функция} killcontext (@var{context_1}, ..., @var{context_n})
416 Уничтожает контексты @var{context_1}, ..., @var{context_n}.
418 Если один из уничтожаемых контекстов является текущим, то
419 в качестве нового текущего контекста выбирается первый доступный
420 не уничтожаемый подконтекст текущего. Если первым доступным
421 контекстом является @code{global}, тогда используется @code{initial}.
422 Если @code{initial} тоже удаляется, то создается новый контекст @code{initial}.
424 @code{killcontext} отказывается удалять контекст, котрый является
425 активным по причине того, что является подконтекстом текущего
426 контекста или был активизирован функцией @code{activate}.
428 @code{killcontext} вычисляет свои аргументы.
429 @code{killcontext} возвращает @code{done}.
431 @opencatbox{Категории:}
432 @category{Факты и выводы}
437 @deffn {Функция} newcontext (@var{name})
438 Создает новый пустой контекст с именем @var{name}, имеющий контекст
439 @code{global} в качестве своего подконтекста. Новый контекст
440 становится текущим активным контекстом.
442 @code{newcontext} вычисляет свои аргумент.
443 @code{newcontext} возвращает @var{name}.
445 @opencatbox{Категории:}
446 @category{Факты и выводы}
451 @deffn {Функция} supcontext (@var{name}, @var{context})
452 @deffnx {Функция} supcontext (@var{name})
453 Создает новый контекст с именем @var{name}, котрый
454 имеет @var{context} в качестве подконтекста.
455 @var{context} должен существовать.
457 Если @var{context} не указан, тогда подразумевается текущий контекст.
459 @opencatbox{Категории:}
460 @category{Факты и выводы}