Равенство в Coq и в статье Awodey - PullRequest
0 голосов
/ 28 апреля 2018

В статье Однолистность как принцип логики , пишет Аводей на странице 7:

Рассмотрим пример теории интенсиональных и экстенсиональных типов. Теория экстенсии имеет явно «более сильное» понятие равенства, потому что она позволяет просто подставлять равные равным во всех контекстах. В интенсиональной системе, напротив, можно иметь a = b и утверждение Φ (a), но при этом не иметь Φ (b).

Я не понимаю этого, потому что я думал, что это основное свойство равенства.

Также в Coq можно просто доказать:

Theorem subs: forall (T:Type)(a b:T)(p:a=b)(P:T-> Prop), P a -> P b. 
intros.
rewrite <- p.
assumption.
Qed.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Если я не ошибаюсь, в статье Аводея нотация Φ(a) означает замену некоторой неявной свободной переменной в Φ на выражение a.

В своем ответе я буду использовать следующие более явные обозначения (что соответствует Φ(a) в статье):

Φ[z ⟼ a] 

Это означает, что в выражении Φ свободная переменная z будет заменена на выражение a.

Пример:

(x = z)[z ⟼ a]

результат в

(x = a)

Теперь я предполагаю, что вы уже знакомы с обычным изложением теории типов с помощью правил вывода, как в Приложении A.2 HoTT Book .

Теория типов использует два понятия равенства.

Типы идентификации : Обычно пишется с использованием символа = в правилах вывода. Чтобы заключить утверждение типа a = b, нам нужно предоставить проверочный термин для него. Например, давайте посмотрим на правило введения для типов идентификации:

      a : A 
---------------- (=)-INTRO
 refl a : a = a

Здесь refl a выступает в качестве проверочного термина или доказательства, которое оправдывает наше утверждение о том, что a = a имеет место (а именно refl a представляет собой тривиальное доказательство или доказательство рефлексивности). Таким образом, утверждение типа p : a = b выражает, что a и b могут быть идентифицированы по доказательствам p.

Определительное равенство : Обычно пишется с использованием символа в правилах вывода. Утверждение a ≡ b означает, что a и b являются взаимозаменяемыми, заменяемыми в любом месте или эквивалентными. Это равенство охватывает такие понятия, как «по определению», «вычислением», «упрощением». Этот вид равенства не несет с собой доказательственного термина, т. Е. Не является типизирующим утверждением. Это тот тип равенства, который Coq использует неявно, когда вы используете тактику simpl и compute. Например, давайте посмотрим на правило рефлексивности для :

  a : A
--------- (≡)-REFLE
  a ≡ a 

Обратите внимание, что слева от a ≡ a нет проверочного термина (сравните с правилом (=)-INTRO выше). В этом случае система доказательств рассматривает a ≡ a как факт, то, что имеет место без необходимости явно указывать свое обоснование, поскольку единственное использование в системе доказательств будет для переписывания выражений.

То, что используется только для упрощения выражений, можно найти в других правилах вывода, например, в правиле сохранения типов для :

   a : A     A ≡ B
 ------------------ (≡)-TYPE-PRESERV
        a : B

Другими словами, если вы начинаете с термина a типа A и знаете, что типы A и B являются взаимозаменяемыми, то термин a также имеет тип B. Обратите внимание, что (и это будет важно позже!) Термин или доказательство для B не изменились, это все тот же термин, что и для A.


Теперь мы можем перейти к вопросу.

Что отличает Теорию экстенсиональных типов (ETT) от Теории интенсиональных типов, таких как HoTT или CoC, так это то, как они обрабатывают типы идентичности и равенство определений.

ETT делает типы идентичности и определения равенства взаимозаменяемыми, добавляя следующее правило вывода:

 p : a = b
----------- (=)-EXT
   a ≡ b

Другими словами, свидетельство p для идентичности становится неактуальным, и мы рассматриваем a и b как взаимозаменяемые в системе доказательств (благодаря таким правилам, как (≡)-TYPE-PRESERV и другим аналогичным правилам).

Исходя из гипотез p : a = b и a : A, в ЕТТ мы можем сделать что-то вроде следующего:

  a : A                    p : a = b
--------- (≡)-REFLE      ----------- (=)-EXT
  a ≡ a                      a ≡ b 
------------------------------------- (=)-CONG        (*1)
            (a = a) ≡ (a = b)

Где (=)-CONG - это правило конгруэнтности (т. Е. Определенно эквивалентные термины производят определенно эквивалентные типы идентичности), и я называю этот вывод (*1).

Используя (*1), мы можем получить:

     a : A                           
----------------- (=)-INTRO    -------------------- (*1)
 refl a : a = a                 (a = a) ≡ (a = b)
-------------------------------------------------- (≡)-TYPE-PRESERV
                    refl a : a = b

Где в (*1) мы вставляем деривацию, которую мы сделали выше.

Другими словами, если мы игнорируем гипотезы a : A и промежуточные шаги, это как если бы мы сделали следующий вывод:

p : a = b            refl a : a = a
-------------------------------------
          refl a : a = b 

Поскольку ETT рассматривает a и b как взаимозаменяемые (благодаря гипотезе p : a = b и (=)-EXT rule), доказательство refl a для a = a также можно рассматривать как доказательство для a = b. Таким образом, нетрудно видеть, что в ETT наличие доказательства идентичности, подобного a = b, достаточно для замены некоторых или всех вхождений a на b в ЛЮБОМ утверждении, включающем a.

Теперь, что происходит в теории типов напряженности (ITT)?

В ITT правило (=)-EXT не предполагается. Поэтому мы не можем выполнить вывод (*1), который мы сделали выше, и, в частности, следующий вывод недействителен:

p : a = b            refl a : a = a
-------------------------------------
          refl a : a = b 

Это пример, когда у нас есть тождество p : a = b, но из утверждения (refl a : a = z)[z ⟼ a] мы не можем завершить утверждение (refl a : a = z)[z ⟼ b]. Это пример того, на что ссылается статья Аводея, я думаю.

Почему это неверный вывод? Потому что refl a : a = b заставляет a и b быть определенно равными (то есть единственный способ ввести refl a в деривацию - через правило (=)-INTRO), но это не обязательно верно из гипотезы p : a = b. Например, в HoTT тип интервала I (раздел 6.3 в Книге HoTT ) содержит два члена 0 : I и 1 : I, они не являются по определению равными, но у нас есть доказательство seg : 0 = 1.

Тот факт, что могут существовать другие доказательства идентичности, которые не являются тривиальными или рефлексивными, это то, что дает Теории Преднамеренного Типа ее богатство. Это то, что позволяет HoTT иметь однолистность и более высокие индуктивные типы, например.

Итак, что мы можем сделать из гипотез p : a = b и refl a : a = a в ITT?

В вашем вопросе теорема, которую вы доказали в Coq, называется «транспортной» функцией в HoTT (раздел 2.3 в HoTT Book ). Используя свою теорему (удаляя неявные параметры), вы сможете выполнить следующий вывод:

  p : a = b               refl a : a = a
------------------------------------------
   subs p (λx => a = x) (refl a) : a = b 

Другими словами, мы можем сделать вывод, что a = b, но наш проверочный термин для этого изменился! В ETT мы просто провели замену (потому что a и b были взаимозаменяемыми), что позволило нам использовать одно и то же доказательство в заключении (а именно refl a). Но в ITT мы не можем трактовать a и b как эквивалентно эквивалентные из-за богатства типов идентичности. И чтобы отразить это намерение, нам нужно объединить доказательства гипотез, чтобы построить наши новые доказательства в заключении.

Итак, из (refl a : a = z)[z ⟼ a] мы не можем заключить (refl a : a = z)[z ⟼ b], но мы можем заключить subs p (λx => a = x) (refl a) : a = b, что не является результатом простой замены гипотезы, как в ETT.

0 голосов
/ 28 апреля 2018

Тактика rewrite в Coq может потерпеть неудачу - она ​​может генерировать неправильно напечатанный термин.

Если я правильно помню, иногда можно обойти это с помощью некоторых осторожных манипуляций, но если вы делаете это (неявно или явно), вводя дополнительную аксиому, такую ​​как функциональная экстенсиональность или JMeq_eq, это уже не так что первая цель просто вытекает из второй.

...