Funciones y variables para Contextos
====================================

 -- Función: activate (CONTEXT_1, ..., CONTEXT_N)
     Activa los contextos CONTEXT_1, ..., CONTEXT_N. Los hechos en estos contextos están disponibles para hacer deducciones y extraer información. Los hechos en estos contextos no se listan al invocar facts ().

     La variable activecontexts es la lista de contextos que se han activado por medio de la función activate.

 -- Variable del sistema: activecontexts
     Valor por defecto: []

     La variable activecontexts es la lista de contextos que se han activado por medio de la función activate, pero que no se han activado por ser subcontextos del contexto actual.

 -- Función: assume (PRED_1, ..., PRED_N)
     Añade los predicados PRED_1, ..., PRED_N al contexto actual. Si un predicado es inconsistente o redundante con los otros predicados del contexto actual, entonces no es añadido al contexto. El contexto va acumulando predicados con cada llamada a assume.

     La función assume devuelve una lista cuyos miembros son los predicados que han sido añadidos al contexto, o los átomos redundant o inconsistent si fuere necesario.

     Los predicados PRED_1, ..., PRED_N tan solo pueden ser expresiones formadas con los operadores relacionales < <= equal notequal >= y >. Los predicados no pueden estar formados por expresiones que sean del tipo igualdad = ni del tipo desigualdad #, ni tampoco pueden ser funciones de predicado como integerp.

     En cambio, sí se reconocen predicados compuestos de la forma PRED_1 and ... and PRED_N, pero no PRED_1 or ... or PRED_N. También se reconoce not PRED_K si PRED_K es un predicado relacional. Expresiones de la forma not (PRED_1 and PRED_2) y not (PRED_1 or PRED_2) no son reconocidas.

     El mecanismo deductivo de Maxima no es muy potente; existen muchas consecuencias que, siendo obvias, no pueden ser obtenidas por is. Se trata de una debilidad reconocida.

     La función assume evalúa sus argumentos.

     Véanse también is, facts, forget, context y declare.

     Ejemplos:

          (%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

 -- Variable opcional: assumescalar
     Valor por defecto: true

     La variable assumescalar ayuda a controlar si una expresión expr para la cual nonscalarp (expr) es false va a tener un comportamiento similar a un escalar bajo ciertas transformaciones.

     Sea expr cualquier expresión distinta de una lista o matriz, y sea también [1, 2, 3] una lista o una matriz. Entonces, expr . [1, 2, 3] dará como resultado [expr, 2 expr, 3 expr] si assumescalar es true, o si scalarp (expr) es true, o si constantp (expr) es true.

     Si assumescalar vale true, la expresión se comportará como un escalar sólo en operaciones conmutativas, pero no en el caso de la multiplicación no conmutativa o producto matricial ..

     Si assumescalar vale false, la expresión se comportará como un no escalar.

     Si assumescalar vale all, la expresión se comportará como un escalar para todas las operaciones.

 -- Variable opcional: assume_pos
     Valor por defecto: false

     Si assume_pos vale true y el signo de un parámetro X no puede ser determinado a partir del contexto actual o de otras consideraciones, sign y asksign (X) devolverán true. Con esto se pueden evitar algunas preguntas al usuario que se generan automáticamente, como las que hacen integrate y otras funciones.

     By default, a parameter is X such that symbolp (X) or subvarp (X).

     Por defecto, un parámetro X es aquel para el que symbolp (X) o subvarp (X) devuelven true. La clase de expresiones que se consideran parámetros se puede extender mediante la utilización de la variable assume_pos_pred.

     Las funciones sign y asksign intentan deducir el signo de una expresión a partir de los signos de los operandos que contiene. Por ejemplo, si a y b son ambos positivos, entonces a + b también es positivo.

     Sin embargo, no es posible obviar todas las preguntas que hace asksign. En particular, cuando el argumento de asksign es una diferencia X - Y o un logaritmo log(X), asksign siempre solicita una respuesta por parte del usuario, incluso cuando assume_pos vale true y assume_pos_pred es una función que devuelve true para todos los argumentos.

 -- Variable opcional: assume_pos_pred
     Valor por defecto: false

     Cuando a assume_pos_pred se le asigna el nombre de una función o una expresión lambda de un único argumento X, ésta será invocada para determinar si X se considera un parámetro por assume_pos. La variable assume_pos_pred se ignora cuando assume_pos vale false.

     La función assume_pos_pred es invocada por  sign y por asksign con un argumento X, el cual puede ser un átomo, una variable subindicada o una expresión de llamada a una función. Si la función assume_pos_pred devuelve true, X será considerada como un parámetro por assume_pos.

     Por defecto, un parámetro X es aquel para el que symbolp (X) o subvarp (X) devuelven true.

     Véanse también assume y assume_pos.

     Ejemplos:

          (%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

 -- Variable opcional: context
     Valor por defecto: initial

     La variable context da nombre al conjunto de hechos establecidos desde assume y forget. La función assume añade nuevos hechos al conjunto nombrado por context, mientras que forget los va eliminando. Asignando a context un nuevo nombre FOO cambia el contexto actual a FOO. Si el contexto FOO no existe todavía, se crea automáticamente mediante una llamada a newcontext.

     Véase contexts para una descripción general del mecanismo que siguen los contextos.

 -- Variable opcional: contexts
     Valor por defecto: [initial, global]

     La variable contexts es una lista que contiene los contextos existentes, incluyendo el actualmente activo.

     El mecanismo que siguen los contextos permiten al usuario agrupar y nombrar un conjunto de hechos, que recibe el nombre de contexto. Una vez hecho esto, el usuario puede hacer que Maxima tenga en cuenta o que olvide cualquier número de hechos sin más que activar o desactivar su contexto.

     Cualquier átomo simbólico puede ser el nombre de un contexto, y los hechos contenidos en tal contexto pueden ser almacenados hasta que se destruyan uno a uno mediante llamadas a la función forget, o que se destruyan conjuntamente invocando a kill para eliminar el contexto al que pertenecen.

     Los contextos tienen estructura jerárquica, siendo su raíz el contexto global, el cual contiene información sobre Maxima que necesitan algunas funciones. Cuando en un contexto todos los hechos están activos (lo que significa que están siendo utilizados en deducciones) lo estarán también en cualquier subcontexto del contexto actual.

     Cuando se comienza una sesión de Maxima, el usuario estará trabajando en un contexto llamado initial, el cual tiene un subcontexto de nombre global.

     Véanse también facts, newcontext, supcontext, killcontext, activate, deactivate, assume y forget.

 -- Función: deactivate (CONTEXTO_1, ..., CONTEXTO_N)
     Desactiva los contextos especificados CONTEXTO_1, ..., CONTEXTO_N.

 -- Función: facts (ITEM)
 -- Función: facts ()
     Si ITEM es el nombre de un contexto, facts (ITEM) devuelve una lista con los hechos asociados al contexto especificado.

     Si ITEM no es el nombre de un contexto, facts (ITEM) devuelve una lista con los hechos conocidos acerca de ITEM en el contexto actual. Los hechos que estén activos en contextos diferentes no aparecen en la lista.

     La lamada facts (), sin argumentos, muestra el contexto actual.

 -- Declaración: features
     Maxima reconoce ciertas propiedades matemáticas sobre funciones y variables.

     La llamada declare (X, FOO) asocia la propiedad FOO a la función o variable X.

     La llamada declare (FOO, feature) declara una nueva propiedad FOO. Por ejemplo, declare ([rojo, verde, azul], feature) declara tres nuevas propiedades, rojo, verde y azul.

     El predicado featurep (X, FOO) devuelve true si X goza de la propiedad FOO, y false en caso contrario.

     La lista features contiene las propiedades que reconoce Maxima; a saber, integer, noninteger, even, odd, rational, irrational, real, imaginary, complex, analytic, increasing, decreasing, oddfun, evenfun, posfun, commutative, lassociative, rassociative, symmetric, and antisymmetric, junto con las definidas por el usuario.

     La lista features sólo contiene propiedades matemáticas. Hay otra lista con propiedades no matemáticas; Véase status.

 -- Función: forget (PRED_1, ..., PRED_N)
 -- Función: forget (L)
     Borra los predicados establecidos por assume. Los predicados pueden ser expresiones equivalentes, pero no necesariamente idénticas, a las establecidas por assume. The predicates may be expressions equivalent to (but not necessarily identical to) those previously assumed.

     La llamada forget (L), siendo L una lista de predicados, borra todos los predicados contenidos en ella.

 -- Función: killcontext (CONTEXTO_1, ..., CONTEXTO_N)
     Elimina los contextos CONTEXTO_1, ..., CONTEXTO_N.

     Si alguno de estos contextos es el actual, el nuevo contexto activo será el primer subcontexto disponible del actual que no haya sido eliminado. Si el primer contexto no eliminado disponible es global entonces initial será usado en su lugar.  Si el contexto initial es eliminado, se creará un nuevo contexto initial completamente vacío.

     La función killcontext no elimina un contexto actualmente activo si es un subcontexto del contexto actual, o si se hace uso de la función activate.

     La función killcontext evalúa sus argumentos y devuelve done.

 -- Función: newcontext (NOMBRE)
     Crea un nuevo contexto vacío NOMBRE, el cual tiene a global como su único subcontexto. El recién creado contexto pasa a ser el contexto actualmente activo.

     La función newcontext evalúa sus argumentos y devuelve NOMBRE.

 -- Función: supcontext (NOMBRE, CONTEXTO)
 -- Función: supcontext (NOMBRE)
     Crea un nuevo contexto NOMBRE, que tiene a CONTEXTO como subcontexto. El argumento CONTEXTO debe existir ya.

     Si no se especifica CONTEXT, se tomará como tal el actual.