Доказать доказательство неуместности в Coq?

18

Есть ли способ доказать следующую теорему в Coq?

Theorem bool_pirrel : forall (b : bool) (p1 p2 : b = true), p1 = p2.

РЕДАКТИРОВАТЬ : Попытка дать краткое объяснение «что такое доказательство неуместности» (поправьте меня, если я ошибаюсь или неточен)

Основная идея заключается в том, что в мире предложений (или Propв Coq), что вас (и вы должны) действительно волнует, - это доказуемость предложения, а не его доказательства, их может быть много (или их нет). Если у вас есть несколько доказательств, с точки зрения доказуемости, они равны в том смысле, что они доказывают одно и то же утверждение . Так что их различие просто не имеет значения. Это отличается от вычислительной точки зрения, где вы действительно заботитесь о различии двух терминов, например, в принципе, вы не хотите, чтобы два обитателя boolтипа (или, Setпо словам Кока), а именно trueи falseбыли равны. Но если вы вставите их Prop, они будут равны.

день
источник
Интригующим. Я уверен, что вы получите ответ через несколько минут в списке рассылки Coq. (Обязательно опубликуйте ответ здесь, если вы это сделаете.)
Дейв Кларк
2
Для тех из нас, кому интересно, о чем ваш вопрос, но которые не знакомы с Coq, можете ли вы добавить предложение или два, объясняющие, что означает эта теорема на английском языке? (А может быть, что такое «доказательство неуместности»?)
Джошуа Грохов
@ Джошуа, я не в состоянии объяснить это подробно, потому что это также ново для меня, и поэтому это озадачивало меня довольно долгое время. Но в любом случае, вот моя попытка (см. В части вопроса).
день
6
AВAВВA

Ответы:

28

Доказательство неуместности в целом не подразумевается теорией, стоящей за Coq. Даже доказательство несоответствия равенству не подразумевается; это эквивалентно аксиоме К STREICHER в . Оба могут быть добавлены в качестве аксиом .

Существуют разработки, в которых полезно рассуждать об объектах доказательства, и несоответствие доказательства делает это почти невозможным. Можно утверждать, что в этих разработках должны быть все объекты, структура которых имеет значение Set, но с базовой теорией Coq такая возможность есть.

Существует важная часть доказательства несоответствия, которая всегда имеет место. Аксиома Штрейхера K всегда выполняется в разрешимых областях, т. Е. Доказательства равенства на разрешимых множествах единственны. Общее доказательство находится в Eqdep_decмодуле в стандартной библиотеке Coq. Вот ваша теорема как следствие (мое доказательство здесь не обязательно самое элегантное):

Require Bool.
Require Eqdep_dec.
Theorem bool_pirrel : forall (b : bool) (p1 p2 : b = true), p1 = p2.
Proof.
  intros; apply Eqdep_dec.eq_proofs_unicity; intros.
  destruct (Bool.bool_dec x y); tauto.
Qed.

Для этого особого случая вот прямое доказательство (вдохновленное общим доказательством в Eqdep_dec.v). Во-первых, определим, что мы определяем каноническое доказательство true=b(как обычно в Coq, проще сначала иметь константу). Затем мы показываем, что любое доказательство true=bдолжно быть refl_equal true.

Let nu b (p:true = b) : true = b :=
  match Bool.bool_dec true b with
    | left eqxy => eqxy
    | right neqxy => False_ind _ (neqxy p)
  end.
Lemma bool_pcanonical : forall (b : bool) (p : true = b), p = nu b p.
Proof.
  intros. case p. destruct b.
  unfold nu; simpl. reflexivity.
  discriminate p.
Qed.

Если вы добавите классическую логику в Coq, вы получите доказательство неуместности. Говоря интуитивно, классическая логика дает вам оракул решения для предложений, и этого достаточно для аксиомы K. В модуле стандартной библиотеки Coq есть доказательство Classical_Prop.

Жиль "ТАК - перестань быть злым"
источник