**Троична логика** (наречена и **тривредносна**, **тривалентна** или **тринарна логика**) — еден од неколкуте повеќевредносни логички системи каде постојат три вистинитосни вредности: *точно*, *неточно* и некоја трета вредност. Овој систем се разликува од поприсутната бивалентна, (двоична) логика (како на пр. Буловата логика) која дозволува само *точно* и *неточно*. Концептуалните основоположници на троичната логика се научниците Лукасјевич, Луис и Сулски.

Дефиниции
---------

Што се однесува на непрецизносните својства, троичната логика формално се смета за логика од непрецизносен тип, бидејќи не оперира исклучиво со две вредности (0 и 1) како *двојната логика*. Меѓутоа и покрај ова, троичната логика се смета за *прецизна логика*.

### Претставување на вредностите

Како и кај бивалентната логика, вистинитосните вредности кај троичната логика може да се претстават со помош на бројки, во овој случај бројки од троичниот (триномен) броен систем. Еве некои почести примери:

* 1 за *точно*, 2 за *неточно* и 0 за *непознато* (*unknown*), *нерелевантно* (*irrelevant*) или *обете* (*both*).
* 0 за *неточно*, 1 за *точно*, додека третата вредност е нецелоброен знак како # или ½.
* Симетричниот троичен систем користи −1 за *неточно*, +1 за *точно* и 0 за трета вредност; овие вредности можат да се упростат и на −, + и 0.

Оваа статија го обработува троичниот систем на исказна логика користејќи се со вредностите {*неточно, непознато* и *точно*}, и ја проширува примената на конвенционалните Булови оператори (сврзници) во тривалентен контекст. Постои и троична предикатна логика; овие го исчитуваат квантификаторот поинаку од класичната (двојна) предикатна логика, а може да содржат и алетернативни квантификатори.

Основна вистинитосна таблица
----------------------------

Ова е вистинитосна таблица на која се прикажани логичките операции за Клиниевата логика.

| *A* | *B* | *A* ИЛИ *B* | *A* И *B* | НЕ *A* |
| --- | --- | --- | --- | --- |
| Точно | Точно | Точно | Точно | Неточно 
  |
| Точно | Непознато | Точно | Непознато | Неточно
  |
| Точно | Неточно | Точно | Неточно | Неточно
  |
| Непознато | Точно | Точно | Непознато | Непознато
  |
| Непознато | Непознато | Непознато | Непознато | Непознато
  |
| Непознато | Неточно | Непознато | Неточно | Непознато
  |
| Неточно | Точно | Точно | Неточно | Точно 
  |
| Неточно | Непознато | Непознато | Неточно | Точно
  |
| Неточно | Неточно | Неточно | Неточно | Точно
  |

Во оваа вистинитосна таблица, состојбата НЕПОЗНАТО може да се сфати како запечатена кутија која содржи вредност ТОЧНО (*TRUE*) или вредност НЕТОЧНО (*FALSE*). Која вредност се крие во кутијата во дадена инстанца не ни е дадено. Меѓутоа извесни операции можат да дадат јасен резултат, дури и ако имаат барем еден оператор НЕПОЗНАТО (*UNKNOWN*). На пример, бидејќи ТОЧНО ИЛИ ТОЧНО дава ТОЧНО, а ТОЧНО ИЛИ НЕТОЧНО пак дава ТОЧНО, оттука можеме да заклучиме дека ТОЧНО ИЛИ НЕПОЗНАТО исто така дава ТОЧНО. Во овој пример состојбата НЕПОЗНАТО се крие во било која бивалентна состојба, но сепак обете даваат ист резултат, па така можеме да заклучиме дека резултатот ТОЧНО во сите три случаи.

Кај апликациите за бази на податоци
-----------------------------------

Јазикот за структурно пребарување на бази на податоци SQL употребува троична логика како начин за манипулирање со безвредносните (безначни) полиња наречени NULL. SQL користи NULL за претставување на отсутни податоци во една база. Ако едно поле не содржи дефинирана вредност, тогаш SQL претпоставува дека вредноста постои, но дека таа моментално не е заведена во базата. Треба да се напомене дека отсутна вредност не е исто што и бројчена вредност нула, или пак низна вредност со должина нула. Споредувањето на нешто со NULL (дури и друго NULL) резултира со вистинитосна состојба НЕПОЗНАТО. На пример, SQL изразот „`Град = 'Париз'`" дава НЕТОЧНО за запис со „Чикаго" во полето Град, но дава НЕПОЗНАТО за запис со поле за Град со вредност NULL. Со други зборови, за SQL, недефинираното поле претставува потенцијално било која возможна вредност: отсутниот град *might or might not* го претставува Париз.

Користејќи троична логика, SQL вака може да ја земе предвид вистинитосната состојба НЕПОЗНАТО при претставувањето (евалуацијата) на Булови изрази. Да го земеме изразот „`Град = 'Париз' ИЛИ Салдо < 0.0`". Овој израз дава ТОЧНО за секој запис чие поле Салдо содржи негативен број. Од истата причина, овој израз е ТОЧНО за секој запис со 'Париз' во полето Град. Изразот дава НЕТОЧНО само кај израз чиешто поле Град експлицитно содржи ниска која не е 'Париз', *и* чие поле Салдо експлицитно содржи не-негативен број. Во секој друг случај, изразот дава НЕПОЗНАТО. Причината за ова е тоа што отсутната вредност за Град *можеби* ја нема ниската 'Париз', а отсутниот Салдо *можеби* нема негативен број. Меѓутоа, без разлика на отсутните податоци, Буловата операција „ИЛИ" е НЕТОЧНО само кога *обата* оператори исто така се НЕТОЧНО, така што не сите отсутни податоци водат кон резултат НЕПОЗНАТО.

Во SQL јазикот за манипулација со податоци (DML), вистинитосната состојба ТОЧНО за еден израз (на пр. во `WHERE` клауза) започнува дејство врз ред (на пр. врати го редот), додека пак вистинитосна состојба НЕПОЗНАТО или НЕТОЧНО не го поттикнува дејството. На овој начин троичната логика е имплементирана во SQL, но истовремено однесувајќи се како бинарна логика кон корисникот на SQL.

Меѓутоа контролните ограничувања во SQL се однесуваат поинаку. Само вистинитосната состојба НЕТОЧНО резултира со прекршување на контролно ограничување. Вистинитосна состојба ТОЧНО или НЕПОЗНАТО означува дека редот е успешно проверен за ограничувањето.

Електроника
-----------

Теоријата на дигиталната електроника поддржува **четири** разни логички вредности:

* **1** или Високо значи ТОЧНО.
* **0** или Ниско значи НЕТОЧНО.
* **X** значи „Непознато" (*Unknown*), „Не знам" (*Don't Know*) или „Сеедно" (*Don't Care*).
* **Z** значи „висока импеданца", или пак исклучен влез.

Вредноста „X" не постои во фактички кола, туку служи чисто како пополнувач кај симулатори, како и за дизајнерски цели. Некои симулатори поддржуваат знаци за вредност „Z", додека кај други ова го нема. Вредноста „Z" не постои во фактички кола, туку само состојба на излезот.

### Употреба на вредноста „X" при симулации

Многу симулациони алатки кај јазиците за опис на хардвер (HDL), како Verilog и VHDL, ја поддржуваат непознатата вредност како онаа погоре во текот на симулирањето на дигитална електроника. Непознатата вредност може да се должи на грешка во планот, која дизајнерот може да ја поправи пред истата со синтеза да премине на вистинско коло. Непознатата исто така претставува неупотребени складни вредности и влезови во колото пред симулацијата да утврди каква треба да виде вистинската влезна вредност.

Од алатките за HDL синтеза обично се добиваат кола кои работат само на двојна (бинарна) логика.

### Употреба на вредноста „X" во дигиталниот електродизајн

При дизајнирање на дигитално коло, извесни услови може да бидат вон опсегот на целите за кои е наменето колото. Затоа дизајнерот не се занимава со тоа што би можело да се случи под такви околности. Покрај ова, се случува влезовите во едно коло да се маскирани од други сигнали, така што вредноста на тој влез нема ефект врз работењето на колото.

При ваквите ситуации, по обичај се користи „X" како пополнувач за да се назначи „Сеедно" при создавање на вистинитосни таблици. Ова е особено често при дизајнирањето на конечни автомати и за упростување на Карноова карта. Вредностите „X" додаваат дополнителни степени на слобода кон конечниот дизајн на колото, што резултира in a simplified and smaller circuit.

Штом ќе биде завршено планирањето на колото, и вистинското коло ќе се изработи, вредностите „X" повеќе нема да постојат. Тие ќе станат некои опипливи вредности „0" или „1", зависно од крајната оптимизација на дизајнот.

### Употреба на вредноста „Z" за висока импеданца

Главна статија: Троично состојба
Некои дигитални уреди поддржуваат облик на троичносостојбена логика само за излезните единици. Трите состојби се „0", „1" и „Z".

Често наречена **трисостојбена** (*tristate*)  логика, таа се состои од вообичаените состојби „точно" и „неточно", со трета *транспарентна* состојба на висока импеданца (или 'исклучена состојба') која фактички го исклучува логичкиот излез. Ова дава делотворен начин за поврзување на неколку логички излезни единици на една влезна, при што сите освен една се ставаат во состојба на висока импеданца, дозволувајќи ѝ на преостанатата излезна единица да работи на нормален бинарен начин. Ова честопати се користи за поврзување на ванки на сметачки склад и други слични направи на заедничка магистрала; вака голем број на направи можат да комуницираат преку истиот канал со тоа што тие ова го прават една по една.

Важно е да се спомене дека додека излезните единици можат да се во една од трите состојби, влезните можат да препознаат само две. Затоа взаемните односи прикажани на таблицата погоре не се случуваат. Иако може да се каже дека состојбата на висоак импеданца е фактички состојба „непознато", најголемиот број електронски уреди не се предвидени да ја протолкуваат состојбата на висока импеданца како состојба сама по себе. Влезните единици можат да препознаат само „0" и „1".

Кога дигиталниот влез е исклучен (т.е. кога му е даден сигнал за висока импеданца), дигиталната вредност која ја толкува влезната единица зависи од видот на технологија која се користи. Транзисторско–транзисторската (TTL) технологија ќе протолкува „1" по основно. Од друга страна, CMOS технологијата привремено ќе ја задржи претходната состојба забележана на тој влез (заради кондензација во влезната порта). Со време протекува извесно количество на струја, и CMOS влезот забегува во случајна и неодредена насока, со можност ова да ја префрли влезната состојба. Исклучените влезни единици на CMOS направите можат да попримат шум, можат да предизвикаат осцилација, дотокот на струја може драстично да се зголеми или пак направата може сосема да се самоуништи.

### Егзотични троичнологички направи

Вистинската троична логика може да се имплементира во електрониката, иако ова досега се смета за комерцијално неисплатливо заради сложеноста на системот. Од овие причини главниот интерес е насочен кон истражување наместо производство, а посебно бидејќи 'нормалната' двојна (бинарна) логика е многу поевтина за имплементирање и во највеќето случаи лесно се прилагодува за емулирање на троичните системи. Меѓутоа, троичната логика наоѓа полезна примена во непрецизносната логика и исправање грешки, и досега се направени неколку вистински троичнологички направи (погледајте ги надворешните врски).

Поврзано
--------

* Дигитално коло
* Тринарен броен систем (и симетричен троичен броен систем)
* Троичен сметач
* Булова алгебра
* Булова функција
* Двојна логика (бинарна логика)
* Четиривредносна логика
* Сетуњ — експериментален руски сметач од 1950-тите на принцип на троична логика
* Повеќевредносна логика

Наводи
------

1. ↑  Hayes, Brian (November-December, 2001). „Third Base" (PDF). *American Scientist*. Sigma Xi, the Scientific Research Society. **89** (6): 490–494. doi:10.1511/2001 јуни 490 Проверете ја вредноста `|doi=` (help). Архивирано од изворникот (PDF) на 2005-12-31. Посетено на 25 декември 2006. Проверете ги датумските вредности во: `|date=` (help)
2. ↑  *The Penguin Dictionary of Mathematics. Второ издание*. London, England: Penguin Books. 1998. стр. 417.
3. ↑  Knuth, Donald E (1981). *The Art of Computer Programming, Том 2*. Reading, Mass.: Addison-Wesley Publishing Company. стр. 190.
4. ↑  Lex de Haan и Gennick, Jonathan (јули–август 2005). „Nulls: Nothing to Worry About". *Oracle Magazine*. Oracle.CS1-одржување: датумски формат (link)
5. ↑  Coles, Michael (26 февруари 2007). „Null Versus Null?". *SQL Server Central*. Red Gate Software.
6. ↑  Wakerly, John F (2001). *Digital Design Principles & Practices*. Prentice Hall. ISBN 0-13-090772-3.
7. ↑  {{{1}}}, *LS TTL Data Book*

Надворешни врски
----------------

* Џефовото троично вики Архивирано на 14 октомври 2008 г. (англиски)
* Тринарната страница на Стив Граб Архивирано на 11 јуни 2008 г. (англиски)
* Boost.Tribool — примена на троичната логика во C++ (англиски)
* Тим-R2D2 Архивирано на 4 септември 2007 г. — француски институт кој го изработил првиот наполно троичнологички чип (64-терц SRAM и 4-терц додавач) во 2004 (англиски)