我想使用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中定义这样的数据类型和解释?
答案 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.
这对你有用,我不确定。