में कैनोलिक संरचनाएं मैं ssreflect में कैननिकल संरचनाओं से निपटने की कोशिश कर रहा हूं। कोड के 2 टुकड़े हैं जिन्हें मैंने here से लिया था।ssreflect
मैं बूल और विकल्प प्रकार के लिए टुकड़े लाऊंगा।
Section BoolFinType.
Lemma bool_enumP : Finite.axiom [:: true; false]. Proof. by case. Qed.
Definition bool_finMixin := Eval hnf in FinMixin bool_enumP.
Canonical bool_finType := Eval hnf in FinType bool bool_finMixin.
Lemma card_bool : #|{: bool}| = 2. Proof. by rewrite cardT enumT unlock. Qed.
End BoolFinType.
Section OptionFinType.
Variable T : finType.
Notation some := (@Some _) (only parsing).
Local Notation enumF T := (Finite.enum T).
Definition option_enum := None :: map some (enumF T).
Lemma option_enumP : Finite.axiom option_enum.
Proof. by case => [x|]; rewrite /= count_map (count_pred0, enumP). Qed.
Definition option_finMixin := Eval hnf in FinMixin option_enumP.
Canonical option_finType := Eval hnf in FinType (option T) option_finMixin.
Lemma card_option : #|{: option T}| = #|T|.+1.
Proof. by rewrite !cardT !enumT {1}unlock /= !size_map. Qed.
End OptionFinType.
अब, मैं finType से एक समारोह च प्रोप करने के लिए है लगता है
Variable T: finType.
Variable f: finType -> Prop.
Goal f T. (* Ok *)
Goal f bool. (* Not ok *)
Goal f (option T). (* Not ok *)
पिछले दो मामलों मैं निम्नलिखित त्रुटि मिलती है:।
The term "bool/option T" has type "Set/Type" while it is expected to have type "finType".
मैं गलत क्या कर रहा हूँ ?
कैननिकल संरचनाएं एकीकरण प्रदान करने के लिए कुछ एकीकरण समस्याओं पर ट्रिगर हो जाती हैं, आमतौर पर जब रिकॉर्ड का प्रक्षेपण शामिल होता है [मैन्युअल देखें] आपके विशेष मामले के लिए, कोक विशेष एकीकरण समस्या का पता नहीं लगाएगा इस प्रकार कैननिकल तंत्र जीता ' टी अधिनियम आप 'लक्ष्य एफ [बूल के फिनटाइप]' का उपयोग करके बूल से जुड़े 'फिन टाइप' उदाहरण को पुनर्प्राप्त कर सकते हैं, विवरण के लिए इस नोटेशन के कार्यान्वयन को देखें। – ejgallego