मैंने पढ़ा है कि एक प्रकार के लिए प्रेरण सिद्धांत सिर्फ P
प्रस्ताव के बारे में एक प्रमेय है। इसलिए मैंने दाएं (या रिवर्स) सूची कन्स्ट्रक्टर के आधार पर List
के लिए एक प्रेरण सिद्धांत बनाया।कोक में कस्टम प्रेरण सिद्धांत का उपयोग कैसे करें?
Definition rcons {X:Type} (l:list X) (x:X) : list X :=
l ++ x::nil.
प्रेरण सिद्धांत ही है:
Definition true_for_nil {X:Type}(P:list X -> Prop) : Prop :=
P nil.
Definition true_for_list {X:Type} (P:list X -> Prop) : Prop :=
forall xs, P xs.
Definition preserved_by_rcons {X:Type} (P: list X -> Prop): Prop :=
forall xs' x, P xs' -> P (rcons xs' x).
Theorem list_ind_rcons:
forall {X:Type} (P:list X -> Prop),
true_for_nil P ->
preserved_by_rcons P ->
true_for_list P.
Proof. Admitted.
लेकिन अब, मैं मुसीबत प्रमेय का उपयोग हो रहा है। मैं इसे induction
रणनीति के रूप में प्राप्त करने के लिए कैसे आमंत्रित नहीं करता हूं।
उदाहरण के लिए, मैंने कोशिश की:
Theorem rev_app_dist: forall {X} (l1 l2:list X), rev (l1 ++ l2) = rev l2 ++ rev l1.
Proof. intros X l1 l2.
induction l2 using list_ind_rcons.
लेकिन अंतिम पंक्ति में, मुझे मिल गया:
Error: Cannot recognize an induction scheme.
को परिभाषित करने और list_ind_rcons
की तरह एक कस्टम प्रेरण सिद्धांत लागू करने के लिए सही क्या कदम उठाएँ?
धन्यवाद
मुझे लगता है कि आपका मतलब था '(फोरल एक्स एल, पी एल -> पी (एल ++ (एक्स :: शून्य)) -> ' – gallais
@ गैलाइस वास्तव में, इसे स्पॉट करने के लिए धन्यवाद। बस इसे ठीक कर दिया। –