Circle STARKs एक नई zk-STARK स्कीम है जिसे Stwo और Plonky3 में इम्प्लीमेंट किया गया है, और इसे कई zkVM प्रोजेक्ट्स द्वारा अपनाया गया है। इसका मुख्य नवाचार (innovation) छोटे 32-बिट फील्ड्स (Mersenne prime ) के उपयोग को सक्षम करने में निहित है, जबकि यह कुशल FFT ऑपरेशन्स के लिए आवश्यक गणितीय गुणों को बनाए रखता है। इस व्याख्यात्मक लेख शृंखला में, हम Circle STARK के पीछे के मुख्य एल्गोरिदम पर चर्चा करेंगे, जिसका नाम Circle FFT है।
भाग 1 लेख में, हम सबसे पहले समीक्षा करेंगे कि STARK-friendly primes कैसे विकसित हुए हैं, और फिर हम Circle FFT की मूलभूत अवधारणाओं—जैसे कि circle curve, इसका group structure, और twin-cosets तथा standard-position cosets की भूमिकाओं—का विस्तृत उदाहरणों और व्युत्पत्तियों (derivations) का उपयोग करके अन्वेषण करेंगे। इसके बाद, भाग 2 लेख में, हम स्वयं Circle FFT एल्गोरिदम का विस्तार से वर्णन करेंगे।
हम इन मुख्य विचारों—जैसे कि circle group और Circle FFT—का एक वॉकथ्रू भी प्रदान करते हैं, साथ ही Python-script के साथ (Mersenne prime जिसका घातांक है: ) के लिए स्पष्ट उदाहरण गणनाएं (computations) भी शामिल हैं।
हमारा ध्यान इस बात पर है कि कैसे इनमें से प्रत्येक बिल्डिंग ब्लॉक एक पूर्ण FFT-जैसे रूटीन की ओर ले जाता है, तब भी जब में कोई बड़ा two-adic फैक्टर नहीं होता है।
यदि आप स्वयं उदाहरणों को रन करने में रुचि रखते हैं, तो पूरा Python कोड यहाँ उपलब्ध है, और हम इसे बाद के सेक्शन जैसे कि सेक्शन 4 और 6 में संदर्भित करेंगे, जहाँ हम कोड में group और domain निर्माण की प्रक्रिया को समझेंगे।
यह लेख Yugo द्वारा RareSkills के सहयोग से लिखा गया था। इस लेख को Soulforge Grant द्वारा फंड किया गया था। हम उनके समर्थन के लिए आभारी हैं।
0. STARK‑Friendly Primes से Mersenne 31 तक
STARK-friendly prime में गहराई से जाने से पहले, आइए सबसे पहले finite-field की बुनियादी बातों को याद करें।
एक फील्ड (field) वह सेट है जिसमें जोड़, घटाव, गुणा और भाग (शून्य को छोड़कर) परिभाषित होते हैं। जब तत्वों (elements) का सेट परिमित (finite) होता है, तो इसे finite field कहा जाता है। शून्य से लेकर (जहाँ एक अभाज्य संख्या/prime है) तक के पूर्णांकों के सेट को संदर्भित करता है, जिसमें जोड़, घटाव, और गुणा सभी मॉड्यूलो (modulo ) लिए जाते हैं, और भाग को मॉड्यूलो गुणा के व्युत्क्रम (inverse) के रूप में परिभाषित किया जाता है।
हम द्वारा सेट को दर्शाते हैं। में प्रत्येक तत्व का एक मल्टीप्लिकेटिव इनवर्स (multiplicative inverse) होता है, इसलिए को एक मल्टीप्लिकेटिव ग्रुप के रूप में देखा जा सकता है। इस ग्रुप का आकार, , है। जब हम को इसके अभाज्य गुणनखंडों (prime factors) में विभाजित करते हैं, तो यह ज्ञात है कि यदि कोई अभाज्य संख्या , बार आती है, तो आकार का एक चक्रीय उपसमूह (cyclic subgroup) होता है।
आप इसे एक छोटे prime, उदाहरण के लिए , के साथ संक्षेप में समझ सकते हैं। चूंकि का गुणनखंड होता है, इसलिए 2 और 3 आकार के सबग्रुप्स (subgroups) होने चाहिए। वास्तव में, में, तत्व 6, 2 आकार का एक सबग्रुप उत्पन्न करता है, और तत्व 2, 3 आकार का एक सबग्रुप उत्पन्न करता है।
कई STARK प्रोटोकॉल्स में, Number-Theoretic Transform (NTT) या Fast Fourier Transform (FFT) ऐसे सबग्रुप पर निर्भर करता है जहाँ फैक्टर 2 की घात (power of 2) होता है, जिससे सबग्रुप का आकार हो जाता है। वह सबसे बड़ा पूर्णांक जिसके लिए , को विभाजित करता है, उसे two-adicity कहा जाता है। एक उच्च two-adicity, FFT/NTT डोमेन के लिए 2 की घात वाले बड़े आकार की अनुमति देती है, जो तेज़ बहुपद मूल्यांकन (polynomial evaluations), इंटरपोलेशन (interpolations), और बहुपद गुणन (polynomial multiplication) प्राप्त करने के लिए महत्वपूर्ण है। इसके अलावा, इन NTT-आधारित ऑपरेशन्स को कुशलतापूर्वक लागू करना बड़े पैमाने पर तेज़ मॉड्यूलर गुणन पर निर्भर करता है—क्योंकि FFT/NTT में तत्वों को बार-बार गुणा करना और उन्हें मॉड्यूलो कम करना शामिल होता है।
मूल रूप से, STARKs एक prime का उपयोग करते थे, जिसकी two-adicity 192 है। आधुनिक STARK इम्प्लीमेंटेशन में, फाइनाइट फील्ड के आकार को कम करके ओवरहेड को कम करने के लिए सुधार किए गए थे। उदाहरण के लिए, Goldilocks फील्ड है और इसकी two-adicity 32 है। महत्वपूर्ण रूप से, चूँकि दो 64-बिट संख्याओं के गुणनफल को आधार में विभाजित किया जा सकता है और केवल कुछ जोड़ और घटाव के साथ कम (reduce) किया जा सकता है।
Circle STARKs के बारे में क्या? जैसा कि Circle STARKs paper में प्रस्तावित है, यह एक Mersenne prime का उपयोग करता है,
Mersenne prime, किसी पूर्णांक के लिए के रूप की एक अभाज्य संख्या होती है। यहाँ, से प्राप्त होता है, जो कि एक अभाज्य संख्या है और इसलिए इसे Mersenne prime के रूप में वर्गीकृत किया गया है।
को चुनने का एक मुख्य कारण यह है कि यह 32-बिट मशीन वर्ड के भीतर फिट बैठता है, जिससे मॉड्यूलर गुणन अत्यधिक तेज़ हो जाता है। विशेष रूप से, जब दो 32-बिट संख्याओं को गुणा किया जाता है, तो परिणाम 64-बिट मान होता है, और द्वारा मॉड्यूलर रिडक्शन केवल दो जोड़ के साथ किया जा सकता है।
वेक्टराइज्ड इंस्ट्रक्शन्स (vectorized instructions) के साथ यह ऑपरेशन बहुत तेज हो सकता है। आधुनिक CPU मूल रूप से 32-बिट पूर्णांकों को प्रोसेस करने में उत्कृष्ट हैं, और Mersenne 31 () इस आर्किटेक्चर के भीतर फिट बैठता है, जिससे हार्डवेयर क्षमताओं का इष्टतम उपयोग होता है। मूल STARK में उपयोग किए गए 256-बिट prime की तुलना में, Mersenne 31 लगभग 125 गुना तेज मॉड्यूलर गुणन प्रदान करता है, और Baby Bear () की तुलना में 1.3 गुना स्पीडअप प्रदान करता है, जैसा कि Eli Ben-Sasson द्वारा Why I’m Excited By Circle Stark And Stwo में चर्चा की गई है।
हालाँकि, पारंपरिक FFT या NTT दृष्टिकोण के लिए में 2 की घात का पर्याप्त सबग्रुप बनाने हेतु में एक बड़े 2-adic फैक्टर की आवश्यकता होती है। यहाँ, जिसकी two-adicity केवल 1 है। इस प्रकार, हम गुणन के तहत सीधे 2 की घात वाले बड़े सबग्रुप का उपयोग नहीं कर सकते हैं।
Circle STARK अभी भी Mersenne prime field का उपयोग करता है। हालाँकि, सीधे के साथ काम करने के बजाय, हम देखते हैं कि वक्र (curve)
यह महत्वपूर्ण है क्योंकि में 2 की एक बड़ी घात शामिल हो सकती है, जो आकार के सबग्रुप्स बनाती है। इस प्रकार, में एकल तत्वों के साथ काम करने के बजाय, Circle STARK उन जोड़ों पर विचार करता है जो (अर्थात circle curve के बिंदुओं) को संतुष्ट करते हैं।
ऐसा करके, Circle STARK इन circle तत्वों पर सीधे अपना स्वयं का तेज़ बहुपद इंटरपोलेशन और मूल्यांकन—जिसे अक्सर Circle FFT कहा जाता है—लागू कर सकता है।
1. Circle Curve
आइए Circle STARKs के मुख्य गणित की ओर बढ़ें। एक फाइनाइट फील्ड पर एक circle curve, का वह सबसेट है जो उन सभी बिंदुओं द्वारा परिभाषित होता है जो इसे संतुष्ट करते हैं:
हम कभी-कभी इस सेट को या केवल “circle” द्वारा दर्शाते हैं।
Circle STARKs में, हम उन primes पर ध्यान केंद्रित करते हैं जिनमें (उदाहरण के लिए, ) हो। इस शर्त के तहत, , में एक पूर्ण वर्ग (square) नहीं है। ठोस रूप से, यह सुनिश्चित करता है कि समीकरण के में ठीक समाधान हैं और कोई अतिरिक्त आउटलायर समाधान (यानी, अनंत पर बिंदु / points at infinity) नहीं हैं। इस लेख के लिए, हमें बस यह चाहिए कि उस शर्त के तहत में ठीक बिंदु देता है।
(हालाँकि, जो पाठक इस ज्यामितीय दृष्टिकोण में रुचि रखते हैं कि क्यों ठीक समाधानों की ओर ले जाता है, वे परिशिष्ट (Appendix) देख सकते हैं।)
1.1 Toy Example
उदाहरण के लिए, यदि (जो है), तो , में उन सभी का सेट है जिसके लिए है।
यहाँ में कुछ जोड़े दिए गए हैं जो को संतुष्ट करते हैं। उदाहरण के लिए:
- और स्पष्ट हैं क्योंकि और है।
- भी काम करता है क्योंकि , और है।
हम देखते हैं कि के लिए ऐसे ठीक जोड़े हैं।
2. Circle Group
इस प्रकार के सेट को द्वारा दर्शाया जाता है और इसे अक्सर पर Circle Curve कहा जाता है। एक आश्चर्यजनक तथ्य यह है कि । उदाहरण के लिए, यदि है, तो वृत्त पर ठीक बिंदु हैं — विशेष रूप से ।
यह महत्वपूर्ण है क्योंकि सामान्य STARK सेटिंग में, हम अक्सर FFT-जैसे ऑपरेशन्स के लिए आकार का डोमेन चाहते हैं। के मामले में, वृत्त पर ठीक 8 बिंदुओं का होना यह अर्थ रखता है कि हम आकार के सबग्रुप्स बना सकते हैं। बाद में, हम देखेंगे कि Circle FFT में इस गुण ( में उच्च 2-adicity) का उपयोग कैसे किया जाता है।
एक प्रमुख गुण यह है कि को इसके बिंदुओं पर एक समूह संक्रिया (group operation) (जो अनिवार्य रूप से एक बाइनरी ऑपरेटर है) के साथ दिया जा सकता है। विशेष रूप से, हम इस ऑपरेशन को दर्शाने के लिए “” का उपयोग करते हैं: में दो बिंदुओं और के लिए,
हम जांच कर सकते हैं कि यह group operation, के भीतर रहता है (परिणाम अभी भी को संतुष्ट करता है) और सेट को आकार का एक चक्रीय समूह (cyclic group) बनाता है।
2.1 Checking the Group Axioms
एक ग्रुप के स्वयंसिद्धों (axioms) के रूप में, हम आमतौर पर निम्नलिखित चार गुणों को सूचीबद्ध करते हैं: संवरक (closure), तत्समक अवयव (identity element), प्रतिलोम अवयव (inverse element), और सहचर्य (associativity)। आइए यह पुष्टि करने के लिए हर एक पर करीब से नज़र डालें कि वे सभी लागू होते हैं।
2.1.1 Closure
वृत्त पर दो बिंदु और लें;
एक नया बिंदु परिभाषित करें
हम यह दिखाएंगे कि भी वृत्त पर स्थित है, जिसके लिए हम की क्रमिक रूप से गणना करेंगे:
चूँकि हम जानते हैं कि और , हम इन मानों को गुणनफल में प्रतिस्थापित करते हैं:
अतः भी को संतुष्ट करता है और इसलिए वृत्त पर स्थित है। यह पुष्टि करता है कि सेट इस संक्रिया के तहत संवृत (closed) है
2.1.2 Identity Element
बिंदु समूह संक्रिया (group operation) के तहत identity element के रूप में कार्य करता है। ठोस रूप से, वृत्त पर किसी भी के लिए,
कोई बिंदु के बारे में सोच सकता है। यदि हम को एक identity के रूप में उपयोग करने का प्रयास करते हैं, तो हम देखते हैं कि यह विफल रहता है:
जो सामान्य के लिए के बराबर नहीं है। चूंकि identity element अद्वितीय (unique) होता है, इसलिए identity नहीं हो सकता।
2.1.3 Inverse
एक ग्रुप में, किसी तत्व का प्रतिलोम (inverse) वह अद्वितीय बिंदु होता है जो इसे संतुष्ट करता है:
वृत्त पर, हम देखते हैं कि , group operation के संबंध में के inverse के रूप में कार्य करता है। वास्तव में,
चूँकि है।
इस प्रकार, group operation के तहत का inverse है।
2.1.4 Associativity
अंतिम ग्रुप स्वयंसिद्ध (group axiom) associativity है: वृत्त पर किन्हीं तीन बिंदुओं
के लिए,
इसे बहुपद (polynomial) का विस्तार करके सत्यापित किया जा सकता है, लेकिन हम यहाँ विस्तार में नहीं जाएंगे क्योंकि यह बहुत लंबा हो जाएगा।
2.2 A Special Operation: The Squaring Map
इन ग्रुप स्वयंसिद्धों (group axioms) के अलावा, वृत्त पर एक और संक्रिया है जो बाद के अनुभागों में, विशेष रूप से Circle FFT के लिए विशेष रूप से उपयोगी है, वह है squaring map। यह मैप किसी बिंदु पर स्वयं उसी के साथ group operation लागू करता है:
चूँकि वृत्त को संतुष्ट करता है, हमें प्राप्त होता है, इसलिए
Circle FFT में, हम पुनरावर्ती (recursive) तरीके से कुछ मूल्यांकन डोमेन (evaluation domains) को आधा करने के लिए का उपयोग करेंगे— का प्रत्येक अनुप्रयोग (application) डोमेन के आकार को 2 के गुणक से कम कर देता है। ऐसा इसलिए है क्योंकि group operation के साथ संगत (compatible) है। ठोस रूप से, वृत्त पर दो बिंदुओं और के लिए,
यह संगतता (compatibility) दर्शाती है कि , आकार के एक twin-coset को आकार के दूसरे twin-coset में मैप करता है। हम इस डोमेन-हाल्विंग (domain-halving) गुण पर विस्तार से बाद में लौटेंगे।
2.3 A Special Operation: The Involution
Squaring map के अलावा, एक और महत्वपूर्ण ऑपरेशन है। यह ऑपरेशन, जिसे involution कहा जाता है, इस प्रकार परिभाषित किया गया है:
ज्यामितीय रूप से, यह -निर्देशांक (coordinate) को अपरिवर्तित छोड़ते हुए -निर्देशांक के चिह्न को पलट देता है। ध्यान दें कि अपना स्वयं का inverse है— को दो बार लागू करने पर आप मूल बिंदु पर वापस आ जाते हैं:
वृत्त पर, involution वक्र (curve) पर हर बिंदु को बनाए रखता है (क्योंकि को नकारात्मक करने से प्रभावित नहीं होता है)। हालाँकि, वाला बिंदु के तहत स्थिर (fixed) रहता है, जिसका अर्थ है ।
2.4 Concrete Operation of Circle Group at
पिछले ठोस उदाहरण में, हमने के साथ का अन्वेषण किया, जो अंतर्ज्ञान (intuition) बनाने के लिए एक उपयोगी toy example के रूप में काम आया। हालाँकि, Circle Group की गहरी संरचनात्मक विशेषताओं—जैसे लंबी सबग्रुप चेन्स या twin-cosets या standard positon coset के निर्माण—को उजागर करने के लिए बहुत छोटा है।
इसलिए, अब हम इन समृद्ध व्यवहारों को अधिक सार्थक तरीके से स्पष्ट करने के लिए थोड़े बड़े prime, (जो को संतुष्ट करता है) की ओर मुड़ते हैं।
दिए जाने पर, जो के सर्वांगसम (congruent) है, में बिंदुओं का सेट जो समीकरण को संतुष्ट करता है, जिसे के रूप में दर्शाया गया है, निम्नलिखित चित्र में दर्शाया गया है:

यहाँ में कुछ जोड़े के उदाहरण दिए गए हैं जो को संतुष्ट करते हैं:
- भी काम करता है क्योंकि , और है।
- भी एक समाधान है: (mod 31) और (mod 31), इसलिए (mod 31) है।
- यह दर्शाता है कि , अतः (mod 31) है।
Circle Group को देखने के लिए, आइए पर काम करें, जहाँ वृत्त में 32 बिंदु हैं। मान लें कि हम यह बिंदु चुनते हैं:
हम को group operation के माध्यम से बिंदु के साथ जोड़ सकते हैं:
वास्तव में, कोई भी यह सत्यापित कर सकता है:
इसलिए भी वृत्त पर स्थित है।
इस बीच, का inverse है:
क्योंकि
इसके अतिरिक्त, squaring map बिंदु पर काम कर सकता है। याद करें कि
अतः,
3. Subgroups of Circle Group
हमने स्थापित किया है कि , आकार का एक चक्रीय समूह (cyclic group) है। यदि दो की घात (power of two) है, मान लीजिए , तो सबग्रुप्स की एक नेस्टेड श्रृंखला (nested chain) होती है
जहाँ प्रत्येक का क्रम (order) होता है।
दूसरे शब्दों में, , 2 आकार का एक सबग्रुप है, का आकार 4 है, और इसी तरह तक, जिसका आकार है।
उदाहरण के लिए, यदि (इसलिए ), तो हमें एक श्रृंखला प्राप्त होती है
जहाँ और प्रत्येक का आकार है। एक सारांश इस प्रकार दिख सकता है:
| 1 | |
| 2 | |
| 4 | |
| 8 | |
| 16 | |
| 32 |
नीचे, हम में प्रत्येक सबग्रुप को स्पष्ट रूप से सूचीबद्ध करते हैं।
Size 1: [Point(1, 0)]
Size 2: [Point(1, 0), Point(30, 0)]
Size 4: [Point(1, 0), Point(0, 30), Point(30, 0), Point(0, 1)]
Size 8: [Point(1, 0), Point(4, 27), Point(0, 30), Point(27, 27), Point(30, 0), Point(27, 4), Point(0, 1), Point(4, 4)]
Size 16: [Point(1, 0), Point(7, 13), Point(4, 27), Point(18, 24), Point(0, 30), Point(13, 24), Point(27, 27), Point(24, 13), Point(30, 0), Point(24, 18), Point(27, 4), Point(13, 7), Point(0, 1), Point(18, 7), Point(4, 4), Point(7, 18)]
Size 32: [Point(1, 0), Point(2, 11), Point(7, 13), Point(26, 10), Point(4, 27), Point(21, 5), Point(18, 24), Point(20, 29), Point(0, 30), Point(11, 29), Point(13, 24), Point(10, 5), Point(27, 27), Point(5, 10), Point(24, 13), Point(29, 11), Point(30, 0), Point(29, 20), Point(24, 18), Point(5, 21), Point(27, 4), Point(10, 26), Point(13, 7), Point(11, 2), Point(0, 1), Point(20, 2), Point(18, 7), Point(21, 26), Point(4, 4), Point(26, 21), Point(7, 18), Point(2, 20)]
4. Python Code 1: Circle Group
अब हम Simple Python इम्प्लीमेंटेशन के माध्यम से Circle Group कोड की समीक्षा करेंगे। यहाँ केवल सबसे महत्वपूर्ण फ़ंक्शन्स या भागों का वर्णन किया गया है, और पूरा कोड यहाँ उपलब्ध है।
यहाँ, हम अंतर्निहित फाइनाइट फील्ड में अंकगणित को संभालने और वक्र (curve) पर समूह संक्रियाओं (group operations) को संभालने के लिए क्रमशः दो मुख्य क्लासेस- FieldElement और CirclePoint—परिभाषित करते हैं।
4.1 FieldElement
सबसे पहले, FieldElement क्लास फाइनाइट फील्ड में अंकगणितीय संक्रियाओं को परिभाषित करती है, जैसे कि जोड़, गुणा, और व्युत्क्रम मॉड्यूलो 31 (inversion modulo 31)। यह circle वक्र पर सभी गणनाओं का आधार है।
# Mersenne 5
MOD = 31
class FieldElement:
def __init__(self, value):
"""Initialize a field element"""
self.value = value % MOD
def __add__(self, other):
"""Add two field elements"""
return FieldElement((self.value + other.value) % MOD)
def __mul__(self, other):
"""Multiply two field elements"""
return FieldElement((self.value * other.value) % MOD)
def inv(self):
"""Compute the multiplicative inverse"""
return FieldElement(pow(self.value, MOD - 2, MOD))
def square(self):
"""Compute the square"""
return self * self
4.2 CirclePoint
CirclePoint क्लास वृत्त वक्र पर बिंदुओं का प्रतिनिधित्व करती है। add विधि (method) group operation को लागू करती है, जबकि double squaring map को लागू करती है।
class CirclePoint:
def __init__(self, x, y):
"""Initialize a point on the circle x^2 + y^2 = 1"""
if (x.square() + y.square()).value != 1:
raise ValueError("Point does not lie on the circle")
self.x = x
self.y = y
def add(self, other):
"""Perform group operation: (x1,y1)・(x2,y2) = (x1*x2 - y1*y2, x1*y2 + x2*y1)."""
nx = self.x * other.x - self.y * other.y
ny = self.x * other.y + other.x * self.y
return CirclePoint(nx, ny)
def double(self):
"""Apply squaring map: π(x,y) = (2*x^2 - 1, 2*x*y), since x^2 + y^2 = 1."""
xx = self.x.square().double() - FieldElement.one()
yy = self.x.double() * self.y
return CirclePoint(xx, yy)
@classmethod
def identity(cls):
"""Return the identity element (1, 0) of the circle group."""
return cls(FieldElement.one(), FieldElement.zero())
फिर आप धारा 2.4 में वर्णित Circle Group ऑपरेशन उदाहरण का अनुकरण कर सकते हैं।
उदाहरण के लिए, CirclePoint और CirclePoint को जोड़ने पर Point प्राप्त होता है।
p1 = CirclePoint(FieldElement(13), FieldElement(7))
p2 = CirclePoint(FieldElement(30), FieldElement(0))
# group operation
p3 = p1.add(p2)
print(f"p1・p2 = {p3}")
p1・p2 = Point(18, 24)
को दोगुना (doubling) करने पर प्राप्त होता है
# squaring map
p1_double = p1.double()
print(f"π(p1) = {p1_double}")
π(p1) = Point(27, 27)
का inverse है, और उन्हें जोड़ने पर identity प्राप्त होता है
# Inverse
p1_inv = p1.inverse()
print(f"p1's inverse = {p1_inv}")
p1_plus_inv = p1.add(p1_inv)
print(f"p1・p1_inv = {p1_plus_inv}")
p1's inverse = Point(13, 24)
p1・p1_inv = Point(1, 0)
4.3 Circle Group
फ़ंक्शन generate_subgroup, क्रम के सबग्रुप को उत्पन्न करता है। यह get_nth_generator फ़ंक्शन से उपयुक्त जनरेटर प्राप्त करता है और सबग्रुप बनाने के लिए ग्रुप ऑपरेशन add को दोहराता है।
def generate_subgroup(k: int) -> list[CirclePoint]:
"""Generate a subgroup of size 2^k using the generator."""
g_k = get_nth_generator(k)
p = CirclePoint.identity()
return [ (p := p.add(g_k)) if i else p
for i in range(1 << k) ]
उदाहरण के लिए, आप 8 आकार का सबग्रुप प्राप्त कर सकते हैं।
G3 = generate_subgroup(3)
Size 8: [Point(1, 0), Point(4, 27), Point(0, 30), Point(27, 27), Point(30, 0), Point(27, 4), Point(0, 1), Point(4, 4)]
5. Coset, Twin-Cosets and Standard Position Cosets
Twin-Cosets और Standard Position Cosets Circle STARKs में डोमेन हैं। twin-cosets और standard position cosets के गणितीय गुणों को समझने से पहले, आइए संक्षेप में समीक्षा करें कि पारंपरिक STARKS में डोमेन का उपयोग कैसे किया जाता है। जैसा कि धारा 0 में चर्चा की गई है, पारंपरिक STARKS आमतौर पर अपने डोमेन के रूप में के रूप में दर्शाए गए मल्टीप्लिकेटिव (सब)ग्रुप्स का उपयोग करते थे। इन डोमेन ने दो प्राथमिक उद्देश्यों की पूर्ति की।
सबसे पहले, उन्होंने IFFT के माध्यम से कम्प्यूटेशन ट्रेस (computation trace) से बहुपद (polynomials) बनाते समय मूल्यांकन डोमेन (evaluation domain) के रूप में कार्य किया, और हमें FFT के माध्यम से विस्तारित डोमेन के साथ Low Degree Extension (LDE) का संचालन करना होता है और साथ ही हम constraint polynomials का निर्माण करते हैं और LDE पर उनका मूल्यांकन करते हैं।
दूसरा, Low Degree Testing में, विशेष रूप से FRI कमिटमेंट्स (commitments) के साथ, बहुपदों का मूल्यांकन FFT के माध्यम से उन डोमेन पर किया जाना चाहिए जिन्हें पुनरावर्ती (recursive) FRI फोल्डिंग स्टेप्स के दौरान क्रमिक रूप से आधा कर दिया जाता है।
इसके अलावा, FRI फोल्डिंग स्टेप्स के दौरान, जैसे-जैसे बहुपद की डिग्री (degree) आधी की गई, डोमेन के आकार को भी आधा करने की आवश्यकता पड़ी। डोमेन के आकार को आधा करना FRI और FFT दोनों के लिए केंद्रीय है। आगे बढ़ते समय इसे ध्यान में रखें।
क्योंकि जहाँ एक ओर circle group स्वयं पहले से ही उच्च 2-adicity प्रदान करता है, वहीं Twin-Cosets या Standard Position Cosets का निर्माण यह सुनिश्चित करता है कि, FFT में पुनरावर्ती स्क्वायरिंग (recursive squaring) स्टेप्स के दौरान, मूल्यांकन डोमेन (यानी, Twin-Cosets या Standard Position Coset) को उनके कोसेट (coset) संरचना को बनाए रखते हुए आकार में आधा किया जा सकता है। यह रिकर्सन (recursion) के प्रत्येक स्तर में इन डोमेन पर FFT-शैली ऑपरेशन्स को सक्षम करने के लिए आवश्यक है।
5.1 Coset
आइए ग्रुप थ्योरी में coset की परिभाषा को याद करें। मान लीजिए एक ग्रुप का एक सबग्रुप है, और मान लीजिए है। तो द्वारा का बायां कोसेट (left coset) यह सेट है:
यदि है, तो । अन्यथा, यदि है, तो , से एक असंयुक्त (disjoint) सेट है, लेकिन फिर भी इसका आकार के समान ही होता है। यह इसलिए सत्य है क्योंकि यदि है, तो ग्रुप ऑपरेशन के तहत का संवरक (closure) यह सुनिश्चित करता है कि है, जबकि यदि है, तो का कोई भी तत्व यह निहित किए बिना कि है, में नहीं हो सकता है, और आक्षेप (bijection) आकार को सुरक्षित रखता है।
हमारी विशेष सेटिंग में, है, जो आकार का चक्रीय (cyclic) है। पिछले भाग से, हम जानते हैं कि सबग्रुप्स की एक श्रृंखला है जिसका है।
इसलिए, उदाहरण के लिए, यदि हम क्रम के को स्थिर (fix) करते हैं, तो वृत्त पर किसी भी बिंदु के लिए, कोसेट
को का एक कोसेट कहा जाता है।
उस सेट की कार्डिनैलिटी (cardinality) भी ही होगी, और यह स्वयं से तब तक असंयुक्त (disjoint) है जब तक कि पहले से ही से संबंधित न हो।
5.1.1 Coset Example
आइए इस उदाहरण को जल्दी से स्पष्ट करें। के मामले में, याद रखें कि है, इसलिए सबग्रुप्स की एक श्रृंखला है जहाँ है। ठोस रूप से,
अब एक बिंदु लें जो में नहीं है। उदाहरण के लिए,
चूँकि , में नहीं है, सेट
का एक विशिष्ट (distinct) कोसेट होगा, जो स्वयं से असंयुक्त (disjoint) होगा।
अतः,
जिसका आकार वास्तव में 2 है। यह के संगत का कोसेट है, जो स्वयं सबग्रुप से स्पष्ट रूप से भिन्न है।
5.2 Twin-Cosets
अब हम दो कोसेट्स के संघ (union) को लेकर एक twin-coset परिभाषित करते हैं: और इसका inverse कोसेट । ठोस रूप से, मान लें
हम कहते हैं कि आकार का एक twin-coset है यदि निम्नलिखित शर्तें पूरी होती हैं:
-
Disjointness (असंयुक्तता)
दो कोसेट्स और असंयुक्त (disjoint) हैं।
व्यवहार में, यह disjointness यह सुनिश्चित करने के बराबर है कि है। यह समतुल्यता (equivalence) कोसेट्स के गुणों से उत्पन्न होती है। यदि होता, तो , और दोनों में होता (ओवरलैप)। इसके विपरीत, यदि कोसेट्स ओवरलैप नहीं करते हैं, तो को (किसी भी के लिए) के रूप में नहीं लिखा जा सकता है, जिसका अर्थ है । -
Involution के तहत कोई स्थिर बिंदु (fixed points) नहीं
किसी बिंदु को मैप का fixed point कहा जाता है यदि हो। हमारे मामले में, हम involution पर विचार करते हैं।
यदि में कोई ऐसा बिंदु होता जहाँ है, तो अपरिवर्तित रहता। यह एक fixed point है। हम में ऐसे बिंदुओं से बचना चाहते हैं, क्योंकि परिभाषा के अनुसार एक twin-coset, के किसी भी fixed point को बाहर रखता है।
इन शर्तों के तहत, प्रत्येक कोसेट और में अलग-अलग बिंदु हैं, जिससे में कुल बिंदु होते हैं। सहज रूप से, हम एक कोसेट को उसके inverse कोसेट के साथ मिलाते हैं, जिससे तत्वों का एक डोमेन बनता है।
5.2.1 Twin-Coset Example
अनुभाग 5.1.1 में कोसेट उदाहरण (जहाँ हमने चुना जो में नहीं है) को जारी रखते हुए, आइए अब आकार का एक twin-coset बनाएं। हमने पहले ही देखा है:
इसके बाद, की गणना करें और कोसेट बनाएं:
अतः,
यूनियन (union) लेने पर, twin-coset यह है:
इस डोमेन का आकार 4 है और यह twin-coset शर्तों को संतुष्ट करता है: दोनों कोसेट्स असंयुक्त (disjoint) हैं (चूंकि ), और में वाला कोई बिंदु नहीं है, इसलिए involution के तहत कोई fixed points नहीं हैं। इस प्रकार, वास्तव में आकार का एक twin-coset है।
5.3 Standard Position Cosets
एक standard position coset आकार का एक विशेष प्रकार का twin-coset है जो सबग्रुप के एकल कोसेट (single coset) के साथ भी मेल खाता है:
यहाँ, याद करें कि , का क्रम का अद्वितीय (unique) सबग्रुप है, जैसा कि पहले अनुभाग 3 में पेश किया गया था। हमारे पास सबग्रुप्स की एक श्रृंखला है:
और प्रत्येक का आकार है। इसलिए, में शामिल है, और हम क्रम के एक बिंदु का उपयोग करके इन सबग्रुप्स के कोसेट्स को संबंधित करेंगे।
आइए इसे चरण दर चरण खोलें:
सबसे पहले, चूंकि है, हम को के दो असंयुक्त (disjoint) कोसेट्स से युक्त मान सकते हैं, अर्थात्:
यदि हम अब इसे क्रम के एक निश्चित बिंदु से गुणा करते हैं, तो हमें प्राप्त होता है:
यह पता चलता है कि है, इसलिए:
इसलिए, कोसेट को दो असंयुक्त कोसेट्स के यूनियन के रूप में लिखा जा सकता है: एक द्वारा, दूसरा द्वारा, प्रत्येक छोटे सबग्रुप पर। यह बिल्कुल twin-coset की परिभाषा है।
लेकिन सभी twin-cosets इस तरह से उत्पन्न नहीं होते हैं। यह सुनिश्चित करने के लिए कि यह निर्माण ठीक से काम करता है, हमें आवश्यकता है:
- Disjointness: । अन्यथा, दोनों कोसेट्स ओवरलैप हो जाएंगे।
- Involution के तहत कोई fixed points नहीं: परिणामी सेट में वाले बिंदुओं से बचना चाहिए, ताकि involution का में कोई fixed points न हो।
- सही क्रम (Correct order): का क्रम होना चाहिए ताकि यह गारंटी दी जा सके कि ठीक अलग-अलग तत्वों को कवर करता है।
जब ये संतुष्ट हो जाते हैं, तो कोसेट एक standard position coset देता है: आकार का एक डोमेन जो एक साथ एक twin-coset और एक बड़े सबग्रुप का एकल कोसेट (single coset) है।
5.4 Hand-Computed Example: Twin-Cosets and Standard Position Cosets at
नीचे, हम स्पष्ट करते हैं कि जब होता है तो twin-cosets और standard position cosets की धारणाएं कैसे लागू होती हैं। हमारे पास है, इसलिए सबग्रुप्स मौजूद हैं, जहाँ और है। हम के लिए standard position coset दिखाएंगे जो है।
5.4.1 Twin-Coset Construction
-
Setup
मान लें है। तब का आकार 4 है। 16 क्रम का एक बिंदु चुनें (इसलिए , लेकिन है)। ठोस रूप से, कोई चुन सकता है। -
Forming the Twin-Coset
चूंकि में चार बिंदु , , , और हैं, प्रत्येक बिंदु को या से गुणा किया जाता है।
- ,
- ,
- ,
- ,
- ,
- ,
- ,
- .
इन्हें मिलाने पर 8 अलग-अलग बिंदु मिलते हैं। का कोई भी तत्व द्वारा स्थिर (fixed) नहीं है, इसलिए आकार का एक twin-coset है। इन्हें मिलाने पर 8 अलग-अलग बिंदु मिलते हैं। का कोई भी तत्व द्वारा स्थिर (fixed) नहीं है, इसलिए आकार का एक twin-coset है।
नीचे दिए गए चित्र में, 🔴 लाल बिंदु का प्रतिनिधित्व करते हैं और 🔵 नीले बिंदु का प्रतिनिधित्व करते हैं। साथ मिलकर, वे 8-पॉइंट twin-coset बनाते हैं।

5.4.2 Checking Standard Position coset
यह समान 8 आकार के किसी सबग्रुप के लिए के बराबर भी है, जिसका अर्थ है कि एक standard position coset है।
सबग्रुप है, तब प्रत्येक तत्व को से गुणा करने पर ठीक में मौजूद 8 बिंदु प्राप्त होते हैं।
अतः
क्योंकि दोनों का एक twin-coset और का एक एकल कोसेट (single coset) है, इसलिए हम इसे आकार 8 का एक standard position coset कहते हैं।
नीचे दिए गए चित्र में, 🟢 हरे बिंदु सबग्रुप का प्रतिनिधित्व करते हैं, 🔴 लाल और 🔵 नीले बिंदु क्रमशः दो असंयुक्त (disjoint) कोसेट्स और का प्रतिनिधित्व करते हैं। उनका यूनियन (union) twin-coset बनाता है, और पूरा 8-पॉइंट सेट standard position coset का निर्माण करता है।

इस प्रकार, जब भी का क्रम होता है, हम आकार का एक standard position coset बना सकते हैं। यह संरचना Circle STARK में महत्वपूर्ण है, क्योंकि यह बिंदुओं का एक स्पष्ट डोमेन प्रदान करती है, भले ही पर्याप्त रूप से two-adic न हो।
6. Python Code 2: Circle Domain
अब हम Simple Python इम्प्लीमेंटेशन के माध्यम से Circle Domain कोड की समीक्षा करेंगे। डोमेन निर्माण (जैसे twin-coset और standard position coset) भी उसी Python notebook में लागू किया गया है। आप इसे रन कर सकते हैं और निरीक्षण कर सकते हैं कि ये सेट चरण-दर-चरण कैसे बनाए जाते हैं।
6.1 Twin-Coset
यह फ़ंक्शन सबग्रुप पर और उसके inverse के लिए ग्रुप ऑपरेशन add लागू करके एक डोमेन उत्पन्न करता है, जिससे समरूपता (symmetry) और आकार सुनिश्चित होता है।
def generate_twin_coset(Q, G_n_minus_1):
"""Generate twin-coset: D = Q・G_(n-1) ∪ Q^{-1}・G_(n-1)."""
Q_inv = Q.inverse()
coset_Q = [Q.add(g) for g in G_n_minus_1]
coset_Q_inv = [Q_inv.add(g) for g in G_n_minus_1]
return coset_Q + coset_Q_inv
G2 = generate_subgroup(2)
Q = CirclePoint(FieldElement(13), FieldElement(7))
twin_cosets = generate_twin_coset(Q, G2)
print(twin_cosets)
[Point(13, 7), Point(7, 18), Point(18, 24), Point(24, 13), Point(13, 24), Point(24, 18), Point(18, 7), Point(7, 13)]
6.2 Standard Position Coset
यह फ़ंक्शन और सबग्रुप के लिए ग्रुप ऑपरेशन add लागू करके standard position coset उत्पन्न करता है।
def generate_standard_position_coset(Q, G_n):
"""Generate standard position coset D = Q・G_n."""
return [Q.add(g) for g in G_n]
G3 = generate_subgroup(3)
Q = CirclePoint(FieldElement(13), FieldElement(7))
D = generate_standard_position_coset(Q, G3)
[Point(13, 7), Point(18, 7), Point(7, 18), Point(7, 13), Point(18, 24), Point(13, 24), Point(24, 13), Point(24, 18)]
इस तरह के कोड से, आप standard position coset की समानता की जांच कर सकते हैं।
D_std = generate_standard_position_coset(Q, G3)
D_twin = generate_twin_coset(Q, G2)
print("Q・G3:", D_std)
print("(Q・G2) ∪ (Q^-1・G2):", D_twin)
if set(D_std) == set(D_twin):
print("Equal: standard position coset Q·G3 = Q·G2 ∪ Q^-1·G2")
else:
print("Not Equal")
7. Decomposition of a Larger Standard Position Coset into Smaller Twin-Cosets
Circle FFT और FRI के कई चरणों में, हमें विभिन्न आकारों के मूल्यांकन डोमेन को प्रबंधित करने की आवश्यकता होती है, जो सभी circle वक्र (curve) पर स्थित होते हैं। इसे प्राप्त करने की एक प्रमुख विधि Circle STARKs paper से Lemma 2 है, जो यह सुनिश्चित करती है कि किसी भी के लिए आकार के standard position coset को आकार के छोटे twin-cosets में तोड़ा जा सकता है।
7.1 Statement of Lemma 2
मान लें कि आकार का एक standard position coset है। तो किसी भी के लिए, कोई को आकार के twin-cosets में विघटित (decompose) कर सकता है। ठोस रूप से, यदि
तो
सरल शब्दों में, यदि , आकार का एक standard position coset है, तो हम की घातों (powers of ) का उपयोग करके इसे छोटे twin-cosets (प्रत्येक आकार का) में विभाजित कर सकते हैं। यह विभाजन किसी को के ठीक उसी हिस्से को बनाने की अनुमति देता है जिसकी आवश्यकता Circle FFT प्रोटोकॉल के किसी दिए गए चरण में होती है।
7.2 Hand-Computed Example: Splitting a Size- standard position coset into 2 Twin-Cosets of Size
मान लें कि , तो है। हमारे पास सबग्रुप्स हैं, जहाँ है।
- Our standard position coset
मान लें जहाँ है। यहाँ, का क्रम 16 है, जिसका अर्थ है लेकिन , 8 आकार का एक कोसेट बनाता है।
- Goal
को आकार के twin-cosets में तोड़ें। मान लें , इसलिए और है।
तब Lemma 2 सुझाव देता है
चूंकि है, हमारे पास और है।
7.2.1 Case
- ।
- ।
गणना करें:
इस प्रकार, पहले twin-coset में 4 अलग-अलग बिंदु हैं।
7.2.2 Case
- ।
यानी । - इसी तरह, ।
फिर से, प्रत्येक को और से गुणा करें:
इससे 4 और बिंदु प्राप्त होते हैं, जो 4 आकार का दूसरा twin-coset बनाते हैं।
7.2.3 Union of the Two Twin-Cosets
दोनों 4-पॉइंट सेट ( और के लिए) का यूनियन (union) लेने पर पूरा 8-तत्वों वाला कोसेट वापस मिल जाता है। अतः:
यह ठीक Lemma 2 के कथन से मेल खाता है, जो यह दर्शाता है कि कैसे एक 8-पॉइंट standard position coset को प्रत्येक 4 आकार के दो twin-cosets में विघटित किया जा सकता है।
7.3 Hand-Computed Example: Splitting a Size- standard position coset into 4 Twin-Cosets of Size
और हम इस आकार-8 के standard position coset को कई छोटे twin-cosets में भी विभाजित कर सकते हैं।
मान लें , इसलिए है। Lemma 2 देता है:
चूंकि है, प्रत्येक twin-coset में 2 बिंदु हैं:
- :
- : $
={(24, 13), (24, 18)}$ - : ${Q^9 \cdot G_0 = Q^9, Q^{-9} \cdot G_0 = Q^{-9}}
$ - : $
={(7, 18), (7, 13)}$
यह को आकार के चार twin-cosets में विघटित कर देता है।
8. Squaring Map Halves a Twin-Coset
जहाँ Lemma 2 बड़े कोसेट्स को छोटे twin-cosets में विभाजित करने पर केंद्रित है, वहीं Lemma 3 एक twin-coset के आकार को आधा करने के लिए squaring map का लाभ उठाता है। इस प्रक्रिया का उपयोग Circle FFT में डोमेन को आधा करने वाले चरणों के लिए किया जाता है, जहाँ हम डोमेन के आकार को क्रमिक रूप से कम करते हैं।
8.1 Statement of Lemma 3
यह प्रमेयिका (lemma) Circle STARKs paper में प्रकट होती है, जहाँ इसका उपयोग squaring map द्वारा सक्षम पुनरावर्ती (recursive) डोमेन हाल्विंग (halving) को औपचारिक रूप देने के लिए किया जाता है।
मान लीजिए , आकार (जहाँ ) का एक twin-coset है। तो squaring map लागू करने से , आकार के एक अन्य twin-coset में बदल जाता है। इसके अलावा, यदि एक standard position coset था, तो भी एक standard position coset ही रहता है।
सहज रूप से, एक ग्रुप एंडोमोर्फिज़्म (group endomorphism) है, और यह सबग्रुप को में मैप करता है। इसलिए, आकार का एक twin-coset स्वाभाविक रूप से आकार का एक और twin-coset देता है।
8.1.1 Abstract View of Lemma 3’s Proof
मान लें कि , आकार का एक twin-coset है, जिसका एक अमूर्त (abstract) संकेतन में अर्थ है
जहाँ है।
विशेष रूप से, ग्रुप एंडोमोर्फिज़्म (group endomorphism) के कारण सबग्रुप को पर मैप करता है।
यह ठीक सबग्रुप में एक twin-coset की परिभाषा है, जिसका आकार है। तदनुसार, स्वयं आकार का एक twin-coset है।
यदि मूल रूप से एक standard position coset था, तो लागू करने से वह standard position गुण संरक्षित रहता है, क्योंकि है। इस प्रकार फिर से एक standard position coset है, लेकिन अब आकार का है।
8.2 Hand-Computed Example (Halving a Size- Twin-Coset to Size )
मान लें है और मान लें कि आकार का एक twin-coset है। ठोस रूप से,
चूँकि , हमारे पास है। हम जाँच करते हैं कि , को कैसे प्रभावित करता है:
8.2.1 Computing and
8.2.2 Applying to
सबग्रुप का आकार 2 है, मान लें है। Lemma 3 द्वारा,
$$
\begin{align*}
\pi(Q)\cdot(1,0) &= (27,27)\
\pi(Q)\cdot(30,0) &= (4,4)\
\pi(Q^{-1})\cdot(1,0) &= (27,4)\
\pi(Q^{-1})\cdot(30,0) &= (4,27)
\end{align*}
\cup
{(27,4), (4,27)}$$
जो कि आकार 4 का एक twin-coset है।
इस प्रकार, , को 8 तत्वों से घटाकर 4 कर देता है, ठीक वैसा ही जैसा Lemma 3 बताता है। का बार-बार अनुप्रयोग (application) डोमेन को 2 की घातों में छोटा करना जारी रखता है, जो Circle FFT की पुनरावर्ती संरचना (recursive structure) में एक महत्वपूर्ण भूमिका निभाता है।
नीचे दिए गए चित्र में:
- बायां वृत्त मूल twin-coset दिखाता है, जहाँ 🔴 लाल = और 🔵 नीला = है।
- दायां वृत्त आधा किया हुआ twin-coset दिखाता है, जहाँ 🔵 नीला = और 🔴 लाल = है।
- ⚫ काले बिंदु सबग्रुप को चिह्नित करते हैं।
यह दृश्य स्पष्ट करता है कि कैसे ग्रुप एंडोमोर्फिज़्म (group endomorphism) के माध्यम से आकार के मूल डोमेन को आकार के एक नए twin-coset में मैप करता है।

9. What We Built in Part 1
इस लेख में, हमने इस बात पर ध्यान केंद्रित किया कि कैसे पर circle वक्र को आकार के एक चक्रीय समूह (cyclic group) में बदला जा सकता है, और हमने ठोस उदाहरणों के साथ twin-cosets और standard position cosets पर चर्चा की। हमने दो प्रमुख तकनीकें भी दिखाईं: एक बड़े standard position coset को छोटे twin-cosets में विभाजित करने के लिए, और दूसरी squaring map को लागू करके twin-coset के आकार को आधा करने के लिए। एक साथ, ये तकनीकें हमें आकार के डोमेन को अपनी इच्छानुसार नया आकार देने (reshape) की अनुमति देती हैं।
अगले भाग में, हम स्वयं Circle FFT में और गहराई तक जाएंगे, यह दिखाते हुए कि कैसे ये -आकार के डोमेन—उन्हें विभाजित करने या आधा करने की क्षमता के साथ—तेज़ बहुपद मूल्यांकन (polynomial evaluation) और इंटरपोलेशन (interpolation) को सक्षम करते हैं, तब भी जब पर्याप्त रूप से two-adic न हो।
References
- Circle STARKs
https://eprint.iacr.org/2024/278 - Plonky3
https://github.com/Plonky3/Plonky3 - ZK11: Circle STARKs - Ulrich Haböck & Shahar Papini
https://youtu.be/NAhLYMysSdk?si=OlzNKS1DSTRkPnUR - Circle STARKs: Part I, Mersenne
https://blog.zksecurity.xyz/posts/circle-starks-1/ - Why I’m Excited By Circle Stark And Stwo
https://starkware.co/integrity-matters-blog/why-im-excited-by-circle-stark-and-stwo/ - Exploring circle STARKs
https://vitalik.eth.limo/general/2024/07/23/circlestarks.html - An introduction to circle STARKs
https://blog.lambdaclass.com/an-introduction-to-circle-starks/ - Yet another circle STARK tutorial
https://research.chainsafe.io/blog/circle-starks/ - Deep dive into Circle-STARKs FFT
https://ihagopian.com/posts/deep-dive-into-circle-starks-fft - Coset’s Circle STARKs lecture videos
https://youtube.com/playlist?list=PLbQFt1T_44DyihAOawprEABRPWgYeXB5u&si=AJe0dP7FUfp2Bebe - Ethereum/research/circlestark(Python implementation)
https://github.com/ethereum/research/tree/master/circlestark - Rust Implementation Demo of Circle Domain and Circle FFT
https://youtu.be/ur3c4mIi1Jc?si=lxU10mZ6vOFCrzvw
https://github.com/0xxEric/CircleFFT - STARKの原理
https://zenn.dev/qope/articles/8d60f77e3a7630
Appendix
नीचे, हम circle वक्र के Projective बनाम Affine दृष्टिकोण (view) का परिचय देते हैं, और फिर समझाते हैं कि Circle STARKs विशेष रूप से वाले primes को क्यों चुनते हैं ताकि points at infinity जैसी प्रोजेक्टिव जटिलताओं (projective complications) से बचा जा सके।
A.1 Projective and Affine
पर एक affine plane में, एक बिंदु को केवल के रूप में लिखा जाता है जहाँ है। इसके विपरीत, projective plane में, प्रत्येक बिंदु को द्वारा दर्शाया जाता है, लेकिन सभी गैर-शून्य अदिश गुणज (nonzero scalar multiples) समान स्थान का प्रतिनिधित्व करते हैं। औपचारिक रूप से,
- जब होता है, तो हम प्रत्येक निर्देशांक (coordinate) को से विभाजित करके फिर से स्केल कर सकते हैं, जिससे एक affine बिंदु प्राप्त होता है।
- जब होता है, तो हमें अनंत पर एक बिंदु (point at infinity) प्राप्त होता है, जिसका कोई affine समकक्ष (counterpart) नहीं होता है।
A.2 Why Avoid Points at Infinity?
यह देखने के लिए कि points at infinity कैसे उत्पन्न होते हैं, को projective रूप में फिर से लिखें:
यहाँ, यदि है, तो हम और मानते हैं, इसलिए , बन जाता है।
Point at infinity के साथ कोई भी समाधान है। क्या ऐसे समाधान मौजूद हैं, यह इस बात पर निर्भर करता है कि , में एक वर्ग (square) है या नहीं:
- उदाहरण के लिए, यदि है, तो , में एक वर्ग है।
ठोस रूप से, कोई है जिसके लिए है, जिसका अर्थ है कि का पर गैर-शून्य हो सकता है।
यह circle पर अतिरिक्त अनंत बिंदु (infinite points) देता है, जिससे समूह संक्रियाएं (group operations) और इम्प्लीमेंटेशन जटिल हो जाता है।
उदाहरण:- यहाँ, , में है, और वास्तव में है।
- इसलिए , पर गैर-शून्य की अनुमति देता है, जिससे अनंत पर दो बिंदु (points at infinity) मिलते हैं।
- Affine समीकरण के ठीक चार affine समाधान हैं:
- और अनंत पर projective बिंदु हैं
, कुल समाधान हैं — जो (affine + अनंत ) से मेल खाते हैं। - यदि है, तो , में एक वर्ग (square) नहीं है।
नतीजतन, का पर कोई गैर-शून्य समाधान नहीं है। हमें अनंत पर कोई बिंदु नहीं मिलता है, और सभी समाधान affine रहते हैं।
उदाहरण:- चूँकि एक वर्ग नहीं है (हमारे पास और है), कोई भी , पर को संतुष्ट नहीं करता है।
- समीकरण के तब केवल affine समाधान होते हैं। की जाँच करने पर प्राप्त होता है:
कुल समाधानों के लिए, जो से मेल खाते हैं।
Circle STARK में, हम विशेष रूप से चुनते हैं ताकि , में वर्ग (square) न हो। यह सुनिश्चित करता है कि हमारे वृत्त में कोई अनंत (projective) बिंदु नहीं है, जिससे हर समाधान affine निर्देशांक में रहता है और points at infinity को संभालने की जटिलताओं से बचा जाता है।