Relation X:
| P | Q | R |
|---|---|---|
| P1 | Q1 | R1 |
| P2 | Q2 | R2 |
| P3 | Q3 | R2 |
Relation Y:
| P | S |
|---|---|
| P1 | 10 |
| P1 | 15 |
| P2 | 20 |
| P3 | 1 |
A clean way to read this tuple relational calculus expression is to translate it into an equivalent SQL query, since that makes the logic more familiar. The condition $\exists z \in X(t[P] = z[P])$ is a self-reference that is always satisfied (just pick $z = t$), so it contributes nothing to the filtering and can be dropped. What remains is: keep a tuple $t$ from $X$ only if there is some row in $Y$ with the same $P$ value and $S > 1$. In SQL terms, this is:
SELECT * FROM X WHERE P IN (SELECT P FROM Y WHERE S > 1)
So exactly two rows of X, the ones with P1 and P2, satisfy the original expression, while the P3 row is excluded because its only matching row in Y has S = 1, which fails the strict S > 1 test.
$$\boxed{2}$$