В математике, мы часто поступают следующим образом: «Теперь давайте рассмотрим два случая, число k
может быть even
или odd
Для even
случае, можно сказать, exists k', 2k' = k
....»Добавление полного дизъюнктивной предположение в Coq
Который расширяет общую идею рассуждения о целом наборе объектов путем разборки его на несколько дизъюнктных подмножеств, которые могут быть использованы для восстановления исходного набора.
Как этот принцип рассуждения фиксируется в coq, учитывая, что у нас не всегда есть предположение, которое является одним из подмножеств, в которые мы хотим деконструироваться?
Рассмотрим пример подражания для демонстрации:
forall n, Nat.Even n => P n.
Здесь мы можем естественно сделать inversion
на Nat.Even n
, чтобы получить n = 2*x
(и автоматически-ложное предположение, что устранено n = 2*x + 1
). Однако предположим, что мы имеем следующее:
forall n, P n
Как я могу заявить: "давайте рассмотрим even n
с и odd n
S". Должен ли я сначала показать, что мы разрешимы forall n : nat, even n \/ odd n
? То есть, ввести новую (локальную или глобальную) лемму, в которой перечислены все необходимые подмножества? Каковы наилучшие методы?
Да, так и с стандартной библиотеки 'Nat.odd' для этого, просто do 'destruct (Nat.odd n) eqn: Hodd.' Это помещает' Hodd: Nat.odd n = true' в один целевой контекст и 'Hodd: Nat.odd n = false' в другой. (Если вы не ставите 'eqn: Hname', Coq забывает об ассоциации между' odd n' и рассмотрением дела.) – larsr
Есть ли причина, по которой вы используете здесь 'CoInductive? – eponier
Не создавать бесполезные принципы индукции и т. Д. – ejgallego