Types Coq:创建布尔和nat的超级类型
我想创建一个混合类型的Types Coq:创建布尔和nat的超级类型,types,coq,mixed,Types,Coq,Mixed,我想创建一个混合类型的boolean和nat列表。此列表必须包含某些超类型的元素:boat,其中每个boolean都是boat,每个nat都是boat 我遇到的问题是,这种超级类型的船应该有一个船,这意味着应该有一种方法来决定两个船是相同还是不同。由于nat和boolean都有这样一个相等判定符,因此超级类型也应该有一个相等判定符 在下面的示例中,我创建了一个超类型,但我无法显示决定等式的引理引理boat_eq_dec:forall x y:boat,{x=y}+{x y}。 Inductive
boolean
和nat
列表。此列表必须包含某些超类型的元素:boat
,其中每个boolean
都是boat
,每个nat
都是boat
我遇到的问题是,这种超级类型的船
应该有一个船
,这意味着应该有一种方法来决定两个船
是相同还是不同。由于nat
和boolean
都有这样一个相等判定符,因此超级类型也应该有一个相等判定符
在下面的示例中,我创建了一个超类型,但我无法显示决定等式的引理引理boat_eq_dec:forall x y:boat,{x=y}+{x y}。
Inductive Boat : Set :=
| is_bool (inp: bool)
| is_nat (inp: nat).
定义这个超类型或显示引理的正确方法是什么?您也可以直接使用
(bool+nat)%type
(使用sum
)来获得一般概念。
然后,决定平等
可以解决几个eq\u dec
目标
定义船:=(bool+nat)%type。
引理船的平衡点:
对于所有xy:boat,{x=y}+{xy}。
证明。
简介xy。决定平等。
全体:决定平等。
定义
你甚至可以考虑证明一般引理
forall A B,
(forall x y : A, {x = y} + {x <> y}) ->
(forall x y : B, {x = y} + {x <> y}) ->
forall x y : A + B, {x = y} + {x <> y}.
对于所有A B,
(对于所有xy:A,{x=y}+{xy})->
(对于所有xy:B,{x=y}+{xy})->
对于所有xy:A+B,{x=y}+{xy}。
它已经在
方程库中得到了验证,但仅仅为了这个可能不值得安装。我觉得船的定义很好,而且可以使用船的eq\u dec
来获得它。酷!非常感谢。在做了一些修改之后,我还实例化了您类型的一些变量:定义测试_boat\u列表:list boat:=(inr 1):(inl true)::nil。
啊,很抱歉没有说。通常的方法是键入Print sum.
,以便知道如何实例化它。
forall A B,
(forall x y : A, {x = y} + {x <> y}) ->
(forall x y : B, {x = y} + {x <> y}) ->
forall x y : A + B, {x = y} + {x <> y}.