Friday, November 28, 2014

Feedback for somerby.net/mack/logic

Anyone who wishes to comment on somerby.net/mack/logic, please leave your comments here.

Sunday, August 17, 2014

Perl GCD

O Perl, how I love you.  Here is a Perl subroutine that finds the greatest common divisor of two integers:

sub gcd
{
  (my $x, my $y ) =

    map abs, grep { $_ } @_;
  $y ? gcd( $y, $x % $y ) : $x
}


and here is  a Perl subroutine that finds the greatest common divisor of any number of integers (including 0 integers, for which it returns undef):

sub gcd
{
  (my $x, my $y, my @others) =

    map abs, grep { $_ } @_;
  $y ? gcd( $y, $x % $y, @others ) : $x
}


note the difference, and how small it is.

An Argument Against the Possibility of Transworld Identity of Indiscernibles

I'm going to attempt prove that transworld identity of indiscernables is impossible. Maybe this is unnecessary because either it is obvious to anyone who cares or proving it is easy enough that it hardly needs to be done, but I'm going to do it anyway. I would like to establish its truth because of my modal symbolic logic app, somerby.net/mack/logic. Right now, it does not handle transworld identity in a reasonable way. I need to fix this. My plan is to change the algorithm so it operates under the assumption that transworld identity of indiscernables is impossible, which is (in my opinion) the correct behavior.

Let me explain what I mean by "Transworld Identity of Indiscernibles". Transworld identity is when an object is considered to exist in two different possible worlds. Let me explain that I mean by "possible worlds", too. Abraham Lincoln existed in the real world. In the imaginary world of the movie Abraham Lincoln: Vampire Hunter, Abraham Lincoln also existed and, in addition to his duties as president, hunted vampires. These two Abraham Lincolns are supposed to be the same person somehow; if they weren't, then Abraham Lincoln: Vampire Hunter would not have the question "what if Abraham Lincoln had to save his country from vampires" to drive its plot, and it would just be about a bearded man in a stovepipe hat killing vampires. Or maybe it was. I don't know. I haven't seen the movie. So here's a less fantastical example: consider the statement "if I hadn't been caught in traffic, I would have been at the meeting on time". It's an ordinary, plausible thing to say, and it mentions two possible worlds: the real world, where I was late for a meeting, and a hypothetical world where I was not late for that same meeting. The statement implies that I exist in both possible worlds; there's late me, and then there's punctual me, and they are both supposed to be me somehow. That's transworld identity.

Identity of Indiscernibles is a principle that defines one particular kind of identity. This principle is that two things are identical if and only if it is impossible to distinguish them in any way. It is the kind of identity that is represented by the equals sign (=) in math and in symbolic logic. To state the principle in mathematical terms, x = y if and only if there is no statement φ = "... α ..." such that φ is true when x is substituted for α everywhere in φ and φ is false when y is substituted for α everywhere in φ.

So we have this thing called "Transworld Identity" and we have another thing called "Identity of Indiscernibles". What about Transworld Identity of Indiscernibles? Is it ever true that x = y when x and y are in two different worlds? I say "no", and here is my argument:

Suppose object o1 exists in possible world w1 and object o2 exists in possible world w2. Suppose further that w1 and w2 are different. If they are different, then there must be some quality Q which w1 has which w2 does not have; else how are they be different? Supposing all of that, then the statement "o1 exists in a world with quality Q" is true and the statement "o2 exists in a world with quality Q" is false. Therefore, by the definition of "identical" given above, o1 and o2 are not identical. ∎

Saturday, March 29, 2014

Investigating Logical Arguments with somerby.net/mack/logic

I created a web application that evaluates logical arguments.  To provide an example of how it might be used, I'm going to use it to help me do a brief investigation of two modal arguments about the existence of God.  The first is Alvin Plantinga's modal argument for the existence of God.  The second is Juan Manuel Correa's counter-argument against the existence of God (or at least against the soundness of Plantinga's argument).  Statements of both arguments can be found on Wikipedia at http://en.wikipedia.org/wiki/Ontological_argument#Alvin_Plantinga.

First off, I'm going to strip the arguments down to what I think is the essential logic that makes both arguments work.  I don't suppose this will be agreeable to everyone, at least not without some persuasion, but I'll just go with it for now and try to defend myself later if I have to.  So, for Plantinga's argument I will use:
<>G->[]G
<>G
->
G
Which is saying,
  • If God exists in some possible world, God exists in every possible world.
  • There is a possible world in which God exists.
  • Therefore, God exists.
For Correa's counterargument, I will use:
<>G->[]G
<>~G
->
~G
Which is saying,
  • If God exists in some possible world, God exists in every possible world.
  • There is a possible world in which God does not exist.
  • Therefore, God does not exist.
 The web application, which, in this post, I will call "the decider", decides that both arguments are valid.  So what's going on?  There are three premises between the two arguments, and each seems plausible.  I suspect the fact that both arguments are valid in spite of their contradictory conclusions means that the three premises are logically inconsistent with each other.  So I try them out in the decider:

<>G->[]G
<>G
<>~G
It tells me they are impossible, i.e. logically inconsistent with each other.  So we can't believe all of them at once.  Which one should I doubt?

Before I try to answer that question, I want to check that neither argument is trivially valid.  I mean, I want to be sure that neither conclusion follows from its premises simply because those premises contain a contradiction and anything follows from a contradiction.  So I test the premises by themselves in the decider.
<>G->[]G
<>G
Then
<>G->[]G
<>~G
The decider says both pairs are contingent.  So no problem there.   What about the two differing premises?  The decider says
<>G & <>~G
is possible, which it just what I expect, so I could believe both.  Which is what I'm inclined to do.  I can imagine a world with God, and I can imagine a world without God.  Of course, just because I can imagine them doesn't mean that there is not some contradiction hiding in either conception.  But I'm still most inclined to drop Premise #1.  It's obvious that []G and <>~G are incompatible, and it's not clear to me that there ever could be such a thing as a necessary being.  Some logics entail that at least one being must exist; See Proposition 24.52 in Principia Mathematica for one.  Even so, just because you can prove that at least one object exists doesn't mean you can prove that it has any nontrivial properties, like divinity.  And I'm not enamoured of the idea that God has every possible perfection; necessary being being one of those perfections.  Clearly, if a being has every possible perfection, it must smell like freshly-baked chocolate chip cookies at least some of the time.  And play a face-melting guitar solo every time it picks up a guitar.  Unless someone is taking a nap within earshot.  But I'm a Christian, and I'm sure both of these perfections are irrelevant to the Gospel, so I don't care.

So, to conclude, I will assert 1. that God exists in some possible world.  2. There is a possible world where God doesn't exist.  Therefore, Premise #1 is false.  

To summarize my reasoning in symbolic form:
<>G
<>~G
[]( (<>G&P) ->  C )
[]( (<>~G&P) -> ~C )
->
~P
Where  P is premise #1, C is the conclusion of  Plantinga's argument, and G is as defined above.

The decider confirms that this argument is valid.

One more thing I'd like to point out: when considering modal arguments for the existence of God, one should be careful about the statement "It is possible that God exists."  It might be interpreted two different ways.  First, as "there is a possible world in which God exists".  The second, as "I don't know anything that precludes the existence of God."  The first is easy to represent in terms of modal logic, but the second is the more natural interpretation.  In my analysis, I assumed the first.  If I were to choose the second interpretation, my analysis of these two arguments would have to be different.

Tuesday, March 11, 2014

Linking Ada, C and Haskell Together Statically

So, you want to statically link object code from C, Ada and Haskell into one executable? Probably not. But how could that be done, anyway? Many programming languages provide a means both of exporting subroutines to make them callable from C code and importing C functions so they can call them. You can easily find documentation on how to statically link C to one other language. But what if you want link C with two different languages in the same project? Just compile all of the code separately and link the object files, right? Haha. Not so fast! Programming languages have different run-time systems; they have their own libraries and they may use more than just a stack and a heap and a space for global variables. So if you want to include object code from several languages in a single executable, you'll often have to build run-time code for each application and link it in to the executable as well. In this post, I'm going to demonstrate how you can accomplish this in a project that uses C, Ada and Haskell.

Click here.






Saturday, February 01, 2014

somerby.net/mack/logic

Here's a web application that decides simple statements in a fragment of first-order symbolic logic: somerby.net/mack/logic. It's based on that .NET console application I was calling "Monadic Predicate Logic".