Я новичок в Coq и пытаюсь доказать кое-что довольно простое
Лемма eq_if_eq: forall a1 a2, (если beq_nat a1 a2, то a2, иначе a1) = a1.
Я боролся с решением, опубликованным ниже, но я думаю, что должен быть способ получше. В идеале, я хотел бы чисто регистрировать beq_nat a1 a2
, помещая значения case в список гипотез. Существует ли тактика 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.