Expressing rules in B-Method

时间:2016-07-11 20:06:22

标签: model-checking b-method

I'm writing some specifications of a system in B-method. I have the following variables which are subsets of a general set:

  1. First Notation: a :={x,y,z,v} b :={x,y,z}

I want to state a rule that whenever something exists in set "b", it also exists in set "a" which helps writing the above specifications as the following:

  1. second Notation: a :={v} b :={x,y,z}

Explanation of second notation: I want the machine to infer that a :={x,y,z,v} from a :={v}, b :={x,y,z}, and the rule.

How can I express the rule so I avoid the first notation and instead write the second notation?

I tried the following but it didn't work

INITIALISATION 
    a :={v} & 
    b :={x,y,z}
ASSERTIONS
    !x.(x:b => x:a)

2 个答案:

答案 0 :(得分:0)

首先,谓词!x.(x:b => x:a)可以更容易地由b<:a表达。

我不清楚你想要表达的是什么:b是{@ 1}}的一部分还是仅仅是初始化?

如果始终如此,a将是正确的位置。 INVARIANT类似,但应该是其他不变量的含义。 但是,你必须在初始化时明确确保。

我不清楚的另一点是“推断”是什么意思。你不想指定细节吗? 使用超过ASSERTIONS的一个元素分配a集的初始化可能如下所示(假设ba包含b的元素):

S

(免责声明:我实际上没有测试过它。)

如果INITIALISATION ANY v,s WHERE v:S & s<:S THEN a := s\/{v} || b := s END 应始终大于a,则可以添加b之类的内容。  您的描述并不清楚您想要实现的目标。

另一种方法是使用“变成这样的替代”(但在我看来它不太可读):

v/:s

答案 1 :(得分:0)

首先,最重要的是,B机器本身并不推断任何东西。它提供了一种语言,用户可以表达属性和生成证明义务的机制,证明者必须成功处理(自动或人工协助),以保证财产保持不变。

在您的示例中,如果您想表示集合bb的每个元素始终是集合aa的元素,那么就像danielp所观察到的那样,只需写一下

bb <: aa

接下来,如果你想写aa使用一个不在bb中的元素,那么你可以把它表示为

aa /= bb & not(aa = {})

#(elem).(elem : S & elem : bb & not(elem : aa))

如果您想表达特定值vvaa但不在bb中,则以下情况适用

vv : bb & not(vv : aa)

这些表达式可以在B机器的多个位置使用,具体取决于您是否要声明参数,常量或变量的属性。

例如,假设您有一台具有两个变量vavb的计算机,其中两个变量都是给定集合s1的元素集,并且您希望它们在这样一种方式,vb的每个元素也是va的元素,并且存在va的元素不在vb中。首先请注意,这意味着vbva的严格子集。

INITIALISATION
  ANY inia, inib WHERE
    inia <: s1 & inib <: s2 & inib <<: inia
  THEN
    va := inia || vb := inib
  END