如何在不带量词的情况下以Z表示法表示唯一属性?

时间:2018-11-24 15:14:20

标签: formal-methods z-notation

完全公开,这是针对大学课程的。我不希望有一个完整的答案,但会有所帮助。

我需要使用Z表示法为Item实体建模。这是描述:

  

Item:每个项目都有一个名称和唯一的ID,可用于唯一地描述该项目。一个项目还具有一个价格(正浮动)和一个类别。

部分要求是对这些实体进行建模,没有量词。

这就是我最终得到的,但是我不确定它是正确的:

Schema for Item

这样的想法是,名称是字符串的某种组合,ID是一个正整数和所说名称的元组,价格和类别都映射了全部功能。

第一个谓词是确保价格为正,第二个谓词是确保ID的唯一性,即将域缩小为所有尚未分配的整数。 不过,我认为这是不正确的。

1 个答案:

答案 0 :(得分:0)

您的方法的主要问题是,您尝试将有关整个系统(或其一部分)的信息放入单个项目的描述中。例如。您将价格指定为从id到float的映射-原则上很好-但是每个商品都没有这样的功能。

有很多指定方法,我展示了两种方法:

  1. 您有两种模式: ItemDatabase

    +-- Item -----
    | id: ℕ
    | name: String
    | price: ℝ
    | category: String
    |----
    | price ≥ 0
    +----------
    
    +-- Database -----
    | items: ℕ +-> Item
    |----------
    

    通过这种方式,您可以将每个项目的ID从项目本身移走。当每个项目还有一个字段id时,如果不使用量词来陈述items应该将一个ID映射到具有相同ID的项目这一事实将很复杂。或者,当您仅使用一组项目时,如果不使用量词来描述两个项目必须具有不同的标识符,则描述起来会很复杂。

items是一个函数,可以确保每个项目的ID的唯一性。

  1. 或者仅对项目的各个方面使用几个功能:

    +-- Items -----
    | ids: ℕ
    | name: ids --> String
    | price: ids --> ℝ
    | category: ids --> String
    +----------
    

    但要说明一个事实,那就是所有的价格都必须在没有量词的情况下为非负数。也许可以将替换为{ x:ℝ | x≥0}

一般说明:您是否需要使用ID进行计算?也许您可以使用[ID]来引入类型。对于类别(例如[CATEGORY])也是如此。

这个名称不仅是一个字符串吗?但我认为这不是一组(无序的)字符串。