簡體   English   中英

在 Coq 中允許潛在的無限循環

[英]Allow potentially infinite loops in Coq

我請求您的幫助是因為我想知道是否可以允許在 Coq 中定義潛在的無限定點,只是為了檢查當前定義是否最終會產生 output。

我已經嘗試過新的Unset Guard Checking命令,我想精確禁用的是遞減參數檢查(因為我實際上有錯誤cannot guess decreasing argument of fix

我知道在 Coq 中禁用此功能有點可惜,但這只是為了獲得一個小實用程序 function 來檢查當前定義是否正確,以確保提供遞減參數將在進一步開發中起作用.

Unset Guard Checking確實會禁用遞減參數檢查。 您可能必須像此示例一樣使用{struct foo}顯式指定您希望系統假設減少的參數。

Unset Guard Checking.

Fixpoint y {A} (f : A -> A) {struct f} : A := f (y f).

但是,如果您沒有充分的理由,定義可能無限的 function 的更好方法是添加一個參數來強制終止。

Fixpoint y_opt {A} (lim : nat) (f : A -> A) : option A :=
  match lim with
  | O => None
  | S lim' =>
    match y_opt lim' f with
    | None => None
    | Some x => Some (f x)
    end
  end.

暫無
暫無

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

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