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}.