[英]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.