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..c2f4132 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 {' '} @@ -258,9 +262,10 @@ export default function SafeOwnerReachabilityPage() { Function - inListReachable + uniquePredecessor 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.