В конструктивной обстановке, такой как Coq, я ожидаю, что доказательство дизъюнкции A \/ B
будет либо доказательством A
, либо доказательством B
. Если я переформулирую это для подмножеств типа X
, это говорит о том, что если у меня есть доказательство того, что x
находится в A union B
, то у меня либо доказательство того, что x
находится в A
, либо доказательство что x
находится в B
. Поэтому я хочу определить характеристическую функцию объединения путем анализа кейсов,
Definition characteristicUnion (X : Type) (A B : X -> Prop)
(x : X) (un : A x \/ B x) : nat.
Будет равно 1, если x
в A
, и 0, если x
в B
. Однако Coq не позволяет мне destruct un
, потому что «Анализ случая на множестве сортировки не допускается для индуктивного определения или».
Есть ли другой способ в Coq моделировать подмножества типа X
, который позволил бы мне построить эти характеристические функции на объединениях? Мне не нужно извлекать программы, поэтому я полагаю, что простое отключение предыдущей ошибки при анализе случаев подойдет мне.
Имейте в виду, что я не хочу моделировать подмножества как A : X -> bool
. Это было бы неоправданно сильнее: мне не нужны законы исключенного среднего, такие как «либо x
в A
, либо x
не в A
».