如何进行这个Coq Proof?

时间:2011-07-30 19:27:35

标签: logic coq theorem-proving

我的Coq证明有问题,希望得到一些帮助和指导。我的定义如下:

Inductive Architecture : Set := 
| Create_Architecture (Arch_Name: string)(MyComponents: list Component)
  (MyConnections: list Connector)

with

...

with 

Connector : Set :=
| Create_Connector (Con_Name:string) (client: Component)(server:Component)

我想说“组件术语必须是连接的客户端或服务器;但不能两者兼而有之。”我已经提出以下内容作为Coq中上述内容的表示(基于我上面的定义):

(forall con:Connector, forall c:Component, In con (MyConnections x) -> 
(c = (client con) /\ c <> (server con)) \/ (c <> (client con) /\ c = (server con)))

然而,我不确定这是否正确(是吗?),因为当我得到证据时,我会陷入困境

5 subgoals
con : Connector
c : Component
H0 : Connection1 = con
______________________________________(1/5)
c = HotelRes

HotelRes的类型确实是Component(在这种情况下,HotelRes是连接的客户端),但是,由于这不是假设的集合,我不能使用某些东西喜欢精确或自动战术。

我怎么能继续这样的证明?

1 个答案:

答案 0 :(得分:2)

从你所展示的(部分)定义来看,显然没有什么能阻止Component既是客户端又是连接器中的服务器,所以我不明白你想要如何证明它?

我的猜测是你的定义没有正确地捕捉到你想要建模的内容,但如果没有看到它们(完全定义或背后的想法),就不可能多说。