CODIGO TIEMPO Y ESPACIO




CODIGO TIEMPO Y ESPACIO

:- auto_table. % auto_table if in:http://www.cs.sunysb.edu/~sbprolog/manual1/node31.html


demo(true). demo(((B1,Alfa1,Beta1),(B2,Alfa2,Beta2))) :-demo((B1,Alfa1,Beta1)),demo((B2,Alfa2,Beta2)).



demo((A,Alfa,Beta)):- contR(Alfa,Delta),contT(Beta,Gama),clause1((A,Delta,Gama),B),demo(B).



demo((A,Alfap,Betap)):-une(Alfa1,Beta1,Alfa2,Beta2,Alfa,Beta),contR(Alfap,Alfa),contT(Betap,Beta),clause1((A,Alfa1,Beta1),B),demo(B),demo((A,Alfa2,Beta2)).



clause1((A,Alfa,Beta),B):-claus((A,Alfa,Beta),B),validaR(Alfa), validaT(Beta).



validaR(thr(X1,Y1,X2,Y2)):-nonvar(X1), nonvar(Y1), nonvar(X2), nonvar(Y2). validaR(inr(X1,Y1,X2,Y2)):-nonvar(X1), nonvar(Y1), nonvar(X2), nonvar(Y2).



validaT(th(S1,S2)):-nonvar(S1),nonvar(S2). validaT(in(S1,S2)):-nonvar(S1),nonvar(S2).



/*SPACE-TIME o TIME SPACE */ /*THR overlap Y E-T*/
une(thr(X1,X2,Y1,Y2),th(T1,T2),thr(X1,X2,Z1,Z2),th(T1,T2),thr(X1,X2,Y1,Z2),th(T1,T2)):-claus((_,thr(X1,X2,Y1,Y2),th(T1,T2)),true),claus((_,thr(X1,X2,Z1,Z2),th(T1,T2)),true),Y1=


/*THR overlap X E-T*/
une(thr(X1,X2,Y1,Y2),th(T1,T2),thr(Z1,Z2,Y1,Y2),th(T1,T2),thr(X1,Z2,Y1,Y2),th(T1,T2)):-claus((_,thr(X1,X2,Y1,Y2),th(T1,T2)),true),claus((_,thr(Z1,Z2,Y1,Y2),th(T1,T2)),true),X1=


/*THR overlap time E-T*/
une(thr(X1,X2,Y1,Y2),th(S1,S2),thr(X1,X2,Y1,Y2),th(R1,R2),thr(X1,X2,Y1,Y2),th(S1,R2)):-claus((_,thr(X1,X2,Y1,Y2),th(S1,S2)),true),claus((_,thr(X1,X2,Y1,Y2),th(R1,R2)),true),S1=


/*INR overlap time E-T*/
une(inr(X1,X2,Y1,Y2),th(S1,S2),inr(X1,X2,Y1,Y2),th(R1,R2),inr(X1,X2,Y1,Y2),th(S1,R2)):-claus((_,inr(X1,X2,Y1,Y2),th(S1,S2)),true),claus((_,inr(X1,X2,Y1,Y2),th(R1,R2)),true),S1=


/*IN overlap region Y T-E*/
une(in(T1,T2),thr(X1,X2,Y1,Y2),in(T1,T2),thr(X1,X2,Z1,Z2),in(T1,T2),thr(X1,X2,Y1,Z2)):-claus((_,in(T1,T2),thr(X1,X2,Y1,Y2)),true),claus((_,in(T1,T2),thr(X1,X2,Z1,Z2)),true),Y1=


/*IN overlap region X T-E*/
une(in(T1,T2),thr(X1,X2,Y1,Y2),in(T1,T2),thr(Z1,Z2,Y1,Y2),in(T1,T2),thr(X1,Z2,Y1,Y2)):-claus((_,in(T1,T2),thr(X1,X2,Y1,Y2)),true),claus((_,in(T1,T2),thr(Z1,Z2,Y1,Y2)),true),X1=


/* SPACE */ /* THR */ /*THR <= E-T */
contR(thr(X1,X2,Y1,Y2),thr(X1p,X2p,Y1p,Y2p) ):-nonvar(X1),nonvar(X2),nonvar(Y1),nonvar(Y2),nonvar(X1p),nonvar(X2p),nonvar(Y1p),nonvar(Y2p),X1p=


/*THR <=*/
contR(thr((X1,X2,Y1,Y2)),thr(X1p,X2p,Y1p,Y2p) ):-nonvar(X1),nonvar(X2),nonvar(Y1),nonvar(Y2),claus((_,thr(X1p,X2p,Y1p,Y2p),_),true),X1p=


/*THR <= E-T ultima */
contR(thr(X1,X2,Y1,Y2),thr(X1p,X2p,Y1p,Y2p) ):-nonvar(X1),nonvar(X2),nonvar(Y1),nonvar(Y2),claus((_,thr(X1p,X2p,Y1p,Y2p),_),true),X1p=


/*THR <= */
contR(thr((X1,X2,Y1,Y2)),thr(X1,X2,Y1,Y2) ):-var(X1),var(X2),var(Y1),var(Y2),claus((_,thr(X1,X2,Y1,Y2),_),true).



/*THR <= E-T */
contR(thr((X1,X2,Y1,Y2)),thr(X1p,X2p,Y1p,Y2p) ):-var(X1),var(X2),var(Y1),var(Y2),nonvar(X1p),nonvar(X2p),nonvar(Y1p),nonvar(Y2p),claus((_,thr(X1,X2,Y1,Y2),_),true),X1p=


/* INR*/ /*INR <= E-T */
contR(inr(X1p,X2p,Y1p,Y2p),inr(X1,X2,Y1,Y2)):-nonvar(X1p),nonvar(X2p),nonvar(Y1p),nonvar(Y2p),nonvar(X1),nonvar(X2),nonvar(Y1),nonvar(Y2),X1p=
/*INR <= */
contR(inr((X1p,X2p,Y1p,Y2p)),inr(X1,X2,Y1,Y2)):-nonvar(X1p),nonvar(X2p),nonvar(Y1p),nonvar(Y2p),claus((_,inr(X1,X2,Y1,Y2),_),true),X1p=
/*INR <= E-T ultima */
contR(inr(X1p,X2p,Y1p,Y2p),inr(X1,X2,Y1,Y2)):-nonvar(X1p),nonvar(X2p),nonvar(Y1p),nonvar(Y2p),claus((_,inr(X1,X2,Y1,Y2),_),true),X1p=
/*INR <=*/
contR(inr((X1,X2,Y1,Y2)),inr(X1,X2,Y1,Y2)):-var(X1),var(X2),var(Y1),var(Y2),claus((_,inr(X1,X2,Y1,Y2),_),true).


/*INR <= E-T */
contR(inr((X1p,X2p,Y1p,Y2p)),inr(X1,X2,Y1,Y2)):-var(X1p),var(X2p),var(Y1p),var(Y2p),nonvar(X1),nonvar(X2),nonvar(Y1),nonvar(Y2),claus((_,inr(X1p,X2p,Y1p,Y2p),_),true),X1p=
/* TIME */ /*TH <= T-E */
contT(th(S1,S2),th(R1,R2)):-nonvar(S1),nonvar(S2),nonvar(R1),nonvar(R2), /*write(uno),*/ R1=
/*TH <=*/
contT(th((S1,S2)),th(R1,R2)):-nonvar(S1),nonvar(S2),claus((_,_,th(R1,R2)),true),R1=
/*TH <= T-E ultima */
contT(th(S1,S2),th(R1,R2)):-nonvar(S1),nonvar(S2),claus((_,_,th(R1,R2)),true),R1=
/*TH <= */
contT(th((S1,S2)),th(S1,S2)):-var(S1),var(S2),claus((_,_,th(S1,S2)),true).


/*TH <= T-E */
contT(th((S1,S2)),th(R1,R2)):-var(S1),var(S2),nonvar(R1),nonvar(R2),claus((_,_,th(S1,S2)),true),R1=


/* the next two clausules are the link between IN and TH annotations */ /*IN <= TH */
contT(in(R1,R2),th(S1,S2)):-nonvar(R1),nonvar(R2),claus((_,_,th(S1,S2)),true),R1=
/* esto faltaba if IN then TH in the same time point */ contT(th(S1,S2),in(S1,S2)):-nonvar(S1),nonvar(S2),claus((_,_,in(S1,S2)),true),S1=S2, S2=R1, R1=R2.

/* -------------- */


/*esto faltaba in <= T-E */
contT(in(R1,R2),in(S1,S2)):-nonvar(R1),nonvar(R2),nonvar(S1),nonvar(S2),R1=
/*in <=*/
contT(in((R1,R2)),in(S1,S2)):-nonvar(R1),nonvar(R2),claus((_,_,in(S1,S2)),true),R1=
/*in <= T-E ultima */
contT(in(R1,R2),in(S1,S2)):-nonvar(R1),nonvar(R2),claus((_,_,in(S1,S2)),true),R1=
/*in <=*/
contT(in((R1,R2)),in(R1,R2)):-var(R1),var(R2),claus((_,_,in(R1,R2)),true).


/*in <= T-E */
contT(in((R1,R2)),in(S1,S2)):-var(R1),var(R2),nonvar(S1),nonvar(S2),claus((_,_,in(R1,R2)),true),R1=



/* FACTS */


/* claus(person(monica,jurnalist),true ).
claus((does(monica,play),inr(600,1500,1200,1400),th(1200,1300)),true).
claus((does(monica,eat),inr(600,1000,1000,1100),th(1100,1200)),true).
claus((does(monica,ski),thr(500,2000,1400,2000),th(1300,1600)),true).


claus(person(john,tourist),true).
claus((does(john,eat),inr(600,1000,1000,1100),th(1100,1200)),true).
claus((does(john,ski),thr(500,2000,1400,2000),th(1200,1500)),true).


claus(person(hilda,tourist),true).
claus((does(hilda,eat),inr(600,1000,1000,1100),in(1100,1200)),true).
claus((does(hilda,run),inr(520,2000,1400,2000),th(1500,1700)),true).
claus((resort(terrance), thr(500,2000,1000,1400), th(0000,2400)),true).
claus((resort(skia), thr(500,2000,1400,2000), th(0000,2400)),true).

*/


/* EXAMPLE OF QUERIES (you have to comment the actual query and uncomment the next query before load the program */


/* setof(P,demo((does(P,eat),inr(_),th(_))),L). */
/* s(R) :- demo((does(hilda,_),inr(R),in(1500,1700))). */
/*s(R,I) :- demo(((does(monica,_),thr(R),th(I)),(resort(skia),thr(R),th(_)))). */
/*s(R) :- demo((does(hilda,_),inr(R),in(0800,1200))).*/
/*s(A,R,I) :- demo(((does(monica,A),inr(R),th(I)),(resort(terrance),thr(R),th(_)))),write(R),write(I). */
/*s(R,I) :- demo(((does(monica,eat),inr(R),th(I)),(does(hilda,eat),inr(R),in(I)),(does(john,eat),inr(R),th(I)),(resort(terrance),thr(R),th(_)))).*/
/*s(R,I,R1):- demo(((does(john,_),inr(R),th(I)),(does(monica,_),inr(R1),th(I)),(resort(terrance),thr(R1),th(_)))),write(R),write(R1),write(I).*/
/* s(R,I) :- demo(((does(monica,eat),inr(R),th(I)),(does(hilda,eat),inr(R),in(I)),(does(john,eat),inr(R),in(I)),(resort(terrance),thr(R),th(_)))).*/


/* Facts about volcano zone */
claus(transport(bus1,people),true).
claus(transport(bus2,people),true).
claus((does(bus1,parking),inr(3,3,4,4),th(10,12)),true).
claus((does(bus2,working),inr(3,4,4,7),th(10,12)),true).
claus((does(bus1,working),inr(1,2,2,3),in(12,17)),true).
claus((does(bus1,loading),thr(1,2,1,2),th(13,14)),true).
claus((town(huejotzingo),thr(3,4,4,7), th(0,24)),true).
claus((town(calpan), thr(1,2,2,3), th(0,24)),true).
s(X,R):-demo(((does(X,loading),inr(R),in(12,15)),(town(calpan),thr(R),in(_)))).
s(X,R):-demo((does(bus1,X),inr(R),in(9,12))).


ofe(viaja(bus1upp,compañeros),true).
ale(viaja(bus2upp,people),true).
ofe((esta(bus1upp,campus),inr(2,3,3,2),at(8)),true).
ale((esta(bus2upp,clase),inr(1,2,2,3),th(8,9)),true).
ofe((esta(bus1upp,laboratorio),inr(5,5,5,5),in(10,14)),true).
ale((esta(bus2upp,salon1),thr(1,2,1,2),th(13,16)),true).
ale((lugar(casa),thr(3,4,4,7), th(0,24)),true).
ofe((lugar(casa), inr(5,6,6,7), th(0,24)),true).
s(X,R):-demo(((esta(X,salon1),inr(R),in(12,15)),(lugar(casa),thr(R),in(_)))).
s(X,R):-demo((esta(bus1upp,X),inr(R),in(8,18))).


Implantaciones de ejemplos (en codigo) claus((town(escuela), thr(1,2,2,3), th(0,18)),true).
claus((town(escuela), inr(2,2,2,3), at(15)),true).
claus((town(casa), thr(5,6,6,7), th(19,24)),true).
claus((town(centro), thr(6,6,6,6), in(18,19)),true).


claus(transport(bus1,people),true).
claus(transport(bus2,people),true).
claus((does(bus1,parking),inr(3,3,4,4),th(10,12)),true).
claus((does(bus2,working),inr(3,4,4,7),th(10,12)),true).
claus((does(bus1,working),inr(1,2,2,3),in(12,17)),true).
claus((does(bus1,loading),thr(1,2,1,2),th(13,14)),true).
claus((town(huejotzingo),thr(3,4,4,7), th(0,24)),true).
claus((town(calpan), thr(1,2,2,3), th(0,24)),true).
s(X,R):-demo(((does(X,loading),inr(R),in(12,15)),(town(calpan),thr(R),in(_)))).
s(X,R):-demo((does(bus1,X),inr(R),in(9,12))).


ofe(viaja(bus1upp,compañeros),true).
ale(viaja(bus2upp,people),true).
ofe((esta(bus1upp,campus),inr(2,3,3,2),at(8)),true).
ale((esta(bus2upp,clase),inr(1,2,2,3),th(8,9)),true).
ofe((esta(bus1upp,laboratorio),inr(5,5,5,5),in(10,14)),true).
ale((esta(bus2upp,salon1),thr(1,2,1,2),th(13,16)),true).
ale((lugar(casa),thr(3,4,4,7), th(0,24)),true).
ofe((lugar(casa), inr(5,6,6,7), th(0,24)),true).
s(X,R):-demo(((esta(X,salon1),inr(R),in(12,15)),(lugar(casa),thr(R),in(_)))).
s(X,R):-demo((esta(bus1upp,X),inr(R),in(8,18))).

CORRIDAS

1