Static-array Word-RAM Fibonacci heap #
This file assembles the standalone static-array Word-RAM Fibonacci heap
Fredman and Tarjan Cormen et al., Chapter 19 over
Cslib.WordRAM.Basis.exact (and lifted to Basis.standard) for
Cslib.Algorithms.Lean.IndexedMinPQ.spec.
Over n vertex handles in a contiguous memory block [base, base + 9 * n + 1) with concrete
integer potential potential x = 80 * (numRoots + 2 * numMarked) (initPotential = 0,
Fredman and Tarjan, Section 2, p. 604 (the potential defined before Theorem 1);
Cormen et al., Section 19.1, eq. (19.1)):
initFreshinitializes an empty heap on zeroed[base, base + 9 * n + 1)inO(1)(≤ 26) instructions;initClearinitializes an empty heap on arbitrary dirty[base, base + 9 * n + 1)inO(n)(≤ 36 * n + 36) instructions;isEmptyandgetKeyrun inO(1)worst-case time (≤ 12and≤ 16instructions);insertanddecreaseKey(with cascading cuts) run inO(1)amortized time (≤ 130and≤ 340instructions);extractMin(with degree-table consolidation and deterministic lexicographic(key, handle)tie-breaking) runs inO(log n)amortized time (≤ 420 * (Nat.log 2 n + 1)instructions).
Main definitions #
Cslib.Algorithms.WordRAM.PriorityQueue.FibonacciHeap.subroutineDS:SubroutineDScertificate overBasis.exact.Cslib.Algorithms.WordRAM.PriorityQueue.FibonacciHeap.pkg,pkgStd:PQPackagebundles overBasis.exactandBasis.standardfor plug-and-play graph algorithms (such as Dijkstra).Cslib.Algorithms.WordRAM.PriorityQueue.FibonacciHeap.initFreshProg,initClearProg,opProg,initRegs,prepareRegs,RunsOps: compiled flatProgram .exact rFibartifacts, register calling conventions, and sequential execution predicate for standalone multi-operation execution.
Main results #
Cslib.Algorithms.WordRAM.PriorityQueue.FibonacciHeap.amortized,run_client_amortized: standaloneStateful.Amortizedcertificate and adaptive-client bound overBasis.standard.Cslib.Algorithms.WordRAM.PriorityQueue.FibonacciHeap.run_ops_exact_fresh,run_ops_exact_reusable: standalone end-to-endBasis.exactflat-program execution theorems bounding initialization byt_init + 1 ≤ 421(initFreshProgon zeroed memory) ort_init + 1 ≤ 421 * (n + 1)(initClearProgon arbitrary memory) and total operation instructions form_qqueries,m_insinsertions,m_deckey decreases, andm_extminimum extractions byt_ops ≤ 421 * (m_q + m_ins + m_dec + m_ext * (Nat.log 2 n + 1)).
References #
- M. L. Fredman and R. E. Tarjan, Fibonacci heaps and their uses in improved network optimization algorithms, Section 2, Lemma 1, Corollary 1, and Theorem 1 (p. 604).
- T. H. Cormen, C. E. Leiserson, R. L. Rivest and C. Stein, Introduction to Algorithms, Section 19.1, eq. (19.1), and Sections 19.2–19.4.
Unified dispatcher #
Unified dispatcher dispatchCode implements all five IndexedMinPQ operations within
charge n s o amortized instructions over Basis.exact.
SubroutineDS certificate and PQPackage bundles #
Unified standalone and inline-subroutine specification/resource certificate for FibonacciHeap
over Basis.exact.
Instances For
Parametric PQPackage .exact rFib bundle for plug-and-play graph algorithms over
Basis.exact.
Instances For
Parametric PQPackage .standard rFib bundle lifted to Basis.standard.
Instances For
Standalone Basis.standard DynamicProgram and Stateful.Amortized realizations #
Standalone DynamicProgram realization of FibonacciHeap over Basis.standard.
Instances For
Standalone DynamicCertificate for FibonacciHeap over Basis.standard.
Instances For
Standalone Stateful.Amortized certificate for FibonacciHeap over Basis.standard, charging
+ 1 per operation for the trailing halt instruction.
Adaptive-client amortized execution bound for any admissible IndexedMinPQ client p over
Basis.standard.
Standalone end-to-end Basis.exact flat-program operation-sequence theorems #
Compiled flat Program .exact rFib for O(1) fresh zeroed-memory initialization.
Instances For
Compiled flat Program .exact rFib for O(n) dirty-memory reusable initialization.
Instances For
Compiled flat Program .exact rFib serving all five priority-queue operations.
Instances For
Deliver operation o's 3-bit tag into tag2..tag0 (R[17..19]) and its handle/key arguments
into argV, argK (R[20..21]), leaving all other registers unchanged.
Instances For
Count isEmpty and getKey queries in an operation sequence.
Instances For
Count insert operations in an operation sequence.
Instances For
Count decreaseKey operations in an operation sequence.
Instances For
Count extractMin operations in an operation sequence.
Instances For
Sequential flat-program execution of ops by repeated calls to opProg: each call prepares
input registers via prepareRegs, runs opProg from pc = 0 to halt, decodes the exact
IndexedMinPQ result, modifies memory only within [base, base + space n), and accumulates total
instructions executed (each final halt included).
- nil {n K_max w base : ℕ} {s : Lean.IndexedMinPQ.State n} {x : WordRAM.Data rFib} : RunsOps w base s x [] x 0
- cons {n K_max w base : ℕ} {s : (Lean.IndexedMinPQ.spec n K_max).State} {x : WordRAM.Data rFib} {o : Lean.IndexedMinPQ.Op n} {ops : List (Lean.IndexedMinPQ.Op n)} {pc : ℕ} {y z : WordRAM.Data rFib} {steps rest : ℕ} : WordRAM.Runs w opProg { pc := 0, data := { regs := prepareRegs o x.regs, mem := x.mem } } { pc := pc, data := y } steps → (∃ (out : ℕ), WordRAM.step w opProg { pc := pc, data := y } = WordRAM.Outcome.halt out) → code.decode o y.regs = some ((Lean.IndexedMinPQ.spec n K_max).step s o).2 → WordRAM.Modifies { base := base, length := space n }.footprint x.mem y.mem → RunsOps w base ((Lean.IndexedMinPQ.spec n K_max).step s o).1 y ops z rest → RunsOps w base s x (o :: ops) z (steps + 1 + rest)
Instances For
Standalone Basis.exact operation-sequence theorem with O(1) fresh initialization on zeroed
[base, base + 9 * n + 1).
Standalone Basis.exact operation-sequence theorem with O(n) reusable initialization on
arbitrary w-bounded memory mem₀.