簡體   English   中英

Coq 中的“介紹 ->”如何處理上下文?

[英]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 : 自然

H : x = y

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 bP a

暫無
暫無

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

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