【问题标题】:Boolean Abstraction C Program布尔抽象 C 程序
【发布时间】:2012-08-22 18:53:34
【问题描述】:

我正在尝试使用谓词计算以下 C 代码片段的抽象:b: { x >= 0 }

1. if( x > 5 )
2.   x = x - 2;
3. else
4.   x = abs( x ) + 6;
5. assert( x >= 0 );

到目前为止我已经抽象出来了:

1. if( * ) // not sure if I should put if( b ) here
2.   assume( b ); b = true;
3. else
4.   assume( true ); // ? don't know how to abstract further
5. assert( b )

任何想法如何做到这一点?

【问题讨论】:

  • 在第二个代码,第2行。两个语句周围不应该有一个块吗?
  • @Papergay:- 你忘了true
  • 我不认为抽象是C代码;我认为它旨在成为用于推理程序的形式逻辑中的陈述。问题不清楚。
  • @LyubomirVasilev:正常应该有,但是这是抽象代码,不是要编译的,所以我觉得有没有大括号无关紧要。
  • 澄清:SLAM 工具使用这种抽象。上述C代码片段抽象出来的结果应该是一个布尔程序,而这又是一个所有变量都是布尔类型的C程序。

标签: c boolean abstraction


【解决方案1】:

我不知道我理解你是否正确,但是对于输入谓词{x>=0}b(交替使用)的集合。应该是:-

{x>=0}=unknown()   //unknown function is used to generate true or false non-deterministically

if(*)
{
 assume({x>=0});
 {x>=0}=true;
}
else
{
 assume(!{x>=0});
 {x>=0}=false;
}

【讨论】:

  • 但是如果你在x <= 5的条件下计算abs(x) + 6,那么x >= 0,那么不应该{x>=0} = true吗?
  • 不,不,条件x5。如果 !(x>5) 那么它必须是 x= 0...
  • 我认为应该是这样的:if( * ) {assume( b ); b = b? * : false;}elseb = true;assert( b );你觉得呢?
猜你喜欢
  • 2017-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
相关资源
最近更新 更多