2015-05-18 36 views
8

Ben Ancak bundan sonra tüm işlev uygulama ifadesi '>>' tarzı olarak temsil edilirCoq'deki özel gösterimi nasıl devre dışı bırakırım?

Notation "a >> b" := (b a) (at level 50). 

tarafından zorunlu tarzı programlama simüle etmek için bir gösterim tanımladık. Coq agresif benim özelleştirilmiş içine tüm işlev uygulaması tarz ifadesini yeniden gelmez Neden aslında

bs' : list nat 

olmalıdır Örneğin, Coq toplevel kanıtı modunda, ben '>>'

bs' : nat >> list 

görebilirsiniz temsilidir? Her şeyi normale geri nasıl geri yükleyebilirim, demek istediğim 'a >> b' 'b a' olarak yorumlanmalı ve 'list nat' 'nat >> list' olarak gösterilmeyecek mi?

Teşekkür ederiz!

cevap

7

, Coq bir gösterim tanımlarsanız, oldukça-baskı için kendisine istediğinizi varsayar ... bir uzay karşı ">>" ne zaman kullanılacağını makine bilmek için hiçbir yolu yoktur . Gösterimin güzel baskıda görünmesini istemiyorsanız, bunu “yalnızca ayrıştırma” olarak bildirin.

Notation "a >> b" := (b a) (at level 50, only parsing). 

Eğer a >> b, bazen görüntülenecek bir kapsam için kısıtlamak ve bu kapsamda bir tür ilişkilendirebileceğiniz istiyorsanız; sonra notasyon sadece sonuç türü bu tip olduğunda uygulanacaktır.

Coq'a “notasyonu yalnızca kaynak kodumda kullandığım yerde kullan” demesinin bir yolu yoktur, çünkü bir notasyon ile yazılmış bir terim tam olarak başka bir yolla yazılmış terim ile aynıdır: orijinal olarak kullanılan notasyon teriminin bir parçası değil.

+0

İyi çalışıyor. Teşekkür ederim! – xywang

6

Bunun yerine bir tanım kullanabilirsiniz. Bu şekilde, sadece "followBy" olarak etiketlediğiniz şeyler bu şekilde yeniden adlandırılacaktır. Aksi

Varsayılan olarak
Definition followedBy {A B : Type} (a : A) (b : A -> B) := b a. 

Notation "a >> b" := (followedBy a b) (at level 50). 
+0

Güzel numara ve işe yarıyor. Teşekkür ederim! – xywang

İlgili konular