Определение различных типов равенства как индуктивных типов в Coq

Я пытаюсь определить в Coq разные типы равенств. Во время университетского курса мой профессор дал нам правила четырех разных типов, а именно: (я даю только ссылки на правила):

Разница между этими четырьмя типами основана на типе C.

Я пытаюсь доказать изоморфизм между ними. К сожалению, у меня есть проблемы с объявлением индуктивных типов первого и второго, потому что я не могу найти способ указать тип C. У меня есть определение для третьего и четвертого, и я уже доказал изоморфизм между ними.

Заранее спасибо.


person madipi    schedule 03.08.2017    source источник


Ответы (1)


Вы не можете использовать индуктивные типы, чтобы получить что-то, что воплощает в точности первые два принципа, не получив двух других. Причина в том, что индуктивные типы данных Coq автоматически поддерживают строго зависимое исключение, что означает, что типу результата разрешено ссылаться на удаляемый элемент. Это то, что вы видите в последних двух наборах правил, которые вы дали: типу C разрешено ссылаться на доказательство p того, что две точки a и b равны. Любой разумно определенный индуктивно определенный тип равенства будет автоматически поддерживать правила 3 ​​и 4 и, следовательно, 1 и 2, которые являются более слабыми. Например, вот как вы получаете 1 и 2 при стандартном равенстве Coq.

Section Gentzen.

Variables (A : Type) (C : A -> A -> Type).

Definition e_id_g {a b : A} (p : a = b) (c : C a a) : C a b :=
  match p with eq_refl => fun c => c end c.

Definition c_id_g (a : A) (c : C a a) : e_id_g (eq_refl a) c = c :=
  eq_refl.

End Gentzen.

Section Leibniz.

Variables (A : Type) (C : A -> A -> Type).

Definition e_id_l {a b : A} (p : a = b) (c : forall x, C x x) : C a b :=
  match p with eq_refl => c a end.

Definition c_id_l (a : A) (c : forall x, C x x) :
                  e_id_l (eq_refl a) c = c a :=
  eq_refl.

End Leibniz.

Можно дать другое определение, которое поддерживает только правила 1 и 2, но не 3 и 4, используя кодировку Чёрча равенства:

Definition eq {A} (a b : A) : Prop :=
  forall P : A -> Prop, P a -> P b.

Definition refl {A} (a : A) : eq a a :=
  fun P x => x.

Идея здесь - как и в аналогичных кодировках для типов данных в лямбда-исчислении - состоит в том, чтобы определить тип как тип его (независимого) элиминатора или свертки. Это определение иногда известно как равенство Лейбница, и оно действительно обеспечивает те же правила доказательства, что и в пунктах 1 и 2, как показано в следующем сценарии.

Section Gentzen.

Variables (A : Type) (C : A -> A -> Prop).

Definition e_id_g {a b : A} (p : eq a b) (c : C a a) : C a b :=
  p (C a) c.

Definition c_id_g (a : A) (c : C a a) : e_id_g (refl a) c = c :=
  eq_refl.

End Gentzen.

Section Leibniz.

Variables (A : Type) (C : A -> A -> Prop).

Definition e_id_l {a b : A} (p : eq a b) (c : forall x, C x x) : C a b :=
  p (C a) (c a).

Definition c_id_l (a : A) (c : forall x, C x x) :
                  e_id_l (refl a) c = c a :=
  eq_refl.

End Leibniz.

(На самом деле эти принципы немного отличаются: они ограничены Prop из-за ограничений базовой теории Coq, связанных с чем-то, называемым непредсказуемостью. Но это ортогональная проблема.)

Без утверждения дополнительных аксиом невозможно получить принципы 3 и 4 для этой новой кодировки равенства. Для доказательства этого потребовалось бы провести анализ случая для элементов типа forall P, P a -> P b и доказать, что все эти элементы имеют форму refl, применимую к чему-либо. Однако это тип функций, и в базовой теории Кока нет способа провести анализ случаев для них. Обратите внимание, что этот аргумент лежит за пределами теории Кока: не противоречит утверждать в качестве дополнительной аксиомы, что 3 и 4 действительны для этого нового типа; это просто невозможно доказать без этих аксиом.

person Arthur Azevedo De Amorim    schedule 03.08.2017
comment
Хорошо спасибо. Так что я должен определить их, явно сформулировав аксиомы для доказательства чего-то, верно? Не могли бы вы сказать мне, правильно ли это определение x80.org/collacoq/wudunacuho.coq? - person madipi; 04.08.2017
comment
Правила, которые вы написали, верны, но вам не нужно использовать аксиомы: вы можете определять типы, которые поддерживают эти принципы, используя кодировку, показанную выше. - person Arthur Azevedo De Amorim; 04.08.2017
comment
На самом деле я не понимаю, как я могу доказать изоморфизм между уравнениями Генцена и Лейбница, используя ваши определения (фактически оба). Я не могу сопоставить с шаблоном refl, потому что это не конструктор, и я не уверен, как продолжить использование среды Proof. Я думаю, моя проблема связана с использованием стандартного равенства Coq. - person madipi; 05.08.2017
comment
Это проблема этого принципа равенства: вы не можете этого сделать. Поскольку тип C в элиминаторе не упоминает само доказательство равенства (как 3 и 4), вы не можете утверждать, что все такие доказательства исходят из refl. - person Arthur Azevedo De Amorim; 05.08.2017
comment
Итак, вы говорите, что эти два типа не изоморфны из-за материала erefl, верно? Я обнаружил похожую проблему при доказательстве изоморфизма между Мартином Лотом и Лейбницем. Я мог сделать это, только добавив к определению Лейбница аксиому UIC, сказав, что все доказательства равны друг другу. В основном я пришел к выводу, что без этой аксиомы я не могу доказать то, что пытался доказать. Здесь я думаю то же самое, но хуже всего, потому что я ничего не знаю ни о каких доказательствах. - person madipi; 05.08.2017