Skip to content

Commit a81a2ef

Browse files
committed
abi(ephapaxiser): Layer-5 capstone — end-to-end ABI soundness certificate
Add Ephapaxiser.ABI.Capstone assembling the existing proof layers into one inhabited certificate: - ABISound record: flagship single-use witness (Semantics.freshTokenConsumable), Layer-3 NO-RESURRECTION invariant (Invariants.noResurrectionThree), and FFI-seam injectivity (FfiSeam.resultToIntInjective). - abiContractDischarged : ABISound built solely from those real exported witnesses — typechecks iff every prior layer is sound. - Two positive-control projections + doc comment tying manifest -> ABI proofs -> FFI seam into one end-to-end soundness statement. Genuine composition only: no believe_me/postulate/assert_total/%hint. Build is clean with zero warnings; an adversarial false certificate (positive Consumable witness in the Not(Resurrection) field) is rejected by the type checker. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A6PSzJWpRxtzGDjUCEh7Mx
1 parent 6d08e09 commit a81a2ef

2 files changed

Lines changed: 109 additions & 0 deletions

File tree

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
-- SPDX-License-Identifier: MPL-2.0
2+
-- Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
3+
--
4+
||| Layer 5 (CAPSTONE): one end-to-end ABI SOUNDNESS CERTIFICATE for
5+
||| ephapaxiser.
6+
|||
7+
||| Every prior layer proves one facet of the ABI contract in isolation:
8+
|||
9+
||| * Layer 2 (`Ephapaxiser.ABI.Semantics`) — the flagship single-use /
10+
||| linearity property: a `Fresh` token is `Consumable` (positive control
11+
||| `freshTokenConsumable`), while a `Spent` token is not.
12+
||| * Layer 3 (`Ephapaxiser.ABI.Invariants`) — the deeper transition
13+
||| invariant: consumption is irreversible (NO-RESURRECTION,
14+
||| `noResurrectionThree`) and identity-preserving.
15+
||| * Layer 4 (`Ephapaxiser.ABI.FfiSeam`) — the ABI<->FFI seam is sound:
16+
||| `resultToIntInjective` shows distinct ABI outcomes never collide on the
17+
||| C wire.
18+
|||
19+
||| This module ties the manifest's promise ("enforce single-use linear type
20+
||| semantics") to the ABI proofs (flagship + invariant) and onward to the FFI
21+
||| seam, as ONE inhabited value. `ABISound` is a record whose fields are
22+
||| exactly those proven facts, and `abiContractDischarged : ABISound` is built
23+
||| solely from the existing exported witnesses/theorems of Layers 2-4. If ANY
24+
||| prior layer were unsound — if any of those witnesses could not be produced
25+
||| genuinely — this single value would not typecheck. That is the capstone:
26+
||| the full ABI contract is discharged together, not facet by facet.
27+
|||
28+
||| No axioms anywhere: no `believe_me`, `idris_crash`, `assert_total`,
29+
||| `postulate`, `sorry`, or `%hint` hacks. Each field is a real value imported
30+
||| from the layer that proved it.
31+
32+
module Ephapaxiser.ABI.Capstone
33+
34+
import Ephapaxiser.ABI.Types
35+
import Ephapaxiser.ABI.Semantics
36+
import Ephapaxiser.ABI.Invariants
37+
import Ephapaxiser.ABI.FfiSeam
38+
39+
%default total
40+
41+
--------------------------------------------------------------------------------
42+
-- The capstone certificate type
43+
--------------------------------------------------------------------------------
44+
45+
||| `ABISound` is the end-to-end ABI soundness certificate. Each field is a KEY
46+
||| proven fact of the ephapaxiser ABI, carried as a genuine value:
47+
|||
48+
||| * `flagship` — the Layer-2 flagship property on the canonical positive
49+
||| control: the concrete fresh token (id 7) IS `Consumable`.
50+
||| * `invariant` — the Layer-3 NO-RESURRECTION invariant on a concrete
51+
||| post-state: the spent result (id 3) is NOT resurrectable.
52+
||| * `ffiSeam` — the Layer-4 FFI-seam soundness: `resultToInt` is
53+
||| injective, so distinct ABI outcomes never collide on the wire.
54+
|||
55+
||| A value of this record can only exist if all three layers are inhabited
56+
||| together — there is no way to fabricate any field.
57+
public export
58+
record ABISound where
59+
constructor MkABISound
60+
||| Layer 2: the canonical fresh token is consumable (flagship single-use).
61+
flagship : Consumable (MkToken {st = Fresh} 7)
62+
||| Layer 3: the spent post-state cannot be resurrected (irreversibility).
63+
invariant : Not (Resurrection (MkToken {st = Spent} 3))
64+
||| Layer 4: the ABI->C encoding is injective (seam is collision-free).
65+
ffiSeam : (a, b : Result) -> resultToInt a = resultToInt b -> a = b
66+
67+
--------------------------------------------------------------------------------
68+
-- The capstone value: the ABI contract, discharged end-to-end
69+
--------------------------------------------------------------------------------
70+
71+
||| THE CAPSTONE. A single inhabited certificate assembled entirely from the
72+
||| existing exported witnesses/theorems of Layers 2-4:
73+
|||
74+
||| * `flagship` := `Semantics.freshTokenConsumable`
75+
||| * `invariant` := `Invariants.noResurrectionThree`
76+
||| * `ffiSeam` := `FfiSeam.resultToIntInjective`
77+
|||
78+
||| Because each field is the real proof from its layer, this value typechecks
79+
||| if and only if all prior layers are sound. It is the machine-checked
80+
||| statement that the manifest promise, the ABI domain proofs, and the FFI
81+
||| seam form one coherent, discharged contract.
82+
public export
83+
abiContractDischarged : ABISound
84+
abiContractDischarged =
85+
MkABISound
86+
freshTokenConsumable
87+
noResurrectionThree
88+
resultToIntInjective
89+
90+
--------------------------------------------------------------------------------
91+
-- Positive control: the capstone's fields project back to the real proofs.
92+
--------------------------------------------------------------------------------
93+
94+
||| POSITIVE CONTROL: the flagship field of the discharged certificate is
95+
||| definitionally the Layer-2 positive-control witness. Confirms the capstone
96+
||| genuinely carries the underlying proof rather than some re-derived stand-in.
97+
||| (Names are module-qualified so they are not implicitly bound as lowercase.)
98+
public export
99+
flagshipIsSemanticsControl
100+
: Capstone.abiContractDischarged.flagship = Semantics.freshTokenConsumable
101+
flagshipIsSemanticsControl = Refl
102+
103+
||| POSITIVE CONTROL: the FFI-seam field, applied to a concrete colliding pair
104+
||| (`Ok` with itself), yields the reflexivity proof — the injectivity theorem
105+
||| is live inside the certificate, not inert.
106+
public export
107+
ffiSeamOkOk : Capstone.abiContractDischarged.ffiSeam Ok Ok Refl = Refl
108+
ffiSeamOkOk = Refl

src/interface/abi/ephapaxiser-abi.ipkg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ modules = Ephapaxiser.ABI.Types
1212
, Ephapaxiser.ABI.Semantics
1313
, Ephapaxiser.ABI.Invariants
1414
, Ephapaxiser.ABI.FfiSeam
15+
, Ephapaxiser.ABI.Capstone

0 commit comments

Comments
 (0)