This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
magik-demo:developer:generalization-howitworks [2013/07/23 12:05] alex [Generalization algorithm] |
— (current) | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Generalization algorithm ====== | ||
| - | After the elaboration MAGIK, will answer if the query given by the user, is complete or not with respect to schema constraints and TC-statements. \\ | ||
| - | If it is not complete, MAGIK will try to generate the generalized and specialized query. \\ | ||
| - | |||
| - | In this page it is explained how works the generalization algorithm | ||
| - | |||
| - | {{ :magik-demo:developer:generalization.png?nolink&700 |}} | ||
| - | |||
| - | ===== Phase 1: generation of the DLV program ===== | ||
| - | |||
| - | The first of the algorithm is to "translate" query and schema in a DLV program. This operation is done by the class [[magik-demo:developer:class:core:programgenerator|ProgramGenerator]] in **core** package | ||
| - | |||
| - | Translation depends on which kind of constraints are selected in the schema: | ||
| - | |||
| - | ==== 1. TC-QC plain ==== | ||
| - | |||
| - | If we have only TC-Statements and query the translation is straightforward. \\ | ||
| - | First it will be created the canonical database. After that, the tc-statement is translated following the | ||
| - | |||
| - | <code> | ||
| - | CANONICAL_DATABASE_OVER_THE_IDEAL_SCHEMA. | ||
| - | pupil(frozen_P_name,"1",frozen_P_code). | ||
| - | |||
| - | TC_STATEMENTS. | ||
| - | pupil_a(Name,Level,Code) :- pupil(Name,Level,Code). | ||
| - | |||
| - | TESTING_QUERY_OVER_THE_AVAILABLE_SCHEMA. | ||
| - | Q_a :- pupil_a(frozen_P_name,"1",frozen_P_code). | ||
| - | </code> | ||
| - | ==== 2. TC-QC under FDCs ==== | ||
| - | ==== 3. TC-QC under FKs ==== | ||
| - | ==== 4. TC-QC under FKs + FDCs ==== | ||
| - | |||
| - | <code> | ||
| - | CANONICAL_DATABASE_OVER_THE_IDEAL_SCHEMA. | ||
| - | val(frozen_P_name,frozen_P_name). val(frozen_P_code,frozen_P_code). val(frozen_constant_1,"1"). pupil(frozen_P_name,frozen_constant_1,frozen_P_code). | ||
| - | |||
| - | TC_STATEMENTS. | ||
| - | pupil_a(Name_0,Level_1,Code_2) :- pupil(Name_0,Level_1,Code_2),val(Name_0,Name),val(Level_1,Level),val(Code_2,Code). | ||
| - | |||
| - | TESTING_QUERY_OVER_THE_AVAILABLE_SCHEMA. | ||
| - | Q_a :- pupil_a(P_name_3,Constant_1_4,P_code_5),val(frozen_P_name,P_name_6),val(P_name_3,P_name_6),val(Constant_1_4,"1"),val(frozen_P_code,P_code_7),val(P_code_5,P_code_7). | ||
| - | |||
| - | val(X1,"a") v val(X1,"b") :- pupil(X0,X1,X2). | ||
| - | |||
| - | :- val(X,Y), val(X,Z), X != Y, X != Z, Y != Z. | ||
| - | |||
| - | FINITE_DOMAIN_CONSTRAINTS_RULES. | ||
| - | pupil(Y1,f_pupil_1(V_Y1),f_pupil_2(V_Y1)) :- learns(Y1,X2), not auxpupil(V_Y1),val(Y1,V_Y1). | ||
| - | val(f_pupil_1(V_Y1),f_pupil_1(V_Y1)) :- learns(Y1,X2), not auxpupil(V_Y1),val(Y1,V_Y1). | ||
| - | val(f_pupil_2(V_Y1),f_pupil_2(V_Y1)) :- learns(Y1,X2), not auxpupil(V_Y1),val(Y1,V_Y1). | ||
| - | auxpupil(V_Y1):-pupil(Y1,Z1,Z2),original(Z1),original(Z2),val(Y1,V_Y1). | ||
| - | |||
| - | GROUND_TERMS_OF_DEPTH_ZERO. | ||
| - | original(frozen_P_name). original(1). original(frozen_P_code). | ||
| - | </code> | ||
| - | |||
| - | <note tip>For more information about DLV please visit the [[http://www.dlvsystem.com/html/DLV_User_Manual.html|User Manual]]</note> | ||