В научном калькуляторе у нас много кнопок. Корни, степени там, синусы-косинусы. А теперь давайте поиграем в Сломанный калькулятор: у нас есть несколько "сломанных" кнопок, которые мы не можем использовать, и есть какое-нибудь число, которое нам нужно ввести. Проблема - в числе встречаются "сломанные" цифры. Придётся как-нибудь ухищраться. Например, с поломанными цифрами 1 и 2, чтобы ввести 21 - мы можем написать просто 7*3. Или 9*3-6. Способов много разных, в целом. Можно дополнительно запретить некоторые арифметические операторы, чтобы ещё сверху жизнь усложнить.
А сколько кнопок можно сломать, пока калькулятор не станет бесполезным?
Вот возьмём косинус. Его можно выразить, как sin(x+π/2). То есть, если у нас есть деление и π, то косинус можно исключить из набора минимально-необходимых функций. Корни - вообще частный случай степени. Если есть "вселенная", то набор "атомов", из которых её можно построить - называется функционально-полным множеством. Суть та же, что и у векторного пространства с его базисом.
В логике вот функционально-полное множество порождает пара {AND, OR} (из них выражаются все остальные операции). И таких множеств из пар на самом деле много, с десяток точно наберётся. Ну, немного ещё потому, что всё разнообразие операторов тоже через AND и OR выражается. Но вот две самых крутых операции - это NAND (NOT AND) и NOR (NOT OR). Если просто отрицать результат AND или OR, то тогда каждый по отдельности создаёт функционально-полное множество. В одно рыло! И вот таких вот однорыльных называют универсальными (бинарными операторами, но пока других универсальных ино-арных ещё не придумали; хотя по поводу тернарных задумались). NAND в логике, кстати, называется Sheffer operator/stroke/etc, много имён у него. Правда, Шеффер был вторым, кто доказал его универсальность, и третьим, кто его вообще описал. Просто все потом немного запутались, и все лавры отошли ему одному.
7 апреля 2026, Andrzej Odrzywolek из Jagiellonian University, что в Кракове (кстати, основан в 1364, старейший в Польше и один из старейших в мире) выпускает бумагу, в которой заявляет, что нечестно это как-то: в логике есть оператор Шеффера, а у нас в вещественной математике - нет. Посидел, повтыкал, и пришёл к умозаключению, что всё прекрасно выражается через
eml(a,b) = e^a - ln(b) и константу 1 (чтобы можно было логарифм убрать). Собственно, exp minus log. А "всё" - это вещественные числа, весь набор тригонометрических функций, константы e, π, логарифмы, ну и так далее. Конечно, это всё ещё не NAND, которому даже константы не нужно, но и такая универсальность одной функции с константой - уже круто, учитывая, что изначально там было 36 элементов. Вольфрам у себя использует вот множество из 7 операторов. А ещё круто потому, что грамматика сводится просто к S -> 1|eml(S,S). Грамматика эта - важно, потому что вообще-то функциональная полнота сама по себе неинтересна, её ещё применить нужно. Есть такой тип ML - символьная регрессия. Там для датасета нужно формулу вывести. Восстановить функцию по срезу её значений, в общем. Тут есть два подхода: обучить нейросеть, или построить дерево (скорее лес, и потом генетическим программированием минимизировать ошибку).
В нейросеть eml, в общем-то, можно всунуть разве что как функцию активации. Какой-нибудь ln(x) оно идеально выучивает и предсказывает. Что, конечно, просто невероятное достижение - функция активации с логарифмом смогла повторить логарифм. А вот для чего-нибудь посложнее обучить уже не получится: с ln(e−ln(e^x−ln(y))) функцию распидорасило настолько, что обучение просто сломалось. Чего и стоило ожидать от экспоненты, которую единственное, что пытается сдерживать - это какой-то там логарифм. Ещё и вычитанием. EML очень быстро "взрывается", а возле нуля ещё и фактически неопределена (дроби слишком малы). Крайне нестабильна, короче.