V každém "deklarativním" jazyku je chybu težší odhalit, protože odvozovací pravidla generují vlastní jazyk a vyřešit úlohu, zda generovaný jazyk, odpovídá konkrétnímu jazyku a zamýšlenému účelu, je dosti náročné
To je samozřejmě opět úplný nesmysl.
To říkejte uživatelům SQL :-)))
Můžu se zeptat, jak předchozí blábol souvísí se SQL? Co jsou v SQL třeba ten generovaný a konkrétní jazyk?
Konkrétní jazyk jsou všechny možné žádoucí výsledky SQL dotazu, tedy to, co chcete a můžete z databáze vybrat, většinou to ani přesně neznáte, ale můžete to popsat nějakou gramatikou.
Generovaný jazyk je dán pravidly v podmínkách WHERE, JOIN atp. v daném příkazu SELECT a pravidly danými kompozicemi příkazů SELECT, konkrétní příkaz SELECT byste mohl převést na gramatiku, která by generovala nějaký jazyk, a platilo by o ní, že každý výsledek tohoto konkrétního dotazu, takto zkonstruovaná gramatika přijme.
No a vaším úkolem v podstatě je, rozhodnout, zda oba jazyky jsou stejné. A to vůbec není triviální záležitost.
A tak nějak to v podstatě i děláte, při konstrukci konkrétního SELECTu si v hlavě vytváříte gramatiku omezujících pravidel (podmínek), která z dat v db vybere požadovaná data. Je-li dotaz složitější, neustále probíráte zapsané podmínky a snažíte se v mysli vygenerovat možný výsledek, abyste se dobral k tomu, jaké pravidlo do příkazu přidat,odebrat či změnit a jak. Realitu modelujete pomocí pravidel, nikoli příkazů, které by měnily a zachovávaly nějaký stav výpočtu, pracujete tedy s gramatikou, aniž byste si to třeba uvědomoval.