Аз съм нов в Coq и се опитвам да докажа нещо доста основно
Лема eq_if_eq : за всички a1 a2, (ако beq_nat a1 a2 тогава a2 else a1) = a1.
Затруднявах се с решение, публикувано по-долу, но мисля, че трябва да има по-добър начин. В идеалния случай бих искал чисто да регистрирам beq_nat a1 a2
, докато поставям стойностите на регистъра в списъка с хипотези. Има ли тактика t
такава, че използването на t (beq_nat a1 a2)
дава два подслучая, един където beq_nat a1 a2 = true
и друг където beq_nat a1 a2 = false
? Очевидно induction
е много близо, но губи своята история.
Ето доказателството, с което се борих:
Proof.
Hint Resolve beq_nat_refl.
Hint Resolve beq_nat_eq.
Hint Resolve beq_nat_true.
Hint Resolve beq_nat_false.
intros.
compare (beq_nat a1 a2) true.
intros. assert (a1 = a2). auto.
replace (beq_nat a1 a2) with true. auto.
intros. assert (a1 <> a2). apply beq_nat_false.
apply not_true_is_false. auto.
assert (beq_nat a1 a2 = false). apply not_true_is_false. auto.
replace (beq_nat a1 a2) with false. auto.
Qed.