我可以使用Coq来证明状态机无法达到无效状态吗?怎么样?
答案 0 :(得分:3)
以下是如何将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不是这样。一般情况下,它可以通过归纳证明。
如果您提供有关实际状态机的更多信息,将更容易为您提供帮助。
答案 1 :(得分:-1)
对于模型检查器而言,这似乎更像是一个定理证明器的问题。
关于这一点存在问题Can Coq be used (easily) as a model checker?,确实有一些关于使用Coq作为模型检查器的工作,例如参见https://github.com/coq-contribs/smc,但是将它用于什么可能并不容易你想做什么。