fbpx
Wikipedia

Maude (lenguaje de programación)

Maude es un lenguaje de programación para especificaciones formales mediante el uso de términos algebraicos. Se trata de un lenguaje interpretado que permite la verificación de propiedades y transformaciones sobre modelos y que permite ejecutar la especificación como si fuera un prototipo.

Maude
Desarrollador(es)
SRI International
Información general
Paradigma Lenguaje declarativo
Lenguaje funcional
Lenguaje de rescritura

Introducción

Maude soporta de una manera sistemática y eficiente la reflexión lógica. Esto le permite ser un lenguaje extremadamente potente y ampliable, a la vez que lo hace capaz de soportar un álgebra de operaciones de composición de módulos extensible. Algunas de sus aplicaciones más interesantes son las de metalenguaje, en las cuales Maude es usado para crear entornos ejecutables para distintas lógicas, demostraciones de teoremas, lenguajes y modelos de computación. Este lenguaje puede modelar casi todo, cualquier cosa que se pueda describir mediante el lenguaje humano, se puede expresar con instrucciones Maude. Puede llegar a ser extremadamente abstracto. Su diseño permite tanta flexibilidad que la sintaxis puede parecer en principio poco comprensible. Sin embargo, y a pesar de sus muchas ventajas, Maude no deja de ser un lenguaje declarativo, y como tal también tiene sus inconvenientes. Con lenguaje declarativo nos referimos a todos aquellos lenguajes de programación que basan su forma de funcionar en el pensamiento humano, esto es, en las Matemáticas, en lugar de en el comportamiento del computador. De ahí que Maude se base principalmente en el álgebra y en la especificación de ecuaciones. Pues bien, como los demás lenguajes de este tipo, son tremendamente elegantes y claros a la hora de realizar cualquier especificación, además de soportar técnicas de desarrollo muy avanzadas (como ya hemos comentado) y existir aplicaciones variadas y de gran interés. Por otro lado y como contraposición a lo anterior, las implementaciones en lenguajes declarativos suelen ser ineficientes, y es por esto que no están muy extendidas actualmente para el desarrollo de aplicaciones.

¿Por qué Maude?

Maude está desarrollado para resolver diferentes conjuntos de problemas que en lenguajes imperativos como C, Java o Perl pueden volverse tareas muy arduas de realizar. Es una herramienta de razonamiento formal que puede ayudar al programador a verificar que las cosas son “como deben ser” y que muestra por qué no lo son si éste es el caso. En otras palabras, Maude permite definir formalmente lo que se quiere expresar para algún concepto en una manera muy abstracta (sin importar la estructura interna o implementación), pero que se puede describir como está pensado para que sea igual con respecto a esta teoría abstracta (ecuaciones o postulados matemáticos).

Esto es bastante útil para validar protocolos de seguridad y códigos importantes. El sistema Maude ha demostrado imperfecciones en protocolos de criptografía solamente especificando lo que el sistema puede hacer y descubriendo situaciones no deseadas (como estados o términos a los que no debería ser posible llegar). A través de este sistema se puede mostrar que la definición tratada por él contiene fallos, no sintácticos sino que permiten llegar a situaciones indeseables que suceden, aunque sean difíciles de predecir a simple vista.

Maude puede ser usado para buscar estados no deseados en nuestra definición y para tratar de garantizar que no es posible llegar a dichos estados. Maude es un software libre de gran potencia declarativa, del que se pueden encontrar buenos tutoriales disponibles en línea (al menos, en inglés)

Core Maude

Llamamos Core Maude al intérprete de Maude implementado en C++ y que provee toda la funcionalidad básica del lenguaje.

Sintaxis básica

Los elementos sintácticos básicos son los identificadores, usados para poner nombre a módulos, tipos y operadores. Las unidades básicas de especificación y programación son los módulos. Existen tres tipos de módulos: los módulos funcionales, los módulos de sistema y los orientados a objetos. Lo primero que una especificación necesita es declarar los tipos (denominados sorts) de los datos definidos y las correspondientes operaciones. Los sorts están parcialmente relacionados mediante relaciones de subtipo (subsort) definiéndose un orden parcial. Esto significa que es posible establecer una correspondencia entre dos tipos que a priori parecen distintos. Por ejemplo, pongámonos en el caso de estar definiendo un módulo que representará una lista de enteros. Para tal caso, dispondríamos de una estructura como la siguiente:

fmod LISTA-ENTEROS is protecting INT . ***con esta línea indicamos el uso del modulo de Enteros sorts ListaEntNV ListaEnt . subsort ListaEntNV < ListaEnt . ***resto de especificación endfm 

Como podemos observar hemos definido tanto el tipo ListaEntNV como ListaEnt. Posteriormente los hemos relacionado con el símbolo “<”. Esto implica que ListaEntNV va a ser un subtipo de ListaEnt, es decir, va a tomar un subconjunto de los valores que puede adquirir éste.

Este caso en concreto es muy usado ya que representa que ListaEntNV es una lista que debe estar compuesta por al menos un elemento.

La lógica en la que se basa Maude es la lógica ecuacional de pertenencia. En esta lógica los tipos se agrupan en clases de equivalencia llamados kinds. Para este propósito, dos tipos se consideran equivalentes si pertenecen al mismo componente conexo. En Maude los tipos están definidos por el usuario mientras que los "kinds" son implícitamente asociados con componentes conexos de tipos y son considerados como "supertipos de error". Esto puede verse algo más claro en el siguiente ejemplo:

op _ - _ : Nat Nat → Nat . 

A priori, esta operación no parece que presente ningún problema. Pero, ¿qué ocurriría si el segundo operando fuera mayor que el primero?:

4-7=¿? 

El resultado no estaría definido ya que estamos usando una operación entre el sort Nat, que no admitiría valores negativos. Una posible solución sería definir la operación como un valor del kind Nat, es decir:

op _-_ : Nat Nat → [Nat] . 

Con esto estamos especificando que bajo determinada situación (en este caso que el segundo operando sea mayor que el primero) se va a devolver un valor del kind, representado por corchetes.

A esto se le conoce como ampliación de recorrido. Otra manera de asegurarnos que nuestra operación va a devolvernos un valor del tipo válido es mediante la llamada reducción de dominio, que consiste en hacer que el término que pueda plantearnos problemas cumpla una determinada condición. A este tipo de operaciones se les denomina parciales.

Maude está compuesto principalmente por términos, operaciones y ecuaciones que describen el comportamiento de dichas operaciones, siendo los términos variables o aplicaciones de un operador a dichas variables. Las variables se declaran restringiéndose a un determinado dominio de un tipo o “kind”.

Módulos funcionales

Los módulos funcionales definen tipos de dato y operaciones sobre ellos en forma de teorías ecuacionales. Los tipos de datos consisten en elementos que pueden ser nombrados por términos base. Dos términos denotan el mismo elemento si y sólo si pertenecen a la misma clase de equivalencia; esto viene determinado por las ecuaciones.

La semántica de un módulo funcional es su álgebra inicial. En los módulos funcionales, una aplicación repetida de ecuaciones como reglas de simplificación eventualmente alcanza un término al cual no se le pueden aplicar más ecuaciones, y el resultado, llamado forma canónica, es el mismo independientemente del orden en el que se hayan aplicado las reglas.

Para reducir un término hasta su forma canónica se usa la instrucción:

red TérminoAReducir. 

Un módulo funcional se declara usando las siguientes palabras claves:

fmod <NombreDelMódulo> is <DeclaracionesYDefiniciones> endfm 

En Maude, la definición de una operación (como ya vimos en el ejemplo anterior) empieza por la palabra reservada op, seguida del nombre de la operación, dos puntos, la lista de tipo de los parámetros separados por espacios en blanco, el símbolo ->, el tipo del resultado y un punto. Todas las operaciones tienen que devolver un valor y sólo uno, pero no es necesario que tenga parámetros. Los operadores constantes se definen como aquellos que no tienen ningún argumento.

También permite la sobrecarga de operaciones, es decir, se pueden definir varias operaciones con el mismo nombre, pero con una lista distinta de parámetros.

Además los operadores pueden tener atributos que proveen información adicional sobre el operador: semántica, sintáctica, etc. Se declaran entre [...], después del tipo devuelto y antes del punto de fin de línea. Los más importantes son:

  • assoc (asociatividad).
  • comm (conmutatividad).
  • idem (idempotencia).
  • id: <Término> (identidad, con el correspondiente término para el elemento de identidad).
  • iter (iterador, permite definir operadores unarios con un carácter de iterador).
  • ctor (constructor, a partir de ellos obtenemos todos los valores del tipo).

La propiedad de conmutatividad es en este caso muy útil ya que en muchas ocasiones nos ahorra definir algunas ecuaciones. Esto es:

fmod NAT is sort Nat . op cero : → Nat .[ctor] op suc : Nat → Nat .[ctor] op sum : Nat Nat → Nat .[comm] vars A B :Nat . eq : sum (cero, A)=A . eq : sum (suc(A),B)=suc (sum(A, B)) . endf 

Esta podría ser una posible especificación de los Naturales. Si no hubiéramos especificado entre corchetes que la operación sum es conmutativa, habría que incluir más ecuaciones para describir el comportamiento de dicha operación.

Módulos de sistema

Un módulo de sistema en Maude especifica una teoría de reescritura. Una teoría de reescritura tienen tipos, kinds y operadores, y puede tener tres tipos de definiciones: ecuaciones, axiomas de pertenencia y reglas.

Un módulo de sistema se declara usando las siguientes palabras claves:

mod <NombreDelMódulo> is <DeclaracionesYDefiniciones> endm 

Importación de módulos

Cada módulo de sistemas o funcional puede importar otros módulos como submódulos.Esto consiste básicamente en “avisar” al programa de que vamos a usar unos tipos u operaciones definidas en otro sitio. En Maude puede ser importado de tres maneras diferentes:

  • Protecting: importar un módulo en modo protecting significa que no se le añade basura (definir nuevos términos irreducibles a los tipos definidos en el módulo importado) y confusión (agregar reglas de reducción que hacen que términos que eran distintos ahora no lo sean) cuando es importado.
  • Extending: permite la adición de basura pero no de confusión.
  • Including: permite la adición de basura o de confusión.

La orden de importación la escribiremos justo debajo de la declaración del nombre del módulo que estamos definiendo, es decir, de la sentencia fmod <Nombre del módulo> is, y la cerraremos como siempre por un espacio en blanco seguido por un punto.

Corrección de una especificación

Para que la especificación de una operación sea sintácticamente correcta ha de cumplir tres condiciones:

  1. tiene que ser confluente (si hay varias reducciones posibles se ha de llegar siempre al mismo término canónico),
  2. completa (todo término básico no canónico se ha de poder reducir), y
  3. libre de reducciones infinitas (no deben existir secuencias de reducciones de longitud infinita).

La corrección semántica requiere una correspondencia entre el funcionamiento de las operaciones especificadas y las propiedades del álgebra modelo deseada.

Operaciones generadoras

Las funciones generadoras se marcan con el atributo [ctor]. Un término es canónico si sólo incluye operaciones generadoras. Si todos los términos canónicos representan elementos distintos, el conjunto de generadores es libre. Si el conjunto de generadores no es libre necesitamos ecuaciones impurificadoras, que establecen la equivalencia de términos canónicas.

Especificación de los naturales en Maude:

fmod NATURAL is sort Natural . *** generadores op 0 : -> Natural [ctor] . op suc : Natural -> Natural [ctor iter] . *** constructores op _+_ : Natural Natural -> Natural [comm assoc id: 0] . op _*_ : Natural Natural -> Natural [comm assoc] . *** variables vars M N : Natural . *** ecuaciones eq suc (M) + suc (N) = suc (suc(M + N)) . eq 0 * N = 0 . eq suc (M) * N = (M * N) + N . endfm 

Especificación de los números complejos en Maude:

 fmod COMPLEJOS is including INT . sort complejo . *** generadores op <_;_> : Int Int -> Complejo [ctor] . *** constructores op _+_ : Complejo Complejo -> Complejo . op _-_ : Complejo Complejo -> Complejo . *** variables vars A B C D : Int . *** ecuaciones eq < A ; B > + < C ; D > = < A + B ; C + D > . eq < A ; B > - < C ; D > = < A - B ; C - D > . endfm 

Full Maude

Es una extensión, escrito en el mismo lenguaje, que dota a Maude de un potente y extensible álgebra de módulo en el cual los módulos de Maude pueden ser combinados conjuntamente para construir módulos más complejos. Los módulos pueden ser parametrizados y pueden ser instanciados usando los views (vistas). Los parámetros son teorías especificando los requerimientos semánticos para una correcta instanciación. Las teorías mismas pueden ser parametrizadas. Los módulos de Core Maude también pueden ser introducidos en Full Maude.

Programación parametrizada

Los bloques básicos de esta programación parametrizada son: módulos parametrizados, teorías y vistas:

  1. Teorías: se usan para declarar interfaces de módulo, o sea la sintaxis y propiedades semánticas que tienen que ser satisfechas por los parámetros actuales usados en una instanciación. Se declaran mediante las palabras claves fth...endfth. Todas ellas pueden tener tipos, subtipos, operadores, variables, axiomas de partencia, ecuaciones y pueden importar otras teorías o módulos.
  2. Vistas: las usamos para especificar como un módulo destinado tiene que satisfacer una teoría fuerte. En general, hay muchas maneras mediante las cuales tales requerimientos pueden ser satisfechos; puede haber diferentes vistas, cada una especificando una interpretación particular de la teoría fuente en el destino. Cada declaración de vista tiene asociado un conjunto de obligaciones, para cada axioma en la teoría fuente tiene que haber un caso en el que la traducción del axioma por la vista es true en el destino. Se declara mediante view...endv
  3. Módulos parametrizados: es la instanciación de un módulo usando como parámetro una vista sobre una teoría.

Teoría TRIV (predefinida en Maude)

fth TRIV is sort Elt . endfth 

Vista de los naturales sobre la teoría TRIV

view VNat from TRIV to NAT is sort Elt to Nat endv 

Véase también

Enlaces externos

  • Página oficial de Maude
  • Proyecto MOMENT, Maude para Windows
  • Depurador declarativo para Maude
  •   Datos: Q3558930

maude, lenguaje, programación, este, artículo, sección, sobre, informática, necesita, wikificado, favor, edítalo, para, cumpla, convenciones, estilo, este, aviso, puesto, septiembre, 2008, maude, lenguaje, programación, para, especificaciones, formales, median. Este articulo o seccion sobre informatica necesita ser wikificado por favor editalo para que cumpla con las convenciones de estilo Este aviso fue puesto el 10 de septiembre de 2008 Maude es un lenguaje de programacion para especificaciones formales mediante el uso de terminos algebraicos Se trata de un lenguaje interpretado que permite la verificacion de propiedades y transformaciones sobre modelos y que permite ejecutar la especificacion como si fuera un prototipo MaudeDesarrollador es SRI InternationalInformacion generalParadigmaLenguaje declarativo Lenguaje funcional Lenguaje de rescritura editar datos en Wikidata Indice 1 Introduccion 2 Por que Maude 3 Core Maude 3 1 Sintaxis basica 3 2 Modulos funcionales 3 3 Modulos de sistema 3 4 Importacion de modulos 3 5 Correccion de una especificacion 3 6 Operaciones generadoras 4 Full Maude 4 1 Programacion parametrizada 5 Vease tambien 6 Enlaces externosIntroduccion EditarMaude soporta de una manera sistematica y eficiente la reflexion logica Esto le permite ser un lenguaje extremadamente potente y ampliable a la vez que lo hace capaz de soportar un algebra de operaciones de composicion de modulos extensible Algunas de sus aplicaciones mas interesantes son las de metalenguaje en las cuales Maude es usado para crear entornos ejecutables para distintas logicas demostraciones de teoremas lenguajes y modelos de computacion Este lenguaje puede modelar casi todo cualquier cosa que se pueda describir mediante el lenguaje humano se puede expresar con instrucciones Maude Puede llegar a ser extremadamente abstracto Su diseno permite tanta flexibilidad que la sintaxis puede parecer en principio poco comprensible Sin embargo y a pesar de sus muchas ventajas Maude no deja de ser un lenguaje declarativo y como tal tambien tiene sus inconvenientes Con lenguaje declarativo nos referimos a todos aquellos lenguajes de programacion que basan su forma de funcionar en el pensamiento humano esto es en las Matematicas en lugar de en el comportamiento del computador De ahi que Maude se base principalmente en el algebra y en la especificacion de ecuaciones Pues bien como los demas lenguajes de este tipo son tremendamente elegantes y claros a la hora de realizar cualquier especificacion ademas de soportar tecnicas de desarrollo muy avanzadas como ya hemos comentado y existir aplicaciones variadas y de gran interes Por otro lado y como contraposicion a lo anterior las implementaciones en lenguajes declarativos suelen ser ineficientes y es por esto que no estan muy extendidas actualmente para el desarrollo de aplicaciones Por que Maude EditarMaude esta desarrollado para resolver diferentes conjuntos de problemas que en lenguajes imperativos como C Java o Perl pueden volverse tareas muy arduas de realizar Es una herramienta de razonamiento formal que puede ayudar al programador a verificar que las cosas son como deben ser y que muestra por que no lo son si este es el caso En otras palabras Maude permite definir formalmente lo que se quiere expresar para algun concepto en una manera muy abstracta sin importar la estructura interna o implementacion pero que se puede describir como esta pensado para que sea igual con respecto a esta teoria abstracta ecuaciones o postulados matematicos Esto es bastante util para validar protocolos de seguridad y codigos importantes El sistema Maude ha demostrado imperfecciones en protocolos de criptografia solamente especificando lo que el sistema puede hacer y descubriendo situaciones no deseadas como estados o terminos a los que no deberia ser posible llegar A traves de este sistema se puede mostrar que la definicion tratada por el contiene fallos no sintacticos sino que permiten llegar a situaciones indeseables que suceden aunque sean dificiles de predecir a simple vista Maude puede ser usado para buscar estados no deseados en nuestra definicion y para tratar de garantizar que no es posible llegar a dichos estados Maude es un software libre de gran potencia declarativa del que se pueden encontrar buenos tutoriales disponibles en linea al menos en ingles Core Maude EditarLlamamos Core Maude al interprete de Maude implementado en C y que provee toda la funcionalidad basica del lenguaje Sintaxis basica Editar Los elementos sintacticos basicos son los identificadores usados para poner nombre a modulos tipos y operadores Las unidades basicas de especificacion y programacion son los modulos Existen tres tipos de modulos los modulos funcionales los modulos de sistema y los orientados a objetos Lo primero que una especificacion necesita es declarar los tipos denominados sorts de los datos definidos y las correspondientes operaciones Los sorts estan parcialmente relacionados mediante relaciones de subtipo subsort definiendose un orden parcial Esto significa que es posible establecer una correspondencia entre dos tipos que a priori parecen distintos Por ejemplo pongamonos en el caso de estar definiendo un modulo que representara una lista de enteros Para tal caso dispondriamos de una estructura como la siguiente fmod LISTA ENTEROS is protecting INT con esta linea indicamos el uso del modulo de Enteros sorts ListaEntNV ListaEnt subsort ListaEntNV lt ListaEnt resto de especificacion endfm Como podemos observar hemos definido tanto el tipo ListaEntNV como ListaEnt Posteriormente los hemos relacionado con el simbolo lt Esto implica que ListaEntNV va a ser un subtipo de ListaEnt es decir va a tomar un subconjunto de los valores que puede adquirir este Este caso en concreto es muy usado ya que representa que ListaEntNV es una lista que debe estar compuesta por al menos un elemento La logica en la que se basa Maude es la logica ecuacional de pertenencia En esta logica los tipos se agrupan en clases de equivalencia llamados kinds Para este proposito dos tipos se consideran equivalentes si pertenecen al mismo componente conexo En Maude los tipos estan definidos por el usuario mientras que los kinds son implicitamente asociados con componentes conexos de tipos y son considerados como supertipos de error Esto puede verse algo mas claro en el siguiente ejemplo op Nat Nat Nat A priori esta operacion no parece que presente ningun problema Pero que ocurriria si el segundo operando fuera mayor que el primero 4 7 El resultado no estaria definido ya que estamos usando una operacion entre el sort Nat que no admitiria valores negativos Una posible solucion seria definir la operacion como un valor del kind Nat es decir op Nat Nat Nat Con esto estamos especificando que bajo determinada situacion en este caso que el segundo operando sea mayor que el primero se va a devolver un valor del kind representado por corchetes A esto se le conoce como ampliacion de recorrido Otra manera de asegurarnos que nuestra operacion va a devolvernos un valor del tipo valido es mediante la llamada reduccion de dominio que consiste en hacer que el termino que pueda plantearnos problemas cumpla una determinada condicion A este tipo de operaciones se les denomina parciales Maude esta compuesto principalmente por terminos operaciones y ecuaciones que describen el comportamiento de dichas operaciones siendo los terminos variables o aplicaciones de un operador a dichas variables Las variables se declaran restringiendose a un determinado dominio de un tipo o kind Modulos funcionales Editar Los modulos funcionales definen tipos de dato y operaciones sobre ellos en forma de teorias ecuacionales Los tipos de datos consisten en elementos que pueden ser nombrados por terminos base Dos terminos denotan el mismo elemento si y solo si pertenecen a la misma clase de equivalencia esto viene determinado por las ecuaciones La semantica de un modulo funcional es su algebra inicial En los modulos funcionales una aplicacion repetida de ecuaciones como reglas de simplificacion eventualmente alcanza un termino al cual no se le pueden aplicar mas ecuaciones y el resultado llamado forma canonica es el mismo independientemente del orden en el que se hayan aplicado las reglas Para reducir un termino hasta su forma canonica se usa la instruccion red TerminoAReducir Un modulo funcional se declara usando las siguientes palabras claves fmod lt NombreDelModulo gt is lt DeclaracionesYDefiniciones gt endfm En Maude la definicion de una operacion como ya vimos en el ejemplo anterior empieza por la palabra reservada op seguida del nombre de la operacion dos puntos la lista de tipo de los parametros separados por espacios en blanco el simbolo gt el tipo del resultado y un punto Todas las operaciones tienen que devolver un valor y solo uno pero no es necesario que tenga parametros Los operadores constantes se definen como aquellos que no tienen ningun argumento Tambien permite la sobrecarga de operaciones es decir se pueden definir varias operaciones con el mismo nombre pero con una lista distinta de parametros Ademas los operadores pueden tener atributos que proveen informacion adicional sobre el operador semantica sintactica etc Se declaran entre despues del tipo devuelto y antes del punto de fin de linea Los mas importantes son assoc asociatividad comm conmutatividad idem idempotencia id lt Termino gt identidad con el correspondiente termino para el elemento de identidad iter iterador permite definir operadores unarios con un caracter de iterador ctor constructor a partir de ellos obtenemos todos los valores del tipo La propiedad de conmutatividad es en este caso muy util ya que en muchas ocasiones nos ahorra definir algunas ecuaciones Esto es fmod NAT is sort Nat op cero Nat ctor op suc Nat Nat ctor op sum Nat Nat Nat comm vars A B Nat eq sum cero A A eq sum suc A B suc sum A B endf Esta podria ser una posible especificacion de los Naturales Si no hubieramos especificado entre corchetes que la operacion sum es conmutativa habria que incluir mas ecuaciones para describir el comportamiento de dicha operacion Modulos de sistema Editar Un modulo de sistema en Maude especifica una teoria de reescritura Una teoria de reescritura tienen tipos kinds y operadores y puede tener tres tipos de definiciones ecuaciones axiomas de pertenencia y reglas Un modulo de sistema se declara usando las siguientes palabras claves mod lt NombreDelModulo gt is lt DeclaracionesYDefiniciones gt endm Importacion de modulos Editar Cada modulo de sistemas o funcional puede importar otros modulos como submodulos Esto consiste basicamente en avisar al programa de que vamos a usar unos tipos u operaciones definidas en otro sitio En Maude puede ser importado de tres maneras diferentes Protecting importar un modulo en modo protecting significa que no se le anade basura definir nuevos terminos irreducibles a los tipos definidos en el modulo importado y confusion agregar reglas de reduccion que hacen que terminos que eran distintos ahora no lo sean cuando es importado Extending permite la adicion de basura pero no de confusion Including permite la adicion de basura o de confusion La orden de importacion la escribiremos justo debajo de la declaracion del nombre del modulo que estamos definiendo es decir de la sentencia fmod lt Nombre del modulo gt is y la cerraremos como siempre por un espacio en blanco seguido por un punto Correccion de una especificacion Editar Para que la especificacion de una operacion sea sintacticamente correcta ha de cumplir tres condiciones tiene que ser confluente si hay varias reducciones posibles se ha de llegar siempre al mismo termino canonico completa todo termino basico no canonico se ha de poder reducir y libre de reducciones infinitas no deben existir secuencias de reducciones de longitud infinita La correccion semantica requiere una correspondencia entre el funcionamiento de las operaciones especificadas y las propiedades del algebra modelo deseada Operaciones generadoras Editar Las funciones generadoras se marcan con el atributo ctor Un termino es canonico si solo incluye operaciones generadoras Si todos los terminos canonicos representan elementos distintos el conjunto de generadores es libre Si el conjunto de generadores no es libre necesitamos ecuaciones impurificadoras que establecen la equivalencia de terminos canonicas Especificacion de los naturales en Maude fmod NATURAL is sort Natural generadores op 0 gt Natural ctor op suc Natural gt Natural ctor iter constructores op Natural Natural gt Natural comm assoc id 0 op Natural Natural gt Natural comm assoc variables vars M N Natural ecuaciones eq suc M suc N suc suc M N eq 0 N 0 eq suc M N M N N endfm Especificacion de los numeros complejos en Maude fmod COMPLEJOS is including INT sort complejo generadores op lt gt Int Int gt Complejo ctor constructores op Complejo Complejo gt Complejo op Complejo Complejo gt Complejo variables vars A B C D Int ecuaciones eq lt A B gt lt C D gt lt A B C D gt eq lt A B gt lt C D gt lt A B C D gt endfmFull Maude EditarEs una extension escrito en el mismo lenguaje que dota a Maude de un potente y extensible algebra de modulo en el cual los modulos de Maude pueden ser combinados conjuntamente para construir modulos mas complejos Los modulos pueden ser parametrizados y pueden ser instanciados usando los views vistas Los parametros son teorias especificando los requerimientos semanticos para una correcta instanciacion Las teorias mismas pueden ser parametrizadas Los modulos de Core Maude tambien pueden ser introducidos en Full Maude Programacion parametrizada Editar Los bloques basicos de esta programacion parametrizada son modulos parametrizados teorias y vistas Teorias se usan para declarar interfaces de modulo o sea la sintaxis y propiedades semanticas que tienen que ser satisfechas por los parametros actuales usados en una instanciacion Se declaran mediante las palabras claves fth endfth Todas ellas pueden tener tipos subtipos operadores variables axiomas de partencia ecuaciones y pueden importar otras teorias o modulos Vistas las usamos para especificar como un modulo destinado tiene que satisfacer una teoria fuerte En general hay muchas maneras mediante las cuales tales requerimientos pueden ser satisfechos puede haber diferentes vistas cada una especificando una interpretacion particular de la teoria fuente en el destino Cada declaracion de vista tiene asociado un conjunto de obligaciones para cada axioma en la teoria fuente tiene que haber un caso en el que la traduccion del axioma por la vista es true en el destino Se declara mediante view endv Modulos parametrizados es la instanciacion de un modulo usando como parametro una vista sobre una teoria Teoria TRIV predefinida en Maude fth TRIV is sort Elt endfth Vista de los naturales sobre la teoria TRIV view VNat from TRIV to NAT is sort Elt to Nat endvVease tambien EditarArboles AVL Arbol rojo negro Arbol estructura de datos Monticulo informatica Cola estructura de datos Pila estructura de datos Enlaces externos EditarPagina oficial de Maude Proyecto MOMENT Maude para Windows Depurador declarativo para Maude Datos Q3558930Obtenido de https es wikipedia org w index php title Maude lenguaje de programacion amp oldid 125248799, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos