%% LÓGICA COMPUTACIONAL Y TEORÍA DE MODELOS
%% TRABAJO REDES METABÓLICAS
%% Jesús Camacho Moro
%% Mª Estefanía Espinar García
%% Problema %%
%%%%%%%%%%
%% Sea un grafo bipartito dirigido, G = (R u M, E), donde R, es el conjunto
%% de reacciones, M, el conjunto de metabolitos, y E, representa los
%% metabolitos reactantes y productos de cada reacción R. El problema
%% planteado es: dado un conjunto de semillas, S, y otro de resultantes, T,
%% hallar qué reacciones debemos obtener para poder producir los
%% resultantes a partir de las semillas.
%% Definiciones %%
%%%%%%%%%%%%
%% draft(d). :Identificación del grafo G como Net.
%% reaccion(N, G). : es la reacción que tiene un nodo N en el grafo G
%% reactivo(M, r). : es la arista que va de un metabolito a una reacción.
%% producto(M, r). : es la arista que va de una reacción a un metabolito.
%% semilla(M) : es una semilla.
%% objetivo(M). : es el objetivo.
%% Instancias %%
%%%%%%%%%%%%
draft(d).
reaccion(r1, x).
reaccion(r4, d).
reactivo(m1, r1).
reactivo(m3, r4).
reactivo(m4, r5).
producto(m3, r1).
producto(m5, r4).
semilla(m1). semilla(m2).
reaccion(r2, x).
reaccion(r3, d).
reaccion(r5, x).
reaccion(r6, d).
reactivo(m2, r2).
reactivo(m2, r3).
reactivo(m4, r4).
reactivo(m1, r5).
reactivo(m4, r6).
producto(m3, r2).
producto(m4, r3).
producto(m6, r5).
producto(m7, r6).
objetivo(m5).
objetivo(m7).
%% Código %%
%%%%%%%%
%%% Tipo de reacción a: grafo G. Tipo de reacción x: reacciones añadidas
type(Net) :- draft(Net).
type(a).
type(x).
%%% Grafo extendido.
reaccion(R,x) :- reaccion(R,Net), draft(Net).
{ reaccion(R,x) } :- reaccion(R,a).
%%% Predicado alcanzable
scope(M, T) :- semilla(M), type(T).
scope(M, T) :- type(T), producto(M,R), reaccion(R,T), scope(M2,T), reactivo(M2,R).
:- objetivo(M), not scope(M,x).
%%% Nuevas reacciones y su minimización
nuevo(R) :- reaccion(R,x), draft(Net), not reaccion(R,Net).
reacciones(S) :- S = #count{1: nuevo(R) }.
#minimize{1,R:nuevo(R)}.
#show reacciones/1.
#show nuevo/1.