Articulo de referencia

Especificación algebraica

La especificación algebraica [ 1 ] [ 2 ] [ 3 ] [ 4 ] es una técnica de ingeniería de software para especificar formalmente el comportamiento del sistema. Fue un tema muy activo ...

La especificación algebraica [ 1 ] [ 2 ] [ 3 ] [ 4 ] es una técnica de ingeniería de software para especificar formalmente el comportamiento del sistema. Fue un tema muy activo de investigación en ciencias de la computación alrededor de 1980. [ 5 ]

Descripción general

La especificación algebraica busca desarrollar sistemáticamente programas más eficientes mediante:

  1. definir formalmente los tipos de datos y las operaciones matemáticas sobre esos tipos de datos.
  2. abstraer detalles de implementación, como el tamaño de las representaciones (en memoria) y la eficiencia de obtención del resultado de los cálculos.
  3. formalizar los cálculos y operaciones sobre tipos de datos
  4. lo que permite la automatización al restringir formalmente las operaciones a este conjunto limitado de comportamientos y tipos de datos.

Una especificación algebraica logra estos objetivos definiendo uno o más tipos de datos y especificando un conjunto de funciones que operan sobre esos tipos de datos. Estas funciones se pueden dividir en dos clases:

  1. Funciones constructoras : Funciones que crean o inicializan los elementos de datos, o que construyen elementos complejos a partir de otros más simples. El conjunto de funciones constructoras disponibles viene implícito en la firma de la especificación . Además, una especificación puede contener ecuaciones que definen equivalencias entre los objetos construidos por estas funciones. Que la representación subyacente sea idéntica para construcciones diferentes pero equivalentes depende de la implementación.
  2. Funciones adicionales : Funciones que operan sobre los tipos de datos y que se definen en términos de las funciones constructoras.

Ejemplos

Consideremos una especificación algebraica formal para el tipo de dato booleano .

Una posible especificación algebraica podría proporcionar dos funciones constructoras para el elemento de datos: una constructora para verdadero y otra para falso . De esta forma, se podría declarar, construir e inicializar un elemento de datos booleano con un valor. En este caso, todos los demás elementos conectivos , como XOR y AND , serían funciones adicionales . Así, se podría instanciar un elemento de datos con un valor "verdadero" o "falso", y se podrían usar funciones adicionales para realizar cualquier operación sobre dicho elemento.

Alternativamente, todo el sistema de tipos de datos booleanos podría especificarse utilizando un conjunto diferente de funciones constructoras: un constructor falso y un constructor no . En ese caso, se podría definir una función adicional verdadera para producir el valor no falso y una ecuación.(nonoincógnita)=incógnita{\displaystyle ({\text{no}}\;{\text{no}}\;x)=x}debería añadirse.

Por lo tanto, la especificación algebraica describe todos los estados posibles del elemento de datos y todas las transiciones posibles entre estados.

Para un ejemplo más complejo, los números enteros se pueden especificar (entre muchas otras formas, y eligiendo uno de los muchos formalismos) con dos constructores.

 1 : Z (_ - _) : Z × Z -> Z

y tres ecuaciones:

 (1 - (1 - p)) = p ((1 - (n - p)) - 1) = (p - n) ((p1 - n1) - (n2 - p2)) = (p1 - (n1 - (p2 - n2)))

Es fácil verificar que las ecuaciones son válidas, dada la interpretación habitual de la función binaria "menos". (Los nombres de las variables se han elegido para sugerir contribuciones positivas y negativas al valor). Con un poco de esfuerzo, se puede demostrar que, aplicadas de izquierda a derecha, también constituyen un sistema de reescritura confluente y terminante, que asigna a cualquier término construido una forma normal inequívoca que representa el entero correspondiente:

 ... (((1 - 1) - 1) - 1) ((1 - 1) - 1) (1 - 1) 1 (1 - ((1 - 1) - 1)) (1 - (((1 - 1) - 1) - 1)) ...

Por lo tanto, cualquier implementación que cumpla con esta especificación se comportará como los números enteros, o posiblemente como un rango restringido de ellos, como los tipos de enteros habituales que se encuentran en la mayoría de los lenguajes de programación.

Véase también

Notas

  1. Ehrig, Hartmut ; Mahr, Bernd (1989). Especificación algebraica . Academic Press. ISBN 0-201-41635-2.
  2. Bergstra, JA; Heering, J.; Klint, J. (1985). Especificación algebraica . Monografías de EATCS sobre informática teórica. Vol. 6. Springer-Verlag. 
  3. Wirsing, Martin (1990). Jan van Leeuwen (ed.). Especificación algebraica . Manual de informática teórica. Vol. B. Elsevier. págs. 675–788 .  
  4. Sannella, Donald; Tarlecki, Andrzej (2012). Fundamentos de la especificación algebraica y el desarrollo formal de software . Monografías de EATCS sobre informática teórica. Springer-Verlag. ISBN 978-3-642-17335-6.
  5. Wagner, Eric G. (diciembre de 2002). «Especificaciones algebraicas: algo de historia y nuevas ideas» . Nordic Journal of Computing . 9 (4): 373–404 . ISSN 1236-6064 . Archivado del original el 30 de agosto de 2003.