rocq/theories/HelloModule.v
GNU Hello as the model sees it: one checked module, linked from the objects nanofil compiles for nanofil − hello − O (Campaign 7, docs/logic.md).
The fixture hello_term is the link rocq/link.pl makes of the real build's checked terms (nix/hello-fixture.nix regenerates it): each object's local items renamed OBJECT#NAME, the exported items shared, and only the items a run from main can name kept, 32 functions and their data. This file reads it as a module (hello_module), checks that the validator accepts it (hello_valid), names the functions a proof is about (hello_fn) and lists the calls the module leaves to libc (hello_externals): the contracts the proof needs.
The module
The linked module (hello_term).
The fixture decodes to hello_module.
Proof 2 steps Qed
The validator accepts the linked module: every function of the core subset, every name unique (valid). Each object was valid alone; this is the link.
Explore proof 2 tactics
Initial goal
vm_compute
reflexivity
No remaining goals.
Qed
✓ Proof checked and closed by Rocq.
Source script
The function of the module named n, or an empty one.
What it leaves to libc
The names the function f calls directly.
The names some function of md calls that md does not define, each once, in order of first call.
The 33 libc functions Hello calls: the contracts its proof needs. They are the plain entries, not the fortified ones (printf, not __printf_chk), and zmemmove is Fil-C's. The ones only quotearg calls (iswprint, mbrtoc32, __ctype_b_loc, __ctype_get_mb_cur_max, mbsinit, zmemmove, realloc) are reached only through close_stdout's diagnostic for a named file, which Hello never names.
They are exactly the calls the module leaves undefined.
Explore proof 2 tactics
Initial goal
vm_compute
reflexivity
No remaining goals.
Qed
✓ Proof checked and closed by Rocq.