Case:



/* Esempio di uso del KLONE */

/* per caricare l'ambiente KLONE */

:- consult('/home2/httpd/html/research/HYPERPROLOG/esempi/klone/klone').


casa:-
        

/* definizione delle casa come concetto */
	assume(generic_concept(casa)),
	assume(generic_concept(cosa)),

	

/* la casa e' sussunta da cosa */
	assume(has_super_concept(casa,cosa)),

/*  definizione dei ruoli nella casa */ 

	add(casa,soggiorno,generic_role),
	add(casa,bagno,generic_role),
	add(casa,cucina,generic_role),
	add(casa,ripostiglio,generic_role),
	add(casa,ingresso,generic_role),
	add(casa,camera,generic_role),


/* il filler del ruolo deve appartenere ad un certo ruolo generico 
     value/restriction     */

	assume(has_vr(camera,casa,stanza)),
	assume(has_vr(servizi,casa,servizio)),
	assume(has_vr(soggiorno,casa,stanza)),
	assume(has_vr(ingresso,casa,stanza)),


 /* fissa il numero di possibili fillers dei ruoli */
	assume(has_number(camera,casa,[1,3])),
	assume(has_number(bagno,casa,[1,2])),
	assume(has_number(cucina,casa,[1,1])),
	assume(has_number(ripostiglio,casa,[0,2])),
	assume(has_number(ingresso,casa,[0,1])),
	assume(has_number(soggiorno,casa,[0,1])),

/* in una casa il bagno deve esserci come la cucina e almeno un'altra stanza*/

	assume(has_modality(cucina,casa,obl)),
	assume(has_modality(camera,casa,obl)),
	assume(has_modality(bagno,casa,obl)).

palazzo:-

/*palazzo e' un insieme di case*/
    	assume(generic_concept(palazzo)),

	add(palazzo,appartamenti,generic_role),

	assume(has_vr(appartamenti,palazzo,casa)),

	assume(has_number(appartamenti,palazzo,[1,20])),

	assume(has_modality(appartamenti,palazzo,obl)).

/*   villetta  e' un palazzo formato da un solo appartamento  */
villetta:-

    	assume(generic_concept(villetta)),

	assume(has_super_concept(villetta,palazzo)),

	assume(has_number(appartamenti,villetta,[1,1])),


	assume(has_modality(ingresso,villetta,obl)),
	assume(has_modality(soggiorno,villetta,obl)).


/*     villa e' una villetta con almeno tre camere  e doppi servizi */
villa:-

    	assume(generic_concept(villa)),

	assume(has_super_concept(villa,villetta)),

	assume(has_number(camera,villa,[3,nil])),

	assume(has_number(bagno,villa,[2,nil])).

/*  mini_app e' una casa con un bagno un soggiorno
                  una camera da letto e cucina */
miniapp:-
 
    	assume(generic_concept(miniapp)),

	assume(has_super_concept(miniapp,casa)),

	assume(has_number(camera,miniapp,[1,1])),
	assume(has_number(ingresso,miniapp,[0,0])),
	assume(has_number(bagno,miniapp,[1,1])),
	assume(has_number(ripostiglio,miniapp,[0,0])).


/*concetti individuali*/
/* descrivo le stanze di una particolare casa*/
stanze_di_casa1:-

% stanze possibili di una casa
  assume(generic_concept(stanze_casa)),
  assume(has_super_concept(stanze_casa,stanze)),


% camera_bimbo
	assume(individual_concept(camera_bimbo)),
	assume(individuates(camera_bimbo,stanze_casa)),


% camera_genitori
	assume(individual_concept(camera_genitori)),
	assume(individuates(camera_genitori,stanze_casa)),

% salotto
	assume(individual_concept(salotto)),
	assume(individuates(salotto,stanze_casa)),

% bagno_di_casa
	assume(individual_concept(bagno_di_casa)),
	assume(individuates(bagno_di_casa,stanze_casa)),

% bagno_piccolo
	assume(individual_concept(bagno_piccolo)),

	assume(individuates(bagno_piccolo,stanze_casa)),
% cucinino
	assume(individual_concept(cucinino)),
	assume(individuates(cucinino,stanze_casa)).

%una particolare casa
	assume(individual_concept(casa1)),
	assume(individuates(casa1,casa)).
/* descrivo la casa particolare*/
casa1:-

% PARTICULAR ROLE SET

% questa casa deve essere formata dalle stanze sopra elencate 
  assume(has_vr(stanze,casa1,stanze_casa)),

% INSTANCE ROLES

%camera1 
	add(casa1,camera1,instance_role),
  	assume(satisfies(camera1,casa1,camera,casa)),
	assume(has_value(camera1,casa1,camera_genitori)),
%camera2 
	add(casa1,camera2,instance_role),
  	assume(satisfies(camera2,casa1,camera,casa)),
	assume(has_value(camera2,casa1,camera_bimbo)),

%cucina1
	add(casa1,cucina1,instance_role),
  	assume(satisfies(cucina1,casa1,cucina,casa)),
	assume(has_value(cucina1,casa1,cucinino)),

%salotto1
	add(casa1,salotto1,instance_role),
	assume(satisfies(salotto1,casa1,soggiorno,casa)),
	assume(has_value(salotto1,casa1,salotto)),
%bagno1
	add(casa1,bagno1,instance_role),
  	assume(satisfies(bagno1,casa1,bagno,casa)),
	assume(has_value(bagno1,casa1,bagno_piccolo)),
%bagno2
	add(casa1,bagno2,instance_role),
  	assume(satisfies(bagno2,casa1,bagno,casa)),
	assume(has_value(bagno2,casa1,bagno_di_casa)).

/* descrivo le stanze di una particolare villa*/
stanze_di_villa1:-

% stanze possibili di una casa
  assume(generic_concept(stanze_villa)),
  assume(has_super_concept(stanze_villa,stanze)),

% ingresso_villa
	assume(individual_concept(ingresso_villa)),
	assume(individuates(ingresso_villa,stanze_villa)),

% camera_bimbo1
	assume(individual_concept(camera_bimbo1)),
	assume(individuates(camera_bimbo1,stanze_villa)),

% camera_bimbo2
	assume(individual_concept(camera_bimbo2)),
	assume(individuates(camera_bimbo2,stanze_villa)),


% camera_genitori
	assume(individual_concept(camera_genitori)),
	assume(individuates(camera_genitori,stanze_villa)),


% camera_ospiti
	assume(individual_concept(camera_ospiti)),
	assume(individuates(camera_ospiti,stanze_villa)),

% camera_studio
	assume(individual_concept(camera_studio)),
	assume(individuates(camera_studio,stanze_villa)),

% soggiorno_villa
	assume(individual_concept(soggiorno_villa)),
	assume(individuates(soggiorno_villa,stanze_villa)),

% salotto
	assume(individual_concept(salotto)),
	assume(individuates(salotto,stanze_villa)),

% bagno_villa1
	assume(individual_concept(bagno_villa1)),
	assume(individuates(bagno_villa1,stanze_villa)),

% bagno_villa2
	assume(individual_concept(bagno_villa2)),
	assume(individuates(bagno_villa2,stanze_villa)),

% bagno_piccolo
	assume(individual_concept(bagno_piccolo)),
	assume(individuates(bagno_piccolo,stanze_villa)),
% cucina_villa
	assume(individual_concept(cucina_villa)),
	assume(individuates(cucina_villa,stanze_villa)),

%una particolare villa
	assume(individual_concept(villa1)),
	assume(individuates(villa1,villa)).

/* descrivo la villa particolare*/

villa1:-

% PARTICULAR ROLE SET

% questa casa deve essere formata dalle stanze sopra elencate 
  assume(has_vr(stanze,villa1,stanze_villa)),

% INSTANCE ROLES

%ingresso1 
	add(villa1,ingresso1,instance_role),
  	assume(satisfies(ingresso1,villa1,ingresso,villa)),
	assume(has_value(ingresso1,villa1,ingresso_villa)),

%camera1 
	add(villa1,camera1,instance_role),
  	assume(satisfies(camera1,villa1,camera,villa)),
	assume(has_value(camera1,villa1,camera_genitori)),
%camera2 
	add(villa1,camera2,instance_role),
  	assume(satisfies(camera2,villa1,camera,villa)),
	assume(has_value(camera2,villa1,camera_bimbo1)),

%camera3 
	add(villa1,camera3,instance_role),
  	assume(satisfies(camera3,villa1,camera,villa)),
	assume(has_value(camera3,villa1,camera_bimbo2)),

%camera4 
	add(villa1,camera4,instance_role),
  	assume(satisfies(camera4,villa1,camera,villa)),
	assume(has_value(camera4,villa1,camera_ospiti)),

%camera5 
	add(villa1,camera5,instance_role),
  	assume(satisfies(camera5,villa1,camera,villa)),
	assume(has_value(camera5,villa1,camera_studio)),
%camera6 
	add(villa1,camera6,instance_role),
  	assume(satisfies(camera6,villa1,camera,villa)),
	assume(has_value(camera6,villa1,salotto)),
%cucina1
	add(villa1,cucina1,instance_role),
  	assume(satisfies(cucina1,villa1,cucina,villa)),
	assume(has_value(cucina1,villa1,cucina_villa)),

%soggiorno1
	add(villa1,soggiorno1,instance_role),
	assume(satisfies(soggiorno1,villa1,soggiorno,villa)),
	assume(has_value(soggiorno1,villa1,soggiorno_villa)),
%bagno1
	add(villa1,bagno1,instance_role),
  	assume(satisfies(bagno1,villa1,bagno,villa)),
	assume(has_value(bagno1,villa1,bagno_villa1)),
%bagno2
	add(villa1,bagno2,instance_role),
  	assume(satisfies(bagno2,villa1,bagno,villa)),
	assume(has_value(bagno2,villa1,bagno_villa2)),
%bagno3
	add(villa1,bagno3,instance_role),
  	assume(satisfies(bagno3,villa1,bagno,villa)),
	assume(has_value(bagno3,villa1,bagno_piccolo)).

/*descrivo un mini appartamento particolare*/

stanze_mini_app:-

% stanze possibili di una casa
  	assume(generic_concept(stanze_miniapp)),
  	assume(has_super_concept(stanze_miniapp,stanze)),

% camera_mini
	assume(individual_concept(camera_mini)),
	assume(individuates(camera_mini,stanze_miniapp)),

% soggiorno_mini
	assume(individual_concept(soggiorno_mini)),
	assume(individuates(soggiorno_mini,stanze_miniapp)),

% bagno_mini
	assume(individual_concept(bagno_mini)),
	assume(individuates(bagno_mini,stanze_miniapp)),

% cucinino_mini
	assume(individual_concept(cucinino_mini)),
	assume(individuates(cucinino_mini,stanze_miniapp)).

%un particolare mini appartamento
	assume(individual_concept(mini1)),
	assume(individuates(mini1,miniapp)).



mini1:-



%camera1
	add(mini1,camera1,instance_role),
  	assume(satisfies(camera1,mini1,camera,miniapp)),
	assume(has_value(camera1,mini1,camera_mini)),

%cucina1
	add(mini1,cucina1,instance_role),
  	assume(satisfies(cucina1,mini1,cucina,miniapp)),
	assume(has_value(cucina1,mini1,cucinino_mini)),

%soggiorno1
	add(mini1,soggiorno1,instance_role),
	assume(satisfies(soggiorno1,mini1,soggiorno,miniapp)),
	assume(has_value(soggiorno1,mini1,soggiorno_mini)),
%bagno1
	add(mini1,bagno1,instance_role),
  	assume(satisfies(bagno1,mini1,bagno,miniapp)),
	assume(has_value(bagno1,mini1,bagno_mini)).


palazzo1:-

%un particolare palazzo
	assume(individual_concept(palazzo1)),
	assume(individuates(palazzo1,palazzo)),



%appartamento1 
	add(palazzo1,appartamento1,instance_role),
  	assume(satisfies(appartamento1,palazzo1,appartamenti,palazzo)),
	assume(has_value(appartamento1,palazzo1,casa1)),

%appartamento2 
	add(palazzo1,appartamento2,instance_role),
  	assume(satisfies(appartamento2,palazzo1,appartamenti,palazzo)),
	assume(has_value(appartamento2,palazzo1,mini1)).


inizializza:-
	casa,
	palazzo,
	villetta,
	villa,
	miniapp,
	stanze_di_casa1,
	casa1,
	stanze_di_villa1,
	villa1,
	stanze_mini_app,
	mini1,
	palazzo1.

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).


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

stampa(I_conc):-
	     casa1, 
	     villa1,
             mini1,
	     palazzo1, 
             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 '),write(G_role),
             stampa_valore(I_role,I_conc,Value),
             fail.

stampa_valore(Ir,Ic,V):- has_value(Ir,Ic,V),
                         write(' come '),write(V),nl,!.
stampa_valore(Ir,Ic,V):- write(' non ha nessun tipo '),nl,!.