stringtranslate.com

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 en la investigación informática 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 con esos tipos de datos
  2. abstraer detalles de implementación, como el tamaño de las representaciones (en memoria) y la eficiencia en la obtención de resultados de los cálculos
  3. Formalizar los cálculos y operaciones sobre tipos de datos
  4. permitiendo 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 una colección 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 construyen elementos complejos a partir de otros más simples. El conjunto de funciones constructoras disponibles está implícito en la firma de la especificación . Además, una especificación puede contener ecuaciones que definan equivalencias entre los objetos construidos por estas funciones. El hecho de 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 se definen en términos de las funciones constructoras.

Ejemplos

Considere una especificación algebraica formal para el tipo de datos booleano .

Una posible especificación algebraica puede proporcionar dos funciones constructoras para el elemento de datos: un constructor verdadero y un constructor falso . Por lo tanto, un elemento de datos booleano podría declararse, construirse e inicializarse con un valor. En este escenario, todos los demás elementos conectivos , como XOR y AND , serían funciones adicionales . Por lo tanto, un elemento de datos podría instanciarse con un valor "verdadero" o "falso", y podrían usarse funciones adicionales para realizar cualquier operación en el elemento de datos.

Como alternativa, se podría especificar todo el sistema de tipos de datos booleanos utilizando un conjunto diferente de funciones constructoras: un constructor false y un constructor not . En ese caso, se podría definir una función adicional true para obtener el valor not false y se debería agregar una ecuación.

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

Para un ejemplo más complicado, 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 indicar 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 terminal, que asigna cualquier término construido a una forma normal inequívoca que representa el número entero respectivo:

 ... (((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 se ajuste a esta especificación se comportará como los números enteros, o posiblemente un rango restringido de ellos, como los tipos de números 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 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 la 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 antigua y nuevas ideas". Nordic Journal of Computing . 9 (4): 373–404. ISSN  1236-6064.