Суперкомпиляция интерпретатора Лямбда-исчисления

Функции логики высказываний

 

index.htm - English text 

lambda.zip - архивированная директория. 

Используется пакет программ, доступный по адресам

Lambda calculus interpreter  ( http://drcjt.freeyellow.com/Lambda.html ) - головная страница,

Download the source code ( http://drcjt.freeyellow.com/lambda-1.00.tar.gz ) - пакет программ.

Пакет программ представлял собой аплет, поэтому головная программа Lambda.java была переделана.

Здесь мы рассматриваем суперкомпиляцию логических формул, записанных в Лямбда-терминологии. Фактически, получен компилятор логических Лямбда-формул в Ява-программы.

Суперкомпилируется метод test() в программе  lambda.java.

Специализация происходит по двум переменным:

Используются следующие логические операции: импликация, отрицание, конъюнкция и дизъюнкция. Их описание

    let true  = \x. \y. x
    let false = \x. \y. y
    let impl = \x. \y. x y true
    let not  = \x. x false true
    let or   = \x. \y. impl (not x) y
    let and  = \x. \y. not (or (not x) (not y))

Мы воспользовались тем свойством, что конъюнкция и дизъюнкция выражаются через  импликацию и  отрицание. 

Лямбда обозначается символом "\", в текстовых константах она раздваивается.

Остаточная программа вычисляет значение формулы для любого набора значений аргументов.

Перейдем с описанию 14 примеров. 

Все примеры оформлены по одному шаблону:

 

Пример 1.      x & (y | z)

strStart = "\\x. \\y. \\z. and x (or y z)";
int nVar = 3;
//--------------------------------------  25 sec - postprocessing...
	public static boolean test (final boolean[] param_18)
	{
	  if (param_18[0]
	  && (param_18[1] || param_18[2])) {
	    return true;}
	  else {
	    return false;}
	}
//--------------------------------------  27 sec - JScp version 0.0.72 

Пример 2.      x | (y & z)

strStart = "\\x. \\y. \\z. or x (and y z)";
nVar = 3;
//--------------------------------------  24 sec - postprocessing...
	public static boolean test (final boolean[] param_18)
	{
	  if (param_18[0]
	  ||  param_18[1] && param_18[2]) {
	    return true;}
	  else {
	    return false;}
	}
//--------------------------------------  26 sec - JScp version 0.0.72 

Пример 3.      Implication

strStart = "\\x. \\y. impl x y";
nVar = 2;
//--------------------------------------   8 sec - postprocessing...
	public static boolean test (final boolean[] param_18)
	{
	  if (param_18[0]
	  && !param_18[1]) {
	    return false;}
	  else {
	    return true;}
	}
//--------------------------------------   9 sec - JScp version 0.0.72 

Пример 4.      Identically true function 

strStart = "\\x. \\y. impl x (impl y x)";
nVar = 2;
//--------------------------------------  10 sec - postprocessing...
	public static boolean test (final boolean[] param_18)
	{
	  return true;
	}
//--------------------------------------  10 sec - JScp version 0.0.72 

Пример 5.      Implication (3 variable)

strStart = "\\x. \\y. \\z. impl x y";
nVar = 3;
//--------------------------------------  17 sec - postprocessing...
	public static boolean test (final boolean[] param_18)
	{
	  if (param_18[0]
	  && !param_18[1]) {
	    return false;}
	  else {
	    return true;}
	}
//--------------------------------------  18 sec - JScp version 0.0.72 

Пример 6.      Identically true function

strStart = "\\x. \\y. \\z. impl x (impl y x)";
nVar = 3;
//--------------------------------------  20 sec - postprocessing...
	public static boolean test (final boolean[] param_18)
	{
	  return true;
	}
//--------------------------------------  21 sec - JScp version 0.0.72 

Пример 7.      Other identically true function

\\x. \\y. \\z. impl (impl x (impl y z)) (impl (impl x y) (impl x z))
nVar = 3;
//--------------------------------------  39 sec - postprocessing...
	public static boolean test (final boolean[] param_18)
	{
	  return true;
	}
//--------------------------------------  41 sec - JScp version 0.0.72 

Пример 8.      Implication (4 variable)

strStart = "\\x. \\y. \\z. \\u. impl x y";
nVar = 4;
//--------------------------------------  37 sec - postprocessing...
	public static boolean test (final boolean[] param_18)
	{
	  if (param_18[0]
	  && !param_18[1]) {
	    return false;}
	  else {
	    return true;}
	}
//--------------------------------------  39 sec - JScp version 0.0.72 

Пример 9.      True only in two cases

\\x. \\y. \\z. or (and x (and y z)) (and (not x) (and (not y) (not z)))
nVar = 3;
//--------------------------------------  59 sec - postprocessing...
	public static boolean test (final boolean[] param_18)
	{
	  if (param_18[0]) {
	    if (param_18[1]
	    &&  param_18[2]) {
	      return true;}
	    else {
	      return false;}}
	  else {
	    if (param_18[1]
	    ||  param_18[2]) {
	      return false;}
	    else {
	      return true;}}
	}
//--------------------------------------  65 sec - JScp version 0.0.72 

Пример 10.      (x & y) | (z & u)

strStart = "\\x. \\y. \\z. \\u. or (and x y ) (and z u)";
nVar = 4;
//--------------------------------------  75 sec - postprocessing...
	public static boolean test (final boolean[] param_18)
	{
	  if (param_18[0]) {
	    if (param_18[1]
	    ||  param_18[2] && param_18[3]) {
	      return true;}
	    else {
	      return false;}}
	  else {
	    if (param_18[2]
	    &&  param_18[3]) {
	      return true;}
	    else {
	      return false;}}
	}
//--------------------------------------  82 sec - JScp version 0.0.72 

Пример 11.      (x | not x) & (y | not y) & z = true & true & z = z

strStart = "\\x. \\y. \\z. and (and (or x (not x)) (or y (not y))) z";
nVar = 3;
//--------------------------------------  50 sec - postprocessing...
	public static boolean test (final boolean[] param_18)
	{
	  if (param_18[2]) {
	    return true;}
	  else {
	    return false;}
	}
//--------------------------------------  55 sec - JScp version 0.0.72 

Пример 12.      Max True - (x & y) | (y & z) | (x & z)

strStart = "\\x. \\y. \\z. or (and x y)  (or (and y z) (and x z))";
int nVar = 3;
//--------------------------------------  47 sec - postprocessing...
	public static boolean test (final boolean[] param_18)
	{
	  if (param_18[0]) {
	    if (param_18[1]
	    ||  param_18[2]) {
	      return true;}
	    else {
	      return false;}}
	  else {
	    if (param_18[1]
	    &&  param_18[2]) {
	      return true;}
	    else {
	      return false;}}
	}
//--------------------------------------  52 sec - JScp version 0.0.72 

Пример 13.      Mostik

\\x. \\y. \\z. \\u. \\v. 
    or (or (and x y) (and z u)) (or (and x (and v u)) (and z (and v y)))
nVar = 5;
//-------------------------------------- 340 sec - postprocessing...
	public static boolean test (final boolean[] param_18)
	{
	  if (param_18[0]) {
	    if (param_18[1]) {
	      return true;}
	    else {
	      if (param_18[2]) {
	        if (param_18[3]) {
	          return true;}
	        else {
	          return false;}}
	      else {
	        if (param_18[3]
	        &&  param_18[4]) {
	          return true;}
	        else {
	          return false;}}}}
	  else {
	    if (param_18[1]) {
	      if (param_18[2]
	      && (param_18[3] || param_18[4])) {
	        return true;}
	      else {
	        return false;}}
	    else {
	      if (param_18[2]
	      &&  param_18[3]) {
	        return true;}
	      else {
	        return false;}}}
	}
//-------------------------------------- 379 sec - JScp version 0.0.72 

Пример 14.      Equality

strStart = "\\x. \\y. and (impl x y) (impl y x)";
nVar = 2;
//--------------------------------------  14 sec - postprocessing...
	public static boolean test (final boolean[] param_18)
	{
	  if (param_18[0]) {
	    if (param_18[1]) {
	      return true;}
	    else {
	      return false;}}
	  else {
	    if (param_18[1]) {
	      return false;}
	    else {
	      return true;}}
	}
//--------------------------------------  16 sec - JScp version 0.0.72