如何在Coq中定义基本数据类型,如Boolean,Interger

时间:2017-11-08 08:10:25

标签: coq

我想使用Coq来表示OCL中的基本数据类型,例如 Boolean Integer Real String < / em>和基本类型的解释,例如I(整数)= Z,I(真实)= R,I(布尔)= {真,假}。

我尝试构建类似的类型:

Require Import Reals.
Require Import String.

Inductive TB :=
| Integer : option nat -> TB
| Real : option R -> TB
| Boolean : option bool -> TB
| String : option string -> TB.

但我无法写出解释。有没有一种简单的方法来在Coq中定义这样的数据类型和解释?

1 个答案:

答案 0 :(得分:1)

Adam's Chlipala CPDT风格的“经典”解释将是:

From Coq Require Import ssreflect.

Inductive OT := TB | TI.

Definition OTI (x : OT) : Type :=
  match x with
  | TB => bool
  | TI => nat
  end.

Inductive OE : OT -> Type :=
| EBool    of bool : OE TB
| EInteger of nat  : OE TI.

Definition TBE t (x : OE t) : OTI t :=
  match x with
  | EBool    b => b
  | EInteger i => i
  end.

这对你有用,我不确定。