Por Austin Roche.

VerifyTools es un paquete que ha estado disponible en Maple durante aproximadamente 24 años, pero hasta ahora nunca se había documentado, ya que originalmente estaba destinado solo para uso interno. La documentación correspondiente se incluirá en la próxima versión de Maple. Aquí presentamos una vista previa:

VerifyTools es similar al paquete TypeTools. Un tipo es esencialmente un predicado que una sola expresión puede satisfacer o no. Análogamente, una verificación es un predicado que se aplica a un par de expresiones, comparándolas. Así como los tipos se pueden combinar para producir tipos compuestos, las verificaciones también se pueden combinar para producir verificaciones compuestas. Se pueden crear, recuperar, consultar o eliminar nuevos tipos utilizando los comandos AddType, GetType (o GetTypes), Exists y RemoveType, respectivamente. De manera similar, en el paquete VerifyTools podemos crear, recuperar, consultar o eliminar verificaciones utilizando AddVerification, GetVerification (o GetVerifications), Exists y RemoveVerification.

El comando de paquete VerifyTools:-Verify también está disponible como el comando de nivel superior de Maple, el cual ya debería ser familiar para los usuarios expertos de Maple. De manera similar, el comando VerifyTools:-IsVerification también está disponible como un tipo, es decir,

VerifyTools:-IsVerification(ver);

devolverá lo mismo que

type(ver, 'verificación');

Los siguientes ejemplos muestran lo que se puede hacer con estos comandos. Tenga en cuenta que en cada ejemplo en el que se utiliza el comando Verify, es equivalente al comando de nivel superior de Maple, verify. (Tenga en cuenta también que los comandos de VerifyTools que se muestran a continuación serán ligeramente diferentes en comparación con la versión Maple2024):

> with(VerifyTools):

Supongamos que queremos crear una verificación que compruebe que la longitud de un resultado no ha aumentado en comparación con el resultado esperado. Podemos hacerlo mediante el comando AddVerification:

> AddVerification(length_not_increased, (a, b) -> evalb(length(a) <= length(b)));

Primero, podemos comprobar la existencia de nuestra nueva verificación y obtener su valor:

> Exists(length_not_increased);

true

> GetVerification(length_not_increased);

(a, b) → evalb(length(a) ≤ length(b))

Para las verificaciones con nombre, IsVerification es equivalente a Exists (ya que los nombres solo se reconocen como verificaciones si existe una entrada para ellos en la base de datos de verificación):

> IsVerification(length_not_increased);

true

Por otra parte, una verificación estructurada no trivial se puede comprobar con IsVerification,

> IsVerification(boolean = length_not_increased);

true

Mientras que Exists solo acepta nombres:

> Exists(boolean = length_not_increased);

Error, invalid input: VerifyTools:-Exists expects its 1st argument, x, to be of type symbol, but received boolean = length_not_increased

El comando anterior que utiliza Exists también es equivalente a la siguiente llamada de tipo:

> type(boolean = length_not_increased, verification);

true

Ahora usemos la nueva verificación:

> Verify(x + 1/x, (x^2 + 1)/x, length_not_increased);

true

> Verify((x^2 + 1)/x, x + 1/x, length_not_increased);

false

Por último, eliminemos la verificación:

> RemoveVerification(length_not_increased);

> Exists(length_not_increased);

false

> GetVerification(length_not_increased);

Error, (in VerifyTools:-GetVerification) length_not_increased is not a recognized verification

GetVerifications devuelve la lista de todas las verificaciones conocidas por el sistema:

> GetVerifications();

[Array, FAIL, FrobeniusGroupId, Global, Matrix, MultiSet, PermGroup, RootOf, SmallGroupId, Vector, address, after, approx, array, as_list, as_multiset, as_set, attributes, boolean, box, cbox, curve, curves, dataframe, dataseries, default, default, dummyvariable, equal, evala, evalc, expand, false, float, function, function_bounds, function_curve, function_shells, greater_equal, greater_than, in_convex_polygon, indef_int, interval, less_equal, less_than, list, listlist, matrix, member, multiset, neighborhood, neighbourhood, normal, permute_elements, plot, plot3d, plot_distance, plotthing_compile_result, polynom, procedure, ptbox, range, rational, record, relation, reverse, rifset, rifsimp, rtable, set, sign, simplify, sublist, `subset`, subtype, superlist, superset, supertype, symbol, table, table_indices, testeq, text, true, truefalse, type, undefined, units, vector, verifyfunc, wildcard, xmltree, xvm]