Maps 形式化方法.两套BL和Fiat的汽车价格与价格的关系图

Maps 形式化方法.两套BL和Fiat的汽车价格与价格的关系图,maps,range,formal-languages,formal-methods,vdm++,Maps,Range,Formal Languages,Formal Methods,Vdm++,Derek Andrews和Darrel INCE在《VDM的实用形式化方法》第5章中提出了一个问题,我不知道该如何回答,所以这里有一个问题,谢谢大家的帮助 如果地图价格与汽车价格相关,则集合BL包含英国莱兰和菲亚特生产的汽车以及菲亚特生产的汽车。使用本章和集合章节中介绍的地图设施和集合设施,写下以下说明 (d)价格在6000英镑至7000英镑之间的菲亚特汽车数量 这就是我目前的想法 1.获取所有菲亚特的价格,即价格(菲亚特)返回价格图的子集 i、 e.{punto-→ 5500,熊猫-→ 66

Derek Andrews和Darrel INCE在《VDM的实用形式化方法》第5章中提出了一个问题,我不知道该如何回答,所以这里有一个问题,谢谢大家的帮助

如果地图价格与汽车价格相关,则集合BL包含英国莱兰和菲亚特生产的汽车以及菲亚特生产的汽车。使用本章和集合章节中介绍的地图设施和集合设施,写下以下说明

(d)价格在6000英镑至7000英镑之间的菲亚特汽车数量

这就是我目前的想法

1.获取所有菲亚特的价格,即价格(菲亚特)返回价格图的子集

i、 e.{punto-→ 5500,熊猫-→ 6600}

2.可能是地图上的卡限制价格范围(菲亚特)

但我不确定这是否合法

  • 我认为功能应用程序不是获得价格图子集所需的,您希望将价格图限制在菲亚特的领域,因此让我们使用一个领域限制:

    fiat <: price 
    
    菲亚特
  • 我认为功能应用程序不是获得价格图子集所需的,您希望将价格图限制在菲亚特的领域,因此让我们使用一个领域限制:

    fiat <: price 
    

    fiatDaniel的答案几乎是正确的,只是在末尾的整数范围内缺少了花括号。以下是在VDMJ下测试的示例:

    values
        price = { <PUNTO> |-> 5500, <PANDA> |-> 6600, <MINI> |-> 9000 };
    
        BL = { <MINI> };
    
        fiat = { <PUNTO>, <PANDA> };
    
    值
    价格={|->5500,|->6600,|->9000};
    BL={};
    菲亚特={,};
    
    然后:

    > p fiat <: price
    = {<PUNTO> |-> 5500, <PANDA> |-> 6600}
    Executed in 0.079 secs.
    >
    > p (fiat <: price) :> {6000,...,7000}
    = {<PANDA> |-> 6600}
    Executed in 0.023 secs.
    >
    > p card dom ((fiat <: price) :> {6000,...,7000})
    = 1
    Executed in 0.064 secs.
    >
    
    >p菲亚特5500,|->6600}
    执行时间为0.079秒。
    >
    >p(法定{6000,…,7000}
    = { |-> 6600}
    执行时间为0.023秒。
    >
    >p卡dom((法定{6000,…,7000})
    = 1
    执行时间为0.064秒。
    >
    
    Daniel的答案几乎是正确的,只是在结尾处缺少整数范围的方括号。下面是在VDMJ下测试的示例:

    values
        price = { <PUNTO> |-> 5500, <PANDA> |-> 6600, <MINI> |-> 9000 };
    
        BL = { <MINI> };
    
        fiat = { <PUNTO>, <PANDA> };
    
    值
    价格={|->5500,|->6600,|->9000};
    BL={};
    菲亚特={,};
    
    然后:

    > p fiat <: price
    = {<PUNTO> |-> 5500, <PANDA> |-> 6600}
    Executed in 0.079 secs.
    >
    > p (fiat <: price) :> {6000,...,7000}
    = {<PANDA> |-> 6600}
    Executed in 0.023 secs.
    >
    > p card dom ((fiat <: price) :> {6000,...,7000})
    = 1
    Executed in 0.064 secs.
    >
    
    >p菲亚特5500,|->6600}
    执行时间为0.079秒。
    >
    >p(法定{6000,…,7000}
    = { |-> 6600}
    执行时间为0.023秒。
    >
    >p卡dom((法定{6000,…,7000})
    = 1
    执行时间为0.064秒。
    >
    
    谢谢你的帮助!我发现你也可以使用集合理解,即使用集合构造:{c∈fiat | 6000感谢您的帮助!我发现您也可以使用集合理解来实现此目的,即使用集合构造:{c∈fiat | 6000顺便说一句,如果您试图使用此规范评估“价格(fiat)”,VDMJ会给出以下错误:>p价格(fiat)错误3058:映射应用程序参数是不兼容的映射域类型:(| |)参数:一组(|)顺便说一句,如果您试图评估“价格(fiat)”使用此规范,VDMJ给出以下错误:>p价格(fiat)错误3058:映射应用程序参数是不兼容的映射域类型:(| |)参数:集合((|)