Je souhaite définir une fonction dont le comportement dépend de son argument (au moins) d'une fonction n-place. Un rudimentaire (échec) tentativeCoq: Définition d'une fonction par appariement de motif sur l'arité de son argument
Definition rT {y:Type}(x:y) := ltac: (match y with
| _ -> _ -> _ => exact True
| _ => exact False end).
Check prod: Type -> Type -> Type.
Compute rT prod. (*= False: Prop*)
Print rT. (*rT = fun (y : Type) (_ : y) => False: forall y : Type, y -> Prop*)
Comme vous le voyez, les cartes rT
tout pour False
. Pourquoi? Le résultat reste le même si je remplace y
dans la clause de correspondance w/type of x
est la raison derrière ce que la correspondance de motif de Coq est conçu pour fonctionner uniquement sur les constructeurs d'un type inductif? – jaam
Il existe deux niveaux de correspondance de motif. Le motif "Gallina" ne fonctionne en effet que sur les types inductifs et coinducteurs. Le modèle "Ltac" que votre code utilise est plus syntaxique, donc ce qu'il fait ne peut pas être exprimé comme un terme de Gallina (en général). – Ptival