Keyed minimum tournaments #
This module exposes a sequential circuit tournament that selects one minimum-key record from any nonempty fixed-width family while retaining its payload.
The recursive record layout is the usual row count times record width.
@[simp]
theorem
Complexity.Circuit.eval_unsignedKeyedMinTournament
(keyWidth payloadWidth : ℕ)
[NeZero keyWidth]
(count : ℕ)
(keys : Fin (count + 1) → BitString keyWidth)
(payloads : Fin (count + 1) → BitString payloadWidth)
:
(unsignedKeyedMinTournament keyWidth payloadWidth count).snd.eval (BitString.packKeyedRecords count keys payloads) = have winner := BitString.unsignedMinimumKeyedRecord count keys payloads;
Fin.append winner.1 winner.2
The tournament returns the semantic left-associated minimum record.
@[simp]
theorem
Complexity.Circuit.size_unsignedKeyedMinTournament
(keyWidth payloadWidth : ℕ)
[NeZero keyWidth]
(count : ℕ)
:
Exact tournament size: record copies plus one keyed selector per comparison.