2017-02-14 5 views
2

私はこのような何か持っていると仮定します。誘導型の表記法を使用してCoqでその型を定義できますか?

Inductive SubtypeOf : 
    Gamma -> UnsafeType -> Type -> Set := 
| SubRefl : 
    forall (gamma : GammaEnv) (u : UnsafeType) 
    , SubtypeOf gamma u u 
| SubTrans : 
    forall (gamma : GammaEnv) (u1 u2 u3 : Type) 
    , SubtypeOf gamma u1 u2 
     -> SubtypeOf gamma u2 u3 
     -> SubtypeOf gamma u1 u3. 

と定義された表記:

Notation "G |- x <: y " := (SubtypeOf G x y) (at level 50).

は私が、SubtypeOfの定義については、スコープにこの表記をもたらすことができる方法はあります私はこのような何かができる:

Inductive SubtypeOf : 
    Gamma -> UnsafeType -> Type -> Set := 
| SubRefl : 
    forall (gamma : GammaEnv) (u : UnsafeType) 
    , gamma |- u <: u 
| SubTrans : 
    forall (gamma : GammaEnv) (u1 u2 u3 : Type) 
    , gamma |- u1 <: u2 
     -> gamma |- u2 <: u3 
     -> gamma |- u1 <: u3. 
+2

はい、Coqマニュアルで「Reserved Notation」と「where」を探してください。 – ejgallego

+0

@ejgallegoパーフェクト、答えとしてこれを入れて、私は受け入れます! – jmite

答えて

2

ejgallegoさんのコメントを拡張し、ドキュメントがありますReserved Notationsおよびa where clause for inductivesのための記法。 <:はむしろxに吸収されるよりも、|-で解析されますように、私たちは、次のレベル(49)でxを置く必要があります

Reserved Notation "G |- x <: y" (at level 50, x at next level). 
Definition UnsafeType := Type. 
Axiom Gamma : Set. 
Notation GammaEnv := Gamma. 
Inductive SubtypeOf : 
    Gamma -> UnsafeType -> Type -> Type := 
| SubRefl : 
    forall (gamma : GammaEnv) (u : UnsafeType) 
    , gamma |- u <: u 
| SubTrans : 
    forall (gamma : GammaEnv) (u1 u2 u3 : Type) 
    , gamma |- u1 <: u2 
     -> gamma |- u2 <: u3 
     -> gamma |- u1 <: u3 
where "G |- x <: y " := (SubtypeOf G x y). 

注:ここでは動作するコードです。

関連する問題