我想定义一个带有可变扇出的加权树,它是多态的类型。我想出了这个:
(* Weighted tree with topological ordering on the nodes. *)
Inductive wtree (A : Type) : Type :=
LNode : A->wtree A
| INode : A->list (R*wtree A) -> wtree A.
但是,我更愿意将权重存储在一个类型中,例如:
Inductive Wtype (A : Type) : Type := W : R->A->Wtype A.
Inductive wtree (A : Wtype) : Type :=
LNode : A->wtree A
| INode : A->list (wtree A) -> wtree A.
哪里R
是标准库中的实数集。
这不起作用,因为Wtype
is a Type->Type
, not a Type
,但我不知道如何做到这一点。不幸的是,我仍然生活在面向对象的领域,我真的只是想给A
than提供一个更严格的超级类型Type
,但就是不知道如何在 Coq 中做到这一点。