如何同时定义归纳类型和定义?

时间:2014-04-18 22:48:31

标签: coq

我希望有以下定义:

Inductive a : Set :=
|basic : string -> a
|complex : string -> list t -> a.

Definition t := string * a * a. 

如您所见,在定义a时使用t,在定义t时使用a。我的问题是如何同时定义这两个?

非常感谢!

1 个答案:

答案 0 :(得分:4)

您可以使用Inductive命令相互定义它们。

Inductive a : Set :=
  | basic : string -> a
  | complex : string -> list t -> a
with t : Set :=
  | t_intro : string * a * a -> t.

或者您可以使用t的定义替换,然后定义t

Inductive a : Set :=
  | basic : string -> a
  | complex : string -> list (string * a * a) -> a.

Definition t : Set := (string * a * a)%type.

Definition complex' : string -> list t -> a := complex.