gebruik van quantoren in
relationele calculus

dr. Katrien Verbert
Katrien.Verbert@cs.kuleuven.be
tupel relationele calculus
•  Basisvorm: {t | formule(t)}
   –  t is een tupelvariabele en formule(t) een formule waarin
      tupelvariable t voorkomt.


•  Resultaat:
   –  Verzameling van alle tupels t waarvoor formule(t) waar is.


•  Formule bestaat uit:
   –  atomen + logische connectoren + quantificatoren




                                                                   2
voorbeeld

•  { t | EMPLOYEE(t) and t.SALARY > 50000 }




                                              3
formule

•  wordt uitgedrukt in predicatenlogica
•  maakt gebruik van
   –  variabelen
   –  constanten
   –  vergelijkingsoperatoren
                 =≠<>≥≤
   –  logische connectoren
                 ¬∧∨⇔⇒
   –  quantificatie van variabelen: ∃ (er bestaat), ∀ (voor alle)




                                                                    4
voorbeeld                  connector          constante


•  { t | EMPLOYEE(t) and t.SALARY > 50000 }



                                   vergelijkingsoperator

      variabele




                                                      5
quantoren

•  Existentiële quantor: ∃       (er bestaat)
•  Universele quantor: ∀         (voor alle)

•  (∃t)(formule(t))
   –  er bestaat een tupel t die aan de conditie voldoet
   –  bv. (∃t)(EMPLOYEE(t) and t.fname=‘John’)



•  (∀t)(formule(t))
   –  alle tuples in het universum voldoen aan de conditie



                                                             6
•  Q_1
   –  Geef naam en adres van alle werknemers die voor het
      'Research' departement werken


    { t.Fname, t.Lname, t.Address | EMPLOYEE(t)  
                                    AND (∃d) (DEPARTMENT(d)  
                                          AND d.Dname = 'Research’ 
                                          AND d.Number = t.Dno) } 


existentiële quantor: moet waar zijn voor tenminste één tuple

we vragen werknemers op waarvoor er een gerelateerd tupel in
de departement tabel bestaat met als naam ‘Research’
gebruik van universele quantoren

•  (∀x) (P(x))
   –  waar als P(x) waar is voor elke x van het universum
   –  bv. (∀x) (x.color = “Rood”)
   –  betekent dat alles wat bestaat rood is


•  logische implicatie
   –  (∀x) (Boot(x) ⇒ (x.color = “Rood”))
   –  (∀x) IF Boot(x) THEN (x.color = “Rood”)

   –  Als x een boot is, dan moet de kleur rood zijn




                                                            8
gebruik van universele quantoren

•  ⇒ is een logische implicatie
   –  a ⇒ b betekent dat als a waar is, ook b waar moet zijn
   –  a ⇒ b is hetzelfde als ¬a ∨ b


•  (∀x) (x.dnum=5 ⇒ F2)
•  (∀x) IF x.dnum=5 THEN F2
•  (∀x) (not (x.dnum=5) or F2)
   –  x.dnum=5: F2 moet waar zijn




                                                               9
gebruik van universele quantoren


•  (∀x) (Boot(x) ⇒ (x.color = ‘Rood’))

•  ⇒ is een logische implicatie
   –  als x een boot is, dan moet de kleur rood zijn


•  (∀x) (¬Boot(x) ∨ x.color = ‘Rood’)
   –  X is geen boot: conditie is waar
   –  X is een boot: x.color=‘Rood’ moet waar zijn




                                                       10
–  Q_3: Geef de namen van de werknemers die aan alle projecten
   werken


              { e.Lname, e.Fname |  
               EMPLOYEE(e)  
               AND  
               ( (∀x) ( NOT (PROJECT(x))  
                         OR  
                         ( (∃w) ( WORKS_ON(w) 
                                   AND w.Essn = e.Ssn 
                                   AND x.Pnumber = w.Pno ) ) ) ) } 


       In woorden: als x een project is, dan moet er een 
       overeenkomsUg tupel in de works_on tabel bestaan. 

                                                                      11
{ e.Lname, e.Fname |  
              EMPLOYEE(e)  
              AND  
              ( (∀x) ( NOT (PROJECT(x))  
                        OR  
                        ( (∃w) ( WORKS_ON(w) 
                                  AND w.Essn = e.Ssn 
                                  AND x.Pnumber = w.Pno ) ) ) ) } 


–  ( ∀ x ) ( F ) :
    •  moet voldaan zijn voor alle tuples in het universum die aan x kunnen
       worden toegekend
–  daarom:
    •  ( ∀ x ) ( not PROJECT ( x ) )
    •  alle tupels die niet tot PROJECT behoren uitsluiten van verdere
       selectievoorwaarde
–  verder moet dus gelden voor een employee e dat hij werkt op
   elk project dat niet uitgesloten werd


                                                                              12
•  Q_6
  –  Geef de namen van alle werknemers zonder personen ten
     laste:



     {e.Fname, e.Lname  |  
       EMPLOYEE(e) AND 
      ( (∀ d) ( NOT (DEPENDENT(d)) OR NOT (e.Ssn = d.Essn) ) ) }




                                                                    13

gebruik van quantoren in relationele calculus

  • 1.
    gebruik van quantorenin relationele calculus dr. Katrien Verbert Katrien.Verbert@cs.kuleuven.be
  • 2.
    tupel relationele calculus • Basisvorm: {t | formule(t)} –  t is een tupelvariabele en formule(t) een formule waarin tupelvariable t voorkomt. •  Resultaat: –  Verzameling van alle tupels t waarvoor formule(t) waar is. •  Formule bestaat uit: –  atomen + logische connectoren + quantificatoren 2
  • 3.
    voorbeeld •  { t| EMPLOYEE(t) and t.SALARY > 50000 } 3
  • 4.
    formule •  wordt uitgedruktin predicatenlogica •  maakt gebruik van –  variabelen –  constanten –  vergelijkingsoperatoren =≠<>≥≤ –  logische connectoren ¬∧∨⇔⇒ –  quantificatie van variabelen: ∃ (er bestaat), ∀ (voor alle) 4
  • 5.
    voorbeeld connector constante •  { t | EMPLOYEE(t) and t.SALARY > 50000 } vergelijkingsoperator variabele 5
  • 6.
    quantoren •  Existentiële quantor:∃ (er bestaat) •  Universele quantor: ∀ (voor alle) •  (∃t)(formule(t)) –  er bestaat een tupel t die aan de conditie voldoet –  bv. (∃t)(EMPLOYEE(t) and t.fname=‘John’) •  (∀t)(formule(t)) –  alle tuples in het universum voldoen aan de conditie 6
  • 7.
    •  Q_1 –  Geef naam en adres van alle werknemers die voor het 'Research' departement werken { t.Fname, t.Lname, t.Address | EMPLOYEE(t)                       AND (∃d) (DEPARTMENT(d)                                     AND d.Dname = 'Research’                                    AND d.Number = t.Dno) }  existentiële quantor: moet waar zijn voor tenminste één tuple we vragen werknemers op waarvoor er een gerelateerd tupel in de departement tabel bestaat met als naam ‘Research’
  • 8.
    gebruik van universelequantoren •  (∀x) (P(x)) –  waar als P(x) waar is voor elke x van het universum –  bv. (∀x) (x.color = “Rood”) –  betekent dat alles wat bestaat rood is •  logische implicatie –  (∀x) (Boot(x) ⇒ (x.color = “Rood”)) –  (∀x) IF Boot(x) THEN (x.color = “Rood”) –  Als x een boot is, dan moet de kleur rood zijn 8
  • 9.
    gebruik van universelequantoren •  ⇒ is een logische implicatie –  a ⇒ b betekent dat als a waar is, ook b waar moet zijn –  a ⇒ b is hetzelfde als ¬a ∨ b •  (∀x) (x.dnum=5 ⇒ F2) •  (∀x) IF x.dnum=5 THEN F2 •  (∀x) (not (x.dnum=5) or F2) –  x.dnum=5: F2 moet waar zijn 9
  • 10.
    gebruik van universelequantoren •  (∀x) (Boot(x) ⇒ (x.color = ‘Rood’)) •  ⇒ is een logische implicatie –  als x een boot is, dan moet de kleur rood zijn •  (∀x) (¬Boot(x) ∨ x.color = ‘Rood’) –  X is geen boot: conditie is waar –  X is een boot: x.color=‘Rood’ moet waar zijn 10
  • 11.
    –  Q_3: Geefde namen van de werknemers die aan alle projecten werken { e.Lname, e.Fname |    EMPLOYEE(e)    AND    ( (∀x) ( NOT (PROJECT(x))    OR              ( (∃w) ( WORKS_ON(w)                       AND w.Essn = e.Ssn                       AND x.Pnumber = w.Pno ) ) ) ) }   In woorden: als x een project is, dan moet er een   overeenkomsUg tupel in de works_on tabel bestaan.  11
  • 12.
    { e.Lname, e.Fname |    EMPLOYEE(e)    AND    ( (∀x) ( NOT (PROJECT(x))    OR              ( (∃w) ( WORKS_ON(w)                       AND w.Essn = e.Ssn                       AND x.Pnumber = w.Pno ) ) ) ) }  –  ( ∀ x ) ( F ) : •  moet voldaan zijn voor alle tuples in het universum die aan x kunnen worden toegekend –  daarom: •  ( ∀ x ) ( not PROJECT ( x ) ) •  alle tupels die niet tot PROJECT behoren uitsluiten van verdere selectievoorwaarde –  verder moet dus gelden voor een employee e dat hij werkt op elk project dat niet uitgesloten werd 12
  • 13.
    •  Q_6 –  Geef de namen van alle werknemers zonder personen ten laste: {e.Fname, e.Lname  |     EMPLOYEE(e) AND   ( (∀ d) ( NOT (DEPENDENT(d)) OR NOT (e.Ssn = d.Essn) ) ) } 13