Coq, Образец, соответствующий аксиоме с подстановочным знаком

Я работал с Coq и столкнулся с некоторыми проблемами, пытаясь сопоставить объекты, созданные с помощью Axiom, с использованием подстановочного знака. Я создал минимальную программу Coq, которая демонстрирует мою проблему.

Inductive MyType : Set :=
| A
| B.

Definition MyFunction  (n:MyType) : nat :=
match n with
| A => 0
| _ => 1
end.

Eval compute in MyFunction A.
Eval compute in MyFunction B.

Axiom C : MyType.

Eval compute in MyFunction C.

По сути, я требую, чтобы MyFunction C оценивалось как 1. Мне кажется, что Coq расширяет мой подстановочный знак _ до B, и это терпит неудачу, когда я пытаюсь применить функцию к этому бессмысленному объекту C. Я был бы признателен за совет о том, как это сделать Эта проблема.


person Matthew    schedule 05.10.2013    source источник


Ответы (1)


Когда вы делаете:

Axiom C : MyType.

Вы не расширяете обитателей индуктивно определенного типа MyType. Вы просто постулируете существование элемента MyType, связывая его с именем C. То есть C должно быть либо A, либо B.

Я считаю, что вы не сможете расширить такой тип апостериори. После их определения индуктивные типы высечены в камне, все их конструкторы известны, и было бы небезопасно разрешать их расширение (поскольку существующие доказательства станут ложными).

Если вы не расскажете нам больше о том, чего вы пытаетесь достичь, нам будет трудно помочь вам в дальнейшем.

person Ptival    schedule 05.10.2013