我经常得到以下形式的证明条款:
Lemma of_nat_gt_0: forall (n: nat),
(Z.of_nat n >=? Int32.unsigned (Int32.repr 0)) = true.
该定理显然是正确的(自然数的Z总是>= 0
。类似地,unsigned
的{{1}}中的repr
将产生0
但是,它们只是烦人,因为我需要处理
0
来自Int32
模块CompCert.Integers
转换。通常,我也有Z.of_nat
和Pos
定义中的术语。
这些证明涉及多次手动重写以变幻成某种标准形式,然后进行N
调用。
有什么方法可以将所有这些“标准化”为一个统一的表示形式?
我知道这隐含地涉及到不同环之间的传输(例如omega
是Int32
)。如果有某种方法可以解决这个问题,那就太好了,因为这些证明会变得冗长。