<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&gt;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>&gt;</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>&nbsp;<br>&nbsp;</p>

<p>&nbsp;<br>&nbsp;</p>

<p>&nbsp;<br>&nbsp;</p>

<p>&nbsp;<br>&nbsp;</p>

<p>&nbsp;<br>&nbsp;</p>

</body>

</html>