簡體   English   中英

Coq nat類型檢查比賽

[英]Coq nat type check on match

Theorem nzgtz : ~ 0 > 0.
Proof.
unfold not.
unfold gt.
unfold lt.
intros H.
inversion H.
Qed.

Print nzgtz.

Definition pred1 (n : nat) : n > 0 -> nat :=
  match n with
 | O => fun pf => match (nzgtz pf) with end
 | S n' => fun _ => n'
 end.

我對帶有O的第一個分支如何返回類型(0 > 0) -> nat的函數感到困惑。 問題是:如何將match False with end nat match False with end 似乎沒有返回值? 這種表達是什么意思?

我不是專家。 但是從功能的角度來看, pred1的返回值是一個返回 nat函數 ,而不是一個nat 對於任何輸入n ,結果函數都會將n > 0的證明pf轉換為nat

函數不需要(或不能)對不存在的參數返回任何值。 在極端情況下,當函數的域為空時,共域也為(或可以視為)空。

這就是為什么當pfFalse (這是一個空類型)時,該函數無法返回任何特定的nat值,並且它什么也不返回的原因。

從語法上講,如果將函數的簡化版本與從natnat的簡化版本進行比較:

Definition p : False -> nat :=
 fun pf => match pf with end.

Definition p1 : nat -> nat :=
 fun pf => match pf with 
   | 0 => 0
   | S p => p
end.

p1的兩個分支/構造函數相比, pFalse的證明pf沒有match with構造函數(0個分支)。

出於同樣的理由,你可以使用的證明False以( 空洞地 )證明什么。

match X with end是為了排除不可能的情況。 確實,讀取pred1函數的零分支的典型方法是“這種情況是不可能的”。

因此,不可能的情況不需要返回值。

ps:請注意,我無法設想一個pred1 ,其中pred1會很有用。

暫無
暫無

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

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