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 المتفرقة (ورقة مدعوة)
تصف هذه الورقة إثباتاً للصحة تم التحقق منه بواسطة الآلة لبرنامج C يقوم بتحويل مصفوفة متفرقة بصيغة الإحداثيات (COO) إلى مصفوفة الصفوف المتفرقة المضغوطة (CSR). على الرغم من أن الخوارزمية الكلاسيكية (ترتيب إدخالات COO حسب الترتيب المعجمي للصفوف والأعمدة؛ ملء مصفوفات CSR من اليسار إلى اليمين) موجزة، إلا أنها تتمتع بثوابت معقدة جداً. تعرض الورقة منهجية من الأسفل إلى الأعلى لاستخلاص الثوابت من البرنامج.
المشكلة الأساسية: تُستخدم المصفوفات المتفرقة على نطاق واسع في الحسابات الرقمية، لكن خوارزميات تحويل المصفوفات المتفرقة الموجودة تفتقر إلى التحقق الرسمي، مما قد يؤدي إلى أخطاء يصعب اكتشافها
الأهمية: ضرب المصفوفة المتفرقة بالمتجه هو عملية أساسية في الطرق الرقمية، والتحويل الخاطئ يؤدي إلى فشل السلسلة الحسابية بأكملها
القيود الحالية: تعتمد طرق التحقق التقليدية على اختبارات الانحدار وما شابه، ولا يمكنها توفير ضمانات رياضية للصحة
الدافع البحثي: من خلال إثبات رسمي يتم التحقق منه بواسطة الآلة، ضمان الصحة المطلقة لتحويل COO إلى CSR، ووضع أساس لبرامج علمية قابلة للتحقق
الإدخال: مصفوفة متفرقة 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.
العمق التقني: معالجة عدة تحديات تقنية في خوارزميات المصفوفات المتفرقة، بما في ذلك العمليات الحسابية بالفاصلة العائمة وإدارة الذاكرة والتحكم في التدفق المعقد
الابتكار المنهجي: طريقة استخلاص الثوابت من الأسفل إلى الأعلى توفر نموذجاً قابلاً للتكرار للتحقق المماثل
القيمة العملية: اكتشاف الأخطاء الفعلية يثبت الفائدة العملية للتحقق الرسمي
جودة الهندسة: التصميم المعياري وبنية المواصفات الواضحة تعكس هندسة تحقق عالية الجودة
الاكتمال: التحقق من نهاية إلى نهاية من كود C إلى المواصفات الرياضية
Cao et al. (2018): VST-Floyd - أداة التحقق بمنطق الفصل
Kellison et al. (2023): LAProof - مكتبة الإثبات الرسمي لبرامج الجبر الخطي
الملخص: تعرض هذه الورقة جدوى التحقق الرسمي الكامل للخوارزميات الرقمية المعقدة، وتقترح منهجية تحقق عملية، وتقدم مساهمات مهمة لتطوير برامج العلوم الحسابية الموثوقة. على الرغم من ارتفاع تكاليف التحقق، فإن قيمة اكتشاف الأخطاء الفعلية والتوجيهات المنهجية المقدمة تجعلها عملاً مهماً في هذا المجال.