<html>
<head><title>QuickTable</title>
<script language='javascript'>
function parselogic (info,truths,symtable) {
var i=0;
var value1='';
var value2='';
var neg1='';
var neg2='';
var para=0;
var passit='';
var operator='';
var item=info.charAt(i);
if (item=="~")
{
neg1='~';
item=info.charAt(++i);
}
if (item=='(')
{
item=info.charAt(++i);
para=1;
while (para>0 && info.charAt(i))
{
if (item==")")
para--;
if (item=="(")
para++;
if (para>0)
passit+=item;
item=info.charAt(++i);
}
value1=parselogic(passit,truths,symtable);
}
else
{
value1=truths[(symtable.indexOf(info.charAt(i++)))];
}
para=0;
operator=info.charAt(i++);
if (operator!='*' && operator!='v' && operator!='=' && operator!='>')
return ((neg1=='~')?negate(value1):value1);
passit='';
item=info.charAt(i);
if (item=="~")
{
neg2='~';
item=info.charAt(++i);
}
if (item=='(')
{
item=info.charAt(++i);
para=1;
while (para>0 && info.charAt(i))
{
if (item==")")
para--;
if (item=="(")
para++;
if (para>0)
passit+=item;
item=info.charAt(++i);
}
value2=parselogic(passit,truths,symtable);
}
else
{
value2=truths[symtable.indexOf(info.charAt(i))];
}
if (neg1=='~')
value1=negate(value1);
if (neg2=='~')
value2=negate(value2);
return truthtable(value1,operator, value2);
}
function truthtable (value1, operator, value2) {
if (operator=="v")
return (((value1=='T') || (value2=='T'))?'T':'F');
if (operator=="*")
return (((value1=='T') && (value2=='T')?'T':'F'));
if (operator==">")
return ((value1=='T')?((value2=='T')?'T':'F'):'T');
if (operator=="=")
return ((value1=='T')?((value2=='T')?'T':'F'):((value2=='T')?'F':'T'));
}
function negate(value1) {
return ((value1=='T')?'F':'T')
}
function gimmevalues(h,truths) {
var truval=0;
topnum=Math.pow(2,truths.length);
while (truval<truths.length ) {
topnum=topnum/2;
if (h-topnum>=0) {
h=h-topnum;
truths[truval]='F';
}
else
truths[truval]='T';
truval++;
}
return truths;
}
function startit() {
var validity='valid';
var i=0;
var symtable=''
var truths='';
var item=document.forms[0].elements[0].value;
var info='';
var h=0;
var j=0;
var list=''
sensub=0;
var space=' ';
var contra=1;
var taut=1;
var line= '----------------------------------------------------------------------';
var sentence=new Array;
sentence[0]='';
var flip=1;
var testit='';
while (item.charAt(i++)) {
info=item.charAt(i-1);
if (info=='.' && item.charAt(i))
{
sensub++;
sentence[sensub]='';
}
else if (info !='.' && info !=' ')
sentence[sensub]+=info;
}
i=0;
info='';
while (item.charAt(i++)) {
info=item.charAt(i-1);
if ((" .*~v=>)("+symtable).indexOf(info)==-1)
{
symtable+=info;
}
}
truths= new Array(symtable.length);
document.forms[1].save.value=symtable+' | ';
for (h=0;h<sentence.length;h++)
document.forms[1].save.value+=sentence[h]+' | ';
document.forms[1].save.value+=newline()+line.substring(1,document.forms[0].grid.value.length)+newline();
for (h=0;h<Math.pow(2,truths.length);h++)
{
truths=gimmevalues(h,truths);
item+=')';
list='';
for (j=0;j<truths.length;j++)
list+=truths[j];
document.forms[1].save.value+=list+' |'
flip=1;
testit=new Array(sentence.length);
for (j=0;j<sentence.length;j++){
testit[j]=parselogic(sentence[j],truths,symtable);
if (j<sentence.length-1)
if (testit[j]=='F')
flip=0;
document.forms[1].save.value+=space.substring(0,Math.round(sentence[j].length/2))+testit[j]+(space.substring(0,parseInt(sentence[j].length/2)))+' |';
}
if (flip==1 && testit[sentence.length-1]=='F' && sentence.length>1)
{
document.forms[1].save.value+='#';
validity='invalid';
}
if (sentence.length==1){
if (testit[sentence.length-1]=='F')
taut=0;
else
contra=0;
}
document.forms[1].save.value+=newline();
}
if (sentence.length>1)
document.forms[1].valid.value='This argument is '+validity;
else if (taut==1)
document.forms[1].valid.value='This statement is a tautology';
else if (contra==1)
document.forms[1].valid.value='This statement is a contradiction';
else
document.forms[1].valid.value='This is a contingent statement ';
document.forms[0].grid.value=document.forms[1].save.value;
}
function newline()
{
return (navigator.appName.substring(0,9)=="Microsoft")?'\r':'\n';
}
</script>
<body>
<center><font size=+3>QuickTable</font><br>
<table border=1><tr><td>symbols:</td><td>meanings:</td><td rowspan=7 valign=top>*This program assumes that if there is more than one statement, it is an argument and the last sentence is the conclusion.<br>*A pound sign (#) at the far right of a row indicates that those truth values show that the argument is invalid<br>*Never have more than two values in each in a set of parentheses. e.g. Don't write Bv(A*B*C)<p>
<font size=+1><u>Examples:</u></font><p>
~pv(b=e).r*~(e>r).~b=(p*r)<br>
~(a=(c*d)).b>(d>(a*(c=a))).~b.~a<br>
(l>(a*(b=~a)))*~l<br>
A=B. ~( Av (~B*C) ). C> ( BvA ). C*B</td></tr>
<tr><td>~</td><td>negation</td></tr>
<tr><td>*</td><td>conjuction</td></tr>
<tr><td>v</td><td>disjunction</td></tr>
<tr><td>=</td><td>biconditional</td></tr>
<tr><td>></td><td>conditional</td></tr>
<tr><td>.</td><td>sentence delimiter</td></tr></table>
<form method=post action="javascript:startit();"><input type='text' size=60 value="enter statements here"><input type=button value="Parse it!" onclick="startit();"><br><textarea name="grid" rows="18" cols="70" ></textarea></form><form><input type='text' name=valid size=33><input type=hidden name=save></form>
</center>
<p> <br> </p>
<p> <br> </p>
<p> <br> </p>
<p> <br> </p>
<p> <br> </p>
</body>
</html>