簡體   English   中英

是否可以在Ltac-match中綁定必要的不同術語?

[英]Is it possible to bind necessarily different terms in Ltac-match?

在用戶定義的策略中進行模式匹配( match goal with )時,我們可以使用?x綁定Gallina術語,以便以后可以引用它。 我們可以在一個子句中使用多個這樣的標識符( ... ?x ... ?y ... ),或者甚至可以使用相同的標識符( ... ?x ... ?x ... )來表示為了使子句匹配,必須在這兩個位置出現相同的Gallina術語。 從某種意義上說,這限制了可能的匹配與“相同”要求。 這很方便,但是也能夠提出“不同”的要求會更方便。 有沒有一種方法可以寫出... ?x ... ?y ...形式的匹配子句,而我們要求由?x?y約束的術語是可區分的?

可區分的我不一定表示不相等,而是不同(它們的名稱[或表示形式]不重合)。 例如,假設我有兩個詞a,b:C 在可以證明命題a = b的意義上,這兩個術語可能相等,但這與我的目的無關。 使ab彼此區別的原因是它們的名稱不同。

因此,我是否可以通過提出兩個元變量?x?y必須綁定不同的術語來進行模式匹配?

為了說明這一點,假設我們定義了對,投影,並且讓R為某些(適當類型的)二進制關系。 假設我以某種方式得出以下兩個結論。

H  : R (proj1 (pair a b)) c
H' : R (proj1 (pair a b)) a

我希望能夠在我的戰術中寫一個只匹配H而不匹配H'的比賽子句。 這有招嗎?

如果沒有辦法只匹配H ,那么也許我可以兩者都匹配,在這里我將a綁定到?x ,將c (或再次將a )綁定到?y 但是,然后,在比賽條款的右側,我想在xy之間執行一些“ 它們是否不同? ”檢查,並在兩個idtac實際上綁定相同術語的情況下執行idtac

幾種檢查兩個術語是否相等的策略

我認為您可以將它與tryifassert_fails結合使用以執行您想要的操作。

match goal with
  | [H : ... |- _] => tryif (constr_eq x y) then fail else some_tactic
end.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM