"set" 是默认的多重性吗?
Is "set" the default multiplicity?
这两个是否等价:
r: A -> B
r: A set -> set B
也就是说,set
是默认的多重性吗?
如果是,那么我将对《软件抽象》一书中箭头运算符的定义提出异议。这本书在第 55 页上说:
The arrow product (or just product) p->q of two relations p and q is
the relation you get by taking every combination of a tuple from p and
a tuple from q and concatenating them.
我将该定义解释为仅 p->q 的有效实例是一个具有来自 p 的元组与来自 q 的元组的所有可能组合的实例。但那是不对的(我认为)。任何包含 p 和 q 之间映射的实例都是有效的。比如56页就是这个例子,
Name = {(N0), (N1)}
Addr = {(D0), (D1)}
书上说这是 Name->Addr
的有效关系
{(N0, D0), (N0, D1), (N1, D0), (N1, D1)}
但这不是唯一的有效关系,对吧?例如,这是一个有效的关系:
{(N0, D0), (N1, D1)}
对吗?
声明 r : A->B 表示 r 是 A->B 的子集。表达式 A->B 只有一个值,即 A 和 B 的叉积。声明导致 r 的一组可能值,其中包括您引用的书中给出的示例和示例你问的。
这两个是否等价:
r: A -> B
r: A set -> set B
也就是说,set
是默认的多重性吗?
如果是,那么我将对《软件抽象》一书中箭头运算符的定义提出异议。这本书在第 55 页上说:
The arrow product (or just product) p->q of two relations p and q is the relation you get by taking every combination of a tuple from p and a tuple from q and concatenating them.
我将该定义解释为仅 p->q 的有效实例是一个具有来自 p 的元组与来自 q 的元组的所有可能组合的实例。但那是不对的(我认为)。任何包含 p 和 q 之间映射的实例都是有效的。比如56页就是这个例子,
Name = {(N0), (N1)}
Addr = {(D0), (D1)}
书上说这是 Name->Addr
的有效关系{(N0, D0), (N0, D1), (N1, D0), (N1, D1)}
但这不是唯一的有效关系,对吧?例如,这是一个有效的关系:
{(N0, D0), (N1, D1)}
对吗?
声明 r : A->B 表示 r 是 A->B 的子集。表达式 A->B 只有一个值,即 A 和 B 的叉积。声明导致 r 的一组可能值,其中包括您引用的书中给出的示例和示例你问的。