Instancias de tipos parametricos

Instancias de tipos parametricos

de Bruno Rolando Boz -
Número de respuestas: 1

Buenas,

He notado que al hacer un pattern matching en un tipo instanciado a partir de un tipo paramétrico le tengo que seguir pasando el tipo que ya instancie.

Ej:

Inductive list (A:Set) : Set := 
      nil   : list A
    | cons  : A -> list A -> list A.

Definition listN := list nat.

Fixpoint member (n:nat)(l:listN) :=
     match l with
          nil _       => false (Si no le paso el wildcard me tira un error!!)
          ....

¿Porque le tengo que seguir pasando el wildcard a nil si ese wildcard se corresponde con nat que fue instanciado en la definición de listN?

¿No debería funcionar como si hubiera hecho una  beta-reducción de aplicar el tipo a la funcion? 

Saludos.

En respuesta a Bruno Rolando Boz

Re: Instancias de tipos parametricos

de Carlos Luna -

Hola Bruno.

En definiciones propias es así. En este caso nil tiene un argumento -en la definción de list- aunque puede deducir el tipo.

Por ahora es mejor que trabajen poniendo todos los parámetros que corresponden, aunque se puede trabajar con argumentos implícitos en Coq (ver por ejemplo en https://coq.inria.fr/distrib/current/stdlib/Coq.Lists.List.html).

De hecho, en el ejemplo que diste, usando las listas predefinidas en Coq, es posible escribir:

Fixpoint member (n:nat)(l: list nat) :=
     match l with
          nil  => false

Saludos, Carlos