Skip to content

Commit 2b59fb8

Browse files
audit: classify 2 PA021 legitimate mathematical axioms (funext + Conflicts) (#107)
## Summary `panic-attack assail` reports 2 PA021 ProofDrift findings in this repo. Both are postulates with inline justification — neither is a proof debt. - **`proofs/agda/Basic.agda:177` — `funext`** (function extensionality). Standard HoTT axiom; Coq has `FunctionalExtensionality.functional_extensionality`, Lean has `funext`. Provable in Cubical Agda; postulated in plain Agda. - **`proofs/agda/SoundnessPreservation.agda:51` — `Conflicts`**. INTENTIONAL parameter (abstract binary predicate); theorem interface, not debt. ## What changes - `audits/assail-classifications.a2ml` — 2 entries - `audits/audit-pa021-axioms-2026-05-26.md` ## Verification No proof source touched; `agda --check` rebuild is moot (input unchanged from main). Refs hyperpolymath/panic-attack#32. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 982f007 commit 2b59fb8

2 files changed

Lines changed: 76 additions & 0 deletions

File tree

audits/assail-classifications.a2ml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,21 @@ schema_version = "1.0.0"
110110
(audit "audits/audit-ffi-boundary.md §8")
111111
(rationale "No unsafe blocks; allocations (148 units) reflect 105 prover modules and ProverKind enum variants (ln 96-200); structural not FFI"))
112112

113+
; ─── PA021 ProofDrift — legitimate mathematical axioms ───────────────────
114+
; Both findings are postulates with inline justification in the source
115+
; (funext is HoTT-standard; Conflicts is INTENTIONAL parameter, not debt).
116+
; See audits/audit-pa021-axioms-2026-05-26.md.
117+
118+
(classification
119+
(file "proofs/agda/Basic.agda")
120+
(category "ProofDrift")
121+
(audit "audits/audit-pa021-axioms-2026-05-26.md §1")
122+
(rationale "funext: function extensionality, postulated in plain Agda (provable in Cubical); standard mathematical axiom accepted by Coq, Lean, HoTT. Inline justification at line 172-177."))
123+
124+
(classification
125+
(file "proofs/agda/SoundnessPreservation.agda")
126+
(category "ProofDrift")
127+
(audit "audits/audit-pa021-axioms-2026-05-26.md §2")
128+
(rationale "Conflicts is an abstract binary predicate parameter; caller supplies concrete proof of ¬ Conflicts when sets are disjoint. INTENTIONAL parameter, not proof debt. Inline justification at line 44-53."))
129+
113130
)
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<!--
2+
SPDX-License-Identifier: MPL-2.0
3+
Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
4+
-->
5+
6+
# Audit: legitimate mathematical axioms (PA021)
7+
8+
**Auditor**: Jonathan D.A. Jewell
9+
**Date**: 2026-05-26
10+
**Scope**: 2 panic-attack PA021 ProofDrift findings, both postulates with inline justification in the source.
11+
**Cross-reference**: campaign tracker [hyperpolymath/panic-attack#32](https://github.com/hyperpolymath/panic-attack/issues/32).
12+
**Registry**: `audits/assail-classifications.a2ml`.
13+
14+
## §1 — `proofs/agda/Basic.agda``funext` (function extensionality)
15+
16+
Line 172-179 of `Basic.agda`:
17+
18+
```agda
19+
-- provable in Cubical Agda (--cubical). In plain Agda it must be
20+
-- postulated. It is a standard mathematical axiom accepted by all
21+
-- major proof assistants (Coq's Functional Extensionality, Lean's
22+
-- funext, HoTT axiom). It does NOT compromise soundness.
23+
-- See: HoTT Book, Section 2.9; nLab "function extensionality"
24+
postulate
25+
funext : {A B : Set} {f g : A → B}
26+
→ ((x : A) → f x ≡ g x) → f ≡ g
27+
```
28+
29+
`funext` is one of the foundational axioms of dependent type theory. Coq has `FunctionalExtensionality.functional_extensionality`; Lean's mathlib has `funext`; HoTT has Axiom 2.9.3. It is provable in Cubical Agda but must be postulated in plain Agda — a well-known constraint of the underlying type theory.
30+
31+
**Classification**: `legitimate-mathematical-axiom`.
32+
33+
## §2 — `proofs/agda/SoundnessPreservation.agda``Conflicts` (intentional parameter)
34+
35+
Line 44-53 of `SoundnessPreservation.agda`:
36+
37+
```agda
38+
-- Conflicts is an abstract binary predicate over two axiom lists.
39+
-- We leave it as a postulate-free parameter: the caller supplies a
40+
-- concrete proof of ¬ Conflicts when they know the sets are disjoint.
41+
...
42+
-- an axiom that the other marks Reject.
43+
postulate
44+
Conflicts : List Axiom → List Axiom → Set
45+
```
46+
47+
The comment explicitly tags this as "INTENTIONAL PARAMETER — 'Conflicts' is domain knowledge about which axioms conflict". This is a parameterised theorem: the theorem statement quantifies over an arbitrary `Conflicts` predicate, and the caller proves `¬ Conflicts` (or supplies a concrete relation) at use-site. This is NOT a proof debt — it is the *interface* of the theorem.
48+
49+
**Classification**: `intentional-parameter`.
50+
51+
## Anti-gameability
52+
53+
The registry is `audits/assail-classifications.a2ml`. Adding new postulates to either file does NOT become silently suppressed — only these two specific postulates are classified. Any new `postulate` or `sorry` in these or other proof files remains visible.
54+
55+
## Verification
56+
57+
No proof source touched; `agda --check` rebuild is moot (input unchanged from main).
58+
59+
Refs hyperpolymath/panic-attack#32.

0 commit comments

Comments
 (0)