命令Declare Scope
不存在。有關示波器的各種命令在section 12.2 of the Coq manual中描述。
您對示例符號的選擇存在固有問題,因爲它與預先定義的符號衝突,這似乎是在符號之前使用的符號。
當解析器看到_ < _
,認爲你實際上是在談論整數比較第一成分看,那麼它看到第二部分作爲符號_ * _
的一個實例,然後它會看到所有的左側平等的一面。而一直以來解析器是快樂的,它構造形式的表達式:
(1 < (2 * 3)) = 4
這是由解析器構造和類型系統尚未徵求。類型檢查器看到一個自然數作爲(_ < _)
的第一個孩子,並且很高興。它認爲(_ * _)
是第二個孩子,它很高興,現在知道該產品的第一個孩子應該是一個自然數,它仍然是幸福的;最後它具有相等性,並且這種相等性的第一個組成部分是Prop
,但第二個組成部分的類型是nat
。
如果您鍵入Locate "_ < _ * _ = _".
答案會告訴您您確實定義了新的符號。問題是這個符號永遠不會被使用,因爲解析器總是找到它以前可以使用的另一個符號。理解爲什麼表示法比另一種更喜歡錶達式,需要更多的解析技術知識,正如Coq手冊第12章中的句子(我不明白)所暗示的那樣:
Coq可擴展解析由Camlp5執行, LL1解析器。
你必須選擇不同的變量,x
,y
,a
,並且b
的水平,使沒有這些變量都將能夠匹配太多的文本。例如,我嘗試定義一個符號靠近你的符號,但是有一個開始和結束括號(我想這大大簡化了任務)。的x
水平被選擇爲比=
水平下
Notation "<< x < y * a = b >>" := (f x y a b)
(x at level 59, y at level 39, a at level 59) : my_scope.
,Y的電平被選擇爲比的*
的電平低,的a
水平被選擇爲比=
低。通過閱讀命令Print Grammar constr.
的答案獲得這些水平。它似乎正常工作,因爲接受了以下命令。
Check << 1 < 2 * 3 = 4 >>.
但是,您可能需要包括更多的工程,纔能有一個非常好的符號。
我不明白這個問題。你不是隻是自己的範圍?你怎麼沒有想要的? – Gilles 2013-02-24 20:20:15