Nivel 7 · Completitud en Lean (experto)
La auditoría de axiomas
Una formalización es tan honesta como sus dependencias. Deben excluirse dos modos de fallo: una
laguna admitida (sorry) y una regla postulada ad hoc (un «oráculo»). El comando #print axioms
de Lean informa el conjunto completo de axiomas lógicos de los que depende transitivamente un
teorema; un sorry aflora como el pseudoaxioma sorryAx, y cualquier constante postulada
aparecería por su nombre. Ejecutarlo sobre los resultados principales arroja lo siguiente.
Extracto de Audit.lean.
#print axioms completeness_ND-- 'completeness_ND' depends on axioms: [propext, Classical.choice, Quot.sound]#print axioms soundComplete-- 'soundComplete' depends on axioms: [propext, Classical.choice, Quot.sound]#print axioms soundness-- 'soundness' depends on axioms: [propext, Classical.choice, Quot.sound]#print axioms ex_id-- 'ex_id' does not depend on any axioms#print axioms ex_dne-- 'ex_dne' does not depend on any axiomsQué es cada axioma
Los tres axiomas reportados son los fundamentos clásicos estándar sobre los que se construye todo Mathlib de Lean; no son específicos de este desarrollo.
propext(extensionalidad proposicional): dos proposiciones lógicamente equivalentes son iguales como términos de .Classical.choice(el axioma de elección): de la existencia no vacía de un tipo se extrae un habitante; de él se derivan el tercero excluido yClassical.propDecidable.Quot.sound(corrección de los cocientes): elementos relacionados tienen la misma clase en el tipo cociente.
En particular:
- No aparece ningún
sorryAx: no hay lagunas admitidas. - No aparece ninguna constante llamada
oracle(ni ningún teorema de completitud de biblioteca): la completitud es genuinamente interna. - Las derivaciones construidas a mano
ex_idyex_dneno dependen de ningún axioma, pues son términos de prueba finitos del tipo inductivoND.
Dónde entra la lógica clásica
Los dos primeros axiomas no son decorativos: rastrean usos concretos del razonamiento clásico, todos en pasos ya señalados en las páginas anteriores.
- En la corrección
(Teorema 11.12),
el caso de la RAA valida en el metanivel mediante
by_contra(bivalencia); por esosoundnessdepende deClassical.choice/propext. - En el lema de Kalmár
(Lema 11.18), el caso
de la negación usa la eliminación de la doble negación (
not_not) y el de la implicación la equivalencia ; ambos son clásicos. - La semántica
evalsobrePropy el condicional delitse deciden conClassical.propDecidable, que reposa enClassical.choice. Quot.soundproviene de las estructuras de cociente de Mathlib (conjuntos, listas), no de un paso clásico del propio argumento.
Es decir, los tres axiomas marcan exactamente los puntos donde el contenido clásico de un teorema clásico se hace explícito; no hay clasicidad oculta en ningún otro lugar. Este es el certificado formal de que el
Teorema 11.22es exactamente lo que afirma ser.
Validación cruzada con la biblioteca Foundation
El teorema de completitud de las páginas anteriores se sostiene por sí solo. De forma
independiente, se verifica la misma adecuación semántica a través de la biblioteca Foundation
(FormalizedFormalLogic)
(FormalizedFormalLogic, 2024)
, que ya contiene un teorema de completitud
para un cálculo proposicional clásico. Deliberadamente no se importa en el desarrollo principal:
la clausura completa de Mathlib usada por el núcleo y la usada por Foundation chocan en una
declaración duplicada de Matrix.map, de modo que el apéndice se compila como un objetivo
separado de Lake (Thesis.Prop.CompletenessViaFoundation). Nada del desarrollo principal depende
de él.
Traducción a la sintaxis de Foundation
El cálculo clásico de Foundation se presenta sobre fórmulas en forma normal de negación, así que se traduce la sintaxis de superficie usando la identidad clásica :
Extracto de BridgeToFoundation.lean.
abbrev F : Type := LO.Propositional.NNFormula String
def tr : Formula → F| .atom s => LO.Propositional.NNFormula.atom s| .neg p => (∼ (tr p))| .impl p q => (∼ (tr p)) ⋎ (tr q)
abbrev Sat (v : Valuation) (ψ : F) : Prop := v ⊧ ψEl lema puente
Para toda valuación y toda fórmula de superficie , .
A probar: , para toda y toda fórmula de superficie . Por inducción estructural sobre .
- Átomo . es la variable correspondiente, y por definición de , .
- Negación . Como es la negación de , . Por la hipótesis de inducción , se sigue .
- Implicación . La traducción codifica la implicación como , de modo que . Usando las hipótesis de inducción y la tautología clásica :
theorem eval_tr (v : Valuation) : ∀ φ : Formula, eval v φ ↔ Sat v (tr φ) := by intro φ induction φ with | atom s => simp [eval, tr, Sat] | neg p ih => simp [eval, tr, Sat, ih] | impl p q ihp ihq => simp [eval, tr, Sat, ihp, ihq]; tautoImportación de la completitud de Foundation
Componer el lema puente con el teorema de completitud de la biblioteca proporciona, para toda
tautología de superficie , una demostración de Foundation de a partir de la
teoría vacía. Esto suministra una confirmación independiente de que la noción de superficie de
tautología coincide con la de la biblioteca y, por tanto, una corroboración externa de la
adecuación. Extracto de
CompletenessViaFoundation.lean.
theorem provable_tr_of_tautology (φ : Formula) : IsTautology φ → Provable (∅ : Theory) (tr φ) := by intro hTaut apply LO.Propositional.ClassicalSemantics.completeness! intro v hvT have : eval v φ := hTaut v exact (eval_tr v φ).1 thisReproducir la auditoría
El desarrollo completo se compila con lake build desde la raíz del
repositorio; las instrucciones detalladas están
en su README. Los comandos #print axioms de
Audit.lean se
ejecutan durante la compilación, de modo que la auditoría de
axiomas se reproduce con la misma orden; cualquier lector puede verificar por sí mismo que
la salida es la reportada arriba.
Cierre: la completitud como programa
Se ha dado una demostración completa, verificada por el núcleo, de la adecuación de la deducción natural proposicional clásica:
La corrección es una inducción sobre reglas rutinaria; la completitud es el argumento de Kalmár llevado a cabo enteramente con las propias reglas de inferencia del sistema, mediante una construcción por valuación y un paso finito de descarga de átomos impulsado por un análisis por casos clásico derivado. La auditoría de axiomas certifica que la demostración está libre de lagunas admitidas y de toda regla de completitud postulada.
Conceptualmente, el desarrollo realiza el lema de Stansifer («la completitud como un programa») (Stansifer, 2001) en el marco de la deducción natural: la demostración del lema de Kalmár es un procedimiento efectivo que, dada la tabla de verdad de , ensambla una derivación concreta, que el paso de descarga pliega luego en una derivación a partir del contexto vacío. La validación cruzada con Foundation refuerza la confianza en que la semántica de superficie es la pretendida.