The article suggests using Boolean logic, so let's apply it: One way to solve this is to introduce a Boolean variable for each of A,...,G, and to use 1 to denote that a statement is true, and also to denote that the corresponding person tells the truth. It then remains to relate the truth of each statement to the truthfulness of the person making the statement.
In Prolog, we can express these relations with CLP(B), constraint logic programming over Boolean variables:
?- use_module(library(clpb)).
true.
?- sat(G),
sat(E),
sat(C =:= ~D),
sat(A =:= (B =:= (C =:= (D =:= (E =:= (F =:= ~G)))))),
sat(~A),
labeling([A,B,C,D,E,F,G]).
Yielding 4 solutions that satisfy all constraints:
G = 1, E = 1, C = 0, D = 1, A = 0, B = 0, F = 1
; G = 1, E = 1, C = 0, D = 1, A = 0, B = 1, F = 0
; G = 1, E = 1, C = 1, D = 0, A = 0, B = 0, F = 1
; G = 1, E = 1, C = 1, D = 0, A = 0, B = 1, F = 0.
From this, it is clear that there are 3 engineers, in all possible situations consistent with the description.
If we omit the labeling/1 goal which enumerates all solutions, then we get a symbolic representation of all remaining constraints:
G = 1, E = 1, A = 0, clpb:sat(C=:=D#B#F), clpb:sat(C=\=D).
From this, it is clear that there are at least 2 engineers in every solution: A (as stated in the description of the puzzle), and either C or D (but not both).
Tested with Scryer Prolog.