Вы не даете ссылку на вашу версию RA (реляционная алгебра) или DRC (доменное реляционное исчисление).Я угадаю синтаксис из вашей попытки.
-- <cname, etype> rows where city cname suffers event type etype
-- { <cname, etype> | city cname can suffer event type etype }
Provider
-- <etype, provider> rows where event type etype service is provided by provider
-- { <etype, provider> | event type etype is service is provided by provider}
Measures
провайдер, который предоставляет услуги всем прогнозируемым событиям в Милане.
Это классическое неоднозначное использование «всех» / «каждого».Если в Милане не происходит никаких типов событий, хотите ли вы всех провайдеров или нет провайдеров?(Это распространенная проблема в запросах, рассчитываемых с помощью вариантов реляционного деления.)
Возможно, вам нужны поставщики p, где для всех типов e, если Милан страдает e, тогда p услуг e:
-- <p> rows where
(for all e (
if city 'Milano' suffers event type e then event e service is provided by p))
{ <p> | (forall e (if <'Milano', e> ∈ Prediction then <e, p> ∈ Measures)) }
Но из вашего запроса может показаться, что вам нужны поставщики p, где есть тип, которым страдает Милан, и для всех типов e, если Милан страдает e, тогда p услуг e:
-- <p> rows where
(for some e ('Milano' suffers event type e))
& (for all e (
if city 'Milano' suffers event type e then event e service is provided by p))
{ <p> |
(exists e (<'Milano', e> ∈ Prediction))
& (forall e (if <'Milano', e> ∈ Prediction then <e, p> ∈ Measures))
}
Ваш запрос, кажется,пытаясь быть похожим на следующее осложнение этого:
{ <p> |
(exists e (<'Milano', e> ∈ Prediction))
& (forall e (
if <'Milano', e> ∈ Prediction
then (exists pr (<e, pr> ∈ Measures & pr = p))
))
}