Formal Verification of COO to CSR Sparse Matrix Conversion (Invited Paper)
Appel
We describe a machine-checked correctness proof of a C program that converts a coordinate-form (COO) sparse matrix to a compressed-sparse-row (CSR) matrix. The classic algorithm (sort the COO entries in lexicographic order by row,column; fill in the CSR arrays left to right) is concise but has rather intricate invariants. We illustrate a bottom-up methodology for deriving the invariants from the program.
academic
COO से CSR विरल आव्यूह रूपांतरण का औपचारिक सत्यापन (आमंत्रित पत्र)
यह पत्र निर्देशांक रूप (COO) विरल आव्यूह को संपीड़ित विरल पंक्ति (CSR) आव्यूह में परिवर्तित करने वाले C प्रोग्राम के सत्यापन के लिए एक मशीन-जाँचा गया सही प्रमाण प्रस्तुत करता है। शास्त्रीय एल्गोरिदम (COO प्रविष्टियों को पंक्ति, स्तंभ के शब्दकोश क्रम में क्रमबद्ध करना; बाएं से दाएं CSR सरणियों को भरना) संक्षिप्त होने के बावजूद, काफी जटिल अपरिवर्तनीयों को प्रदर्शित करता है। लेख प्रोग्राम से अपरिवर्तनीयों को प्राप्त करने के लिए एक नीचे-ऊपर की कार्यप्रणाली प्रदर्शित करता है।
मूल समस्या: विरल आव्यूह संख्यात्मक गणना में व्यापक रूप से उपयोग किए जाते हैं, लेकिन मौजूदा विरल आव्यूह रूपांतरण एल्गोरिदम में औपचारिक सत्यापन की कमी है, जिससे कठिन-से-खोजे जाने वाले त्रुटियां हो सकती हैं
महत्व: विरल आव्यूह-सदिश गुणन संख्यात्मक विधियों में एक मौलिक संचालन है, गलत रूपांतरण पूरी गणना श्रृंखला की विफलता का कारण बन सकता है
मौजूदा सीमाएं: पारंपरिक सत्यापन विधियां प्रतिगमन परीक्षण आदि पर निर्भर करती हैं, गणितीय सही प्रमाण प्रदान नहीं कर सकते
अनुसंधान प्रेरणा: मशीन-जाँचे गए औपचारिक प्रमाण के माध्यम से, COO से CSR रूपांतरण की पूर्ण सही प्रमाण सुनिश्चित करना, सत्यापन योग्य संख्यात्मक सॉफ्टवेयर के लिए आधार स्थापित करना
पहली बार मशीन-जाँचा गया COO से CSR रूपांतरण सही प्रमाण: Verifiable Software Toolchain (VST) और Coq प्रमाण सहायक का उपयोग करना
लूप अपरिवर्तनीय व्युत्पत्ति की नवीन विधि: नीचे-ऊपर की कार्यप्रणाली प्रस्तावित करना, प्रोग्राम को संतुष्ट करने वाले गुणों से जटिल लूप अपरिवर्तनीयों को प्राप्त करना
डेटा संरचना और सन्निकटन तर्क का पृथक्करण: C प्रोग्राम के डेटा संरचना तर्क को फ्लोटिंग-पॉइंट सन्निकटन तर्क से अलग करना, सत्यापन जटिलता को सरल बनाना
संयोजनीय सत्यापन घटक: बड़े सत्यापन प्रणालियों में पुनः उपयोग के लिए सत्यापित विरल आव्यूह रूपांतरण मॉड्यूल प्रदान करना
व्यावहारिक त्रुटि खोज: प्रमाण प्रक्रिया में 5 प्रोग्राम त्रुटियां खोजना और ठीक करना (4 off-by-one त्रुटियां और 1 अहस्ताक्षरित पूर्णांक हैंडलिंग त्रुटि)
इनपुट: COO विरल आव्यूह - आयाम rows×cols और n निर्देशांक त्रिगुण (row_indk, col_indk, valk) युक्त
आउटपुट: CSR विरल आव्यूह - तीन एक-आयामी सरणियां (val, col_ind, row_ptr) युक्त
बाधाएं: गणितीय आव्यूह के शब्दार्थ समतुल्यता को बनाए रखना, डुप्लिकेट प्रविष्टियों के फ्लोटिंग-पॉइंट योग को सही तरीके से संभालना
struct csr_matrix *coo_to_csr_matrix(struct coo_matrix *p) {
// 1. COO प्रविष्टियों को (पंक्ति, स्तंभ) शब्दकोश क्रम में क्रमबद्ध करें
coo_quicksort(p, 0, n);
// 2. गैर-डुप्लिकेट निर्देशांक जोड़ी की संख्या गिनें
k = coo_count(p);
// 3. CSR सरणी स्थान आवंटित करें
// 4. क्रमबद्ध COO प्रविष्टियों के माध्यम से पुनरावृत्ति करें, CSR संरचना बनाएं
for (i=0; i<n; i++) {
// डुप्लिकेट प्रविष्टियां, नए स्तंभ, नई पंक्तियां आदि को संभालें
}
}
Record coo_matrix (t: type) := {
coo_rows: Z;
coo_cols: Z;
coo_entries: list (Z * Z * ftype t)
}.
Record csr_matrix {t: type} := {
csr_cols: Z;
csr_vals: list (ftype t);
csr_col_ind: list Z;
csr_row_ptr: list Z;
csr_rows: Z := Zlength (csr_row_ptr) - 1
}.
Inductive sum_any {t}: list (ftype t) → ftype t → Prop :=
| Sum_Any_0: sum_any nil (Zconst t 0)
| Sum_Any_1: ∀ x, sum_any [x] x
| Sum_Any_split: ∀ al bl a b, sum_any al a → sum_any bl b →
sum_any (al++bl) (BPLUS a b)
| Sum_Any_perm: ∀ al bl s, Permutation al bl → sum_any al s → sum_any bl s.
मुख्य नवाचार partial_CSR i r coo ROWPTR COLIND VAL संबंध है, जो i-वीं COO प्रविष्टि, r-वीं पंक्ति को संसाधित करते समय आंशिक CSR स्थिति का प्रतिनिधित्व करता है।
Cao et al. (2018): VST-Floyd - पृथक्करण तर्क सत्यापन उपकरण
Kellison et al. (2023): LAProof - रैखिक बीजगणित प्रोग्राम के औपचारिक प्रमाण पुस्तकालय
सारांश: यह पत्र जटिल संख्यात्मक एल्गोरिदम के पूर्ण औपचारिक सत्यापन की व्यवहार्यता को प्रदर्शित करता है, व्यावहारिक सत्यापन कार्यप्रणाली प्रस्तावित करता है, और विश्वसनीय वैज्ञानिक कंप्यूटिंग सॉफ्टवेयर के विकास में महत्वपूर्ण योगदान देता है। यद्यपि सत्यापन लागत अधिक है, व्यावहारिक त्रुटियों की खोज का मूल्य और प्रदान की गई कार्यप्रणाली मार्गदर्शन इसे इस क्षेत्र का एक महत्वपूर्ण कार्य बनाता है।