Spin Promela中的浮点计算

Spin Promela中的浮点计算,spin,model-checking,promela,Spin,Model Checking,Promela,我想在Promela中建立一个物体的抛射弹道模型,并验证模型的一些特性。但是,Promela没有浮点数据类型。例如,它不能计算弹丸的运动参数。例如,它不能计算像正弦/余弦这样的三角函数,所以我不能模拟投射物的运动 解决这个问题的方法是什么?我们如何在Promela中对这样的系统进行建模?在Promela/SPIN中,您可以嵌入任意的C代码,包括指定哪些C内存应该被视为彻底探索的状态空间的一部分。查看语言结构:c_-code,c_-decl,c_-state,c_-track和c_-expr 请注

我想在Promela中建立一个物体的抛射弹道模型,并验证模型的一些特性。但是,Promela没有浮点数据类型。例如,它不能计算弹丸的运动参数。例如,它不能计算像正弦/余弦这样的三角函数,所以我不能模拟投射物的运动


解决这个问题的方法是什么?我们如何在Promela中对这样的系统进行建模?

在Promela/SPIN中,您可以嵌入任意的C代码,包括指定哪些C内存应该被视为彻底探索的状态空间的一部分。查看语言结构:
c_-code
c_-decl
c_-state
c_-track
c_-expr

请注意,包含浮点数通常比较麻烦;即使是一个,但肯定不止一个。您需要找到一种方法使浮点值不属于状态空间,在这种情况下,它们是中间计算值,或者需要将问题空间离散化。这是一个重要的模型检查概念的具体示例—在精确但计算上不可能的模式和近乎无内容的高层模型之间找到适当的抽象级别

有鉴于此,在最初的PROMELA/SPIN设计中,省略浮点数是一个非常有意识的设计决策


注意:在您的例子中,可能有一些输入参数和单个输出参数“hitthetarget”。然后,所有的浮点计算都是中间的,您的正确性声明会发现,例如,导致未达到目标的参数组合。

鉴于Promela是关于离散状态空间建模的,我可以看出“实数”(或它们的[浮点]近似值)是多么麻烦:一个“实数”可以有多少个状态价值观?