Coq में coinductive प्रकारों का उपयोग करते हुए कुछ बुनियादी गुणों को साबित करने की कोशिश करते हुए, मैं निम्नलिखित समस्या में चल रहा हूं और मैं इसके आसपास नहीं पहुंच सकता। मैंने समस्या को एक सरल Coq स्क्रिप्ट में निम्न प्रकार से आसुत किया है।
टाइप ए के तत्वों के साथ लेबल वाली शाखाओं के साथ टाइप ट्री संभवतः अनंत पेड़ों को परिभाषित करता है । एक शाखा के सभी तत्वों के लिए परिभाषित करने की आवश्यकता नहीं एक । मान Univ हमेशा परिभाषित सभी A शाखाओं के साथ अनंत पेड़ है। isUniv परीक्षण हैं कि कोई पेड़ के बराबर है Univ । लेम्मा जो यह बताता है विश्वविद्यालय वास्तव में करता संतुष्ट isUniv ।
Parameter A : Set.
CoInductive Tree: Set := Node : (A -> option Tree) -> Tree.
Definition derv (a : A) (t: Tree): option Tree :=
match t with Node f => f a end.
CoFixpoint Univ : Tree := Node (fun _ => Some Univ).
CoInductive isUniv : Tree -> Prop :=
isuniv : forall (nf : A -> option Tree) (a : A) (t : Tree),
nf a = Some t ->
isUniv t ->
isUniv (Node nf).
Lemma UnivIsUniv : isUniv Univ.
Proof.
cofix CH. (* this application of cofix is fine *)
unfold Univ.
Admitted.
इस बिंदु पर मैं सबूत छोड़ देता हूं। वर्तमान लक्ष्य है:
CH : isUniv Univ
============================
isUniv (cofix Univ : Tree := Node (fun _ : A => Some Univ))
मुझे नहीं पता कि उत्पादन ( लक्ष्य कुछ) करने के लिए लक्ष्य में cofix को खत्म करने के लिए कौन सी रणनीति लागू करनी है ताकि मैं isuniv को लागू कर सकूं ।
क्या कोई इस लेम्मा को साबित करने में मदद कर सकता है? ऐसी स्थिति में cofix
को खत्म करने के मानक तरीके क्या हैं ?