我目前與Coq一起工作,遇到一個我不知道如何解決的問題。假設我們正在使用給定的類型,我將採用nat
作爲示例,並且我想使用可能失敗的函數f
。爲了彌補失敗,我們將f
定義爲nat -> option nat
。如何證明Coq中的證明定義
現在我有一個給定的假設下H: nat -> bool
其中,f不會失敗,我甚至已經證明了引理
Lemma no_error_in_f : forall (n:nat), H n = true -> exists (u:nat), f n = Some u.
我要定義一個函數g: nat->nat
賦予的f
上n
如果H n
結果是滿意的,只是給予n
否則。這個函數應該有明確的定義,但我不知道如何正確定義它。 如果我嘗試像 Definition g (n:nat) := if H n then f n else n.
這樣幼稚的東西,那麼在打字系統中就有問題了。
有誰知道如何收集所有元素並告訴系統該定義是合法的嗎?
對不起,我犯了一個錯誤,第二個錯誤沒有出現,因爲'H n'是'bool'類型,我的引理的謂詞是'H n = true'。我會編輯這個。對於第一個問題,我想到了像False_rec之類的東西,或者類似的東西 – tben