我在why3
中有以下引理:
lemma trivial:
forall a : array 'a, b : array 'a.
array_eq_sub a b 0 0
这似乎是基本案例行为,但显然不是。关于为什么这不起作用的任何想法?
更新
我能够将问题简化为一个缺失的引理:
lemma array_eq_2:
forall a : array 'a, b : array 'a.
map_eq_sub a.elts b.elts 0 0 -> array_eq_sub a b 0 0
考虑到the documentation中指定的array_eq_sub
的定义,这似乎也是微不足道的。为什么我的证明者能找到解决方案?
答案 0 :(得分:0)
在努力解决这个问题后,我决定查看why3
源代码。我发现了一个与记录的内容不同的定义:
predicate array_eq_sub (a1 a2: array 'a) (l u: int) =
a1.length = a2.length /\ 0 <= l <= a1.length /\ 0 <= u <= a1.length /\
map_eq_sub a1.elts a2.elts l u
简而言之,数组的长度必须相等,以使它们的一部分相等。这与记录的内容不同,我怀疑可能导致许多定理不合理。