RA2013: Razonamiento por casos y por inducción (1)

La clase de hoy del curso de Razonamiento automático ha tenido dos partes: comentar las soluciones de los ejercicios de la relación 4 y empezar el estudio del tema 4.

En la relación 4 se define la función cons que añade un elemento al final de la lista y se demuestra algunas de sus propiedades. Lo interesante es el uso de algunas propiedades en la demostración de otras (como en el ejercicio 5). Las ejercicios y sus soluciones son
Read More “RA2013: Razonamiento por casos y por inducción (1)”

RA2013: Razonamiento estructurado sobre programas con Isabelle/HOL (2)

En la clase de hoy del curso de Razonamiento automático hemos continuado la presentación de cómo se puede demostrar detalladamente propiedades de programas funcionales con Isabelle/HOL.

Para ello, se visto cómo representar en Isabelle/HOL las demostraciones de propiedades de programas estudiadas en el tema 2a (que se corresponden con el capítulo 13 del libro de G. Hutton Programming in Haskell).

Las demostraciones estudiadas son las correspondientes a las páginas 38 a 50 del tema 2a. Los métodos de demostración utilizados son razonamiento ecuacional, inducción sobre los números naturales, inducción sobre listas e inducción sobre esquemas correspondientes a definiciones recursivas.

La teoría con los ejemplos presentados en la clase es la siguiente:
Read More “RA2013: Razonamiento estructurado sobre programas con Isabelle/HOL (2)”

RA2013: Razonamiento estructurado sobre programas con Isabelle/HOL

En la segunda parte de la clase de hoy del curso de Razonamiento automático se ha presentado cómo se puede demostrar detalladamente propiedades de programas funcionales con Isabelle/HOL.

Para ello, se visto cómo representar en Isabelle/HOL las demostraciones de propiedades de programas estudiadas en el tema 2a (que se corresponden con el capítulo 13 del libro de G. Hutton Programming in Haskell).

Las demostraciones estudiadas son las correspondientes a las 37 primeras páginas del tema 2a. Los métodos de demostración utilizados son razonamiento ecuacional, inducción sobre los números naturales, inducción sobre listas e inducción sobre esquemas correspondientes a definiciones recursivas.

La teoría con los ejemplos presentados en la clase es la siguiente:
Read More “RA2013: Razonamiento estructurado sobre programas con Isabelle/HOL”

RA2013: Ejercicios de razonamiento automático sobre programas con Isabelle/HOL

En la primera parte de la clase de hoy del curso de Razonamiento automático se ha comentado las soluciones de la 2ª relación de ejercicios cuyo objetivo es demostrar automáticamente con Isabelle/HOL propiedades de programas.

Los ejercicios y sus soluciones se muestran a continuación

RA2013: Razonamiento automático sobre programas con Isabelle/HOL

En la clase de hoy del curso de Razonamiento automático se ha presentado cómo se puede demostrar automáticamente propiedades de programas funcionales con Isabelle/HOL.

En primer lugar, se ha estudiado cómo se pueden demostrar manualmente propiedades de programas Haskell. Para ello, se han usado las transparencias del tema 7 del curso de Programación declarativa (de 3º del Grado en Informática). Como lectura complementaria se recomienda el capítulo 13 del libro de G. Hutton Programming in Haskell.

A continuación se ha explicado cómo demostrar automáticamente las propiedades anteriores con Isabelle/HOL.

El enunciado de las propiedades es inmediato: basta escribir la palabra lemma y a continuación la propiedad entre comillas dobles; por ejemplo,

También se puede poner un nombre al lema, por ejemplo,

La demostración es la palabra by seguida por el método de demostración. Los métodos que hemos usado son

  1. by simp: que es el método de simplificación por reescritura,
  2. by (induct x) auto: que es por inducción en x (donde x es un número natural o una lista) y simplificación automática de ambos casos,
  3. by (induct rule: fn.induct) auto: que es por inducción según la definición de la función fn y simplificación automática de todos los casos,
  4. by (cases x) auto: que hace distinción de casos según el tipo x y simplificación automática de todos los casos,
  5. by (induct x arbitrary: y) auto: que es por inducción en x (donde y se considera una variable arbitraria) y simplificación automática de todos los casos y
  6. by (simp add: lema_auxiliar): que es el método de simplificación por reescritura añadiéndole a las reglas de reescritura la correspondiente al lema_auxiliar,

La teoría con los ejemplos presentados en la clase es la siguiente:
Read More “RA2013: Razonamiento automático sobre programas con Isabelle/HOL”