- children_intervals_good (n : Fin row.nrChildren) : tab[row.IDfirstChild + ↑n].interval = Interval.nth_part param row.interval row.nrChildren n
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- tab.instDecidableHasIntervals start intervals = Noperthedron.Solution.Table.instDecidableHasIntervals._aux_1 tab start intervals
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Noperthedron.Solution.Row.ValidSplit tab row = (row.nodeType = 3 ∧ (Noperthedron.Solution.Row.ValidSingleParamSplit tab row ∨ Noperthedron.Solution.Row.ValidFullSplit tab row))
Instances For
Equations
- asSplit {tab : Table} {row : Row} : ValidSplit tab row → Valid tab row
- asGlobal {tab : Table} {row : Row} : row.ValidGlobal → Valid tab row
- asLocal {tab : Table} {row : Row} : row.ValidLocal → Valid tab row
Instances For
Equations
- Noperthedron.Solution.instDecidableValid tab row = decidable_of_iff (Noperthedron.Solution.Row.ValidSplit tab row ∨ row.ValidGlobal ∨ row.ValidLocal) ⋯
Equations
- Noperthedron.Solution.Row.ValidIx tab i row = (row.ID = i ∧ Noperthedron.Solution.Row.Valid tab row ∧ row.ID < Array.size tab)
Instances For
Equations
Equations
- tab.RowsValid = ∀ (i : Fin (Array.size tab)), Noperthedron.Solution.Row.ValidIx tab (↑i) tab[i]
Instances For
Parallel validity checking #
Table.rowsValidParB splits the index range into chunks and checks them
concurrently via Task.spawn. Since Task.spawn fn is definitionally
⟨fn ()⟩, the parallelism is invisible to the logic, and correctness is proved
exactly as for the sequential checker. This matters for
Noperthedron.exists_solution_table, where native_decide runs this check
over a table with ~18.7 million rows.
Check all rows of the table for validity, splitting the work into nTasks
chunks of size chunkSize that run concurrently via Task.spawn. The leading
decide guard ensures that the chunks cover the whole table, so that
Table.rowsValid_of_rowsValidChunkedB holds for arbitrary (even nonsensical)
values of nTasks and chunkSize.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Parallel analogue of Table.rowsValidB, splitting the table into nTasks
chunks of (near-)equal size.
Equations
- tab.rowsValidParB nTasks = tab.rowsValidChunkedB nTasks (Array.size tab / nTasks + 1)
Instances For
The parallel checker is complete: for a positive number of tasks it agrees
with Table.RowsValid. (Soundness, which is the direction the final proof
needs, holds for any nTasks; see Table.rowsValid_of_rowsValidParB.)
Equations
- iv.toReal = PoseInterval.mk iv.minPose iv.maxPose ⋯
Instances For
Equations
- row.toRealInterval = row.interval.toReal
Instances For
The set of poses lying in the rational interval, defined as Set.Icc of the
min/max endpoints; agrees definitionally with iv.toReal.
Equations
- Noperthedron.Solution.instCoeIntervalSetPoseReal = { coe := fun (iv : Noperthedron.Solution.Interval) => Set.Icc iv.minPose iv.maxPose }