function F = BR_cp_sentence2formula(s,p,cp_pp,cp_np,cp_pn,cp_nn)
% BR_cp_sentence2formula - convert logical sentence to nonlinear equation
% On input:
%     s (1xk vector): disjunctive clause
%     p (float): probability s
%     cp_pp (num_atoms x num_atoms array): conditional probs P(A|B)
%     cp_np (num_atoms x num_atoms array): conditional probs P(-A|B)
%     cp_pn (num_atoms x num_atoms array): conditional probs P(A|-B)
%     cp_nn (num_atoms x num_atoms array): conditional probs P(-A|-B)
% On output:
%     F (string): equation for s with probability p
% Call:
%     Fs = BR_cp_sentence2formula([-1,2],0.7,cp_pp,cp_np,cp_pn,cp_nn);
% Author:
%     T. Henderson
%     UU
%     Spring 2017
%

len_s = length(s);
if p~=0
    F = ['-',num2str(p),'+'];
else
    F = [];
end

num_literals = length(s);
if num_literals==1
    lit1 = s(1);
    if lit1<0
        F = [F,'(1-x(',num2str(abs(lit1)),'))'];
    else
        F = [F,'x(',num2str(abs(lit1)),')'];
    end
    return
end

if num_literals==2
    lit1 = s(1);
    lit2 = s(2);
    atom1 = abs(lit1);
    atom2 = abs(lit2);
    if lit1<0
        F = [F,'(1-x(',num2str(atom1),'))+'];
    else
        F = [F,'x(',num2str(atom1),')+'];
    end
    if lit2<0
        F = [F,'(1-x(',num2str(atom2),'))-'];
    else
        F = [F,'x(',num2str(atom2),')-'];
    end
    if lit1>0&lit2>0
        F = [F,num2str(cp_pp(atom1,atom2)),'*x(',num2str(atom2),')'];
    elseif lit1<0&lit2>0
        F = [F,num2str(cp_np(atom1,atom2)),'*x(',num2str(atom2),')'];
    elseif lit1>0&lit2<0
        F = [F,num2str(cp_pn(atom1,atom2)),'*x(',num2str(atom2),')'];
    elseif lit1<0&lit2<0
        F = [F,num2str(cp_nn(atom1,atom2)),'*x(',num2str(atom2),')'];
    end
    return
end

lit1 = s(1);
atom1 = abs(lit1);
if lit1<0
    F = [F,'(1-x(',num2str(atom1),'))+'];
else
    F = [F,'x(',num2str(atom1),')+'];
end

F = [F,BR_cp_sentence2formula(s(2:end),0,cp_pp,cp_np,cp_pn,cp_nn),'+'];

for e1 = 1:num_literals-2
    l1 = s(e1);
    a1 = abs(l1);
    F = [F,'min(['];
    for e2 = e1+1:num_literals
        l2 = s(e2);
        a2 = abs(l2);
        if l1>0&l2>0
            F = [F,num2str(cp_pp(a1,a2)),'*x(',num2str(a2),')'];
        elseif l1<0&l2>0
            F = [F,num2str(cp_np(a1,a2)),'*x(',num2str(a2),')'];
        elseif l1>0&l2<0
            F = [F,num2str(cp_pn(a1,a2)),'*(1-x(',num2str(a2),'))'];
        else
            F = [F,num2str(cp_nn(a1,a2)),'*(1-x(',num2str(a2),'))'];
        end
        if e2<num_literals
            F = [F,','];
        end
    end
    F = [F,')*'];
end
a1 = abs(s(num_literals-1));
a2 = abs(s(num_literals));
if s(num_literals-1)>0&s(num_literals)>0
    F = [F,num2str(cp_pp(a1,a2)),'*x(',num2str(a2),')'];
elseif s(num_literals-1)<0&s(num_literals)>0
    F = [F,num2str(cp_np(a1,a2)),'*x(',num2str(a2),')'];
elseif s(num_literals-1)>0&s(num_literals)<0
    F = [F,num2str(cp_pn(a1,a2)),'*(1-x(',num2str(a2),'))'];
else
    F = [F,num2str(cp_nn(a1,a2)),'*(1-x(',num2str(a2),'))'];
end

tch = 0;
