Monday, March 27, 2006

Meta-Geek Blogging

Good Math, Bad Math's post on logic - specifically the introduction - got me thinking about a related topic. I've always been frustrated at the ease with which people accuse others of hypocrisy, inconsistency or being illogical (see for instance my post from a few days ago). I think the accusation tends to follow from erroneous assumptions about both the system being used to judge the arguments as well as the underlying model. I think I've come up with a resolution. It's a formal system for judging not only arguments but any activity. When it's applied to a variety of models, it works really well. I'll first introduce the basics of the system, then some refinements, and then show how it can be applied to a few models.

We'll use a version of the typed Lambda Calculus to construct the system. The Lambda Calculus is a formal system used to perform computations in terms of the application of functions to arguments. The typed version places constraints on what values arguments may take. The Lambda Calculus is one fundamental model of computation that is popular for specifying the semantics of computer programming languages. Since the system we'll be developing is an algorithm, the Lambda Calculus is well suited for our task.


The system partitions actions performed by people into one of two classifications. First, we assume the existence of three type classes, which can be thought of as sets. The first, denoted P, is the set of all people. The second, denoted A, is the set of all actions which people can perform, and third is the set J of judgments, the members of which are just the strings "Good" and "Bad". Given these sets, our job is to construct a function F which, given an element 'p' of P and an element 'a' of A will result in one of the members of J ("Good" or "Bad"). More formally, we write

F :: (P, A) -> J

for the type of a function F which takes any pair consisting of a person and an action and results in a judgment.

Now that we've specified the type of the function, we need to actually define the function itself. For this, we're going to introduce another type U, which is the set of all subsets of P. Given this set we can assume the existence of a variable 'u' which is a member of U. We will also assume the existence of a primitive function called isMember which results in 'true' if some element 'p' of P is in 'u' (remember, the variable 'u' is itself a set) and 'false' otherwise (we take boolean to be the set that consists of just 'true' and 'false'). We'll show the typing of isMember, but not the implementation since the implementation is irrelevent (we've also left out the implementation of 'u' - if one were writing this function for execution on a computer, it would likely be a list, but again, that is irrelevent to the application of the system) Thus:

u :: U
isMember :: P -> boolean
F(p, a) = if isMember(p) then "Good" else "Bad" .

And there is our function, and thus our formal system*. We can demonstrate the use of the system with some simple applications. In these demonstrations we'll show the steps of reduction (application) in the function. In further demonstrations we'll assume that the reductions are understood. In our first, we let 'u' be the empty set:

F('jayinbmore', 'shaves in the morning')
=> if isMember('jayinbmore') "Good" else "Bad"
=> if 'false' "Good" else "Bad"
=> "Bad"

or in English:

If 'jayinbmore' is a member of the empty set, return "Good" otherwise return "Bad".
Since 'jayinbmore' is not a member of the empty set, return "Bad".

Note that with 'u' being empty, we can use any person as the argument 'p' and we will always get "Bad" as a result. Thus we can rephrase the above statement in English as:

It is bad when anyone shaves in the morning.

Here is another example. In this case, we let 'u' be the set consisting of just the members of P.

F('jayinbmore', 'shaves every morning')
=> if isMember('jayinbmore') "Good" else "Bad"
=> if 'true' "Good" else "Bad"
=> "Good"

Conversely to our first example, in this case any argument 'p' will result in "Good", so we can rephrase this in English as:

It is good when anyone shaves in the morning.


Note that the results of the function depend heavily on the contents of 'u'. In fact, the function is meaningless without specifying the contents of 'u', so in order to use our system, one requirement is that 'u' is specified. We call this condition "'u' specificity'" or "U.S." for short.

Up until now we have only achieved "U.S." by specyfing either the empty set or the entirety of P to judge actions. This is very useful for judgments of the actions of everyone. However, we can see far more interesting results when we assign to 'u' some non-empty subset of the members of P:

u = { 'Men' }
F('jayinbmore', 'shaves in the morning') => "Good"

We see here that P has implicitly been partitioned into two non-empty subsets, 'u', which encompasses all men, and another, anonymous set, which consists of those members of P which are not men. When such a partitioning exists - that is, when both 'u' and it's converse are non-empty - we say that we have a condition called "Total Heterodoxy Emergent Mode" ("T.H.E.M.").

Thus, we have defined two very important conditions under which our system best operates. When both "U.S." and "T.H.E.M." conditions are met, we have a very powerful system for judging actions of people. I call this system the "Blogospheric Algebra for Learning Kinds of Actions' Nature" or "B.A.L.K.A.N." for short, and the application of the system is called "Balkanization".

As we can see, the conditions for Balkanization insist that both 'u' and it's converse be defined. I believe this demonstrates why hypocrisy is so easily thrown around as an accusation. The parties involved are implicitly engaging in Balkanization, but they have not agreed on (or fail to understand) the "U.S." and "T.H.E.M." conditions. A perfect instance is the post of mine I linked. I assumed that part of being a member of the party founded on moral absolutes meant if you claim you have a set of principles you should live by them. But correct Balkanization reveals my error:

u = {'Wealthy Republicans'}
F('Ben Domenech', 'makes living off the taxpayer') => "Good"

As you can see, the above specification of 'u' results in both "U.S." and "T.H.E.M." conditions, and thus we see that there is in fact no hypocrisy at all. Another instance also involves Ben Domenech. Ben resigned from the Washington Post due to accusations (and eventual proof) of plagiarism (there is, in fact, tons more, but that one came via NRO so...). Some have taken note of Mr. Domenech's own words on the subject of plargiarism and suggested this has an air of hypocrisy. Well, if we Balkanize the situation we realize this is not the case:

u = {'Ben Domenech'}
F('Ben Domenech', 'engages in plagiarism') => "Good"


But enough with poor Ben. Let's try it with something a little larger scale. Back in 1998 some people said that Bill Clinton should be impeached because he broke the law. Other people disagreed. Now, with the NSA wire-tap program, we know that George Bush has broken the law, and in general, the people who said Bill Clinton should be impeached are defending George Bush, and the people who disagreed with the Clinton impeachment think Geroge Bush should be impeached. How to resolve this? We should see by now. We Balkanize! Our first case:

u = {'Republicans'}
F('Bill Clinton', 'breaks the law') => "Bad"
F('George W. Bush', 'breaks the law') => "Good"

However,

u = { 'Democrats'}
F('Bill Clinton', 'breaks the law') => "Good"
F('George W. Bush', 'breaks the law') => "Bad"


Now I'd like to tackle a situation a little more complex. It's now well known that America is really divided into "Blue States" and "Red States" and that this division is as a result of many irreconcilable cultural differences. For instance, it's common knowledge that people who reside in Red States drive American made SUVs and that people who reside in Blue States drive Volvos. It is also well known that both types of vehicles use internal combustion engines and thus force their drivers to rely on an ever dwindling oil supply. However, both sides can (and often do) claim moral superiority and thus allow themselves the luxury of their tastes. How to capture this supposedly "illogical" state of affairs? Again, we Balkanize!

u = {'Citizens of the United States'}
F('Person who drives an SUV', 'spends money on gasoline') => "Good"
F('Person who drives a Volvo', 'spends money on gasoline') => "Good"

The reader may protest that we haven't characterized the situation at all! However, take note of a very common condition: Despite appearences, two elements of P may in fact be subject to the same judgement. As should be expected, sometimes the application of a system reveals underlying truths which are not obvious given the definitions. When the assumptions suggest that two 'p' are subject to different judgements, but correct Balkanization shows that they are not, we call this the "Standard Technique for Unification of Potential Inference Division" ("S.T.U.P.I.D."). In our above example "S.T.U.P.I.D" Balkanization would lead us to assume that people who drive Volvos are subject to different judgements than people who drive SUVs, but correct Balkanization shows us they are not. While this may not reflect the reader's prejudices, it does accurately reflect, for instance, the views of oil company executives.

And this concludes our survey of Balkanization. Sorry the exposition was so long. However, if nothing else, I hope to have demonstrated that when correctly applied, mathematics is a great help.

*The observant reader may wonder "Why is an action 'a' an argument to F when it's not used in the definition? Doesn't this make the outcome totally independent of the action?". The answer to that is "exactly".