Logic 1.0 Documentation
Thank you for taking an interest in my work. What will follow will be a brief explanation of the program mechanics, assuming the code, or executable, has not been altered in any way - if it has been changed, I have no way of knowing the dynamics of that change and thus would not know how to use the modified code. In other words, if you mess with it, I won't know what you did, of course.
Running the Executable
I include this section for those people new to the world of double-clicking. Download the executables from my website. Decompress the file and double click on it. It is now running; look at the active window.
Entering the Argument
This is where it gets a little hairy. Because there are no Unicode are ASCII characters that specifically describe logic connectives, it is up to the programmer to make his own. Below is listing of okay characters to use as terms and okay characters to use as connectives:
A through Z ........ Twenty-six recognized terms.
Lowercase characters are treated as uppercase.
Lowercase 'v' is treated as a connective.
& ........ The conjunction operator.
'and'
In Standard Form, it is represented as a dot.
v ........ The disjunction operator.
'or'
In Standard Form, it is represented as a 'v'.
> ........ The conditional operator.
'only if' 'if ... then.'
In Standard Form, it is represented as a right-arrow.
< ........ The biconditional operator.
'If and only if'
In Standard Form, it is represented as a double-arrow.
- ........ The negation operator.
'not'
In Standard Form, it is represented as a tilde.
( ........ The left parenthesis.
Used for grouping and clarifying purposes.
) ........ The right parenthesis.
Used for grouping and clarifying purposes.
If you need an example, I have three different screen shot images available, more on the way if needed. They can be found at "http://logistics.sourceforge.net/files/files.html".
Making Sense of the Output
Once you have successfully entered an argument, new text will be spit out. The program has built-in protection from most, not all, syntax errors. In any case, what the program spits out is the program's interpretation of what you entered. The program parses, or breaks apart, the input into its constituent parts. For example, if you enter "(avb)>c," output will include each term involved in the argument, then the groupings, the premises, and finally the conclusion: a, b, c, avb, (avb)>c.
Next will be the preliminary truth table. Every possible combination of truth-values will be filled in for the terms in the form of Ts, trues, and Fs, falses. Based and these data, the program will evaluate the argument. But I need to explain more about the way truth-values are computed. Each term is either true, or it is false. In other words, each term has two truth-values when they are alone. When two terms are involved, there are four truth-value combinations; three terms give us eight combinations. In general, the total number of truth-value combinations is equal to two raised to the power of the number of terms. So if you use twenty-six terms, or every letter in the alphabet, there are 67108864 different combinations of truth-values. My computer, which runs at about 300 MHz, and has similarly old hardware, can only output about 15 rows of the truth table per second. It might be able to evaluate the argument in a timely fashion, but it would take roughly two months, and an incredible amount of memory, to display all of the rows of the truth table if twenty-six terms were used. It need also be said that if you feel compelled to evaluate an argument with more than ten or so terms, something went terribly wrong with your academic career. I would recommend using only nine or ten terms with a computer such as mine.
After all those truth-values are printed, the program evaluates the argument. Resultant truth-values are printed under their parent columns. Once this is complete the program searches for rows in the truth table in which all premises are true while the conclusion is false. It is paramount that you understand an argument can only be deductively invalid if and only if it is possible for all of its premises to be true while the conclusion is false. Since the rows of a truth table describe every possible combination of truth-values for an argument, any row in which the premises are true and the conclusion is false would represent a possibility that the argument is invalid. Remember, validity has very little to do with content and has everything to do with form.
Release Notes
All through the coding of this version I wanted to switch to Perl, no offense to all of those C++ fans out there. The reasons why I didn't are as such: Next term I am planning to take a course in the only programming course currently offered at my college, which unfortunately is C++. Also, C++ is widely used around the world and most serious developers will have a C++ compiler. What good would my work be to those who couldn't use it? And finally, I have several books on C/C++; I only have a little pocket reference for Perl. I will rewrite this in Perl, but if someone else wants to do it, go right ahead. Further versions of Logic will support the use of more than two premises; they will eventually include support for multi-character terms; and finally the most I am willing to go alone is a program that will take either symbolic or literal arguments. In the mean time, Winter Vacation is about to end and I need to focus the majority of my free time to studying. For the record, here is the timeline of this release:
December 20, 2002 -- Started development on the Logic Project
January 1, 2003 -- Spent the New Year fixing a tokenizing problem
January 4, 2003 -- Compiled the first version of the Logic program
January 8, 2003 -- SourceForge.net hosted the Logic Project
January 12, 2003 -- Documentation written for version 1.0 of Logic
How to Contact the Author
The author of Logic 1.0, and this document, is Andrew Brian Church. The easiest way to contact me is by e-mail: achurch@phreaker.net, or, s_Churc41@students.ccis.edu. If you have any questions, complaints, jokes, advice, or if you want to collaborate on further developments, do not hesitate to send me a message. If you want to give me money, don't. If you don't want to give me money, do. If you don't have any money, you're not alone, which is why this is all free. Keep track of this; it might be something someday.