asercion(R) --> viaje(R,_).
asercion(B) --> mas_viajes(B,_).
mas_viajes([A|B],N) --> viaje(A,N), coma, mas_viajes(B,N).
mas_viajes([A,B],N) --> viaje(A,N), y, viaje(B,N).
viaje(tren(N,T,C,O,D,I,M),N) --> n_billetes(N), es_ttren(T), lugares(O,D),
c_tren(C), fecha(I,M).
viaje(barco(N,O,D,I,M),N) --> n_billetes(N), barco, lugares(O,D),
fecha(I,M).
viaje(atobus(N,T,O,D,I,M),N) --> n_billetes(N), t_bus(T), lugares(O,D),
fecha(I,M).
viaje(avion(N,T,C,O,D,I,M),N) --> n_billetes(N), t_avion(T), lugares(O,D),
c_avion(C), fecha(I,M).
t_bus(T) --> autobus, de, es_cautobus(T).
t_avion(T) --> vuelo, de, es_caerea(T).
c_tren(C) --> en, clase_t(C).
c_avion(C) --> en, clase_a(C).
lugares(O,D) --> de, es_poblacion(O), a, es_poblacion(D).
fecha(I,M) --> para_el, numero(I), de, es_mes(M).
Para terminar declaramos las producciones encargadas de gestionar el número de billetes./* Un único viaje o el primero de un cjt */
n_billetes(N) --> numero(N), billetes(N), para_el, {N\=[]}.
/* Producción usada para un cjt de viajes */
n_billetes(N) --> para_el, {N\=[]}.
billetes(N) --> [billetes],{N>1}.
billetes(N) --> [billete],{N<2}.