The Liar’s paradox
This seemingly simple statement is “The Liar’s Paradox”:
“This statement is false.”
Let’s use the symbol \(S\) to represent the quoted statement as a whole. Then the statement reads: not \(S\).
Because we're given this information, we’ll add it to our list of givens:
1.  \(S\)  Assumption 
2.  not \(S\)  Assumption 
Now there is one statement that we should never be able to derive from this: \(X\) = “Deductive logic is flawed.”
But watch as deductive logic forces us to that very conclusion:
3.  \(S\) or \(X\)  Addition using (1) 
4.  \(X\)  Disjunctive argument using (3) and (2) 
When given valid assumptions, deductive logic is infallible. However, when given paradoxical assumptions, deductive logic fails catastrophically.
The trouble is that it’s not always obvious whether our assumptions are paradoxical. Paradoxes can be very subtle. That leaves us in a perpetual state of anxiety about whether our proofs are actually valid.
A lot of thought has gone into this, and the results are less than satisfying.
However, there is a clean solution: We can replace deductive logic with a simpler and more useful system that works at least as well for valid assumptions, and can also handle paradoxes.
Replace deductive logic? I know that sounds crazy, but bear with me: This approach is absolutely beautiful and, surprisingly, also familiar.
The solution
In logic, we take a statement, such as “It’s raining,” and we replace it with a symbol like “\(R\).” If it’s not raining, then we write “not \(R\).” This seems so reasonable that no one would ever think to challenge it. But it is, in fact, a very strange thing to do.
In algebra, we would never take an equation, such as “\(x = 1\),” and replace it with a symbol like “\(X\).” We prefer to keep the variable separate from the value, so we can reason about them independently.
We should be doing the exact same thing for logic.
Let’s take a statement, such as “It’s raining,” and represent it like this: “\(r = \mathrm{true}\).” If it’s not raining, then: “\(r = \mathrm{false}\).” This seems like a small thing, but it’s huge: It allows us to reason about \(r\).
Our assumptions (e.g. “It’s raining”) become equations (e.g. “\(r = \mathrm{true}\)”), which we solve. The solutions are the value(s), if any, that are compatible with all of our assumptions.
The process of solving a system of equations is like constructing a proof in deductive logic. But solving equations is faster, yields more information, and is totally immune to logical paradoxes.
Let’s see this is action!
Example
Does \(S\) logically follow from the following assumptions?
1.  not \(P\)  Assumption 
2.  if \(Q\) then \(P\)  Assumption 
3.  if (not \(Q\)) then \(R\)  Assumption 
4.  if \(R\) then \(S\)  Assumption 
The answer is yes, and here is a formal proof using deductive logic:
5.  not \(Q\)  Modus tollens using (2) and (1) 
6.  \(R\)  Modus ponens using (3) and (5) 
7.  \(S\)  Modus ponens using (4) and (6) 
Although this was an easy example, you can already see that it will become difficult to construct deductive proofs in the future:

We don’t know in advance whether our intended result is true, so we may be searching in vain for a proof that does not exist.

There are many rules of inference. At every step of the way, we have to decide whether any of those rules might apply to any combination of the statements in our evergrowing list.

Even after we’ve recognized an applicable rule and have added it to our proof, we have no idea whether that step has actually brought us closer to our intended conclusion. The whole process feels a lot like “stumbling around in the dark.” Indeed, proofs are often greatly simplified after the fact.

It’s not obvious whether we’re dealing with a paradox. If the assumptions are paradoxical, then we’ll have to throw out all of our work, and any work that depends on it.
Fortunately, there is a better way!
Let’s start with the first constraint: “not \(P\).”
First, we’ll turn this into an equation:
not \(p\) = true
Now, what value of \(p\) would satisfy this equation? I bet you can guess! But let’s explicitly list the two possible values for \(p\), so we can show our work:
\(p\) 

false 
true 
Now let’s calculate “not \(p\)” for each possibility:
\(p\)  not \(p\) 

false  true 
true  false 
And cross out any values that that fail to satisfy the assumption (not \(p\) = true).
\(p\)  not \(p\) 

false  true 
true  false 
That leaves us with just:
\(p\) 

false 
And we’ve made our first logical deduction:
\(p\) = false
Now let’s apply the rest of the constraints. We’ll go through the last three constraints much faster this time:
\(p\)  \(q\)  if \(q\) then \(p\) 

false  false  true 
false  true  false 
\(p\)  \(q\)  \(r\)  if (not \(q\)) then \(r\) 

false  false  false  false 
false  false  true  true 
\(p\)  \(q\)  \(r\)  \(s\)  if \(r\) then \(s\) 

false  false  true  false  false 
false  false  true  true  true 
And we’re done! There is one solution, and we can read it out:
\(p\)  \(q\)  \(r\)  \(s\) 

false  false  true  true 
Not only did we prove that \(s\) = true, but we also discovered the truth value of every other variable as well. And that gives us a way to check the truth of any statement involving \(p\), \(q\), \(r\), or \(s\).
For example, does (\(P\) or \(R\)) and \(S\) follow logically from the four initial assumptions?
The answer is yes, because (\(p\) or \(r\)) and \(s\) = true for every solution:
\(p\)  \(q\)  \(r\)  \(s\)  (\(p\) or \(r\)) and \(s\) 

false  false  true  true  true 
Does \(Q\) and \(S\) follow logically from the four initial asumptions?
The answer is no, because there is a counterexample:
\(p\)  \(q\)  \(r\)  \(s\)  \(q\) and \(s\) 

false  false  true  true  false 
This is a very simple, and very useful, system.
Furthermore, it completely protects us from logical paradoxes.
Paradoxes
Let’s try to reproduce the paradox from earlier, where deductive logic fails catastrophically:
1.  \(S\)  Assumption 
2.  not \(S\)  Assumption 
3.  \(S\) or \(X\)  Addition (1) 
4.  \(X\)  Disjunctive argument (3 and 2) 
If our new way of reasoning is sound, then we won’t be able to infer \(X\).
Now let’s get started:
\(s\)  \(s\) 

false  false 
true  true 
\(s\)  not \(s\) 

true  false 
And we’re done. You can see that there are no solutions:
\(s\) 

There is no value for \(s\) that could ever satisfy our contradictory assumptions.
This is a useful, meaningful result. And note that there was no way to infer \(X\): we simply could not reach an illogical conclusion.