540 likes | 699 Views
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
E N D
Formální sémantika SQL Aleksey Rembish Tatsiana Maksimenka NDBI001 - Dotazovací jazyky I
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
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
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: {dOddělení: || {eZaměstnanec: ||e.oddělení_id = d.id||F }d.lokace = e.bydliště AVG(d.počet_zaměstnanců) {dOddělení: || {eZamě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
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 v1R1, …, vnRnR1,…, Rnjsou relace; • P(v1, ..., vn) je formule; • ||a||α jeunární operátor interpretace, α{T, F}. NDBI001 - Dotazovací jazyky I
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
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
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, PQ, PQ 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
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
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
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á” vS a druhá “červená” vT, jelikož je použit operátor “”. • Ten operátor očividně zjednodušuje převod SQL dotazů. NDBI001 - Dotazovací jazyky I
Význam E3VPC výrazu E3VPC výraz:{v1R1, ..., vnRn: 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
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 = {xS: 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
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
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
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
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
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
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
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
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
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
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
Pokračování … • Překlad SQL-dotazů na E3VPC; • Ekvivalence dotazů SQL. NDBI001 - Dotazovací jazyky I
Překlad SQL E3VCP NDBI001 - Dotazovací jazyky I
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
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
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
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
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
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
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
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
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
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 {eemp:|| e.deptId = d.id||F}d.location = e.residence NDBI001 - Dotazovací jazyky I
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
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
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
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
Ekvivalence SQL dotazů NDBI001 - Dotazovací jazyky I
Ú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
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: {xS: P(x)} Q(x), {xS: P(x)} Q(x) NDBI001 - Dotazovací jazyky I
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
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
Lemma 2 1)||{xS: ||P(x)||} Q(x)|| (xS): ||P(x)|| ||Q(x)|| 2) ||{xS: ||P(x)||} Q(x)|| (xS): ||¬P(x)||¬ v ||Q(x)||, Kde P(x), Q(x) jsou formule, Sje relace, , {T,F} NDBI001 - Dotazovací jazyky I
Množina kritické ekvivalence TR<Q1> = {x R: ||P(x)||F} TR<Q2> = {x R: ||P(x)||T} NDBI001 - Dotazovací jazyky I
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
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
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
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