Я пытаюсь найти самый низкий уровень вещей, которые вы просто не можете реализовать, потому что они слишком низкого уровня. Таким образом, кажется, что все вычисления могут быть построены из шлюза NAND .

введите описание изображения здесь

Из таблицы истинности легко «реализовать» в JavaScript:

function nand(a, b) { if (a == 0 {amp}amp;{amp}amp; b == 0) return 1 if (a == 0 {amp}amp;{amp}amp; b == 1) return 1 if (a == 1 {amp}amp;{amp}amp; b == 0) return 1 if (a == 1 {amp}amp;{amp}amp; b == 1) return 0 } 

Но это обман. Потому что, как выполняются заявления IF ? Я не совсем знаю, как представить эту ссылку оператора if в коде, так как я не совсем знаком с логическими логическими элементами / схемами, но я вполне уверен, что сам оператор IF мог бы быть представлен как комбинация вентилей NAND.

Так что это черепахи вниз! Ворота NAND реализованы с большим количеством шлюзов NAND (для операторов if) и т. Д.

Так как же нам избежать этой ситуации? Мы просто говорим, что NAND-ворота — это аксиома ? Мне интересно, потому что мне интересно, где лежит основание для формальной проверки.

Другими словами, причина, по которой я спрашиваю, состоит в том, что я заметил, что каждая функция может быть реализована как другие функции, даже оператор IF и тому подобное. Все может быть реализовано вплоть до ворот NAND. Но тогда я оставляю качаться, NAND тоже функция, но какова ее реализация?!? Я смущен / озадачен и нуждаюсь в некотором руководстве о том, как думать об этом.

Поскольку NAND — это не AND, вы можете объявить это, используя AND, что означает, что NAND не является аксиомой:

 function nand(a, b) { return !(a {amp}amp;{amp}amp; b) } console.log(nand(false, false)) // true console.log(nand(true, false)) // true console.log(nand(false, true)) // true console.log(nand(true, true)) // false 

Используя умножение, вы можете объявить NAND с 0 и 1. Поскольку AND является a * b (вы получаете 1, если оба равны 1), NAND равен 1 - a * b :

 function nand(a, b) { return 1 - a * b } console.log(nand(0, 0)) // 1 console.log(nand(1, 0)) // 1 console.log(nand(0, 1)) // 1 console.log(nand(1, 1)) // 0