我可以使用Coq來證明狀態機無法達到無效狀態嗎?怎麼樣?Coq中的狀態機
Coq中的狀態機
回答
這裏是如何將stm從here轉換爲coq。
Require Import Coq.Lists.List.
Inductive alpha : Set := A | B | C | D.
Fixpoint s1 (xs : list alpha) : bool :=
match xs with
| C :: rest => s2 rest
| _ => false
end
with s2 (xs : list alpha) : bool :=
match xs with
| nil => true
| A :: rest => s2 rest
| B :: rest => s2 rest
| C :: rest => s3 rest
| _ => false
end
with s3 (xs : list alpha) : bool :=
match xs with
| D :: rest => s2 rest
| _ => false
end.
這裏是定理指出STM不能達到無效狀態:
Theorem t : forall xs, s1 xs = false.
但顯然它不是這個STM如此。在一般情況下,它可以通過歸納來證明。
如果您提供關於什麼是您的實際狀態機的更多信息,將會更容易爲您提供幫助。
對於模型檢查器來說,這似乎更像是一個問題,而不是定理證明者。
關於此問題一直存在Can Coq be used (easily) as a model checker?的問題,並且確實有一些關於使用Coq作爲模型檢查器的工作,例如參見https://github.com/coq-contribs/smc,但可能不容易將其用於您想要執行的操作。
雖然這可能在理論上回答這個問題,但[這將是更可取的](// meta.stackoverflow.com/q/8259)在這裏包含答案的基本部分,並提供供參考的鏈接。 –
答案本質上是:在這方面有一些工作,但並不是真正應用的東西。我會編輯我的答案。 –
@ baum-mit-augen我的編輯答案更好嗎?我討厭我現在在我的列表中有一個-1的答案,但不知道該怎麼辦。我想解決這個問題! –
- 1. Ruby中的動態狀態機?狀態機必須是類嗎?
- 2. Coq在樹狀結構中的感應
- 3. C中的狀態機#
- 4. ObjectOutputStream狀態機?
- 5. 在狀態機
- 6. VHDL狀態機
- 7. 狀態機,
- 8. Android狀態機
- 9. 狀態機的本體/設計狀態機的其他工具
- 10. 查詢狀態機中可能的未來狀態的當前狀態
- 11. Coq中的子類型多態性
- 12. UML狀態機子狀態轉換
- 13. Rails cancan和狀態機 - 授權狀態
- 14. 無狀態自動推進狀態機
- 15. 有限狀態機過度狀態
- 16. VHDL狀態機正在跳過狀態
- 17. 如何更改狀態機中的目標狀態
- 18. 如何訪問(boost meta)狀態機中的所有狀態?
- 19. 如何使用AASM跳過狀態機中的狀態
- 20. 流星狀態機
- 21. 狀態機問題
- 22. 狀態機實現
- 23. 狀態機導軌
- 24. 改善狀態機
- 25. 狀態機示例
- 26. 有限狀態機
- 27. 狀態機執行
- 28. GKEntity和狀態機
- 29. 狀態機問題
- 30. Unity 2D - 狀態機
狀態機如何表示?你有什麼嘗試? –
@maxtaldykin到目前爲止還沒有,但可以說這是用這樣的尾遞歸函數完成的:http://stackoverflow.com/a/9436688/2138090 –
只需將此OCaml代碼轉換爲Coq並證明定理'forall x。 s1 x == true'通過歸納法。 –