J'aimerais créer des notations pour plusieurs types de jugements, par exemple pour une relation de frappe et sous-typage:opérateurs Surcharger dans les notations Coq
Reserved Notation "Г '⊢' t '∈' T" (at level 40).
Reserved Notation "Г '⊢' T '<:' U" (at level 40).
Inductive typing_relation : context -> term -> type -> Prop := ...
where "Γ '⊢' t '∈' T" := (typing_relation Γ t T).
Inductive subtyping_relation : context -> type -> type -> Prop := ...
where "Г '⊢' T '<:' U" := (subtyping_relation Γ T U).
Si je comprends bien, Coq ne permettra pas à cela parce que l'opérateur ⊢
est surchargé dans ces définitions.
Comment pourrais-je faire Coq en déduire la définition d'un opérateur surchargé (dans ce cas, ⊢
) sur la base des types de ses arguments (par exemple term
vs type
) (et/ou sur la base des autres opérateurs qui font partie de la notation, par exemple ∈
par rapport à <:
)?
(Notez que l'utilisation des symboles différents ne serait pas une option, parce que mon programme Coq définit plusieurs dactylographie et les relations de sous-typage.)
EDIT: Voici un exemple minimal:
Inductive type : Type :=
| TBool : type.
Inductive term : Type :=
| tvar : nat -> term.
Definition context := nat -> (option type).
Reserved Notation "G '⊢' t '∈' T" (at level 40).
Inductive typing_relation : context -> term -> type -> Prop :=
| T_Var : forall G x T,
G x = Some T ->
G ⊢ tvar x ∈ T
where "G '⊢' t '∈' T" := (typing_relation G t T).
Reserved Notation "G '⊢' T '<:' U" (at level 40).
Inductive subtype_relation : context -> type -> type -> Prop :=
| S_Refl : forall G T,
G ⊢ T <: T
where "G '⊢' T '<:' U" := (subtype_relation G T U).
Il en résulte l'erreur:
Syntax error: '<:' or '∈' expected after [constr:operconstr level 200] (in [constr:operconstr]).
Quel message d'erreur obtenez-vous? Aussi, un [mcve] serait bien. –
Juste ajouté un exemple! – amaurremi
[ici] (http://stackoverflow.com/questions/42239138/syntax-error-with-in-coq-notations) est une question connexe. –