feat: start of lift, debugging, cleanup

This commit is contained in:
Henri Saudubray 2025-06-23 10:06:01 +02:00
parent 883e5fff01
commit 589f89c768
Signed by: hms
GPG key ID: 7065F57ED8856128
31 changed files with 1297 additions and 51 deletions

View file

@ -145,7 +145,7 @@ Solution: simulate assertions with their own solver.
Nodes take an additional reset parameter `'p` for their reset function:
#align(top)[
#grid(columns: (3fr, 2fr), align: (left, left),
#grid(columns: (3fr, 2fr), align: (left, left),
```ocaml
type ('p, 'a, 'b) dnode =
DNode : {
@ -200,7 +200,7 @@ Hybrid nodes are a bit more complex:
#slide(repeat: 3, self => [
#let (uncover, only) = utils.methods(self)
ODE solvers are discrete nodes producing streams of functions defined on
ODE solvers are discrete nodes producing streams of functions defined on
successive intervals:
$(h: bb(R)_+) -->^D (h': bb(R)_+) times (u: [0,h'] -> bb(V))$.
@ -249,7 +249,7 @@ Hybrid nodes are a bit more complex:
#slide(repeat: 3, self => [
#let (uncover, only) = utils.methods(self)
Zero-crossing solvers are discrete nodes too, looking for zero-crossings on
Zero-crossing solvers are discrete nodes too, looking for zero-crossings on
functions:
$(h: bb(R)_+) times (u: [0, h] -> bb(V)) -->^D
(h': bb(R)_+) times (z: bb(Z)?)$.
@ -456,7 +456,7 @@ When receiving a new value, store it
box((10, 1.25), (3, 1.5), double: true, content: `state`)
// (h, u) -> state
content((-2.25, 3), $(h, u)$)
content((-2.25, 3), $(h, u)$)
arrow((-1, 3), (r, 1.5), (d, 2.5), (r, 5), (u, 1.5), (r, 4.5))
// sim -> bot
@ -583,7 +583,7 @@ When receiving a new value, store it
// solver.step
box((6.5, 1), (3, 1.5), content: `step`)
// solver.state
box((6.5, 2.75), (3, 1.5), double: true, content: `state`)
@ -757,7 +757,7 @@ If no zero-crossing is found, there is no discontinuity.
content((-3, 1.5), $"Signal"(alpha)$)
content((5.5, 2), $"Signal"(beta)$)
content((14, 1.5), $"Signal"(gamma)$)
content((-4, -1), $alpha:$)
content((-4, -2.5), $beta:$)
content((-4, -4), $gamma:$)
@ -795,7 +795,7 @@ If no zero-crossing is found, there is no discontinuity.
The output signal stops at least as often as the input signal does.
#linebreak()
This calls for a "lazy" composition: we request rather than provide data.
#align(center, cetz-canvas({
import cetz.draw: *
box((0, 0), (3, 3), content: $M_1$)
@ -809,7 +809,7 @@ If no zero-crossing is found, there is no discontinuity.
content((-3, 1.5), $"Signal"(alpha)$)
content((5.5, 2), $"Signal"(beta)$)
content((14, 1.5), $"Signal"(gamma)$)
content((-4, -1), $alpha:$)
content((-4, -2.5), $beta:$)
content((-4, -4), $gamma:$)