Почему логические связки и логические значения в Coq разделены?

Я пришел из опыта программирования на JavaScript / Ruby и привык к тому, как работает true / false (в JS):

!true
// false
!false
// true

Затем вы можете использовать эти истинные / ложные значения с&& лайк

var a = true, b = false;
a && !b;

Така также а такжене (и другие логические / логические операторы) являются частью единой системы; кажется, что «логическая» система и «логическая» система - это одно и то же.

Однако в Coq логика и логическое значение - это две разные вещи. Почему это? Цитата / ссылка ниже демонстрирует, как теорема необходима, чтобы связать их.

Мы уже видели несколько мест, где аналогичные структуры можно найти в вычислительном (тип) и логическом (проп) мире Кока. Вот еще один: булевы операторы andb и orb являются явно аналогами логических связок ∧ и ∨. Эта аналогия может быть уточнена с помощью следующих теорем, которые показывают, как преобразовать знания о поведении andb и orb на определенных входных данных в пропозициональные факты об этих входных данных.

Theorem andb_prop : ∀b c,
  andb b c = true → b = true ∧ c = true.

http://www.seas.upenn.edu/~cis500/current/sf/Logic.html#lab211

Ответы на вопрос(1)

Ваш ответ на вопрос