From 724c3ab214cc7aeeb76d0b17c120afdbf7c96e14 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Apr 2026 09:41:05 +0200 Subject: [PATCH 1/2] Update Safe owner list page: uniquePredecessor, functional correctness, reduced hypotheses - Replace false antisymmetry invariant with provable uniquePredecessor in SafeGuarantee component - Add isOwner functional correctness column to proof status table (15 theorems) - Update hypotheses section: SafeOwnerInvariant bundle (3 fields), derived properties (noSelfLoops, freshInList, acyclic) noted as internalized rather than assumed - Simplify hOwnerInList hypothesis (hOldNePrev was derived away) - Update "What these invariants cover" disclosure with 4 property families Co-Authored-By: Claude Opus 4.6 --- components/research/SafeGuarantee.jsx | 2 +- pages/research/safe-owner-reachability.jsx | 83 ++++++++++++++-------- 2 files changed, 53 insertions(+), 32 deletions(-) diff --git a/components/research/SafeGuarantee.jsx b/components/research/SafeGuarantee.jsx index d9a1e05..23c4799 100644 --- a/components/research/SafeGuarantee.jsx +++ b/components/research/SafeGuarantee.jsx @@ -3,7 +3,7 @@ import { useState, useEffect, useRef } from 'react' const FORMAL_INVARIANTS = [ '\u2200 key, next(key) \u2260 0 \u2192 reachable(SENTINEL, key)', '\u2200 key \u2260 0, next(key) \u2260 0 \u2194 reachable(SENTINEL, key)', - '\u2200 a b, reachable(a, b) \u2227 reachable(b, a) \u2192 a = b' + '\u2200 x y c \u2260 0, next(x) = c \u2227 next(y) = c \u2192 x = y' ] export default function SafeGuarantee() { diff --git a/pages/research/safe-owner-reachability.jsx b/pages/research/safe-owner-reachability.jsx index 59a9a15..4f40ba7 100644 --- a/pages/research/safe-owner-reachability.jsx +++ b/pages/research/safe-owner-reachability.jsx @@ -133,33 +133,37 @@ export default function SafeOwnerReachabilityPage() { list.

- In Lean, that goal is split into three named properties: + In Lean, that goal is split into four families of properties:

- These correspond to invariants from Certora's{' '} + The invariant properties correspond to Certora's{' '} OwnerReach.spec - . Threshold management is elided as it does not affect the - owners mapping. + . The functional correctness proofs go beyond what Certora + specifies. Threshold management is elided as it does not + affect the owners mapping.

@@ -247,7 +251,7 @@ export default function SafeOwnerReachabilityPage() { Proof status

- All 12 theorems are proven.{' '} + All 15 theorems are proven.{' '} Proofs.lean {' '} @@ -261,6 +265,7 @@ export default function SafeOwnerReachabilityPage() { inListReachable ownerListInvariant acyclicity + isOwner @@ -269,24 +274,28 @@ export default function SafeOwnerReachabilityPage() { proven proven proven + — addOwner proven proven proven + proven removeOwner proven proven proven + proven swapOwner proven proven proven + proven @@ -302,7 +311,11 @@ export default function SafeOwnerReachabilityPage() { The proofs use zero axioms. Every hypothesis is either a Solidity require{' '} guard the contract already enforces, or a structural fact - about the linked list that holds inductively. + about the linked list that holds inductively. Properties like{' '} + noSelfLoops,{' '} + freshInList, and{' '} + acyclic are derived + inside the proofs rather than assumed.

From 61ecd7d15713e8f1ee3aec04e0492306101cc825 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Apr 2026 09:56:50 +0200 Subject: [PATCH 2/2] Fix table column header to match disclosure text The proof status table said "inListReachable" but the disclosure section above describes four property families: ownerListInvariant, uniquePredecessor, acyclic, and isOwner correctness. Rename the column to "uniquePredecessor" so the table and text are consistent. Fixes Bugbot review thread on PR #19. Co-Authored-By: Claude Opus 4.6 --- pages/research/safe-owner-reachability.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/research/safe-owner-reachability.jsx b/pages/research/safe-owner-reachability.jsx index 4f40ba7..c2f4132 100644 --- a/pages/research/safe-owner-reachability.jsx +++ b/pages/research/safe-owner-reachability.jsx @@ -262,7 +262,7 @@ export default function SafeOwnerReachabilityPage() { Function - inListReachable + uniquePredecessor ownerListInvariant acyclicity isOwner