Logic Constraints for Sudoku
For reference, the following shows what grid elements correspond to what range of board array indices:
     0- |   9- |  18- ||  81- |  90- |  99- || 162- | 171- | 180-
     8  |  17  |  26  ||  89  |  98  | 107  || 170  | 179  | 188
   -----+------+------++------+------+------++------+------+------
    27- |  36- |  45- || 108- | 117- | 126- || 189- | 198- | 207-
    35  |  44  |  53  || 116  | 125  | 134  || 197  | 206  | 215
   -----+------+------++------+------+------++------+------+------
    54- |  63- |  72- || 135- | 144- | 153- || 216- | 225- | 234-
    62  |  71  |  80  || 143  | 152  | 161  || 224  | 233  | 242
   =====+======+======++======+======+======++======+======+======
   243- | 252- | 261- ||      |      |      ||      |      |
   251  | 260  | 269  || ...  |      |      ||      |      |
   -----+------+------++------+------+------++------+------+------
   270- | 279- | 288- ||      |      |      ||      |      |
   278  | 287  | 296  ||      |      |      ||      |      |
   -----+------+------++------+------+------++------+------+------
   297- | 306- | 315- ||      |      |      ||      |      |
   305  | 314  | 323  ||      |      |      ||      |      |
   =====+======+======++======+======+======++======+======+======
        |      |      ||      |      |      || 648- | 657- | 666-
        |      |      ||      |      | ...  || 656  | 665  | 674
   -----+------+------++------+------+------++------+------+------
        |      |      ||      |      |      || 675- | 684- | 693-
        |      |      ||      |      |      || 683  | 692  | 701
   -----+------+------++------+------+------++------+------+------
        |      |      ||      |      |      || 702- | 711- | 720-
        |      |      ||      |      |      || 710  | 719  | 728

There are 81 families of constraints that ensures each grid element takes exactly one value. These are:

   (board[0] ∨ board[1] ∨ ... ∨ board[8]) ∧ 
   (board[9] ∨ board[10] ∨ ... ∨ board[17]) ∧ 
   ... ∧
   (¬board[0] ∨ ¬ board[1]) ∧ 
   (¬board[0] ∨ ¬board[2]) ∧ 
   ... ∧ 
   (¬board[0] ∨ ¬board[8]) ∧ 
   ... ∧
   (¬board[1] ∨ ¬board[2]) ∧
   (¬board[1] ∨ ¬board[3]) ∧
   ... ∧
   (¬board[1] ∨ ¬board[8]) ∧
   (¬board[2] ∨ ¬board[3]) ∧
   (¬board[2] ∨ ¬board[4]) ∧
   ... ∧
   (¬board[2] ∨ ¬board[8]) ∧
   ...
   (¬board[7] ∨ ¬board[8]) ∧
   ...
There are another 9 families of constraints that ensure the numbers of each subgrid are distinct:
   (¬board[0] ∨ ¬board[9]) ∧
   (¬board[0] ∨ ¬board[18]) ∧
   (¬board[0] ∨ ¬board[27]) ∧
   ... ∧
   (¬board[0] ∨ ¬board[72]) ∧
   (¬board[1] ∨ ¬board[10]) ∧
   (¬board[1] ∨ ¬board[19]) ∧ 
   (¬board[1] ∨ ¬board[28]) ∧
   ... ∧
   (¬board[1] ∨ ¬board[73]) ∧
   ... ∧
   (¬board[8] ∨ ¬board[17]) ∧
   (¬board[8] ∨ ¬board[26]) ∧
   (¬board[8] ∨ ¬board[35]) ∧
   ... ∧
   (¬board[8] ∨ ¬board;[80]) ∧
   ...
There are another 9 familes of constraints that ensure all row elements are distinct (recall some row constraints are taken care of by the distinct subgrid constraints above):
   ** this group makes element 0 of subgrid 0 distinct from elements in row 0 **
   (¬board[0] V ¬board[81]) ∧ 
   (¬board[0] ∨ ¬board[90]) ∧
   (¬board[0] V ¬board[99]) ∧ 
   (¬board[0] V ¬board[162]) ∧
   (¬board[0] V ¬board[171]) ∧
   (¬board[0] V ¬board[180]) ∧
   (¬board[1] V ¬board[82]) ∧
   (¬board[1] V ¬board[91]) ∧ 
   (¬board[1] V ¬board[100]) ∧
   (¬board[1] V ¬board[163]) ∧
   (¬board[1] V ¬board[172]) ∧
   (¬board[1] V ¬board[181]) ∧
   ...
   (¬board[8] V ¬board[89]) ∧
   (¬board[8] V ¬board[98]) ∧
   (¬board[8] V ¬board[107]) ∧
   (¬board[8] V ¬board[170]) ∧
   (¬board[8] V ¬board[179]) ∧
   (¬board[8] V ¬board[188]) ∧
   ** this group makes element 1 of subgrid 0 distinct from elements in row 0 **
   (¬board[9] V ¬board[81]) ∧
   (¬board[9] V ¬board[90]) ∧
   (¬board[9] V ¬board[99]) ∧
   (¬board[9] V ¬board[162]) ∧
   (¬board[9] V ¬board[171]) ∧
   (¬board[9] V ¬board[180]) ∧
   ...
   (¬board[17] V ¬board[89]) ∧
   (¬board[17] V ¬board[98]) ∧
   (¬board[17] V ¬board[107]) ∧
   (¬board[17] V ¬board[170]) ∧
   (¬board[17] V ¬board[179]) ∧ 
   (¬board[17] V ¬board[188]) ∧
   ** this group makes element 2 of subgrid 0 distinct from elements in row 0 **
   (¬board[18] V ¬board[81]) ∧
   (¬board[18] V ¬board[90]) ∧
   (¬board[18] V ¬board[99]) ∧
   (¬board[18] V ¬board[162]) ∧
   (¬board[18] V ¬board[171]) ∧
   (¬board[18] V ¬board[180]) ∧
   ...
   (¬board[26] V ¬board[89]) ∧
   (¬board[26] V ¬board[98]) ∧
   (¬board[26] V ¬board[107]) ∧
   (¬board[26] V ¬board[170]) ∧
   (¬board[26] V ¬board[179]) ∧
   (¬board[26] V ¬board[188]) ∧
   ** this group makes element 0 of subgrid 1 distinct from elements in row 0 **
   (¬board[81] V ¬board[162]) ∧
   (¬board[81] V ¬board[171]) ∧
   (¬board[81] V ¬board[180]) ∧
   ...
   (¬board[89] V ¬board[170]) ∧
   (¬board[89] V ¬board[179]) ∧
   (¬board[89] V ¬board[188]) ∧
   ** this group makes element 1 of subgrid 1 distinct from elements in row 0 **
   (¬board[90] V ¬board[162]) ∧
   (¬board[90] V ¬board[171]) ∧
   (¬board[90] V ¬board[180]) ∧
   ...
   (¬board[98] V ¬board[170]) ∧
   (¬board[98] V ¬board[179]) ∧
   (¬board[98] V ¬board[188]) ∧
   ** this group makes element 2 of subgrid 1 distinct from elements in row 0 **
   (¬board[99] V ¬board[162]) ∧
   (¬board[99] V ¬board[171]) ∧
   (¬board[99] V ¬board[180]) ∧
   ...
   (¬board[107] V ¬board[170]) ∧
   (¬board[107] V ¬board[179]) ∧
   (¬board[107) V ¬board[188]) ∧
There are another 9 families of column constraints which are similar to the row constraints and are omitted.