मैं Coq पर नया हूँ और मैं कुछ बहुत बुनियादी साबित करने के लिए कोशिश कर रहा हूँCoq
लेम्मा eq_if_eq: A1, A2 forall, (यदि ए 1 ए 2 तब a2 बाकी a1 beq_nat) = 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.