如何证明10%Z< Coq中的Int.max_unsigned和Compcert中的Int类型

时间:2018-02-07 09:56:32

标签: coq compcert

我想证明Z型值小于Int.max_unsigned。

引理测试:10%Z< Int.max_unsigned。 证明。 ?? 如何证明上述测试引理?

2 个答案:

答案 0 :(得分:5)

CompCert的Int.max_unsigned是根据许多其他概念定义的,例如Int.modulusInt.wordsizetwo_power_nat函数,用于计算n的一些unfold Int.max_unsigned. (* 10 < Int.modulus - 1 *) unfold Int.modulus. (* 10 < two_power_nat Int.wordsize - 1 *) unfold Int.wordsize. (* 10 < two_power_nat Wordsize_32.wordsize - 1 *) 通过逐个展开每个定义并观察发生的事情来理解事物的组织方式是有益的:

compute

但这很无聊。一个更简单的证据就是使用Int.max_unsigned策略来评估Lemma test: 10%Z < Int.max_unsigned. Proof. compute. (* The goal is now simply [Lt = Lt]. *) auto. Qed. 以及与10的比较:

import json

data = {}
with open('thefile.txt') as fobj:
    for raw_line in fobj:
        line = raw_line.strip()
        if line and not line.startswith('#'):
            try:
                key, values = line.split('=', 1)
            except ValueError:
                print('skipping invalid line:')
                print(line)
            try:
                data[key.strip()] = json.loads(values)
            except json.JSONDecodeError
                print('skipping invalid line (no JSON):')
                print(line)

答案 1 :(得分:0)

这些简单的定理可以通过auto策略来证明。例如:

Require Import ZArith.

Open Scope Z_scope.

Lemma test: 10 < 111.
Proof.
  auto with zarith.
Qed.