AMN和数学逻辑表示法

时间:2009-12-12 13:46:02

标签: math requirements software-quality b-method

我不确定这是否适合stackoverflow,但我不知道还有什么要问的。我正在研究用于证明需求规范一致性的B方法,并且在指定操作的前置条件时我遇到了逻辑数学符号的问题。

简化原始问题,我有一个变量,它是FLIGHT_NO x TIME x TIME之间的笛卡尔积的航班,其中每个成员(no,td,ta),no表示航班号,td出发时间和到达时间。如何使用数学逻辑表示法获得具有最大td值的航班元素?

3 个答案:

答案 0 :(得分:4)

您想要获取这样的元素,还是测试您所拥有的元素是否满足此属性?我问,因为第二个似乎是一个手术的明智前提。我不知道具体的B方法;我查看了一些文档,但找不到快速参考,所以在某些细节上这可能是错误的。

第二个看起来像这样(prj2用于第二次投影):

HasGreatestTd(flight) = flight \in flights \and \forall flight' (flight' \in flights => prj2(flight) >= prj2(flight'))

然后第一个是:

flightWithGreatestTd = choice({flight | HasGreatestTd(flight)})

答案 1 :(得分:1)

原谅我的无知,我不熟悉B-Method。但你不能使用唯一性量词吗?它看起来像是:

存在时间td,使得所有时间td',td> TD'

对于所有td,td',td'',如果td> td''和td'> td''然后td == td'

当然,这假设集合中只有一个元素。我无法确定B-Method是否允许一阶逻辑的全部功能,但我认为你可以接近这一点。

答案 2 :(得分:0)

可以在B中定义函数。函数具有常量值,并且将在ABSTRACT_CONSTANTS子句中列出,并在PROPERTIES子句中定义。我试着解释如何使用这个结构来解决你的问题。

关注

的小摘录
  1. 介绍了提供航班信息的笛卡尔积的快捷方式;
  2. DEFINITIONS
        FLIGHT_INFO == FLIGHT_NO * TIME * TIME
    
    1. 宣布了四个常数,前三个是"访问者",最后一个将非空的一组航班信息映射到具有最大出发时间的航班信息。
    2. CONSTANTS
          flight_no, flight_departure, flight_arrival, last_flight
      
      1. 然后输入这些常量并定义为总函数。请注意,最后一个函数必须将非空集作为输入。在这里,我习惯了不同的方法来指定这些功能。一个是定义(具有相等性),另一个是公理性的。
      2. PROPERTIES
            // typing 
            flight_no: FLIGHT_INFO --> FLIGHT_NO &
            flight_departure: FLIGHT_INFO --> TIME &
            flight_arrival: FLIGHT_INFO --> TIME &
            last_flight : POW1(FLIGHT_INFO) --> FLIGHT_INFO &
            // value
            flight_no = %(no, dt, at).(no |-> dt |-> at : FLIGHT_INFO | no) &
            flight_departure = %(no, dt, at).(no |-> dt |-> at : FLIGHT_INFO | dt) &
            flight_arrival = %(no, dt, at).(no |-> dt |-> at : FLIGHT_INFO | at) &
            !fs.(fs : POW1(FLIGHT_INFO) =>
               last_flight(fs) : fs &
               !(fi).(fi : FLIGHT_INFO & fi : fs =>
                  flight_departure(fi) <= flight_departure(last_flight(fs)))