Проект синтаксиса
Исходный синтаксис более или менее нормальный, хотя некоторые конструкции в нём тяжеловаты. Нижеследующее — мои попытки «облегчить» и расширить запись функций; я отдаю себе отчёт в некоторой вкусовщине.
- Обозначения: - «n» и «m»— число, «ⁿ» и «ₙ» — числа, записанные в нижнем или верхнем индексе 
 
- Алфавит: - Идентификатор: буквы, цифры, символ «_» + опционально цифры верхних и нижних индексов («₀₁₂₃₄₅₆₇₈₉⁰¹²³⁴⁵⁶⁷⁸⁹» 
- Число в верхнем индексе указывает арность функции; ⁿ может быть записано как `n, например ¹² ≡ `12 
 
- Область определения — целые неотрицательный числа с отношением строгого порядка
- Базовые функции - Ноль. 0(x) ↝ 0 - Возвращает 0 при любом значении параметра 
- Многоместный ноль (возвращает 0 при любых значениях параметров): 0ⁿ(x₁,…,xₙ) ↝ 0(x₁,…,xₙ) ↝ 0; моделируется как суперпозиция 0(1ⁿ)(x₁,…,xₙ) 
- Нуль-местный ноль 0⁰() ↝ 0 (или просто 0 без скобок), моделируется как минимизация одноместного нуля, ?(0¹) 
 
- Следование. ⇒(x) ↝ x + 1; допускается форма +(x) - Возвращает следующий по порядку за x элемент области определения 
- Например, ⇒(7) ↝ 8 
 
- Проекция. mⁿ(x₁,…,xₙ) ↝ m(x₁,…,xₙ) ↝ xₘ - Возвращает m-й операнд 
- Например, 3⁵(9,8,7,6,5) ↝ 3(9,8,7,6,5) ↝ 7 
 
 
- Операторы (в порядке убывания приоритета при разборе выражения) - Суперпозиция. gᵐ(fⁿ₁, …, fⁿₘ)(x₁, …, xₙ) ↝ g(f₁(x₁, …, xₙ), …, fₘ(x₁, …, xₙ)) - На заданных x₁, …, xₙ вычисляется m значений fⁿᵢ(), затем вычисляется gᵐ() от этих значений 
 
- Минимализация. ?ⁿ(fⁿ⁺¹)(x₁, …, xₙ) ↝ ?f(x₁, …, xₙ) ↝ k: f(x₁, …, xₙ, k)=0 min(k ∈ 0…∞) 
- Примитивная рекурсия. - (fⁿ⁻¹@gⁿ⁺¹)(x₁, …, xₙ₋₁, у) ↝ f@g(x₁, …, xₙ₋₁, у) ↝ - f(x₁, …, xₙ₋₁) | y = 0 
- g(x₁, …, xₙ₋₁, у - 1, f@g(x₁, …, xₙ₋₁, у - 1) | y > 0 
 
- Возвращает: - Если последний операнд равен 0, вычисляется базис рекурсии f() 
- Если последний операнд больше нуля: - Заново вызывается рекурсивная функция, но с последним параметром, уменьшенным на 1 
- Результат, вместе с исходными параметрами и последним параметром, уменьшенным на 1, обрабатывается функцией g() 
 
 
- Для каждого набора xᵢ возвращает минимально возможное k, на котором f(x₁, …, xₙ, k)=0 
 
 
- Задание функции: функция → комбинация базовых функций и операторов - Вместо «→» можно использовать «->» 
 
Примеры
- Функция, возвращающая n - 1 на натуральном n, и 0 на 0: - Одной строкой decr → 0⁰@1² 
- …с автоматическим определением арности:  decr -> 0@1 
 
- Одной строкой 
- Сложение и умножение: - Полный вариант next3 → +(3³) add → 1¹@next3 add3 → add(1³, 3³) mult → 0¹@add3 
- Короче (с автоматическим определением арности): add → 1@+(3) mult -> 0@add(1, 3) 
- Одной строкой: mult -> 0@(1@+(3))(1, 3) 
 
- Полный вариант 
TODO пример минимизации
