[英]How does the “intro ->” in Coq work on context?
我對依賴類型定理證明者如何在上下文中進行替換感興趣。 我在 Coq 中找到了一個叫做“介紹 ->”的東西,描述如下:
https://coq.inria.fr/refman/proof-engine/tactics.html#intropattern-rarrow-ex
在示例中,它說明了目標:
x, y, z : 自然
y = z -> x = z
會變成
x, z : 自然
H : x = z
x = z
在應用“介紹->”之后。
我不確定將 H:x = y 代入 H:x = z 的步驟是如何完成的,這一步是根據什么 Coq 邏輯規則? 這似乎是一個重寫的步驟,根據我目前的知識,這些重寫大部分都是根據等式的,所以從 H:x = y 到 H:x = z 的替換應該來自這樣的等式 (H:x = y ) = (H:x= z) ($\\diamond$),但是這樣的等式是病態的,因為原則上,我們要求等式的 LHS 和 RHS 具有相同的類型,因此這種等式 ($\\diamond$) 取決於 y = z 的假設。
有人可以幫助解釋“介紹->”在這里是如何工作的嗎? 我們是否需要像 ($\\diamond$) 這樣的“平等”?
在 Coq 中,重寫上下文是一個派生的概念。 戰術intros ->
在這種情況下大致相當於以下戰術:
intros H'. rewrite H' in H. clear y H'.
rewrite H' in H.
的策略又大致相當於
revert H. rewrite H'. intros H.
換句話說,為了在上下文上重寫,Coq 首先將所有相關的假設轉移到目標,重寫目標,然后將假設帶回上下文。
重寫目標對相等類型使用以下消除原則:
forall [A : Type] [a : A] (P : A -> Prop), P a -> forall b : A, b = a -> P b
為了重寫上面的H'
,我們將有:
A := T
a := z
P := fun c => x = c -> x = z
b := y
所以,
P b == x = y -> x = z
P a == x = z -> x = z
事實上,忽略進出上下文的移動步驟,當你執行重寫時,Coq 從P b
到P a
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.