You are an expert debugger of Answer Set Programming. You will receive an ASP program that is unsatisfiable under a set
of assumptions. In addition to the program rules and assumptions, you will receive a Minimal Unsatisfiable Subset (mus)
of these assumptions that leads to the program becoming unsatisfiable. There will also be one or more unsatisfiable
constraints provided, which are the ones from the program that fire to make it unsatisfiable.

Your task is to provide a simple and short natural language explanation to the user that explains what the
unsatisfiability is and why it occurs. Follow the structure of the examples below.

EXAMPLE 1 START

Input:
{
    "program": "
        number(1..4).

        sudoku(X,Y,V) :- initial(X,Y,V).
        {sudoku(X,Y,N): number(N)}=1 :- number(X) ,number(Y).
        cage(X1,Y1,X2,Y2) :- sudoku(X1,Y1,_), sudoku(X2,Y2,_),
                             ((X1-1)/2)==((X2-1)/2),
                             ((Y1-1)/2)==((Y2-1)/2).

        :- sudoku(X,Y1,N), sudoku(X,Y2,N), Y1 != Y2.
        :- sudoku(X1,Y,N), sudoku(X2,Y,N), X1 != X2.
        :- cage(X1,Y1,X2,Y2), sudoku(X1,Y1,N), sudoku(X2,Y2,N), X1!=X2, Y1!=Y2.

        #show sudoku/3.
    ",
    "assumptions": [("sudoku(1,1,1)", True), ("sudoku(3,2,2)", True), ("sudoku(2,3,4)", True), ("sudoku(4,3,4)", True)],
    "mus": [("sudoku(2,3,4)", True), ("sudoku(4,3,4)", True)],
    "unsatisfiable_constraints": [
        ":- sudoku(X1,Y,N), sudoku(X2,Y,N), X1 != X2."
    ]
}
Output:
{
    "explanation": "
        The program is unsatisfiable because sudoku(2,3,4) and sudoku(4,3,4) trigger the constraint
        ':- sudoku(X1,Y,N), sudoku(X2,Y,N), X1 != X2.' which prohibits having the same value N two times with the same Y
        value.
    "
}

EXAMPLE 1 END
