Patente:



/*    KLONE.PL       */

/* per caricare l'ambiente KLONE */

:- consult('/home2/httpd/html/research/HYPERPROLOG/esempi/klone/klone').
/*  Ex Patente       Sett  97    */

/* Esempio di uso del KLONE  */


/* Definizione di concetti   */

doc_identita :-

 /* Definisce i concetti generici utilizzati */
    assume(generic_concept(thing)),
    assume(generic_concept(doc_identita)),
    assume(generic_concept(testo)),
    assume(generic_concept(data)),

 /* Tutti i concetti sono sussunti da thing */
    assume(has_super_concept(doc_identita,thing)),
    assume(has_super_concept(testo,thing)),
    assume(has_super_concept(data,thing)),

 /* Definizione dei ruoli */
    add(doc_identita,cognome,generic_role),
    add(doc_identita,nome,generic_role),
    add(doc_identita,data_nascita,generic_role),
    add(doc_identita,luogo_nascita,generic_role),
    add(doc_identita,residenza,generic_role),
    add(doc_identita,via,generic_role),

 /* Il filler del ruolo deve appartenere ad un certo ruolo generico value/restriction     */
    assume(has_vr(cognome,doc_identita,testo)),
    assume(has_vr(nome,doc_identita,testo)),
    assume(has_vr(data_nascita,doc_identita,data)),
    assume(has_vr(luogo_nascita,doc_identita,testo)),
    assume(has_vr(residenza,doc_identita,testo)),
    assume(has_vr(via,doc_identita,testo)),

 /* Fissa il numero di possibili fillers dei ruoli */
    assume(has_number(cognome,doc_identita,[1,1])),
    assume(has_number(nome,doc_identita,[1,1])),
    assume(has_number(data_nascita,doc_identita,[1,1])),
    assume(has_number(luogo_nascita,doc_identita,[1,1])),
    assume(has_number(residenza,doc_identita,[1,1])),
    assume(has_number(via,doc_identita,[1,1])),

 /* La modalita' di body e' obbligatoria (opt e' il valore di default) */
    assume(has_modality(nome,doc_identita,obl)),
    assume(has_modality(cognome,doc_identita,obl)),
    assume(has_modality(data_nascita,doc_identita,obl)),
    assume(has_modality(luogo_nascita,doc_identita,obl)),
    assume(has_modality(residenza,doc_identita,obl)),
    assume(has_modality(via,doc_identita,obl)).


patente :-

 /* Definisce i concetti generici utilizzati */
    assume(generic_concept(patente)),
   
 /* Ha come super-concetto doc_identita */
    assume(has_super_concept(patente,doc_identita)),

 /* Definizione dei ruoli */
    add(patente,prefetto_di,generic_role),
    add(patente,data_rilascio,generic_role),
    add(patente,data_scadenza,generic_role),
    add(patente,numero,generic_role),
    add(patente,tipo,generic_role),

 /* Il filler del ruolo deve appartenere ad un certo ruolo generico value/restriction     */
    assume(has_vr(prefetto_di,patente,testo)),
    assume(has_vr(data_rilascio,patente,data)),
    assume(has_vr(data_scadenza,patente,data)),
    assume(has_vr(numero,patente,testo)),
    assume(has_vr(tipo,patente,testo)),

 /* Fissa il numero di possibili fillers dei ruoli */
    assume(has_number(prefetto_di,patente,[1,1])),
    assume(has_number(data_rilascio,patente,[1,1])),
    assume(has_number(data_scadenza,patente,[1,1])),
    assume(has_number(numero,patente,[1,1])),
    assume(has_number(tipo,patente,[1,1])),

 /* La modalita' di body e' obbligatoria (opt e' il valore di default) */

    assume(has_modality(prefetto_di,patente,obl)),
    assume(has_modality(data_rilascio,patente,obl)),
    assume(has_modality(data_scadenza,patente,obl)),
    assume(has_modality(numero,patente,obl)),
    assume(has_modality(tipo,patente,obl)).


inizializza :-
    generici,
    individuali.


generici :-
    clear_net,
    doc_identita,
    stampa(doc_identita),
    patente,
    stampa(patente).


individuali :-

   assume(individual_concept(25/10/1975)),
   assume(individuates(25/10/1975,data)),

   assume(individual_concept(15/11/1993)),
   assume(individuates(15/11/1993,data)),

   assume(individual_concept(15/11/2003)),
   assume(individuates(15/11/2003,data)),

   assume(individual_concept(mario)),
   assume(individuates(mario,testo)),

   assume(individual_concept(rossi)),
   assume(individuates(rossi,testo)),

   assume(individual_concept(pavia)),
   assume(individuates(pavia,testo)),

   assume(individual_concept(parma)),
   assume(individuates(parma,testo)),

   assume(individual_concept(aj8b44012i4p3r)),
   assume(individuates(aj8b44012i4p3r,testo)),

   assume(individual_concept([via,cacciatori,delle,alpi])),
   assume(individuates([via,cacciatori,delle,alpi],testo)),

   assume(individual_concept(pat1)),
   assume(individuates(pat1,patente)).


/*  Una particolare Patente */
pat1 :-

   add(pat1,nome1,instance_role),
   assume(satisfies(nome1,pat1,nome,patente)),
   assume(has_value(nome1,pat1,mario)),

   add(pat1,cognome1,instance_role),
   assume(satisfies(cognome1,pat1,cognome,patente)),
   assume(has_value(cognome1,pat1,rossi)),

   add(pat1,luogo_nascita1,instance_role),
   assume(satisfies(luogo_nascita1,pat1,luogo_nascita,patente)),
   assume(has_value(luogo_nascita1,pat1,pavia)),

   add(pat1,data_nascita1,instance_role),
   assume(satisfies(data_nascita1,pat1,data_nascita,patente)),
   assume(has_value(data_nascita1,pat1,25/10/1975)),

   add(pat1,residenza1,instance_role),
   assume(satisfies(residenza1,pat1,residenza,patente)),
   assume(has_value(residenza1,pat1,parma)),

   add(pat1,via1,instance_role),
   assume(satisfies(via1,pat1,via,patente)),
   assume(has_value(via1,pat1,[via,cacciatori,delle,alpi])),

   add(pat1,prefetto_di1,instance_role),
   assume(satisfies(prefetto_di1,pat1,prefetto_di,patente)),
   assume(has_value(prefetto_di1,pat1,parma)),

   add(pat1,data_rilascio1,instance_role),
   assume(satisfies(data_rilascio1,pat1,data_rilascio,patente)),
   assume(has_value(data_rilascio1,pat1,15/11/1993)),

   add(pat1,data_scadenza1,instance_role),
   assume(satisfies(data_scadenza1,pat1,data_scadenza,patente)),
   assume(has_value(data_scadenza1,pat1,15/11/2003)),

   add(pat1,numero1,instance_role),
   assume(satisfies(numero1,pat1,numero,patente)),
   assume(has_value(numero1,pat1,aj8b44012i4p3r)).





/*Procedure di supporto*/

stampa(A) :-
   generic_concept(A),
   print_header(g_conc,A),
   print_section(super_c,A,fullview),
   print_section(roles,A,fullview),
   skip_line(1).

pp(I_conc) :-
            individual_concept(I_conc),
            write(I_conc),write(' e_ un concetto individiale'),nl,
            individuates(I_conc,G_conc), !,
            write(I_conc),write(' e_ un '),write(G_conc),nl,
            stampa_ruoli(I_conc,G_conc).

stampa_ruoli(I_conc,G_conc) :-
             has_role(I_conc,I_role),
             write(I_role),write(' e_ un instance_role '),nl, 
             satisfies(I_role,I_conc,G_role,G_conc),
             write(' che individua un '),write(G_role),
             write(' di '),write(G_conc),
             stampa_valore(I_role,I_conc,Value),
             fail.
stampa_ruoli(_,_).

stampa_valore(Ir,Ic,V):- has_value(Ir,Ic,V),
                         write('  con valore '),write(V),nl,!.
stampa_valore(Ir,Ic,V):- write(' che non ha nessun valore '),nl,!.