इनर प्रोडक्ट आर्गुमेंट्स के संदर्भ में एक रेंज प्रूफ (range proof) यह प्रमाण है कि स्केलर को पर कमिट किया गया है और किसी गैर-ऋणात्मक पूर्णांक के लिए से कम है।
यह लेख दिखाता है कि Bulletproofs पेपर इस तरह का प्रमाण कैसे बनाता है। इसका उच्च-स्तरीय विचार यह है कि यदि हम यह साबित कर सकें कि एक वेक्टर में केवल एक और शून्य (ones and zeros) हैं और , का बाइनरी रिप्रजेंटेशन है, तो निश्चित रूप से से कम होना चाहिए। यह यह कहने के समान है कि 8 बिट अनसाइन्ड इंटीजर (unsigned integer) में फिट होने वाली संख्या 256 से कम होनी चाहिए।
रेंज प्रूफ के लिए Bulletproofs का उपयोग करने का फायदा यह है कि बिना arithmetic circuit की आवश्यकता के सीधे रेंज प्रूफ का निर्माण किया जा सकता है।
Monero uses Bulletproof Range Proofs (यहाँ प्रस्तुत एल्गोरिथम) यह सुनिश्चित करने के लिए कि ट्रांज़ैक्शन का योग ऋणात्मक नहीं है (एक finite field में, ऋणात्मक संख्याएँ वे तत्व हैं जो से अधिक हैं क्योंकि वे से कम या उसके बराबर के तत्वों के एडिटिव इन्वर्स (additive inverses) हैं जहाँ फील्ड ऑर्डर है)।
यह लेख ZK Bulletproofs पर एक श्रृंखला का हिस्सा है।
Notation
सभी शून्य वाला एक डायमेंशनल वेक्टर है।
सभी एक (ones) वाला एक डायमेंशनल वेक्टर है।
एक डायमेंशनल वेक्टर है।
एक डायमेंशनल वेक्टर है।
एक डायमेंशनल वेक्टर है।
ध्यान दें कि है।
Range proof overview
यह साबित करने के लिए कि एक ऐसे स्केलर का कमिटमेंट है जिसका मान से कम है, निम्नलिखित साबित करने की आवश्यकता है:
- बाइनरी है (केवल और मान रखता है)।
- इनर प्रोडक्ट है।
दूसरे बिंदु को साबित करना आसान है, हम एक सामान्य इनर प्रोडक्ट प्रूफ करते हैं और फिर प्रकट करते हैं कि कमिटमेंट के वेक्टर्स में से एक है – या वेरिफायर (verifier) से स्वयं का कमिटमेंट बनाने के लिए कहते हैं। हालांकि, बिना एरिथमेटिक सर्किट के यह साबित करने के लिए कि बाइनरी है, कुछ अलजेब्रिक ट्रिक्स (algebraic tricks) की आवश्यकता होती है।
Four useful tricks
Bulletproofs पेपर स्पष्ट रूप से चार अलजेब्रिक ट्रिक्स का उपयोग करता है जिन्हें सीधे रेंज प्रूफ एल्गोरिथम देखने से पहले स्पष्ट रूप से समझना सबसे अच्छा है।
1. Proving is binary
यह कथन कि बाइनरी है, निम्नलिखित दो दावों के समतुल्य है:
उदाहरण के लिए, यदि है तो होगा।
इस मामले में, है क्योंकि
अब एक ऐसे मामले पर विचार करें जहाँ बाइनरी नहीं है, उदाहरण के लिए । , होगा। और का हैडामर्ड प्रोडक्ट (Hadamard product) होगा।
अधिक सामान्यतः, यदि में कोई गैर-बाइनरी प्रविष्टि है, तो उस प्रविष्टि से घटाया जाएगा, और में परिणामी प्रविष्टि गैर-शून्य होगी। जब हैडामर्ड प्रोडक्ट की गणना की जाती है, तो उस विशेष इंडेक्स पर, और दोनों गैर-शून्य होंगे और प्रोडक्ट गैर-शून्य होगा, जिसका अर्थ है ।
हालांकि, यदि में एक विशेष प्रविष्टि है, तो उस इंडेक्स पर , होगा ताकि उस इंडेक्स पर हैडामर्ड प्रोडक्ट भी शून्य हो जाए।
अंत में, यदि में एक विशेष प्रविष्टि है, तो उस इंडेक्स पर , होगा और उनका एलिमेंट-वाइज़ प्रोडक्ट उस इंडेक्स पर भी शून्य ही रहेगा।
इसलिए, यदि बाइनरी है और की गणना के रूप में की जाती है, तो होगा।
2. Proving a vector is all zero
मान लीजिए कि हम यह साबित करना चाहते हैं कि पेडरसन कमिटमेंट (Pedersen commitment) एक शून्य वेक्टर रखता है। हम पेडरसन कमिटमेंट बनाते हैं और एक वेरिफायर को यह साबित करना चाहते हैं कि है।
ऐसा लग सकता है कि केवल ब्लाइंडिंग टर्म (blinding term) भेजना पर्याप्त है, लेकिन हमारे समाधान को अधिक कंपोजेबल (composable) बनाने के लिए, हम ब्लाइंडिंग टर्म को प्रकट नहीं करना चाहते हैं क्योंकि यह हमारे द्वारा बनाए गए अन्य कमिटमेंट्स को प्रभावित कर सकता है।
इसके बजाय, प्रूवर (prover) को वेरिफायर को भेजता है, और वेरिफायर रैंडम मानों से भरे एक वेक्टर के साथ प्रतिक्रिया देता है। प्रूवर को अब यह साबित करना होगा कि
ध्यान दें कि यह एक प्रॉबेबिलिस्टिक टेस्ट (probabilistic test) है। यह नगण्य संभावना (negligible probability) के साथ संभव है कि के लिए हो, लेकिन प्रूवर के लिए ऐसा बनाना संभव नहीं है क्योंकि वे पहले से नहीं जानते कि क्या होगा।
हालांकि, को ट्रांसमिट करने के लिए कम्युनिकेशन ओवरहेड की आवश्यकता होती है, इसलिए वेरिफायर केवल एक सिंगल रैंडम एलिमेंट भेजता है और प्रूवर की गणना करता है और का उपयोग रैंडम वेक्टर के रूप में करता है।
तब, प्रूवर साबित करता है कि है।
हमारे पास अभी तक यह साबित करने का कोई तंत्र नहीं है कि , क्योंकि यह एक हैडामर्ड प्रोडक्ट है, इनर प्रोडक्ट नहीं। हालांकि, यह कहना कि वेक्टर पूरी तरह से है, यह कहने के समान है कि है। इनर प्रोडक्ट नियमों के अनुसार, हम को इनर प्रोडक्ट के दूसरी तरफ ले जा सकते हैं और अब हमारे पास है।
वेरिफायर को और के कमिटमेंट्स प्राप्त होंगे, न कि के। यह वेरिफायर पर निर्भर करेगा कि वह का एक कमिटमेंट बनाए ताकि उन्हें यकीन हो जाए कि प्रूवर ने इनर प्रोडक्ट में दूसरे वेक्टर के रूप में का उपयोग किया है।
हम जिस मुख्य ट्रिक पर निर्भर करते हैं वह यह है कि प्रूवर अपने वेक्टर्स को कमिट करने के लिए बेसिस वेक्टर्स (basis vectors) और का उपयोग करता है, लेकिन वेरिफायर और का उपयोग करता है।
जब प्रूवर मूल्यांकन भेजता है, तो प्रूवर को यह सुनिश्चित करना होगा कि टर्म्स वेरिफायर के बेसिस वेक्टर में के साथ रद्द (cancel) हो जाएंगे।
विशेष रूप से, प्रूवर निम्नलिखित कमिटमेंट्स का निर्माण करता है:
और वेरिफायर को भेजता है। को कमिट करके भेजने की कोई आवश्यकता नहीं है क्योंकि इस मामले में यह शून्य है।
प्रूवर के पॉलिनॉमियल्स (polynomials) होंगे:
महत्वपूर्ण रूप से, प्रूवर ने को से हैडामर्ड गुणा किया है। पहले, की गणना (बिना के) के रूप में की जाती थी। यह बाद में सभी टर्म्स को रद्द करने की अनुमति देगा जब वेरिफायर कमिटमेंट की गणना करेगा। आंतरिक रूप से (Under the hood), , है, इसलिए जब वेरिफायर की गणना करेगा तो रद्द हो जाएगा, यानी:
हालांकि, प्रूवर अभी तक या की गणना नहीं कर सकता है क्योंकि वेरिफायर ने अभी तक नहीं भेजा है। इसलिए, प्राप्त करने के बाद वेरिफायर भेजता है और प्रूवर की गणना करता है और पॉलिनॉमियल की गणना करता है:
जहाँ
प्रूवर कोएफिशिएंट्स और पर कमिट करता है:
और वेरिफायर को भेजता है। वेरिफायर के साथ प्रतिक्रिया देता है और प्रूवर वेक्टर पॉलिनॉमियल्स और का मूल्यांकन करता है:
ध्यान दें कि में केवल और के ब्लाइंडिंग टर्म्स शामिल हैं। पिछले इम्प्लीमेंटेशन में, की गणना के रूप में की गई थी, जहाँ , के लिए ब्लाइंडिंग टर्म है, जो पॉलिनॉमियल का कांस्टेंट कोएफिशिएंट भी है।
कोई ब्लाइंडिंग टर्म नहीं है क्योंकि के लिए कोई कमिटमेंट नहीं है, यानी गुप्त नहीं है – यह है। प्रूवर भेजता है और वेरिफायर यह जांचता है कि:
पहला महत्वपूर्ण अंतर यह है कि का कमिटमेंट पहले चर्चा किए गए कारणों से के बजाय बेसिस वेक्टर के संबंध में किया जाता है।
दूसरा, में कोई कांस्टेंट कमिटमेंट नहीं है। आम तौर पर, समीकरण होता है, लेकिन इस मामले में , का कमिटमेंट है।
सामान्य रूप से, यदि में ऐसे मान शामिल हैं जो वेरिफायर को ज्ञात हैं, तो वेरिफायर के कमिटमेंट का निर्माण कर सकता है जैसा कि हम अगले अनुभाग में दिखाएंगे।
4. Proving an inner product when an additive public constant is involved
जैसा कि ऊपर के अनुभाग में संकेत दिया गया है, वेरिफायर कमिटमेंट्स का पुनर्निर्माण कर सकता है यदि वेरिफायर अंडरलाइंग (underlying) वेक्टर को जानता है।
उदाहरण के लिए, मान लीजिए कि हम यह साबित कर रहे हैं कि
जहाँ और वेरिफायर को ज्ञात वेक्टर्स हैं और एक स्केलर है जो वेरिफायर को पहले से ज्ञात है। के विपरीत, ये वेक्टर्स और स्केलर प्रमाण शुरू होने से पहले ही ज्ञात होते हैं। ध्यान दें कि इस उदाहरण में को से हैडामर्ड गुणा नहीं किया गया है।
प्रूवर हमेशा की तरह केवल गुप्त मानों , और पर कमिट करता है:
हमेशा की तरह, पॉलिनॉमियल्स और ऐसे हैं कि कांस्टेंट टर्म मूल इनर प्रोडक्ट का वेक्टर है और लीनियर टर्म्स और हैं। वेरिफायर से प्राप्त करने पर, प्रूवर की गणना करता है और और बनाता है लेकिन उनका मूल्यांकन नहीं करता है:
ध्यान दें कि को के साथ हैडामर्ड गुणा नहीं किया गया है, लेकिन लीनियर टर्म के साथ किया गया है। हम बाद में दिखाएंगे कि वेरिफायर इसे कैसे हैंडल करता है।
अभी के लिए, हम की गणना इस प्रकार करते हैं:
जहाँ
ध्यान दें कि में कांस्टेंट टर्म है न कि । कमिटमेंट्स की गणना इस प्रकार की जाती है:
और इन्हें वेरिफायर को भेजा जाता है जो फिर रैंडम मान भेजता है।
प्रूवर गणना करता है:
ध्यान दें कि में कांस्टेंट टर्म है। प्रूवर भेजता है। अंत में, वेरिफायर गणना करता है:
और में क्रमशः और शामिल हैं, लेकिन और में नहीं। इसलिए, वेरिफायर उन वेक्टर्स के लिए कमिटमेंट्स की गणना करता है और उन्हें कमिटमेंट्स और में जोड़ता है। के मामले में, बेसिस वेक्टर , को बना देगा, इसलिए कमिटमेंट की गणना के संबंध में की जानी चाहिए। अंत में, ब्लाइंडिंग टर्म में शामिल है लेकिन में शामिल नहीं है। इसलिए, प्रूवर को को से गुणा करना होगा।
, और की गणना करके, वेरिफायर सुनिश्चित हो सकता है कि इनर प्रोडक्ट गणना में वास्तव में वे टर्म्स शामिल थे।
Range proof
यह साबित करने के लिए कि एक मान है जो से कम है, हमें तीन चीजें साबित करनी होंगी:
- इनर प्रोडक्ट , यानी , का बाइनरी रिप्रजेंटेशन है
अंतिम दो दावे सीधे इनर प्रोडक्ट के रूप में नहीं हैं। हालांकि, इसे प्राप्त करने के लिए हम उन्हें थोड़ा संशोधित कर सकते हैं। हम वास्तव में यह कह रहे हैं कि वेक्टर्स:
दोनों हैं। यह साबित करने के लिए कि वे शून्य हैं, हम पिछले अनुभाग की ट्रिक का उपयोग कर सकते हैं। अर्थात, प्रूवर को यह स्थापित करने की आवश्यकता है कि
और
जहाँ वेरिफायर द्वारा भेजे गए मान से प्राप्त रैंडम वेक्टर है।
मूल बुलेटप्रूफ्स (Bulletproofs) पेपर पहले दावे को थोड़ा इस प्रकार संशोधित करता है ताकि हम पिछले अनुभाग में तीसरी ट्रिक का उपयोग कर सकें:
इसलिए, प्रूवर को स्थापित करने के लिए तीन इनर प्रोडक्ट्स हैं:
Combining three inner products into one
इन तीन इनर प्रोडक्ट्स को वेरिफायर द्वारा प्रदान किए गए रैंडमनेस के साथ एक रैंडम लीनियर कॉम्बिनेशन का उपयोग करके एक में मिलाया जा सकता है।
कुछ भारी इनर प्रोडक्ट अलजेब्रा के साथ, हम सभी इनर प्रोडक्ट्स को इस प्रकार मिला सकते हैं। हम परिशिष्ट (appendix) में डेरिवेशन दिखाते हैं।
नीचे बॉक्स किए गए टर्म्स में वेरिफायर को ज्ञात मान होते हैं, इसलिए हम स्पष्ट रूप से उन मानों की जांच करने के लिए अपने वेरिफिकेशन एल्गोरिथम का निर्माण करेंगे। अर्थात, वेरिफायर बॉक्स किए गए टर्म्स में मानों के लिए कमिटमेंट्स की गणना करेगा, न कि प्रूवर:
जगह बचाने के लिए, Bulletproofs पेपर टर्म को के रूप में संदर्भित करता है, इसलिए इनर प्रोडक्ट को इस प्रकार लिखा जा सकता है:
ध्यान दें कि एक ऐसा मान है जिसकी गणना वेरिफायर कर सकता है।
Range Proof Algorithm
प्रूवर और इसके बाइनरी रिप्रजेंटेशन को चुनता है और की गणना करता है।
प्रूवर फिर रैंडम रूप से ब्लाइंडिंग टर्म चुनता है और बेसिस वेक्टर्स और का उपयोग करके और के संयुक्त कमिटमेंट की गणना इस प्रकार करता है:
प्रूवर फिर जल्द ही बनने वाले वेक्टर पॉलिनॉमियल्स और के लीनियर टर्म्स को और के रूप में चुनता है और उन्हें कमिट करता है:
प्रूवर के इनर प्रोडक्ट को के संबंध में एक अज्ञात डिस्क्रीट लॉग (अज्ञात बेस) (जो से असंबंधित है) के साथ कमिट करता है:
प्रूवर वेरिफायर को भेजता है।
वेरिफायर रैंडम मानों के साथ प्रतिक्रिया देता है जिसका उपयोग प्रूवर तीन इनर प्रोडक्ट्स को एक में मिलाने के लिए करेगा।
इनर प्रोडक्ट का बायां भाग , का कांस्टेंट टर्म होगा और , का कांस्टेंट टर्म होगा।
इस प्रकार, हम का निर्माण इस प्रकार करते हैं:
और हम का निर्माण इस प्रकार करते हैं:
ध्यान दें कि हमने ऊपर Prerequisites अनुभाग के भाग 3 में चर्चा किए गए कारणों से को के साथ एलिमेंट-वाइज़ गुणा किया है।
प्रूवर अब कांस्टेंट कोएफिशिएंट , लीनियर कोएफिशिएंट और क्वाड्रैटिक कोएफिशिएंट के साथ का निर्माण इस प्रकार कर सकता है:
जहाँ है।
प्रूवर और के कमिटमेंट्स इस प्रकार भेजता है:
पर कमिट करने की कोई आवश्यकता नहीं है – ध्यान दें कि यह ठीक वही इनर प्रोडक्ट है जिसे हम साबित करने का प्रयास कर रहे हैं, इसलिए वेरिफायर के पास पहले से ही के रूप में कमिटमेंट है।
वेरिफायर रैंडमनेस भेजता है और प्रूवर गणना करता है:
ध्यान दें कि के कांस्टेंट टर्म को मूल इनर प्रोडक्ट के टर्म को दर्शाने के लिए से गुणा किया जाता है।
वेरिफायर तब एक नया बेसिस वेक्टर की गणना करता है और निम्नलिखित चेक्स चलाता है:
याद करें कि प्रूवर ने इनर प्रोडक्ट के बाएँ और दाएँ पक्ष के लिए उपयोग किए गए संपूर्ण वेक्टर्स को कमिट नहीं किया था, बल्कि केवल और को कमिट किया था। बाकी वेक्टर्स एडिटिव पब्लिक वेक्टर्स (additive public vectors) थे जो वेरिफायर को ज्ञात थे, इसलिए वेरिफायर ने कांस्टेंट टर्म्स के कमिटमेंट्स का निर्माण करके और उन्हें प्रूवर द्वारा आपूर्ति किए गए गुप्त वेक्टर्स के कमिटमेंट में जोड़कर वेक्टर्स के कमिटमेंट्स का पुनर्निर्माण किया।
याद दिलाने के लिए, यहाँ वेरिफायर को ज्ञात मानों के बॉक्स के साथ मूल इनर प्रोडक्ट दिया गया है:
पाठकों को यह वेरिफाई करने के लिए प्रोत्साहित किया जाता है कि मूल प्रोडक्ट में बॉक्स किए गए टर्म्स (वेरिफायर को ज्ञात मान) को ऊपर दिए गए समानता चेक्स (equality checks) के सेट में बॉक्स किए गए टर्म्स में वेरिफायर द्वारा फिर से बनाया गया था।
प्रूवर की गणना के एक हिस्से को दोहराकर, वेरिफायर यह सुनिश्चित करता है कि प्रूवर ने वास्तव में दावा की गई गणना की है।
Correctness of the verification algorithm
अब हम दिखाते हैं कि यदि प्रूवर ईमानदार था, तो अंतिम वेरिफिकेशन चेक्स पूरी तरह से सही हैं।
नीचे हम सटीक अलजेब्रा दिखाते हैं, लेकिन सहज रूप से वेरिफायर इनर प्रोडक्ट में लेफ्ट वेक्टर, इनर प्रोडक्ट में राइट वेक्टर और आउटपुट का “पुनर्निर्माण” कर रहा है।
वेरिफायर को और के कमिटमेंट्स नहीं दिए गए हैं बल्कि और के दिए गए हैं। इसी तरह, वेरिफायर को आउटपुट का कमिटमेंट नहीं दिया गया है बल्कि केवल का दिया गया है।
एडिटिव टर्म्स और द्वारा एलिमेंट-वाइज़ गुणा किए गए टर्म्स को वेरिफायर द्वारा फिर से बनाया जाना चाहिए।
Correctness of
चेक के लिए, यह परिभाषा के अनुसार सत्य है, क्योंकि प्रूवर ने की गणना इसी तरह की है।
Correctness of the committed and with respect to and
के लिए:
हम निम्नलिखित प्रतिस्थापन (substitution) करते हैं:
सभी टर्म्स इस प्रकार रद्द हो जाते हैं:
से संबंधित ब्लाइंडिंग टर्म्स इस प्रकार रद्द हो जाते हैं:
, टर्म्स के साथ रद्द हो जाता है:
इनर प्रोडक्ट्स को अलग करें:
उन टर्म्स को रद्द करें जो समीकरण के दोनों ओर दिखाई देते हैं:
को दूसरी तरफ ले जाएं:
Correctness of the evaluation of
यह देखने के लिए कि
सही है, हम इस प्रकार टर्म्स को प्रतिस्थापित कर सकते हैं:
, , , के साथ:
हालांकि, ऐसा अलजेब्रा बेहद जटिल होगा। इसके बजाय, हम देखते हैं कि , के वेक्टर पॉलिनॉमियल इनर प्रोडक्ट का कांस्टेंट टर्म है। में में ब्लाइंडिंग टर्म को रद्द करने के लिए, ध्यान दें कि में शामिल है, इसलिए यह में गामा टर्म के साथ रद्द हो जाएगा।
चूंकि पेडरसन कमिटमेंट्स एडिटिवली होमोमोर्फिक (additively homomorphic) हैं, इसलिए वेरिफायर पॉलिनॉमियल के कांस्टेंट टर्म के कमिटमेंट की गणना करने के लिए आसानी से की गणना करके उसे में जोड़ सकता है।
Logarithmic-sized range proof
हम और का कमिटमेंट भेजकर और यह साबित करके डेटा ट्रांसमिशन के आकार को कम कर सकते हैं कि कमिट किए गए वेक्टर्स का इनर प्रोडक्ट है, इसके लिए लॉगरिदमिक-साइज्ड (logarithmic-sized) प्रूफ का उपयोग किया जाता है, और फिर वेरिफाई किया जाता है कि
और
बेसिस वेक्टर्स और के संबंध में।
Using the range proof algorithm for the subset sum
सबसेट सम प्रॉब्लम (subset sum problem) यह पूछता है, "संख्याओं का एक सेट दिए जाने पर, क्या कोई सबसेट (संभवतः पूरे सेट सहित) जुड़कर के बराबर होता है? उदाहरण के लिए यदि है और सेट है तो उत्तर हाँ है क्योंकि । हालांकि यदि है, तो उत्तर नहीं है।
सबसेट सम प्रॉब्लम NP-Complete है, जिसका अर्थ है कि, एक बूलियन सर्किट (Boolean circuit) या एरिथमेटिक सर्किट (arithmetic circuit) के समान, यह NP में किसी भी समस्या का प्रतिनिधित्व कर सकता है। अर्थात, NP में किसी भी समस्या को सबसेट सम इंस्टेंस में फिर से लिखा (तकनीकी शब्द “रिड्यूस्ड (reduced)”) जा सकता है।
को से बदलकर, हम यह साबित कर सकते हैं कि हम बिना उत्तर बताए सबसेट सम का समाधान जानते हैं। विशेष रूप से, प्रूवर को पता होगा कि यदि है तो है। सामान्य तौर पर, में एक (one) प्रविष्टि का अर्थ है कि हम उस एलिमेंट को सबसेट में शामिल करते हैं और शून्य का अर्थ है कि यह सबसेट में शामिल नहीं है।
इसलिए, Bulletproofs किसी भी NP समस्या के लिए किसी भी विटनेस (witness) का ज्ञान साबित करने में सक्षम हैं।
Appendix: Derivation of combining three inner products into one
तीन इनर प्रोडक्ट्स से शुरू करते हुए
हम दिखाते हैं कि अंतिम परिणाम कैसे प्राप्त करें
हमारे द्वारा पहले सीखे गए इनर प्रोडक्ट अलजेब्रा का उपयोग करके।
- मध्य टर्म को अलग-अलग इनर प्रोडक्ट्स में विभाजित किया जा सकता है:
-
हम कांस्टेंट टर्म्स को इनर प्रोडक्ट्स के अंदर ले जा सकते हैं:
-
वेरिफायर को ज्ञात मानों को दाईं ओर ले जाएं:
- टर्म्स को इस तरह बदलें कि दोनों हो जाएं:
- टर्म्स को एक में मिलाएं:
- बाईं ओर के दो टर्म्स को मिलाएं:
- अंतिम बाईं ओर के टर्म को दो इनर प्रोडक्ट्स में विभाजित करें:
- टर्म्स को मिलाएं:
- हम वाले टर्म्स को मिलाने के लिए नियम का उपयोग कर सकते हैं। यहाँ , है, , है, और , है।
- अब हम दाईं ओर के टर्म्स को तोड़ते हैं:
- दाईं ओर के इनर प्रोडक्ट्स से स्केलर्स को बाहर निकालें:
- को फैक्टर आउट (बाहर) करें:
चूंकि है, हमारे पास है:
यह डेरिवेशन पूरा करता है।