Coq中的状态机

时间:2014-03-01 16:59:58

标签: state-machine coq

我可以使用Coq来证明状态机无法达到无效状态吗?怎么样?

2 个答案:

答案 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,但是将它用于什么可能并不容易你想做什么。