← नवीनतम पेपर
💻 computer science

Predicate Subtypes in VerCors

यह शोध पत्र VerCors प्रोग्राम वेरीफायर में एक प्रोटोटाइप कार्यान्वयन प्रस्तुत करता है जो वेरिएबल रेंज बाधाओं (constraints) को निर्दिष्ट करने के लिए प्रेडिकेट सबटाइप्स (predicate subtypes) का समर्थन जोड़ता है, जिसमें स्वचालित विनिर्देश जनरेशन (automatic specification generation), कई सबटाइप्स को संयोजित करने की क्षमता और उन्नत ओवरफ्लो चेकिंग के लिए एक स्ट्रिक्ट मोड शामिल है।

मूल लेखक: Tycho Dubbeling (University of Twente), Marieke Huisman (University of Twente), Ömer Şakar (University of Twente)

प्रकाशित 2026-04-09
📖 6 मिनट में पढ़ें🧠 गहराई से पढ़ें

मूल लेखक: Tycho Dubbeling (University of Twente), Marieke Huisman (University of Twente), Ömer Şakar (University of Twente)

मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें

कल्पना कीजिए कि आप ताश के पत्तों का एक घर बना रहे हैं। कंप्यूटर प्रोग्रामिंग की दुनिया में, "पत्ते" आपके वेरिएबल्स (जैसे नंबर या लिस्ट) हैं, और "घर" वह सॉफ्टवेयर है। आमतौर पर, जब आप एक वेरिएबल घोषित करते हैं, तो आप बस कहते हैं, "यह एक नंबर है।" लेकिन वास्तव में, केवल कोई भी नंबर काम नहीं आता। शायद आपको एक ऐसा नंबर चाहिए जो कभी शून्य (zero) न हो (ताकि आप उससे भाग न दे सकें), या एक ऐसा नंबर जो एक बहुत छोटे बॉक्स में समा सके (ताकी सिस्टम टूट न जाए)।

यह पेपर VerCors नामक एक टूल के लिए एक नई विशेषता पेश करता है, जो एक सुपर-स्मार्ट इंस्पेक्टर की तरह है जो यह जाँचता है कि आपका ताश का घर बनने से पहले ही खड़ा रहेगा या नहीं। इस नई विशेषता को Predicate Subtypes कहा जाता है।

यहाँ बताया गया है कि यह कैसे काम करता है, कुछ रोजमर्रा के उदाहरणों का उपयोग करते हुए:

1. समस्या: "कोई भी नंबर" वाली गलती

कल्पना कीजिए कि आप एक निर्माण श्रमिक (construction worker) को कहते हैं, "मेरे लिए एक ईंट लाओ।" वे आपको एक विशाल चट्टान, एक छोटा कंकड़, या एक असली ईंट लाकर दे सकते हैं। यदि आपकी दीवार को एक विशिष्ट आकार की आवश्यकता है, तो वह विशाल चट्टान पूरी संरचना को ध्वस्त कर देगी।

प्रोग्रामिंग में, यदि आप कंप्यूटर को कहते हैं, "यह एक integer है," तो कंप्यूटर मान लेता है कि यह कोई भी integer हो सकता है, नेगेटिव इन्फिनिटी से लेकर पॉजिटिव इन्फिनिटी तक। लेकिन वास्तविक दुनिया में (और विशिष्ट प्रोग्रामों में), हमें अक्सर यह कहने की आवश्यकता होती है, "यह integer 0 और 100 के बीच होना चाहिए," या "यह integer कभी शून्य नहीं होना चाहिए।"

इस विशेषता के बिना, कंप्यूटर उस गलती को मिस कर सकता है जहाँ एक नंबर बहुत बड़ा हो जाता है (overflow) या शून्य हो जाता है जब उसे नहीं होना चाहिए, जिससे प्रोग्राम बाद में क्रैश हो सकता है।

2. समाधान: "विशेष लेबल" (Predicate Subtypes)

लेखकों ने आपके वेरिएबल्स पर एक विशेष लेबल लगाने का एक तरीका जोड़ा है। केवल यह कहने के बजाय कि "यह एक नंबर है," आप कह सकते हैं:

  • "यह एक Non-Zero Number है।"
  • "यह एक Short Number है ( -128 और 127 के बीच)।"
  • "यह एक Valid Index है (एक नंबर जो इस विशिष्ट लिस्ट के अंदर फिट बैठता है)।"

पेपर में, वे इन्हें Predicate Subtypes कहते हैं। इसे एक VIP पास की तरह समझें। यदि किसी वेरिएबल के पास "Non-Zero" VIP पास है, तो कंप्यूटर जानता है कि उसे सख्ती से शून्य होने से रोका गया है।

3. इंस्पेक्टर कैसे काम करता है (स्वचालित जाँच)

इस पेपर का सबसे शानदार हिस्सा यह है कि VerCors सारा भारी काम स्वचालित रूप से करता है। आपको यह सुनिश्चित करने के लिए सौ अलग-अलग जाँचें लिखने की आवश्यकता नहीं है कि आपके नंबर सुरक्षित हैं।

  • जादुई अनुवादक (The Magic Translator): जब आप "Non-Zero" लेबल के साथ int x लिखते हैं, तो VerCors पर्दे के पीछे आपके कोड को सुरक्षा जाँच जोड़ने के लिए गुप्त रूप से फिर से लिख देता है।
  • दरवाजे पर गार्ड (The Guard at the Door): हर बार जब आप उस वेरिएबल में एक नया मान (value) डालने की कोशिश करते हैं, तो VerCors दरवाजे पर एक गार्ड तैनात करता है। गार्ड जाँचता है: "क्या यह नया मान लेबल को संतुष्ट करता है?"
    • यदि आप "Non-Zero" वेरिएबल में 0 डालने की कोशिश करते हैं, तो गार्ड आपको रोकता है और कहता है, "Error! यह लेबल में फिट नहीं बैठता।"
    • यदि आप 5 डालते हैं, तो गार्ड कहता है, "सब ठीक है!"

4. "स्ट्रिक्ट मोड": केवल मंजिल नहीं, यात्रा की भी जाँच करना

यह इस पेपर का सबसे चतुर हिस्सा है। कभी-कभी, अंतिम परिणाम ठीक होता है, लेकिन वहाँ तक पहुँचने की यात्रा खतरनाक होती है।

उदाहरण: कल्पना कीजिए कि आप एक कार चला रहे हैं जो केवल 100 पाउंड माल ले जा सकती है।

  • नॉर्मल मोड: आप 50 पाउंड लोड करते हैं, एक ऐसे पुल के ऊपर से गुजरते हैं जो 200 पाउंड के भार से ढह जाता है, और फिर 50 पाउंड उतार देते हैं। अंतिम वजन 50 है (सुरक्षित), लेकिन रास्ते में आपने पुल को क्रैश कर दिया!
  • स्ट्रिक्ट मोड: कार पर एक "Strict" लेबल है। इसका मतलब है कि यात्रा का हर एक कदम 100 पाउंड के नीचे रहना चाहिए। भले ही आप रास्ते में कोई त्वरित गणितीय गणना कर रहे हों, VerCors जाँचता है कि क्या वह अस्थायी नंबर सुरक्षित है।

यह पेपर एक "Strict Arithmetic" मोड पेश करता है। यदि आप इसे चालू करते हैं, तो VerCors हर छोटी गणितीय प्रक्रिया (जैसे x - 2) की जाँच करता है ताकि यह सुनिश्चित हो सके कि यह अस्थायी रूप से आकार की सीमा को न तोड़ दे, भले ही अंतिम उत्तर सुरक्षित हो। यह "overflows" (जब कोई नंबर कंप्यूटर द्वारा संभालने के लिए बहुत बड़ा हो जाता है) को रोकने के लिए अत्यंत महत्वपूर्ण है।

5. लेबल को मिलाना और जोड़ना (Mixing and Matching)

ठीक वैसे ही जैसे आप एक साथ टोपी और स्कार्फ पहन सकते हैं, आप इन लेबलों को मिला सकते हैं।

  • आप कह सकते हैं कि एक वेरिएबल Non-Zero AND Positive होना चाहिए।
  • आप कह सकते हैं कि यह या तो एक Short Number है या एक Long Number
  • आप यहाँ तक कह सकते हैं कि "यदि यह Null नहीं है, तो इसकी लंबाई 3 होनी चाहिए।"

टूल इन सभी जटिल संयोजनों को स्वचालित रूप से संभालता है, और उन्हें सरल सुरक्षा जाँचों में बदल देता है जिन्हें कंप्यूटर समझ सके।

यह क्यों मायने रखता है?

अतीत में, प्रोग्रामरों को हर जगह मैन्युअल रूप से सुरक्षा जाँच लिखनी पड़ती थी, जो उबाऊ था और जिसमें गलती होने की संभावना अधिक थी। या, उन्हें बहुत कठोर प्रणालियों का उपयोग करना पड़ता था जो जटिल नियमों को नहीं संभाल सकती थीं।

यह पेपर दिखाता है कि VerCors अब:

  1. आपके डेटा के बारे में जटिल नियमों को समझ सकता है (जैसे "यह लिस्ट ठीक 3 आइटम की होनी चाहिए")।
  2. स्वचालित रूप से जाँच कर सकता है कि वे नियम कभी भी न टूटें, यहाँ तक कि किसी गणना के बीच में भी।
  3. प्रोग्राम चलने से पहले ही खतरनाक ओवरफ़्लो (overflows) को पकड़ सकता है, जिससे समय बचता है और क्रैश होने से बचाव होता है।

सारांश

Predicate Subtypes को कंप्यूटर को स्मार्ट चश्मे देने के रूप में समझें। केवल "एक नंबर" देखने के बजाय, कंप्यूटर देखता है "एक नंबर जो 0 और 100 के बीच होना चाहिए।" VerCors टूल फिर एक सख्त बाउंसर (bouncer) की तरह कार्य करता है, जो हर बार यह जाँचता है कि कोई नंबर कमरे में (या वेरिएबल में) प्रवेश करने की कोशिश कर रहा है या नहीं, ताकि यह सुनिश्चित हो सके कि उसके पास सही आईडी कार्ड है। यदि नहीं, तो बाउंसर किसी भी आपदा के कारण बनने से पहले प्रोग्राम को रोक देता है।

अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?

आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।

Digest आज़माएँ →