visualproof 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +88 -33
- package/dist/assets/tips/phone-fingers.light.mp4 +0 -0
- package/dist/assets/tips/phone-fingers.light.webp +0 -0
- package/dist/assets/tips/tour-agent.webp +0 -0
- package/dist/assets/tips/tour-arrange.webp +0 -0
- package/dist/assets/tips/tour-artwork.webp +0 -0
- package/dist/assets/tips/tour-checks.webp +0 -0
- package/dist/assets/tips/tour-export.webp +0 -0
- package/dist/assets/tips/tour-keys.webp +0 -0
- package/dist/assets/tips/tour-library.webp +0 -0
- package/dist/assets/tips/tour-project.webp +0 -0
- package/dist/assets/tips/tour-review.webp +0 -0
- package/dist/assets/tips/tour-share.webp +0 -0
- package/dist/assets/tips/tour-source.webp +0 -0
- package/dist/assets/tips/tour-target.webp +0 -0
- package/dist/assets/tips/tour-view.webp +0 -0
- package/dist/assets/tips/tour.json +289 -0
- package/dist/assets/tips/tour.webp +0 -0
- package/dist/assets/webfonts/LICENSE-Noto.txt +95 -0
- package/dist/assets/webfonts/metrics.json +1 -0
- package/dist/assets/webfonts/ttf/jost-400-normal.ttf +0 -0
- package/dist/assets/webfonts/ttf/jost-500-normal.ttf +0 -0
- package/dist/assets/webfonts/ttf/noto-sans-math.ttf +0 -0
- package/dist/assets/webfonts/ttf/noto-sans.ttf +0 -0
- package/dist/assets/webfonts/ttf/source-sans-3-400-italic.ttf +0 -0
- package/dist/assets/webfonts/ttf/source-sans-3-400-normal.ttf +0 -0
- package/dist/assets/webfonts/ttf/source-sans-3-500-normal.ttf +0 -0
- package/dist/assets/webfonts/ttf/source-sans-3-600-normal.ttf +0 -0
- package/dist/assets/webfonts/ttf/source-sans-3-700-normal.ttf +0 -0
- package/dist/assets/webfonts/ttf/source-serif-4-400-italic.ttf +0 -0
- package/dist/assets/webfonts/ttf/source-serif-4-600-italic.ttf +0 -0
- package/dist/mcp/visualproof-mcp.mjs +3 -1
- package/dist/server/agent.js +94 -91
- package/dist/server/agentdocs.js +1 -1
- package/dist/server/artcmd.js +335 -0
- package/dist/server/children.js +85 -0
- package/dist/server/doctor.js +105 -42
- package/dist/server/events.js +10 -0
- package/dist/server/export.js +11 -4
- package/dist/server/extract.js +3 -2
- package/dist/server/figures.js +3 -2
- package/dist/server/film.js +380 -0
- package/dist/server/history.js +11 -1
- package/dist/server/hover.js +8 -5
- package/dist/server/live.js +72 -9
- package/dist/server/main.js +352 -23
- package/dist/server/mcptools.js +4 -1
- package/dist/server/media.js +114 -0
- package/dist/server/pipeline.js +21 -10
- package/dist/server/poppler.js +3 -2
- package/dist/server/readonlygate.js +4 -4
- package/dist/server/review.js +4 -1
- package/dist/server/reviewapi.js +35 -1
- package/dist/server/snapshot.js +10 -1
- package/dist/server/sourcestore.js +3 -2
- package/dist/server/status.js +3 -2
- package/dist/server/supervise.js +219 -0
- package/dist/server/updates.js +951 -0
- package/dist/server/usage.js +3 -1
- package/dist/server/version.js +183 -0
- package/dist/server/view.js +0 -7
- package/dist/server/views.js +24 -0
- package/dist/shared/artfonts.js +81 -0
- package/dist/shared/artrecipe.js +316 -0
- package/dist/shared/collab.js +7 -2
- package/dist/shared/declfind.js +95 -0
- package/dist/shared/lostfound.js +1 -0
- package/dist/shared/pastgraph.js +6 -6
- package/dist/shared/review.js +62 -5
- package/dist/shared/timeline.js +5 -0
- package/dist/web/bundle/app.js +3006 -413
- package/dist/web/bundle/edges.js +1 -1
- package/dist/web/index.html +13 -1
- package/dist/web/src/agentmark.js +14 -0
- package/dist/web/src/artwork.js +1000 -0
- package/dist/web/src/bundles.js +151 -0
- package/dist/web/src/canvas.js +3716 -0
- package/dist/web/src/drag.js +61 -0
- package/dist/web/src/edgequeue.js +204 -0
- package/dist/web/src/gl/gl.js +123 -0
- package/dist/web/src/gl/renderer.js +451 -0
- package/dist/web/src/halo.js +95 -0
- package/dist/web/src/highlight.js +108 -0
- package/dist/web/src/overview.js +393 -0
- package/dist/web/src/reviewqueue.js +250 -0
- package/dist/web/src/selection.js +272 -0
- package/dist/web/src/status.js +80 -0
- package/dist/web/src/visitors.js +318 -0
- package/dist/web/src/visits.js +174 -0
- package/dist/web/style.css +196 -1
- package/docs/agent-api/README.md +1 -1
- package/docs/agent-api/export.md +41 -2
- package/docs/agent-api/history.md +5 -3
- package/docs/agent-api/mcp.md +1 -1
- package/docs/agent-api/reading.md +2 -1
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -1,21 +1,75 @@
|
|
|
1
1
|
# VisualProof
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<p align="center">
|
|
4
|
+
<a href="https://github.com/math-inc/Sphere-Packing-Lean"><img src="docs/images/artwork-sphere-packing.webp" width="19%" alt="Sphere Packing"></a>
|
|
5
|
+
<a href="https://github.com/leanprover-community/flt-regular"><img src="docs/images/artwork-flt-regular.webp" width="19%" alt="FLT Regular"></a>
|
|
6
|
+
<a href="https://github.com/AlexKontorovich/PrimeNumberTheoremAnd"><img src="docs/images/artwork-prime-numbers.webp" width="19%" alt="Prime Numbers"></a>
|
|
7
|
+
<a href="https://github.com/openai/NavierStokesAndEuler"><img src="docs/images/artwork-navier-stokes.webp" width="19%" alt="Navier–Stokes"></a>
|
|
8
|
+
<a href="https://github.com/cedar-policy/cedar-spec"><img src="docs/images/artwork-cedar.webp" width="19%" alt="Cedar"></a>
|
|
9
|
+
</p>
|
|
10
|
+
<p align="center"><sub>Five Lean codebases, drawn by <code>visualproof artwork</code>.</sub></p>
|
|
11
|
+
|
|
12
|
+
https://github.com/user-attachments/assets/98e435d6-f493-437d-b342-1833819c0b77
|
|
13
|
+
|
|
14
|
+
<p align="center"><sub>A review of Sphere-Packing-Lean in 74 seconds. The whole tour — four minutes in thirteen chapters, with captions — is in the page under <b>?</b> → Tips, and <a href="https://visualproof-demo.yingte.io/#tips">on the live demo</a>.</sub></p>
|
|
15
|
+
|
|
16
|
+
[](https://visualproof-demo.yingte.io)
|
|
17
|
+
|
|
18
|
+
<p align="center"><b>Live demo: <a href="https://visualproof-demo.yingte.io">https://visualproof-demo.yingte.io</a></b><br><sub>flt-regular in the middle of a review by three people and an AI assistant, read-only</sub></p>
|
|
19
|
+
|
|
20
|
+
## Try it
|
|
21
|
+
|
|
22
|
+
Set up in your Lean codebase with agent prompt:
|
|
23
|
+
```text
|
|
24
|
+
Set up VisualProof (https://github.com/LucianoXu/VisualProof) for my Lean project, and give me the address to open.
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Or have your codebase drawn as a poster:
|
|
28
|
+
```text
|
|
29
|
+
Draw my Lean project as a poster with VisualProof (https://github.com/LucianoXu/VisualProof): pick its main theorem, light up what its statement rests on, and give me the PNG and the SVG.
|
|
30
|
+
```
|
|
31
|
+
What the agent does, step by step: [A poster from the command line](docs/MANUAL.md#a-poster-from-the-command-line).
|
|
32
|
+
|
|
33
|
+
Set up manually:
|
|
34
|
+
```bash
|
|
35
|
+
npm install --global visualproof
|
|
36
|
+
cd my-lean-project && lake build
|
|
37
|
+
visualproof serve .
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
It needs Node, elan and Poppler ([Requirements](#requirements)). On the first visit the page offers
|
|
41
|
+
a short tour of your own project; `?` holds the tips — a film of a review on Sphere-Packing-Lean in
|
|
42
|
+
thirteen scenes, with captions, and a row for each thing it does not show — and every key.
|
|
43
|
+
|
|
44
|
+
## See what a Lean theorem actually rests on
|
|
4
45
|
|
|
5
46
|
Lean checks that a proof is correct. It cannot check that the theorem says what you mean: that the
|
|
6
47
|
definitions in its statement mean what their names suggest. VisualProof shows exactly which
|
|
7
48
|
definitions those are, so that people, and AI agents, can read them, review them together, and
|
|
8
49
|
keep a record of the review.
|
|
9
50
|
|
|
10
|
-
|
|
51
|
+
On [flt-regular](https://github.com/leanprover-community/flt-regular), Fermat's Last Theorem for
|
|
52
|
+
regular primes. Of the project's
|
|
53
|
+
273 declarations, two light up besides the theorem, `IsRegularPrime` and `IsRegularNumber`: they
|
|
54
|
+
are what you need to read to believe what it says. The Mathlib definitions they use light up too,
|
|
55
|
+
trusted and assumed as Mathlib is, unless a review chooses to read them: the walk stops at the
|
|
56
|
+
project's edge.
|
|
57
|
+
|
|
58
|
+
<p align="center">
|
|
59
|
+
<img src="docs/images/tcb-view-theorem.webp" width="32%" alt="flt_regular alone, lit on the board">
|
|
60
|
+
<img src="docs/images/tcb-view-tcb.webp" width="32%" alt="the TCB of flt_regular: IsRegularPrime, IsRegularNumber and the Mathlib definitions they use, lit with the edges between them">
|
|
61
|
+
<img src="docs/images/tcb-view-keys.webp" width="32%" alt="the key declarations of flt_regular, IsRegularPrime and FermatLastTheoremFor, joined by dashed edges">
|
|
62
|
+
</p>
|
|
63
|
+
<p align="center"><sub>The theorem alone · what its statement rests on, its TCB · the few the review marked key, read first.<br>This review no longer trusts <code>Mathlib.NumberTheory</code>, so the definitions it holds that the statement means, <code>FermatLastTheoremFor</code> among them, are read too, and can be key.</sub></p>
|
|
11
64
|
|
|
12
65
|
## What it does
|
|
13
66
|
|
|
14
67
|
- **The declaration graph** of a built Lean project, clustered by namespace or by file, and updated
|
|
15
68
|
live as you rebuild.
|
|
16
|
-
- **The TCB of any theorem**: the definitions its statement rests on, followed through
|
|
17
|
-
instances and notation, and the axioms
|
|
18
|
-
out, since Lean has checked it
|
|
69
|
+
- **The TCB of any theorem**: the project's definitions its statement rests on, followed through
|
|
70
|
+
their bodies, instances and notation, and the axioms its statement and proof use. What lies only
|
|
71
|
+
inside proofs is left out, since Lean has checked it; what lies outside the project, Mathlib's
|
|
72
|
+
definitions, is lit but trusted and assumed.
|
|
19
73
|
- **A review together**: approve or comment on each declaration, mark targets and their key
|
|
20
74
|
declarations, leave notes, link papers to declarations, and see what changed since an opinion was
|
|
21
75
|
given. Everyone on the page sees it live.
|
|
@@ -24,6 +78,9 @@ keep a record of the review.
|
|
|
24
78
|
- **History**: every build is kept, and a past board can be browsed.
|
|
25
79
|
- **A printed document** of what a view holds: definitions in full, proofs left out, typeset with
|
|
26
80
|
XeLaTeX.
|
|
81
|
+
- **A picture of the board**, PNG or SVG up to poster size: from the page, from an agent's link, or
|
|
82
|
+
without a browser (`visualproof artwork <project> --recipe recipe.json`,
|
|
83
|
+
[step by step](docs/MANUAL.md#a-poster-from-the-command-line)).
|
|
27
84
|
|
|
28
85
|
## Requirements
|
|
29
86
|
|
|
@@ -36,28 +93,6 @@ keep a record of the review.
|
|
|
36
93
|
The project must have been built with `lake build`: VisualProof only reads what the build left,
|
|
37
94
|
and never builds it.
|
|
38
95
|
|
|
39
|
-
## Try it
|
|
40
|
-
|
|
41
|
-
VisualProof is not on npm yet: install its `visualproof` command from a checkout, which packs it
|
|
42
|
-
as npm would. Here it is on [flt-regular](https://github.com/leanprover-community/flt-regular),
|
|
43
|
-
Fermat's Last Theorem for regular primes, built on Mathlib:
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
git clone https://github.com/LucianoXu/VisualProof
|
|
47
|
-
(cd VisualProof && npm install && npm pack && npm install --global ./visualproof-*.tgz)
|
|
48
|
-
|
|
49
|
-
git clone https://github.com/leanprover-community/flt-regular
|
|
50
|
-
(cd flt-regular && git checkout bd81b78ba6 && lake exe cache get && lake build)
|
|
51
|
-
|
|
52
|
-
visualproof doctor flt-regular # what is missing, if anything, and what to do
|
|
53
|
-
visualproof serve flt-regular
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
Open http://127.0.0.1:4173/. Choose the *Rests on* tool (`2`), find `flt_regular` with the search
|
|
57
|
-
(`/`), and click it on the board. Of the project's 297 declarations, two light up besides the
|
|
58
|
-
theorem: `IsRegularPrime` and `IsRegularNumber`. With the Mathlib definitions they use, they are
|
|
59
|
-
what you need to read to believe what the theorem says.
|
|
60
|
-
|
|
61
96
|
## Where it keeps things
|
|
62
97
|
|
|
63
98
|
It writes nothing into the project, and nothing into its own checkout. It keeps everything in two
|
|
@@ -68,8 +103,10 @@ places:
|
|
|
68
103
|
`~/.local/share/visualproof/sites/<project>-<hash>/` (on macOS, under
|
|
69
104
|
`~/Library/Application Support/visualproof/`). It cannot be derived again and holds secrets, so
|
|
70
105
|
back it up and keep it out of git.
|
|
71
|
-
- **The cache** (`--cache <dir>`) holds what a rebuild makes again
|
|
72
|
-
|
|
106
|
+
- **The cache** (`--cache <dir>`) holds what a rebuild makes again, and the patch releases a server
|
|
107
|
+
took (`versions/`, with `updates.json`, the last check: code the server runs, so the cache is the
|
|
108
|
+
server's user's alone). By default it is `~/.cache/visualproof/` (on macOS,
|
|
109
|
+
`~/Library/Caches/visualproof/`).
|
|
73
110
|
|
|
74
111
|
## Reviewing with others
|
|
75
112
|
|
|
@@ -85,10 +122,26 @@ project with a read-only link (nothing changes, nobody sees the reader), or give
|
|
|
85
122
|
token and a prompt. To put a project online for anyone, read-only, add `--public`. The server
|
|
86
123
|
speaks plain HTTP: beyond a trusted network, put a TLS proxy in front. [SECURITY.md](SECURITY.md) says what the server trusts and what it exposes.
|
|
87
124
|
|
|
125
|
+
## Updating
|
|
126
|
+
|
|
127
|
+
A server keeps itself up to date with patch releases (`--updates auto`, the default): it asks npm
|
|
128
|
+
once a day and takes a newer release of the same minor version, 0.4.1 after 0.4.0, at a quiet
|
|
129
|
+
moment (nobody on a page and nothing running, a day later at the latest); the pages left open
|
|
130
|
+
reload where they were. A newer minor version, which may change the command line or the site
|
|
131
|
+
folder, is only announced — in the server's log, by `visualproof doctor` and in the About of the
|
|
132
|
+
page's `?` — with the command it prints to install it, e.g.
|
|
133
|
+
`npm install --global visualproof@0.5.0`; once it is installed, the server restarts into it by
|
|
134
|
+
itself within ten minutes. `--updates notify` announces patch releases too, and `--updates off`
|
|
135
|
+
never asks npm. 0.3.0 has no updater: upgrade it to 0.4.0 by hand
|
|
136
|
+
([the manual](docs/MANUAL.md#updates)).
|
|
137
|
+
|
|
88
138
|
## Documentation
|
|
89
139
|
|
|
90
|
-
-
|
|
91
|
-
|
|
140
|
+
- **In the page**: the tour, offered on the first visit, and the tips under `?`: a film of a review
|
|
141
|
+
in thirteen scenes, each with a few words, and a row for the rest. They are the documentation to
|
|
142
|
+
start with.
|
|
143
|
+
- [The manual](docs/MANUAL.md): how to start, the concepts, then every part of the page, the review,
|
|
144
|
+
views, history, the printed document, collaboration, and how the TCB is computed.
|
|
92
145
|
- [The agents' API](docs/agent-api/README.md), which the server also serves to agents, topic by topic.
|
|
93
146
|
- [SPEC/](SPEC/): the specification, and the design decisions behind each part.
|
|
94
147
|
- [CONTRIBUTING.md](CONTRIBUTING.md), for working on VisualProof itself.
|
|
@@ -96,5 +149,7 @@ speaks plain HTTP: beyond a trusted network, put a TLS proxy in front. [SECURITY
|
|
|
96
149
|
## License and citation
|
|
97
150
|
|
|
98
151
|
VisualProof is licensed under Apache-2.0 ([LICENSE](LICENSE)). The fonts in `src/assets/fonts/`
|
|
99
|
-
are JuliaMono
|
|
100
|
-
|
|
152
|
+
are JuliaMono; those in `src/assets/webfonts/`, which artworks are drawn in, are Source Sans 3,
|
|
153
|
+
Source Serif 4, Jost, Noto Sans and Noto Sans Math. All are under the SIL Open Font License, whose
|
|
154
|
+
text is beside them. If you use VisualProof in your work, please cite it
|
|
155
|
+
([CITATION.cff](CITATION.cff)).
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
{
|
|
2
|
+
"film": {
|
|
3
|
+
"file": "tour-d98aa9f30925.mp4",
|
|
4
|
+
"sha256": "d98aa9f309254c0591ebd3bde6107750f4e1881c3fdd12d3824631daec0ce940",
|
|
5
|
+
"size": 53705683,
|
|
6
|
+
"width": 2560,
|
|
7
|
+
"height": 1600,
|
|
8
|
+
"duration": 238.96666666666667
|
|
9
|
+
},
|
|
10
|
+
"chapters": [
|
|
11
|
+
{
|
|
12
|
+
"id": "target",
|
|
13
|
+
"start": 0,
|
|
14
|
+
"end": 19.466666666666665
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "view",
|
|
18
|
+
"start": 19.466666666666665,
|
|
19
|
+
"end": 31.833333333333332
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "arrange",
|
|
23
|
+
"start": 31.833333333333332,
|
|
24
|
+
"end": 53.666666666666664
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "source",
|
|
28
|
+
"start": 53.666666666666664,
|
|
29
|
+
"end": 66.06666666666666
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "keys",
|
|
33
|
+
"start": 66.06666666666666,
|
|
34
|
+
"end": 92.8
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "checks",
|
|
38
|
+
"start": 92.8,
|
|
39
|
+
"end": 111.3
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "review",
|
|
43
|
+
"start": 111.3,
|
|
44
|
+
"end": 129.73333333333332
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "project",
|
|
48
|
+
"start": 129.73333333333332,
|
|
49
|
+
"end": 138.66666666666666
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "share",
|
|
53
|
+
"start": 138.66666666666666,
|
|
54
|
+
"end": 152
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "agent",
|
|
58
|
+
"start": 152,
|
|
59
|
+
"end": 171.33333333333334
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "library",
|
|
63
|
+
"start": 171.33333333333334,
|
|
64
|
+
"end": 199.73333333333332
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "export",
|
|
68
|
+
"start": 199.73333333333332,
|
|
69
|
+
"end": 219.23333333333332
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "artwork",
|
|
73
|
+
"start": 219.23333333333332,
|
|
74
|
+
"end": 238.96666666666667
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"captions": [
|
|
78
|
+
{
|
|
79
|
+
"start": 4.1,
|
|
80
|
+
"end": 7.9,
|
|
81
|
+
"text": "Search the theorem to review: press /."
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"start": 7.9,
|
|
85
|
+
"end": 11.9,
|
|
86
|
+
"text": "There are two MainTheorems: take the one in Dim24."
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"start": 11.9,
|
|
90
|
+
"end": 15.866666666666667,
|
|
91
|
+
"text": "Mark it as the target of the review."
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"start": 15.866666666666667,
|
|
95
|
+
"end": 19.466666666666665,
|
|
96
|
+
"text": "The side panel lists the targets, with their progress."
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"start": 19.466666666666665,
|
|
100
|
+
"end": 25.333333333333332,
|
|
101
|
+
"text": "Rests on · Uses: everything the theorem uses."
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"start": 25.333333333333332,
|
|
105
|
+
"end": 28.833333333333332,
|
|
106
|
+
"text": "Zoom in: a view of just that, in a tab of its own."
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"start": 28.833333333333332,
|
|
110
|
+
"end": 31.833333333333332,
|
|
111
|
+
"text": "The view is laid out for what it holds alone."
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"start": 34.13333333333333,
|
|
115
|
+
"end": 39.5,
|
|
116
|
+
"text": "Drag a cluster with Ctrl held: it stays there, for everyone."
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"start": 39.5,
|
|
120
|
+
"end": 46.53333333333333,
|
|
121
|
+
"text": "Or let the lock go with l, and drag without Ctrl."
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"start": 46.53333333333333,
|
|
125
|
+
"end": 53.666666666666664,
|
|
126
|
+
"text": "Double-click a circle to fold it to a point; again to open."
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"start": 53.666666666666664,
|
|
130
|
+
"end": 58.7,
|
|
131
|
+
"text": "Space opens the source of what is selected."
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"start": 58.7,
|
|
135
|
+
"end": 62.5,
|
|
136
|
+
"text": "Rest on a name: Lean says what it is."
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"start": 62.5,
|
|
140
|
+
"end": 66.06666666666666,
|
|
141
|
+
"text": "Click it to go there: its source, its panel."
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"start": 66.06666666666666,
|
|
145
|
+
"end": 69.13333333333334,
|
|
146
|
+
"text": "Keys: the definitions that carry what it says."
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"start": 69.13333333333334,
|
|
150
|
+
"end": 84.53333333333333,
|
|
151
|
+
"text": "Mark each as a key with the mouse, in its panel."
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"start": 84.53333333333333,
|
|
155
|
+
"end": 92.8,
|
|
156
|
+
"text": "Rests on · Keys lights them, joined to the target."
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"start": 93.4,
|
|
160
|
+
"end": 96.1,
|
|
161
|
+
"text": "Selection: the statement alone."
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"start": 96.1,
|
|
165
|
+
"end": 98.9,
|
|
166
|
+
"text": "Least effort — you trust every name in it."
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"start": 98.9,
|
|
170
|
+
"end": 101.36666666666666,
|
|
171
|
+
"text": "Keys: the few that carry the meaning."
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"start": 101.36666666666666,
|
|
175
|
+
"end": 103.43333333333334,
|
|
176
|
+
"text": "Little effort, good confidence."
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"start": 103.43333333333334,
|
|
180
|
+
"end": 105.63333333333334,
|
|
181
|
+
"text": "TCB: everything it rests on."
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"start": 105.63333333333334,
|
|
185
|
+
"end": 107.63333333333334,
|
|
186
|
+
"text": "Most effort, most confidence."
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"start": 107.63333333333334,
|
|
190
|
+
"end": 111.3,
|
|
191
|
+
"text": "Choose how far to read: the counts say what each costs."
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"start": 111.3,
|
|
195
|
+
"end": 116.6,
|
|
196
|
+
"text": "Read a definition, then say what you think of it."
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"start": 116.6,
|
|
200
|
+
"end": 125.96666666666667,
|
|
201
|
+
"text": "Approve it, with why: the comment stays with it."
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"start": 125.96666666666667,
|
|
205
|
+
"end": 129.73333333333332,
|
|
206
|
+
"text": "The target's progress counts your approval."
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"start": 129.73333333333332,
|
|
210
|
+
"end": 135.03333333333333,
|
|
211
|
+
"text": "The Project tab: the whole codebase."
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"start": 135.03333333333333,
|
|
215
|
+
"end": 138.66666666666666,
|
|
216
|
+
"text": "Every board shows the same review."
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"start": 138.66666666666666,
|
|
220
|
+
"end": 145.56666666666666,
|
|
221
|
+
"text": "Share → AI agent: a token, and a prompt for it."
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"start": 145.56666666666666,
|
|
225
|
+
"end": 148.76666666666668,
|
|
226
|
+
"text": "Paste the prompt into your agent: it joins here."
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"start": 148.76666666666668,
|
|
230
|
+
"end": 152,
|
|
231
|
+
"text": "The token is the agent's own: revoke it here."
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"start": 152.7,
|
|
235
|
+
"end": 160.13333333333333,
|
|
236
|
+
"text": "Click the agent to follow it, and ask."
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"start": 160.13333333333333,
|
|
240
|
+
"end": 165.83333333333334,
|
|
241
|
+
"text": "It reads the code, and takes your view along."
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"start": 165.83333333333334,
|
|
245
|
+
"end": 171.33333333333334,
|
|
246
|
+
"text": "Its answer names what it explains."
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"start": 172.13333333333333,
|
|
250
|
+
"end": 178.23333333333332,
|
|
251
|
+
"text": "Library: add a paper about the code."
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"start": 178.23333333333332,
|
|
255
|
+
"end": 191.53333333333333,
|
|
256
|
+
"text": "Link it to the theorem, at its page."
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"start": 191.53333333333333,
|
|
260
|
+
"end": 199.73333333333332,
|
|
261
|
+
"text": "Pin a note on the target: where to start."
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"start": 199.73333333333332,
|
|
265
|
+
"end": 207.66666666666666,
|
|
266
|
+
"text": "Export prints a view: here, the target's TCB."
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"start": 207.66666666666666,
|
|
270
|
+
"end": 212.26666666666668,
|
|
271
|
+
"text": "Drag a section to change the document's order."
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
"start": 212.26666666666668,
|
|
275
|
+
"end": 219.23333333333332,
|
|
276
|
+
"text": "Typeset: the PDF follows the order you set."
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"start": 219.23333333333332,
|
|
280
|
+
"end": 224,
|
|
281
|
+
"text": "Artwork: the board as a picture to keep."
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"start": 224,
|
|
285
|
+
"end": 235.36666666666667,
|
|
286
|
+
"text": "Frame it, then save it as PNG or SVG."
|
|
287
|
+
}
|
|
288
|
+
]
|
|
289
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
Noto Sans: Copyright 2015 Google LLC. All Rights Reserved.
|
|
2
|
+
Noto Sans Math: Copyright 2018 Google LLC. All Rights Reserved.
|
|
3
|
+
(The files ttf/noto-sans.ttf and ttf/noto-sans-math.ttf hold a subset of each.)
|
|
4
|
+
|
|
5
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
6
|
+
This license is copied below, and is also available with a FAQ at:
|
|
7
|
+
http://scripts.sil.org/OFL
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
12
|
+
-----------------------------------------------------------
|
|
13
|
+
|
|
14
|
+
PREAMBLE
|
|
15
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
16
|
+
development of collaborative font projects, to support the font creation
|
|
17
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
18
|
+
open framework in which fonts may be shared and improved in partnership
|
|
19
|
+
with others.
|
|
20
|
+
|
|
21
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
22
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
23
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
24
|
+
redistributed and/or sold with any software provided that any reserved
|
|
25
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
26
|
+
however, cannot be released under any other type of license. The
|
|
27
|
+
requirement for fonts to remain under this license does not apply
|
|
28
|
+
to any document created using the fonts or their derivatives.
|
|
29
|
+
|
|
30
|
+
DEFINITIONS
|
|
31
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
32
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
33
|
+
include source files, build scripts and documentation.
|
|
34
|
+
|
|
35
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
36
|
+
copyright statement(s).
|
|
37
|
+
|
|
38
|
+
"Original Version" refers to the collection of Font Software components as
|
|
39
|
+
distributed by the Copyright Holder(s).
|
|
40
|
+
|
|
41
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
42
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
43
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
44
|
+
new environment.
|
|
45
|
+
|
|
46
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
47
|
+
writer or other person who contributed to the Font Software.
|
|
48
|
+
|
|
49
|
+
PERMISSION & CONDITIONS
|
|
50
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
51
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
52
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
53
|
+
Software, subject to the following conditions:
|
|
54
|
+
|
|
55
|
+
1) Neither the Font Software nor any of its individual components,
|
|
56
|
+
in Original or Modified Versions, may be sold by itself.
|
|
57
|
+
|
|
58
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
59
|
+
redistributed and/or sold with any software, provided that each copy
|
|
60
|
+
contains the above copyright notice and this license. These can be
|
|
61
|
+
included either as stand-alone text files, human-readable headers or
|
|
62
|
+
in the appropriate machine-readable metadata fields within text or
|
|
63
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
64
|
+
|
|
65
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
66
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
67
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
68
|
+
presented to the users.
|
|
69
|
+
|
|
70
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
71
|
+
Software shall not be used to promote, endorse or advertise any
|
|
72
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
73
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
74
|
+
permission.
|
|
75
|
+
|
|
76
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
77
|
+
must be distributed entirely under this license, and must not be
|
|
78
|
+
distributed under any other license. The requirement for fonts to
|
|
79
|
+
remain under this license does not apply to any document created
|
|
80
|
+
using the Font Software.
|
|
81
|
+
|
|
82
|
+
TERMINATION
|
|
83
|
+
This license becomes null and void if any of the above conditions are
|
|
84
|
+
not met.
|
|
85
|
+
|
|
86
|
+
DISCLAIMER
|
|
87
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
88
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
89
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
90
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
91
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
92
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
93
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
94
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
95
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|