Суперкомпиляция интерпретатора Лямбда-исчисления
Функции логики высказываний
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