除了使用列表外,在Coq中定义平行成分的可能方法有哪些?

除了使用列表外,在Coq中定义平行成分的可能方法有哪些?,coq,Coq,我知道如何使用列表来定义它,但我期待的不是这个。因为我认为,如果我们用列表来定义它,就不可能证明它的结合性和交换性。只是猜测你在问状态机的并行组合。在Coq的逻辑中有很多方法可以对它们进行建模,我不知道列表是否是最好的方法 如果你将这些步骤定义为命题关系,你可以通过创建一个新的归纳关系来“平行”组合两台机器,该归纳关系可以在其中一台机器中或在另一台机器中进行步骤 这并不是最一般的写法,但希望它能让人理解 假设机器可以在状态A、B或C之间移动。机器M1以一种方式运行,而M2以另一种方式运行。也就是

我知道如何使用列表来定义它,但我期待的不是这个。因为我认为,如果我们用列表来定义它,就不可能证明它的结合性和交换性。

只是猜测你在问状态机的并行组合。在Coq的逻辑中有很多方法可以对它们进行建模,我不知道列表是否是最好的方法

如果你将这些步骤定义为命题关系,你可以通过创建一个新的归纳关系来“平行”组合两台机器,该归纳关系可以在其中一台机器中或在另一台机器中进行步骤

这并不是最一般的写法,但希望它能让人理解

假设机器可以在状态A、B或C之间移动。机器M1以一种方式运行,而M2以另一种方式运行。也就是说,M1可以从A步进到B或C,从B步进到C,从C步进到A。M2只能从A步进到C,从C步进到A

Inductive state : Set := A | B | C.

Inductive M1 : state -> state -> Prop :=
  s1 : M1 A B | s2 : M1 A C | s3 : M1 B C | s4 : M1 C A.

Inductive M2 : state -> state -> Prop := 
   ss1 : M2 A C | ss2 : M2 C A.
我们可以为组合系统创建一个新的阶跃关系

Inductive M1M2 : (state*state) -> (state*state) -> Prop :=
| st1 s1 s1' s2: M1 s1 s1' ->  M1M2 (s1, s2) (s1', s2)  (* M1 takes a step *)
| st2 s1 s2 s2': M2 s2 s2' ->  M1M2 (s1, s2) (s1, s2'). (* M2 takes a step *)

抱歉,此问题缺少上下文。你所说的“并行合成”到底是什么意思?几个进程并行运行。例如P1 | | P2 | | | | | | | | | | Pn-->P1'| | | P2'| | | | | |请注意。多个流程可以在一个步骤中采取步骤。所以,如果我们使用列表,我们可以将其定义为进程列表。但是,如果我们用列表来定义交换性质,它是无法证明的。你对过程的等式的定义是什么?请注意,在过程同余的定义中提供交换性是很常见的,这与Pi演算的特性类似。结构一致性然后请注意,并发导致的相等与Coq的相等不对应!事实上,在π的同余下,交换性是一个公理。因此,在Coq中,你无法“证明”它。你能做的就是对同余进行模运算。为此,您有几种方法,第一种是使用
Setoids
,第二种更高级,涉及可判定同余,参见“Cyril Cohen:Coq.ITP 2013中的实用商类型”