Skip to content

Commit 176275c

Browse files
committed
Align hyperreal perturbations with solver machinery
1 parent 9df7241 commit 176275c

1 file changed

Lines changed: 47 additions & 0 deletions

File tree

PORTING_PLAN.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,24 @@ csgrs = CSG objects, modeling operations, topology, metadata, IO, and us
5757

5858
- exact rationals
5959
- symbolic and computable reals
60+
- shared reduced expression machinery with symbolic leaves
61+
- standard-real solver variables and formal infinitesimal perturbation leaves
6062
- lazy approximation
6163
- sign, zero, magnitude, and structural facts
6264
- refinement and conservative comparison support
6365

6466
It should not own CSG, polygon, mesh, or CAD-specific geometry types.
6567

68+
The machinery needed for the feature that gives `hyperreal` its name should be
69+
developed together with the machinery needed to map a SolveSpace-style solver
70+
onto `hyperreal`, but the semantics should remain distinct. Both need reduced
71+
expression graphs, symbolic leaves, dependency sets, structural facts,
72+
derivative hooks, and cached evaluation. Solver variables are unknown standard
73+
reals that are bound by an evaluation context during iterative solving.
74+
Infinitesimal perturbations are ordered formal terms used for exact
75+
lexicographic signs, tie-breaking, degeneracy handling, and simulation of
76+
simplicity; they are not ordinary variables to solve for numerically.
77+
6678
### `hyperlattice`
6779

6880
`hyperlattice` should own the general linear algebra layer:
@@ -344,6 +356,41 @@ At this point, the semantic boundary should already be correct:
344356
The hyperreal port should therefore focus on backend behavior, performance, and
345357
additional certificates rather than rewriting `csgrs` modeling logic again.
346358

359+
This phase should align with the `hypersolve` / SolveSpace-style symbolic
360+
variable work in `hyperreal`. The shared substrate should support:
361+
362+
- expression nodes with symbolic leaves
363+
- dependency and independence facts
364+
- structural sign, zero, magnitude, and domain facts before full evaluation
365+
- reduced-expression caching across repeated queries
366+
- derivative hooks for solver residuals and, where useful, perturbation
367+
propagation
368+
- bounded simplification so solver equations and infinitesimal series do not
369+
grow without control
370+
371+
The first infinitesimal target should be CAD-useful ordered perturbations, not a
372+
general nonstandard-analysis universe. A practical model is a finite
373+
lexicographic perturbation tower:
374+
375+
```text
376+
standard Real + a1*eps + a2*eps^2 + ...
377+
```
378+
379+
or an equivalent ordered perturbation-term representation. `hyperlimit` should
380+
be able to use these terms to decide predicate signs in degenerate cases without
381+
inventing ad hoc epsilon constants. `hypersolve` should use the same expression
382+
and fact infrastructure for standard-real variables, residuals, Jacobians, and
383+
rank diagnostics. The two paths should share representation, reduction,
384+
caching, and derivative infrastructure while keeping their policy layers
385+
separate:
386+
387+
- solver symbols are bound by an evaluation context and participate in numeric
388+
iteration
389+
- infinitesimal symbols are ordered formal perturbations and participate in
390+
lexicographic comparison
391+
- `csgrs` consumes the resulting classifications and certificates, but still
392+
owns CSG topology, metadata, and modeling policy
393+
347394
### Phase 10: Public API cleanup
348395

349396
After internals are stable:

0 commit comments

Comments
 (0)