Práctico 4 Ej 2 y 3

Práctico 4 Ej 2 y 3

de Andres Fulloni Papaleo -
Número de respuestas: 1
Buenas, tengo unas pequeñas dudas de estos ejercicios. En el ej2 al definir Xor me aparece el siguiente error: Error: The constructor false (in type bool) expects no arguments.

Esto pasa al poner dos false en al match. Lo tengo definido de la siguiente forma:

Definition Xor (b1 b2 : bool) :=
                              match b1 b2 with
                                | false false => false
                                | true true => false
                                | true false => true
                              end.

La otra duda es sobre la función LeBool del ej3. No me queda claro si está bien definido de esta forma ya que estoy aplicando recursión en las dos variables:

Fixpoint leBool (n m:nat):bool :=
                                match n with
                                  | 0 => match m with
                                          | 0 => false
                                          | S k => true
                                         end
                                  | S k => match m with
                                            | 0 => false
                                            | S t => leBool k t
                                           end
                                end.

Gracias.


En respuesta a Andres Fulloni Papaleo

Re: Práctico 4 Ej 2 y 3

de Carlos Luna -

Hola.

Respecto a lo primero, tenés que usar comas para separar en análisis entre las dos variables, sino entiende que es una aplicación (por eso el mensaje de error, ya que true o false no esperan argumentos; no son funciones):

...

match b1, b2 with
   | false, false => false

...


Respecto a lo segundo, Fixpoint chequea que un argumento se achique estructuralmente (tenga menos constructores en cada llamado recursivo). Por defecto lo hace sobre el último argumento pero esto podés precisarlo (vero el teórico, función suma de naturales). En este caso se cumple que en el llamado recursivo el segundo argumento es más peque~no (tiene un sucesor menos). Hay un caso base que está mal si lo que querés definir es "menor o igual", ya que 0<=0. Esta función se puede definir en menos casos.

Saludos, Carlos