title: Prolog: "false" with query
body: <p>I'm trying to solve a 9x9 sudoku puzzle in SWI-Prolog,</p>
  
  <p>I've given the query which is the empty sudoku, but it doesn't give any errors it simply states "false".</p>
  
  <p>The code also compiles correctly.</p>
  
  <p>My code is shown below: </p>
  
  <pre><code>:- use_module(library(clpfd)).
  
  valid([]).
  valid([Head|Tail]) :-
    all_different(Head),
    valid(Tail).
  
  sudoku(Puzzle, Solution) :-
    Solution = Puzzle,
    Puzzle = [S11, S12, S13, S14, S15, S16, S17, S18, S19,
              S21, S22, S23, S24, S25, S26, S27, S28, S29,
              S31, S32, S33, S34, S35, S36, S37, S38, S39,
              S41, S42, S43, S44, S45, S46, S47, S48, S49,
              S51, S52, S53, S54, S55, S56, S57, S58, S59,
              S61, S62, S63, S64, S65, S66, S67, S68, S69,
              S71, S72, S73, S74, S75, S76, S77, S78, S79,
              S81, S82, S83, S84, S85, S86, S87, S88, S89,
              S91, S92, S93, S94, S95, S96, S97, S98, S99],           
  
    Puzzle ins 1..9,
  
    Row1 = [S11, S12, S13, S14, S15, S16, S17, S18, S19],
    Row2 = [S21, S22, S23, S24, S25, S26, S27, S28, S29],
    Row3 = [S31, S32, S33, S34, S35, S36, S37, S38, S39],
    Row4 = [S41, S42, S43, S44, S45, S46, S47, S48, S49],
    Row5 = [S51, S52, S53, S54, S55, S56, S57, S58, S59],
    Row6 = [S61, S62, S63, S64, S65, S66, S67, S68, S69],
    Row7 = [S71, S72, S73, S74, S75, S76, S77, S78, S79],
    Row8 = [S81, S82, S83, S84, S85, S86, S87, S88, S89],
    Row9 = [S91, S92, S93, S94, S95, S96, S97, S98, S99],
  
    Col1 = [S11, S21, S31, S41, S51, S61, S71, S81, S91],
    Col2 = [S21, S22, S32, S42, S52, S62, S72, S82, S92],
    Col3 = [S31, S32, S33, S43, S53, S63, S73, S83, S93],
    Col4 = [S41, S42, S43, S44, S54, S64, S74, S84, S94],
    Col5 = [S51, S52, S53, S54, S55, S65, S75, S85, S95],
    Col6 = [S61, S62, S63, S64, S65, S66, S76, S86, S96],
    Col7 = [S71, S72, S73, S74, S75, S76, S77, S87, S97],
    Col8 = [S81, S82, S83, S84, S85, S86, S87, S88, S98],
    Col9 = [S91, S92, S93, S94, S95, S96, S97, S98, S99],
  
    Square1 = [S11, S12, S13, S21, S22, S23, S31, S32, S33],
    Square2 = [S14, S15, S16, S24, S25, S26, S34, S35, S36],
    Square3 = [S17, S18, S19, S27, S28, S29, S37, S38, S39],
    Square4 = [S41, S42, S43, S51, S52, S53, S61, S62, S63],
    Square5 = [S44, S45, S46, S54, S55, S56, S64, S65, S66],
    Square6 = [S47, S48, S49, S57, S58, S59, S67, S68, S69],
    Square7 = [S71, S72, S73, S81, S82, S83, S91, S92, S93],
    Square8 = [S74, S75, S76, S84, S85, S86, S94, S95, S96],
    Square9 = [S77, S78, S79, S87, S88, S89, S97, S98, S99],
  
    valid([Row1, Row2, Row3, Row4, Row5, Row6, Row7, Row8, Row9, 
           Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9,
           Square1, Square2, Square3, Square4, Square5, Square6, Square7, Square8, Square9]).
  </code></pre>
  
  <p>and my query is this:</p>
  
  <pre><code>sudoku([_, 9, 6, 8, 5, 1, _, 4, _,
             1, _, 8, 2, 9, 4, 3, 5, 6,
             5, 2, _, 6, _, _, 8, _, 1,
             9, _, 5, _, 8, 7, 2, 6, 3,
             4, 8, 3, 9, _, 6, 5, _, 7,
             _, 6, 7, 3, 1, _, 9, 8, 4,
             6, 5, _, 1, 3, 8, _, 7, 9,
             7, 4, 9, 5, 6, 2, 1, _, 8,
             _, 3, 1, 7, _, 9, _, 2, 5],
  Solution).
  </code></pre>
  
  <p>I've reviewd the code countless time, and have no idea why it's not returning true.</p>
  
  <p>Thanks</p>