>>961-967
こういうのとか

s(A,B,C,D) :-
( A=true; A=false),
( B=true; B=false),
( C=true; C=false),
( D=true; D=false),
( A=true -> D=false ; true),
( A=false -> D=true ; true),
( B=true -> (A=true ; D=true); true) ,
( B=false -> A=false,D=false ; true),
C=B.

考え方は>>966と同じ
>正直者は必ず本当のことを言い、うそつきは必ずうそをつくという条件があるので
>Aが正直者であるかどうかとAが言っていることが正しいかどうかの真偽は同じになる

SWI-Prologで実行したら解は2つ

A = B, B = C, C = true, D = false
A,B,Cが正直者でDが嘘つき

A = false, B = C, C = D, D = true
Aが嘘つきでB,C,Dが正直者

これと同じだな
>これはBとCは正直、AとDのうち一人は正直でもう一人は嘘つきだけど
>どちらが嘘つきかは分からない