2025-11-13T19:19:11.174126

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

Verificación Formal de la Conversión de Matrices Dispersas de COO a CSR (Artículo Invitado)

Información Básica

  • ID del Artículo: 2510.13412
  • Título: Formal Verification of COO to CSR Sparse Matrix Conversion (Invited Paper)
  • Autor: Andrew W. Appel (Princeton University)
  • Clasificación: math.NA cs.LO cs.NA
  • Fecha de Publicación/Conferencia: VSS 2025 (International Workshop on Verification of Scientific Software), EPTCS 432, 2025
  • Enlace del Artículo: https://arxiv.org/abs/2510.13412

Resumen

Este artículo describe una prueba de corrección verificada por máquina para validar un programa en C que convierte matrices dispersas en formato de coordenadas (COO) a formato de fila dispersa comprimida (CSR). Aunque el algoritmo clásico (ordenar las entradas de COO en orden lexicográfico por fila y columna; llenar los arreglos CSR de izquierda a derecha) es conciso, posee invariantes considerablemente complejos. El artículo presenta una metodología ascendente para derivar invariantes a partir del programa.

Contexto de Investigación y Motivación

Definición del Problema

  1. Problema central: Las matrices dispersas se utilizan ampliamente en cálculo numérico, pero los algoritmos de conversión de matrices dispersas existentes carecen de verificación formal, lo que puede resultar en errores difíciles de detectar
  2. Importancia: La multiplicación matriz-vector dispersa es una operación fundamental en métodos numéricos; una conversión incorrecta causa el fallo de toda la cadena de cálculo
  3. Limitaciones existentes: Los métodos de verificación tradicionales dependen de pruebas de regresión y similares, sin poder proporcionar garantías matemáticas de corrección
  4. Motivación de investigación: Mediante pruebas formales verificadas por máquina, garantizar la corrección absoluta de la conversión de COO a CSR, sentando las bases para software numérico verificable

Contexto de Aplicación

  • Representación de matrices dispersas: El formato COO facilita la construcción, el formato CSR facilita la multiplicación
  • Análisis de elementos finitos: Cada vértice interno en una malla produce múltiples tuplas de coordenadas, generando naturalmente entradas duplicadas
  • Precisión numérica: La no asociatividad de las operaciones de punto flotante hace que el orden de suma de entradas duplicadas afecte el resultado

Contribuciones Principales

  1. Primera prueba verificada por máquina de corrección de conversión COO a CSR: Utilizando Verifiable Software Toolchain (VST) y el asistente de pruebas Coq
  2. Metodología innovadora de derivación de invariantes de bucle: Propone un enfoque ascendente que deriva invariantes de bucle complejos a partir de propiedades que el programa debe satisfacer
  3. Separación de razonamiento de estructuras de datos y aproximación: Separa el razonamiento de estructuras de datos de programas en C del razonamiento de aproximación de punto flotante, simplificando la complejidad de verificación
  4. Componentes de verificación componibles: Proporciona un módulo de conversión de matriz dispersa verificado que puede reutilizarse en sistemas de verificación más grandes
  5. Descubrimiento de errores prácticos: Descubre y corrige 5 errores de programa durante el proceso de prueba (4 errores off-by-one y 1 error complejo en el manejo de enteros sin signo)

Explicación Detallada de Métodos

Definición de Tareas

Entrada: Matriz dispersa COO - contiene dimensiones filas×columnas y n tripletas de coordenadas (row_indk, col_indk, valk) Salida: Matriz dispersa CSR - contiene tres arreglos unidimensionales (val, col_ind, row_ptr) Restricciones: Mantener equivalencia semántica de la matriz matemática, manejar correctamente la suma de punto flotante de entradas duplicadas

Algoritmo Principal

struct csr_matrix *coo_to_csr_matrix(struct coo_matrix *p) {
    // 1. Ordenar entradas COO en orden lexicográfico (fila, columna)
    coo_quicksort(p, 0, n);
    
    // 2. Contar cantidad de pares de coordenadas no duplicados
    k = coo_count(p);
    
    // 3. Asignar espacio para arreglos CSR
    // 4. Iterar sobre entradas COO ordenadas, construir estructura CSR
    for (i=0; i<n; i++) {
        // Manejar entradas duplicadas, nuevas columnas, nuevas filas, etc.
    }
}

Arquitectura de Especificación Formal

1. Definición de Objetos Matemáticos

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
}.

2. Relación de Representación en Memoria

  • coo_rep (sh: share) (coo: coo_matrix Tdouble) (p: val) : mpred
  • csr_rep (sh: share) (csr: csr_matrix Tdouble) (p: val) : mpred

3. Relación de Semántica de Matriz

Definition coo_to_matrix {t: type} (coo: coo_matrix t) (m: matrix t) : Prop :=
    coo_rows coo = matrix_rows m ∧
    matrix_cols m (coo_cols coo) ∧
    ∀ i j, sum_any (lista de valores de entradas duplicadas) (matrix_index m i j).

Puntos de Innovación Técnica

1. Modelado No Determinista de Suma de Punto Flotante

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.

2. Definición de Relación CSR Parcial

La innovación clave es la relación partial_CSR i r coo ROWPTR COLIND VAL, que representa el estado CSR parcial cuando se procesa la i-ésima entrada COO y la r-ésima fila.

3. Derivación Sistemática de Invariantes de Bucle

Mediante análisis de puntos de transición de estado críticos en el programa, se derivan sistemáticamente las propiedades de invariantes requeridas:

  • partial_CSR_0: Estado inicial
  • partial_CSR_duplicate: Procesamiento de entradas duplicadas
  • partial_CSR_newcol: Entrada de nueva columna
  • partial_CSR_newrow: Entrada de nueva fila
  • partial_CSR_skiprow: Omisión de filas vacías

Configuración Experimental

Cadena de Herramientas de Verificación

  • Asistente de pruebas Coq: Para especificación formal y pruebas
  • Verifiable Software Toolchain (VST): Para verificación de programas en C mediante lógica de Hoare
  • Verifiable C: Lógica de programa en VST, incrustada en Coq

Escala de Verificación

  • Definiciones y lemas: 1571 líneas de código Coq para definiciones y propiedades de coo_csr y partial_CSR
  • Prueba VST: 412 líneas para la prueba principal de lógica de Hoare
  • Base de confianza: Especificación central de aproximadamente 39 líneas, partes clave que requieren inspección manual

Metodología de Verificación

  1. Verificación estratificada: Primero probar que el programa en C implementa especificaciones de bajo nivel, luego probar la corrección matemática de las especificaciones de bajo nivel
  2. Diseño modular: Separar razonamiento de estructuras de datos del razonamiento de aproximación de punto flotante
  3. Derivación ascendente: Derivar inversamente invariantes de bucle a partir de necesidades de prueba de lógica de Hoare del programa

Resultados Experimentales

Logros Principales

  1. Prueba de corrección completa: Verificación exitosa de la corrección total de la conversión de COO a CSR
  2. Descubrimiento de errores: Descubrimiento de 5 errores reales durante la verificación:
    • 4 errores off-by-one
    • 1 error complejo en el manejo de inicialización de entero sin signo r a -1
  3. Componibilidad: El módulo verificado puede combinarse con otras operaciones de matriz dispersa verificadas

Cobertura de Verificación

  • Especificación de funciones: Condiciones previas y posteriores completas
  • Invariantes de bucle: Invariantes complejos para tres bucles anidados
  • Seguridad de memoria: Seguridad de límites de arreglos y asignación de memoria
  • Corrección matemática: Preservación de semántica de matriz

Características de Desempeño

  • Verificación en tiempo de compilación: Sin sobrecarga en tiempo de ejecución
  • Confiabilidad: Prueba verificada por máquina basada en núcleo de Coq
  • Mantenibilidad: Diseño de especificación modular facilita modificaciones y extensiones posteriores

Trabajo Relacionado

Campo de Verificación Formal

  1. Verificación de software numérico: Este artículo es un caso importante de verificación de extremo a extremo de algoritmos numéricos
  2. Cadena de herramientas VST: Extiende el marco de verificación de programas en C existente a aplicaciones de matrices dispersas
  3. Verificación de aritmética de punto flotante: Combina herramientas como VCFloat2 para análisis de precisión de punto flotante

Algoritmos de Matrices Dispersas

  1. Algoritmo clásico: La conversión de COO a CSR es un algoritmo estándar de décadas
  2. Álgebra lineal numérica: Consistente con algoritmos en literatura clásica como Templates for Linear Systems
  3. Computación de alto desempeño: Proporciona componentes base para software científico verificable

Metodología de Verificación de Programas

  1. Derivación de invariantes de bucle: El método ascendente propuesto tiene aplicabilidad general
  2. Lógica de separación: Maneja efectivamente estructuras de datos de memoria complejas
  3. Ingeniería de especificación: Demuestra principios de diseño de especificación para proyectos de verificación a gran escala

Conclusiones y Discusión

Conclusiones Principales

  1. Prueba de viabilidad: La verificación formal completa de algoritmos numéricos complejos es viable
  2. Contribución metodológica: El método ascendente de derivación de invariantes tiene amplia aplicabilidad
  3. Valor práctico: Los errores reales descubiertos durante la verificación demuestran el valor de métodos formales
  4. Infraestructura: Sienta las bases para verificación de software científico a mayor escala

Limitaciones

  1. Reproducibilidad bit-for-bit: La especificación actual permite diferentes órdenes de suma de punto flotante, sin garantizar reproducibilidad a nivel de bits
  2. Consideraciones de desempeño: El algoritmo verificado no está optimizado para desempeño
  3. Funcionalidad de reensamblaje: No implementa versión optimizada que reutiliza estructura CSR
  4. Costo de verificación: Un programa relativamente breve requiere cantidad considerable de trabajo de verificación

Direcciones Futuras

  1. Especificaciones más fuertes: Versión de especificación que soporta reproducibilidad bit-for-bit
  2. Optimización de desempeño: Verificación de variantes de algoritmos de matrices dispersas de alto desempeño
  3. Sistemas más grandes: Integración de este módulo en verificación de solucionador PDE completo
  4. Automatización: Desarrollo de mejores herramientas para soportar derivación automática de invariantes de bucle

Evaluación Profunda

Fortalezas

  1. Profundidad técnica: Aborda múltiples desafíos técnicos en algoritmos de matrices dispersas, incluyendo aritmética de punto flotante, gestión de memoria, flujo de control complejo
  2. Innovación metodológica: El método ascendente de derivación de invariantes proporciona paradigma replicable para verificaciones similares
  3. Valor práctico: Descubrimiento de errores reales demuestra beneficio real de verificación formal
  4. Calidad de ingeniería: Diseño modular y estructura de especificación clara reflejan ingeniería de verificación de alta calidad
  5. Completitud: Verificación de extremo a extremo desde código C a especificación matemática

Insuficiencias

  1. Costo de verificación: 1983 líneas de código de verificación para programa en C relativamente breve, costo bastante alto
  2. Limitaciones de generalidad: Específico para conversión de COO a CSR, capacidad de generalización limitada
  3. Consideraciones de desempeño insuficientes: No considera necesidades de optimización de desempeño en aplicaciones reales
  4. Dependencia de herramientas: Altamente dependiente del ecosistema VST y Coq

Influencia

  1. Contribución académica: Proporciona caso de estudio importante y metodología para campo de verificación de software numérico
  2. Impacto práctico: Puede servir como componente base para software científico de alta confiabilidad
  3. Promoción de metodología: El método de derivación de invariantes puede aplicarse a verificación de otros algoritmos complejos
  4. Desarrollo de herramientas: Impulsa aplicación de herramientas de verificación como VST en dominio de cálculo numérico

Escenarios Aplicables

  1. Cálculo científico crítico: Simulaciones numéricas y análisis que requieren alta confiabilidad
  2. Sistemas críticos para la seguridad: Software crítico para seguridad que involucra cálculo numérico
  3. Investigación de verificación: Como caso de referencia para verificación formal de algoritmos complejos
  4. Propósitos educativos: Demuestra capacidades y métodos de tecnología moderna de verificación de programas

Referencias Bibliográficas

Las referencias clave citadas en este artículo incluyen:

  1. Barrett et al. (1994): Templates for the Solution of Linear Systems - Referencia clásica para algoritmos de matrices dispersas
  2. Appel & Kellison (2024): VCFloat2 - Herramienta de análisis de errores de punto flotante
  3. Cao et al. (2018): VST-Floyd - Herramienta de verificación de lógica de separación
  4. Kellison et al. (2023): LAProof - Biblioteca de prueba formal para programas de álgebra lineal

Resumen: Este artículo demuestra la viabilidad de verificación formal completa de algoritmos numéricos complejos, propone metodología de verificación práctica, y hace contribución importante al desarrollo de software científico confiable. Aunque el costo de verificación es considerable, el valor de descubrimiento de errores reales y la orientación metodológica proporcionada lo convierten en trabajo importante en este campo.