如何使用Frama-C证明此C is_power_of_2函数?

问题描述

一个previous question中,我正在寻求帮助写一个predicate来确定数字是否为2的幂。这是尝试证明以下C函数的前奏:

static inline bool
is_power_of_2 (unsigned long v)
{
  return v && ((v & (v - 1)) == 0);
}

(此“技巧”来自here)。使用先前的谓词,我尝试过:

/*@
  ensures positive_power_of_2 (v) <==> \result == \true;
 */

但是我正在使用的各种SMT求解器(alt-ergo,z3,gappa,cvc4)似乎都无法证明这一点。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)