Answer:
This puzzle does work, the solution is that Statement 2 is the lie.
For my explanation, I will write like one would write boolean expresions in java. If I wrote "1" that means "1 is true". Same idea with "2" or "3". "!" means not, so "!1" means "1 is not true". "&&" means "and", "||" means "or". Parenthesis work like in math. "if(x){y}" means "if x is true, y must be true" "==" means "is equal to" (I hope that was obvious...), this is not java but "--->" means "simplifies to". Also "und" means "undefined"
Translating the problem to java gives the following:
Statement 1: ((!1 && 2) || (1 && 3)) == 1
Statement 2: if(2){!1 && 3} == 2
Statement 3: !(1 && 2) == 3
Game rules: if(1 && 2){!3}, if(1 && 3){!2}, if(2 && 3){!1}, if(!3){1 && 2}, if(!2){1 && 3}, if(!1){2 && 3}
The best strategy is to assume each statement is false and use proof by contradiction to see if it works out or not.
Step 1: Assume Statement 1 is false:
Because of game rules, 2 && 3
Lets falsify statment 1: (!1 && 2) || (1 && 3) == 1
(!1 && 2) || (1 && 3) == false
---> (true && true)||(false && true) == false
---> true || false == false
---> true == false
This is clearly impossible so !1 == und. 1 must be true.
Step 2: Assume Statement 3 is false (I'm skipping 2 for a reason):
Because of game rules, 1 && 2
Lets falsify statment 3: !(1 && 2) == 3
!(1 && 2) == false
---> 1 || 2 == true; This is because of some law that I forgot the name of, but if you work it out its true. I'll give the first comment with the name of the law a shoutout, thanks in advance.
true || true = true; substituted 1 and 2 because of game rules
This obviously checks out, but before saying 3 can be false, we must check if 1 and 2 can be true. I have already proven that 1 must be true. Can two be true?
if(2){!1 && 3} == true
und && 3 == true
1 cannot be true, so 2 can't be true either. Therefore, 3 must be true.
Step 3: Assume Statement 2 is false:
Because of game rules, 1 && 3
Lets falsify statment 2: if(2){!1 && 3} == 2
if(2){!1 && 3 == true} == false
---> if(2){und && 3 == true} == false
---> if(2){und == true} == false
This clearly works as undefined can never equal true. 2 must be false.
All this work finally shows that:
The only possible solution is that Statement 2 is the lie, and Statements 1 & 3 are both true.
This was a great puzzle. I actually switched my answer 7 times in the more fun puzzle solve "Is it possible to use these three statments in a two truths and a lie?" when compared to "Which statment is a lie?" Thanks for the great puzzle, I had a lot of fun solving it!