[Práctico 4] Ejercicio 21

[Práctico 4] Ejercicio 21

de Marco Nicolas Rodriguez Alvariza -
Número de respuestas: 4

Hola,

Tengo un problema al definir la función "camino".

Si considero la definición usual de árbol binario:

Inductive AB (A:Set) : nat -> Set :=
  | emptyAB : AB A 0
  | forkAB  : forall (h1 h2:nat), AB A h1 -> A -> AB A h2 -> AB A (S (max h1 h2)).

luego no es sencillo definir "camino" para el caso de un "forkAB", porque no se sabe en principio cuál de los sub árboles tiene la altura mayor.

Por otro lado, está la restricción del problema "La función camino debe recorrer, en el cómputo, sólo un camino del árbol."

Entonces no veo otra forma de resolver el problema que no sea agregar información a los constructores de los árboles binarios, para saber, a partir del constructor, cuál sub arbol tiene la altura mayor. Con este enfoque pude resolver el ejercicio.

¿El problema va por ahí o deberíamos ser capaces de resolverlo con la definición habitual de árboles binarios?

Saludos,

Nicolás

En respuesta a Marco Nicolas Rodriguez Alvariza

Re: [Práctico 4] Ejercicio 21

de Carlos Luna -

Hola.

Deberías definir la función camino por recursión sobre un árbol paramétrico en su altura. Luego, el caso base es simple y en el caso de un árbol no vacío tendrías el pattern con forkAB donde aparecen como argumentos las alturas de los subárboles (digamos h1 y h2). Comparando estos valores deberías elegir el camino. Se entiende?

Saludos, Carlos    

En respuesta a Carlos Luna

Re: [Práctico 4] Ejercicio 21

de Marco Nicolas Rodriguez Alvariza -

Entiendo. Ahora tengo una pregunta sobre la última parte (demostrar que el largo del camino es igual a la altura) con esta definición.

En el caso inductivo, separo en dos casos según la comparación de las alturas y en determinado momento tengo que probar

(h2 <=? h1) = true  -> S h1 = S (Init.Nat.max h1 h2) (para el primer caso)
(h2 <=? h1) = false -> S h2 = S (Init.Nat.max h1 h2) (para el segundo)

Para probarlos utilicé la táctica omega y varios teoremas que Coq ya tiene demostrados sobre naturales. ¿Se puede o esa parte hay que hacerla "a mano"?

Saludos,

Nicolás

En respuesta a Marco Nicolas Rodriguez Alvariza

Re: [Práctico 4] Ejercicio 21

de Carlos Luna -

Hola.

Si, se puede. A esta altura del curso la idea es que empiecen a usar tácticas automáticas (como omega) para propiedades básicas.

Saludos, Carlos