如何使用关系演算定义 (1,6) 基数
How do you define a (1,6) cardinality using Relational calculus
我有这三个 table:
Customer
Rent
Book
Customer 和 Rent table 之间的基数是 (1,6),而 Rent 和 Book table 之间的基数是 (1,infinity)。
使用关系演算的语法,我会这样定义 (0,1) 基数:
∀x∀y∀z(rent(x,y)∧rent(x,z) → y =z)
但是如何定义 (1,6) 基数?
您可以这样表达(在谓词演算中,如您所表达的问题):
∀ x (x ∈ Customers → ∃ y rent(x,y))
∧
∀ x (x ∈ Customers → cardinality ({ y | rent(x,y)}) ≤ 6)
如果您愿意,可以使用以下形式的复杂逻辑表达式来编写条件 cardinality(set) ≤ n
:
∀y1∀y2 ... ∀yn (rent(x,y1) ∧ rent(x,y2) ∧ ... ∧ rent(x,yn)
∧ y1 ≠ y2 ^ ... (all the possible pairs) ...
→ ∄ ys (rent(x,ys) ∧ ys ≠ y1 ^ ys ≠ y2 ^ ... ^ ys ≠ yn)
或者更简洁的方式(见@philipxy的注释):
∀y0∀y1 ... ∀yn (rent(x,y0) ∧ rent(x,y1) ∧ ... ∧ rent(x,yn) → y0 = y1 ∨ ...
我有这三个 table:
Customer
Rent
Book
Customer 和 Rent table 之间的基数是 (1,6),而 Rent 和 Book table 之间的基数是 (1,infinity)。
使用关系演算的语法,我会这样定义 (0,1) 基数:
∀x∀y∀z(rent(x,y)∧rent(x,z) → y =z)
但是如何定义 (1,6) 基数?
您可以这样表达(在谓词演算中,如您所表达的问题):
∀ x (x ∈ Customers → ∃ y rent(x,y))
∧
∀ x (x ∈ Customers → cardinality ({ y | rent(x,y)}) ≤ 6)
如果您愿意,可以使用以下形式的复杂逻辑表达式来编写条件 cardinality(set) ≤ n
:
∀y1∀y2 ... ∀yn (rent(x,y1) ∧ rent(x,y2) ∧ ... ∧ rent(x,yn)
∧ y1 ≠ y2 ^ ... (all the possible pairs) ...
→ ∄ ys (rent(x,ys) ∧ ys ≠ y1 ^ ys ≠ y2 ^ ... ^ ys ≠ yn)
或者更简洁的方式(见@philipxy的注释):
∀y0∀y1 ... ∀yn (rent(x,y0) ∧ rent(x,y1) ∧ ... ∧ rent(x,yn) → y0 = y1 ∨ ...