1 / 54

Formální sémantika SQL

Formální sémantika SQL. Aleksey Rembish Tatsiana Maksimenka. Obsah. Formalizace SQL: tříhodnotový kalkul E3VPC; Formální definice gramatiky jazyka SQL; Překlad SQL-dotazů na E3VPC; Ekvivalence dotazů SQL. E3VPC. = Extended 3-valued tuple predicate calculus

upton
Download Presentation

Formální sémantika SQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Formální sémantika SQL Aleksey Rembish Tatsiana Maksimenka NDBI001 - Dotazovací jazyky I

  2. Obsah • Formalizace SQL: tříhodnotový kalkul E3VPC; • Formální definice gramatiky jazyka SQL; • Překlad SQL-dotazů na E3VPC; • Ekvivalence dotazů SQL. NDBI001 - Dotazovací jazyky I

  3. E3VPC = Extended 3-valued tuplepredicate calculus • rozšíření 2-hodnotového n-ticového kalkulu (2VPC); • jednoduchá struktura; • snadnější manipulace s dotazy (nap. optimalizace); • schopnost vyjádřit všechno, co lze vyjádřit v SQL. NDBI001 - Dotazovací jazyky I

  4. Schéma: Oddělení (id, počet_zaměstnanců, lokace, manažer) Zaměstnanec (id, oddělení_id, bydliště) SQL: SELECT d.manažer FROMOddělení d WHERE d.lokace = ALL SELECT e.bydliště FROMZaměstnanec e WHERE e.oddělení_id = d.id GROUP BY d.manažer HAVING AVG(d.počet_zaměstnanců) > 500 E3VPC: {dOddělení: || {eZaměstnanec: ||e.oddělení_id = d.id||F }d.lokace = e.bydliště  AVG(d.počet_zaměstnanců) {dOddělení: || {eZaměstnanec: ||e.oddělení_id = d.id||F }d.lokace = e.bydliště  d.manažer  d.manažer ||F}> 500 ||F} E3VPC – Přiklad NDBI001 - Dotazovací jazyky I

  5. E3VPC – Výrazy E3VPC výraz je { t(v1, ..., vn): || P(v1, ..., vn) ||α }, kde • v1, ..., vn jsou n-ticové proměnné; • t(v1, ..., vn) je cílový seznam výrazu ve tvaru v1R1, …, vnRnR1,…, Rnjsou relace; • P(v1, ..., vn) je formule; • ||a||α jeunární operátor interpretace, α{T, F}. NDBI001 - Dotazovací jazyky I

  6. E3VPC – Operátory • =, , <,  jsou obvyklé operátory s klasickým významem (pokud jeden z operandů je null, výsledek je unknown); •  je porovnávání s hodnotou null (vypadá jak operátor “=“, kromě případu, kdy oba operandy mají hodnotu null, pak výsledek je true; • a je unární operátor vnější vazby; • ||a||α jeunární operátor interpretace,α{T, F}. NDBI001 - Dotazovací jazyky I

  7. E3VPC – Termy • Konstanta je term; • Jestli v je proměnná aAje atribut, potom v.A a v.A jsou taky termy; • Jestli S je E3VPC-výraz, A je atribut a f je agregační funkce, tak f(A)S je taky term. f  {COUNT, AVG, SUM, MIN, MAX, COUNTD, AVGD, SUMD} COUNTD, AVGD a SUMD jsou funkce, které vybírají jenom unikátníatributy před vyhodnocením (DISTINCT v SQL) NDBI001 - Dotazovací jazyky I

  8. E3VPC – Formule • Pokud t1, t2 jsou termy,  je operátor porovnání, tak t1 t2 je atomická formule; • T (true), F (false) a U (unknown) jsou atomické formule; • Jestli P je atomická formule, potom ||P||α je taky atomická formule; • Kdy P a Q jsou atomické formule, tak P, PQ, PQ jsou taky; • Jestli S je výraz a Q je formule, tak S Q a S Q jsou taky formule; • Žádné další výrazy nejsou E3VPC-formule. NDBI001 - Dotazovací jazyky I

  9. Interpretace E3VPC formulí • Výsledkem vyhodnocení formule Pmuže byt jedna ze třech hodnot: true, false nebo unknown; • Výsledkem vyhodnocení formule ||P||αmuže byt true nebo false: • ||P||T interpretuje unknown jako true(pozitivní interpretace); • ||P||F interpretuje unknown jako false(negativní interpretace). NDBI001 - Dotazovací jazyky I

  10. Interpretace formálně • NechťP(x) je E3VPC-formule a Q(x) je 2VPC-formule. • Q(x) je pozitivníinterpretovaný 2-hodnotový ekvivalent P(x), značíme ||P||T, jestliže pro každé xplatí: • P(x)  T Q(x)  T; • P(x)  F Q(x)  F; • P(x)  U Q(x) T. • Q(x) je negativní interpretovaný 2-hodnotový ekvivalent P(x), značíme ||P||F, jestliže pro každé xplatí: • P(x)  T Q(x)  T; • P(x)  F Q(x)  F; • P(x)  U Q(x) F. NDBI001 - Dotazovací jazyky I

  11. Operátor vnější vazby • Operátor vnější vazby “” mění rozsah platnosti proměnné. • v  se odkazuje na proměnnou na nejbližší vyšší úrovni. • Přiklad: máme výraz { v S: { v T: || v.a = v.b ||T } } Ve výrazu “v.a = v.b ” první “modrá” vS a druhá “červená” vT, jelikož je použit operátor “”. • Ten operátor očividně zjednodušuje převod SQL dotazů. NDBI001 - Dotazovací jazyky I

  12. Význam E3VPC výrazu E3VPC výraz:{v1R1, ..., vnRn: Q(v1, ..., vn)} • Výsledkem vyhodnocení výrazu bude množina n-tic, vybraných z relací R1, ..., Rn, které po dosazení za příslušné proměnné v1, ..., vnsplňují formuli Q. • Qmusí být formule 2VPC. • Předpokládá se, že n-tice v relacích jsou navzájem různé. • Vrací celé n-tice, nelze vrátit jejich části. NDBI001 - Dotazovací jazyky I

  13. Kvantifikace U = {x  S: P(x)} Q(x) (x) x S P(x) Q(x) E = {x S: P(x)} Q(x) (x) x S P(x) Q(x) označíme-liM = {xS: P(x)}, pak platí: • U true (x M) Q(x) true • U false (x M) Q(x) false • U unknown jinak • E true (x M) Q(x) true • E false (x M) Q(x) false • E unknown jinak NDBI001 - Dotazovací jazyky I

  14. Gramatika SQL • Syntaxí řízený překlad SQL dotazu na výrazE3VPC. • Potřebujeme tedy popsat syntax SQL pomocígramatiky. • Pro přehlednost zjednodušíme popis SQL výrazů gramatikou. NDBI001 - Dotazovací jazyky I

  15. Zjednodušení • Výrazy „boolean expression of“ nebo „list of“ jsou zkratkou pro množinu zřejmých pravidel. • Aritmetické výrazy s atributy nejsou uvažovány. • Používání aliasů relací je povinné. • Do některých pravidel jsou zavedeny další neterminály, případně jsou některá pravidla rozdělena do více menších. NDBI001 - Dotazovací jazyky I

  16. Gramatika SQL (pod)dotazu • vrací n-tici:<QUERY> ::= SELECT [ALL | DISTINCT] <SELECT LIST><FROM CLAUSE> [<WHERE CLAUSE>][<GROUP BY CLAUSE>] [<HAVING CLAUSE>] • vrací hodnotu nebo sloupec:<SUBQ> ::= SELECT [ALL | DISTINCT] <COL OR VAL><FROM CLAUSE> [<WHERE CLAUSE>][<GROUP BY CLAUSE>] [<HAVING CLAUSE>] • vrací výsledek agregační funkce:<AF SUBQ> ::= SELECT [ALL | DISTINCT] <FUNCTION><FROM CLAUSE> [<WHERE CLAUSE>][<GROUP BY CLAUSE>] [<HAVING CLAUSE>] NDBI001 - Dotazovací jazyky I

  17. Pravidlo <SELECT LIST> <SELECT LIST> ::= “list of <SELECT ELEMENT>” <SELECT ELEMENT> ::= <COL OR VAL> | <FUNCTION> <COL OR VAL> ::= <alias>.<column> | <literal> <FUNCTION> ::= <COUNT> | <AGGR> <COUNT> ::= <COUNT DISTINCT> | COUNT(*) <COUNT DISTINCT>::= COUNT (DISTINCT <alias>.<column>) <AGGR> ::= <AGGR DISTINCT> | <AGGR ALL> <AGGR DISTINCT> ::= <AGGR NAME>(DISTINCT <alias>.<column>) <AGGR ALL> ::= <AGGR NAME>([ALL]<alias>.<column>) <AGGR NAME> ::= AVG | MAX | MIN | SUM • seznam hodnot, sloupců nebo výsledků agregačních funkcí • nelze vnořit SELECT NDBI001 - Dotazovací jazyky I

  18. Pravidla <*CLAUSE> <FROM CLAUSE> ::= FROM “list of <TABLE REFERENCE>” <TABLE REFERENCE> ::= <table> <alias> <WHERE CLAUSE> ::= WHERE<WHERE CONDITION> <HAVING CLAUSE> ::= HAVING<HAVING CONDITION> <GROUP BY CLAUSE> ::= GROUP BY “list of <alias>.<column>” • do klauzule FROM nelze vnořit SELECT • SELECT lze vnořit jen do klauzulí WHERE, HAVING za [NOT] IN, EXISTS, operátor [SOME | ALL] NDBI001 - Dotazovací jazyky I

  19. Pravidlo <WHERE CONDITION> Podmínka WHERE je seznam jednoduchých a/nebo složených predikátů: <WHERE CONDITION>::=“boolean expressionof<WHEREPRED>” <WHERE PRED>::=<SIMPLE PRED> | <COMPLEX PRED> <SIMPLE PRED> ::=<COL OR VAL><comp op><COL OR VAL> <COMPLEX PRED>::= <SOME QUANTIFIED PRED> | <SOME QUANTIFIED AFPRED> | <ALL QUANTIFIED PRED> | <ALL QUANTIFIED AFPRED> | <COMPLEX IN PRED> | <COMPLEX IN AFPRED> | <COMPLEX NOT IN PRED> | <COMPLEX NOT IN AFPRED> | <COMPLEX COMP PRED> | <COMPLEX COMP AFPRED> | <EXISTS PRED> NDBI001 - Dotazovací jazyky I

  20. Pravidla <*PRED> a <*AF PRED> Bez agregační funkcí v poddotazu: <SOME Q. PRED>::=<COL OR VAL><comp op>SOME<SUBQ> <ALL Q. PRED>::=<COL OR VAL><comp op>ALL<SUBQ> <COMPLEX IN PRED>::=<COL OR VAL>IN<SUBQ> <COMPLEX NOT IN PRED>::=<COL OR VAL>NOT IN<SUBQ> <COMPLEX COMP PRED>::=<COL OR VAL><comp op><SUBQ> Analogicky s agregační funkcí v poddotazu: <SOME Q. AFPRED>::=<COL OR VAL><comp op>SOME<AFSUBQ> <ALL Q. AFPRED>::=<COL OR VAL><comp op>ALL<AFSUBQ> <COMPLEX IN AFPRED>::=<COL OR VAL>IN<AFSUBQ> <COMPLEX NOT IN AFPRED>::=<COL OR VAL>NOT IN<AFSUBQ> <COMPLEX COMP AFPRED>::=<COL OR VAL><comp op><AFSUBQ> <EXISTS PRED>::=EXISTS <SUBQ> NDBI001 - Dotazovací jazyky I

  21. Pravidlo <HAVING CONDITION> Podmínka HAVING je seznam jednoduchých resp. složených predikátů, porovnání výsledků agregačních funkce s hodnotou nebo jinou agregační funkcí: <HAVING CONDITION>::=“boolean expressionof<HAVING PRED>” <HAVING PRED>::= <H SIMPLE PRED> | <H COMPLEX PRED>| <H AF COLUMN PRED> | <H AF FUNCTION PRED> | <H AF COMPLEX PRED> <HAVING SIMPLE PRED>::=<SIMPLE PRED> <HAVING COMPLEX PRED>::=<COMPLEX PRED> <HAVING AF COLUMN PRED>::=<FUNCTION><comp op><COL OR VAL> <HAVING AF FUNCTION PRED>::=<FUNCTION><comp op><FUNCTION> NDBI001 - Dotazovací jazyky I

  22. Pravidlo <H AF COMPEX PRED> <H AF COMPLEX PRED>::= <AF SOME Q. PRED>|<AF SOME Q.AF PRED> | <AF ALL Q. PRED>|<AF ALL Q. AFPRED> | <AF COMPLEX IN PRED> | <AF COMPLEX IN AFPRED> | <AF COMPLEX NOT IN PRED> | <AF COMPLEX IN AFPRED> | <AF COMPLEX COMP PRED> | <AF COMPLEX COMP AFPRED> NDBI001 - Dotazovací jazyky I

  23. Pravidla <AF * PRED> a <AF * AF PRED> Bez agregační funkcí v poddotazu: <AF SOME Q. PRED>::=<FUNCTION><comp op>SOME<SUBQ> <AF ALL Q. PRED>::=<FUNCTION><comp op>ALL<SUBQ> <AF COMPLEX IN PRED>::=<FUNCTION>IN<SUBQ> <AF COMPLEX NOT IN PRED>::=<FUNCTION>NOT IN<SUBQ> <AF COMPLEX COMP PRED>::=<FUNCTION><comp op><SUBQ> Analogicky s agregační funkcí v poddotazu: <AF SOME Q. AFPRED>::=<FUNCTION><comp op>SOME<AFSUBQ> <AF ALL Q. AFPRED>::=<FUNCTION><comp op>ALL<AFSUBQ> <AF COMPLEX IN AFPRED>::=<FUNCTION>IN<AFSUBQ> <AF COMPLEX NOT IN AFPRED>::=<FUNCTION>NOT IN<AFSUBQ> <AF COMPLEX COMP AFPRED>::=<FUNCTION><comp op><AFSUBQ> <EXISTS PRED>::=EXISTS <SUBQ> NDBI001 - Dotazovací jazyky I

  24. Pokračování … • Překlad SQL-dotazů na E3VPC; • Ekvivalence dotazů SQL. NDBI001 - Dotazovací jazyky I

  25. Překlad SQL  E3VCP NDBI001 - Dotazovací jazyky I

  26. Pravidla překladu • Výsledek překladu symbolu wje řetezec symbolů TR<w>. • S některými pravidly gramatiky SQL jsou spojena překladová pravidla. • Překladové pravidlo pro symbol w definuje TR<w>. • Některá syntaktická pravidla mohou mít více pravidel. Rozlišíme je indexem: TRi. • Použití závisí na kontextu. NDBI001 - Dotazovací jazyky I

  27. Překlad terminálů a neterminálů • Je-li w terminál, pak TR<w>::= w. • Význam přeložených SQL terminálů v E3VPC: <alias> proměnná <column> atribut <table> relace <literal> konstanta <comp op> operátor porovnání NDBI001 - Dotazovací jazyky I

  28. Implicitní překlad • Bud‘ LHS::=RHS syntaktické pravidlo, w1,…,wk neterminály na jeho pravé straně v pořadí zleva doprava. • Necht‘ neexistuje pravidlo překladu pro LHS::=RHS. • Pak TR<LHS>::= TR<w1>… TR<wk> Syntaktické pravidlo: <WHERE CLAUSE>::= WHERE<WHERE CONDITION> Překlad do E3VPC: TR<WHERE CLAUSE>::=TR<WHERE CONDITION> NDBI001 - Dotazovací jazyky I

  29. Pravidla popsaná metajazykem TR1<FUNCTION>::= odpovídající jméno agregační funkce a v závorkách její parametr TR2<FUNCTION>::= hodnota odpovídající funkce pro prázdnou množinu TR“boolean expression of <X>“::= odpovídající výraz v E3VPC, v němž jsou predikáty nahrazeny svými překlady TR“list of<X>“::= seznam přeložených neterminálů oddělených čárkami TR<COL OR VAL>::= konstanta nebo proměnná.atribut NDBI001 - Dotazovací jazyky I

  30. TR<QUERY> Syntaktické pravidlo: <QUERY> ::= SELECT [ALL | DISTINCT] <SELECT LIST><FROM CLAUSE> [<WHERE CLAUSE>][<GROUP BY CLAUSE>][<HAVING CLAUSE>] pravidlo překladu: TR<QUERY> ::= {TR<FROM CLAUSE>: ||TR<WHERE CLAUSE>TR<HAVING CLAUSE>||F} • negativní interpretace (false-interpreted) • <GROUP BY CLAUSE> se projeví až při překladu <HAVING CLAUSE> • a při překladu agregačních funkcí • <SELECT LIST> není použit – jedná se o vnější SELECT NDBI001 - Dotazovací jazyky I

  31. TR<* CLAUSE> <FROM CLAUSE> ::= FROM “list of <TABLE REFERENCE>” <TABLE REFERENCE> ::= <table> <alias> <WHERE CLAUSE> ::= WHERE <WHERE CONDITION> <HAVING CLAUSE> ::= HAVING <HAVING CONDITION> <GROUP BY CLAUSE> ::= GROUP BY “list of <alias>.<column>” pravidla překladu spojená s těmito syntaktickými pravidly: TR<TABLE REFERENCE> ::= <alias> <table> TR<GROUP BY CLAUSE> ::= <alias>.<column> <alias>.<column> [ <alias>.<column>  <alias>.<column>] ... zbývá definovat: TR<WHERE CONDITION>, TR<HAVING CONDITION> NDBI001 - Dotazovací jazyky I

  32. TR<* CONDITION> implicitní překlad a překlad popsaný metajazykem: <WHERE CONDITION>::=“boolean expression of <WHERE PRED>” <WHERE PRED>::=<SIMPLE PRED> | <COMPLEX PRED> <SIMPLE PRED>::=<COL OR VAL><comp op><COL OR VAL> <COMPLEX PRED>::= ... | <ALL QUANTIFIED PRED> | ... <HAVING CONDITION>::=“boolean expression of <HAVING PRED>” <HAVING PRED>::= ... | <H AF COLUMN PRED> | ... zbývá tedy přeložit: <ALL QUANTIFIED PRED>, <H AF COLUMN PRED>, ... NDBI001 - Dotazovací jazyky I

  33. TR<ALL QUANTIFIED PRED>, ... <ALL QUANTIFIED PRED>::=<COL OR VAL><comp op>ALL<SUBQ TR1<SUBQ><COL OR VAL> <comp op>TR2<SUBQ> <SOME QUANTIFIED PRED>::=<COL OR VAL><comp op>SOME<SUBQ> TR1<SUBQ><COL OR VAL> <comp op> TR2<SUBQ> <COMPLEX IN PRED>::=<COL OR VAL>IN<SUBQ> TR1<SUBQ><COL OR VAL> = TR2<SUBQ> <COMPLEX NOT IN PRED>::=<COL OR VAL>NOT IN<SUBQ> TR1<SUBQ><COL OR VAL> TR2<SUBQ> <EXISTS PRED>::=EXISTS <SUBQ> TR1<SUBQ> … NDBI001 - Dotazovací jazyky I

  34. TR<SUBQ> <SUBQ> ::= SELECT [ALL | DISTINCT] <COL OR VAL><FROM CLAUSE> [<WHERE CLAUSE>][<GROUP BY CLAUSE>][<HAVING CLAUSE>] výsledek poddotazu může být množina hodnot: TR1<SUBQ> = {TR<FROM CLAUSE>: ||TR<WHERE CLAUSE> TR<HAVING CLAUSE>||F} výsledek poddotazumusí být jenom jedna hodnota: TR2<SUBQ> = <COL OR VAL> NDBI001 - Dotazovací jazyky I

  35. Příklad Syntaktické pravidlo: <ALL QUANTIFIED PRED>::=<COL OR VAL><comp op>ALL<SUBQ> překlad: TR1<SUBQ><COL OR VAL><comp op> TR2<SUBQ> WHERE d.location = ALL SELECTe.residence FROM emp e WHERE e.deptId = d.id {eemp:|| e.deptId = d.id||F}d.location = e.residence NDBI001 - Dotazovací jazyky I

  36. TR<H AF COLUMN PRED>, ... <H AF COLUMN PRED>::=<FUNCTION><comp op><COL OR VAL> TR1<FUNCTION> {TR<FROM CLAUSE>:||TR<WHERE CLAUSE> TR<GROUP BY CLAUSE>||F} <comp op> <COL OR VAL> <H AF FUNCTION PRED>::=<FUNCTION><comp op><FUNCTION> TR1<FUNCTION> {TR<FROM CLAUSE>:||TR<WHERE CLAUSE> TR<GROUP BY CLAUSE>||F} <comp op> TR1<FUNCTION> {TR<FROM CLAUSE>:||TR<WHERE CLAUSE> TR<GROUP BY CLAUSE>||F} <H SIMPLE PRED>::=<SIMPLE PRED> {TR<FROM CLAUSE>:||TR<WHERE CLAUSE> TR<GROUP BY CLAUSE>||F} TR<SIMPLE PRED> … NDBI001 - Dotazovací jazyky I

  37. Příklad Syntaktické pravidlo: <H AF COLUMN PRED>::=<FUNCTION><comp op><COL OR VAL> překlad: TR1<FUNCTION> {TR<FROM CLAUSE>: || TR<WHERE CLAUSE>  TR<GROUP BY CLAUSE>||F} <comp op> <COL OR VAL> HAVING AVG(d.nofEmp) > 500 AVG(d.nofEmp) {TR<FROM CLAUSE>: ||TR<WHERE CLAUSE>  TR<GROUP BY CLAUSE>||F} > 500 ještě je třeba použít dříve získaných výsledků… NDBI001 - Dotazovací jazyky I

  38. Překlady získané dříve (na vyšší úrovni): TR<FROM CLAUSE>::=d  dept TR<WHERE CLAUSE>::={e  emp: ||e.deptId = d.id||F} d.location = e.residence TR<GROUP BY CLAUSE>::= d.manager  d.manager • SQL: SELECT d.manager FROM dept d WHERE d.location = ALL SELECT e.residence FROM emp e WHERE e.deptId = d.id GROUP BY d.manager HAVING AVG(d.nofEmp) > 500 • Celkový překlad neterminálu <H AF COLUMN PRED>: AVG(d.nofEmp){d  dept: || ({e  emp: || e.deptId = d.id ||F} d.location = e.residence) d.manager  d.manager||F} > 500 NDBI001 - Dotazovací jazyky I

  39. Dokončení příkladu SQL:schéma: SELECT d.manager dept(id,nofEmp,location,manager) FROM dept demp(id,deptId, residence) WHERE d.location = ALL SELECT e.residence FROM emp e WHERE e.deptId = d.id GROUP BY d.manager HAVING AVG(d.nofEmp) > 500 E3VPC: {d  dept: ||({e  emp: ||e.deptId = d.id||F} d.location = e.residence)  AVG(d.nofEmp) {d  dept: ||( {e  emp: || e.deptId = d.id||F} d.location = e.residence) d.manager  d.manager||F} > 500 ||F} NDBI001 - Dotazovací jazyky I

  40. Ekvivalence SQL dotazů NDBI001 - Dotazovací jazyky I

  41. Úkol • Chceme zjístit, zda dva dané SQL výrazy jsou ekvivalentní • Uděláme to pomocí E3VPC 1) Oba SQL dotazy přeložíme do E3VPC 2) Porovnáme a zjístíme ekvivalenci E3VPC výrazů. NDBI001 - Dotazovací jazyky I

  42. Kanonická forma E3VPC výrazu Definice: řekneme, že E3VPC výraz je kanonický, pokud: • Interpretační operátor je aplikován na každou atomickou formuli • Interpretační operátor není aplikován na jinou než atomickou formuli • Neobsahuje zkrácené kvantifikované výrazy: {xS: P(x)} Q(x), {xS: P(x)} Q(x) NDBI001 - Dotazovací jazyky I

  43. Pozorování • S kanonickým výrazem lze pracovat ve 2VPC. • Ve 2VPC umíme zjistit ekvivalenci dvou výrazů. • Každý E3VPC výraz má svůj kanonický tvar, který dostaneme násobnou aplikací následujícího lemmatu. NDBI001 - Dotazovací jazyky I

  44. Lemma 1 1) ||P(x) v Q(x)||  ||P(x)|| v ||Q(x)|| 2) ||P(x) Q(x)|| ||P(x)|| ||Q(x)|| 3) ¬||P(x)||  ||¬P(x)||¬ 4) || ||P(x)|| ||  ||P(x)|| 5) ||(x  S): P(x)||  (x  S):||P(x)|| 6) ||(x  S): P(x)||  (x  S):||P(x)||, kde P(x), Q(x) jsou formule, S je relace, ,  {T,F} NDBI001 - Dotazovací jazyky I

  45. Lemma 2 1)||{xS: ||P(x)||} Q(x)||  (xS): ||P(x)|| ||Q(x)|| 2) ||{xS: ||P(x)||} Q(x)||  (xS): ||¬P(x)||¬ v ||Q(x)||, Kde P(x), Q(x) jsou formule, Sje relace, , {T,F} NDBI001 - Dotazovací jazyky I

  46. Množina kritické ekvivalence TR<Q1> = {x R: ||P(x)||F} TR<Q2> = {x  R: ||P(x)||T} NDBI001 - Dotazovací jazyky I

  47. Jednoduché dotazy Jednoduchý dotaz – bez negace a kvantifikace Pravidlo 3 TR<Q1> = {x  R: ||P(x)||F} TR<Q1> = {x  R: ¬||P(x)||F}  {x  R: ¬||P(x)||T} Pravidlo 4 TR<Q2> = {x  R: ||P(x)||F} TR<Q2> = {x  R: || ||P(x)||T ||F}  {x  R: ||P(x)||T} NDBI001 - Dotazovací jazyky I

  48. Univerzální kvantifikátor • ||¬ {y  S: ||Q(x,y)  P(y)||}|| • ||¬ {y  S: ||Q(x,y)||}P(y) || • ||¬ {y  S: ||P(x,y)||}P(y) || •  {y  S: ||Q(x,y)||} ¬P(y)|| •  {y  S: ||P(y)||} ¬Q(x,y)|| Kde  = False a  závisí na obecné strutkuře výrazu obsahující predikat NDBI001 - Dotazovací jazyky I

  49. Univerzální kvantifikátor II Kanonické E3VPC formy: 1’) y  S: || ¬Q(x,y)||¬ v ||¬P(y)||¬ 2’) y  S: || ¬Q(x,y)||¬ v ||¬P(y)|| 3’) y  S: || ¬Q(x,y)|| v ||¬P(y)||¬ 4’) = 2’) 5’) = 3’) NDBI001 - Dotazovací jazyky I

  50. Existenční kvantifikátor 1) || {y  S: ||Q(x,y)P(y)||}|| 2) || {y  S: ||Q(x,y)||}P(y)|| 3) || {y  S: ||P(y)||}Q(x,y)|| 4) ||¬ {y  S: ||Q(x,y)||}¬P(y)|| 5) ||¬ {y  S: ||P(y)||}¬Q(x,y)|| NDBI001 - Dotazovací jazyky I

More Related