Conversation
That's less flexible, since if we add a new compiler pass, we must update certifier in the same PR. How about allowing each AST in |
|
I added hints in #7575, which you should incorporate into your approach. You may want to wait till my PR is merged. |
That's intentional because the existing structure allows certain problems, like the compiler forgetting to dump a pass, dumping passes incorrectly (e.g. We're basically proving We could alternatively do equality checking on outputs/inputs in the current trace, but it would slow down the certifier unnecessarily. The dumping mechanism is a trusted component, so I think they should be as correct-by-construction as possible.
What about an additional constructor |
Sounds reasonable. |
90cc934 to
fea274c
Compare
|
@zliu41 @ana-pantilie I've rebased it on master, and incorporated hints. Also added This also speeds up the certifier-bench up to 30% on my machine, possibly due to ignoring the duplicate ASTs in the dump: On This branch: |
f2d585a to
7801511
Compare
|
Rebased, the report now also prints a question mark instead of a check mark for passes that have not been implemented yet. |
| -- it should print something like "certifier unavailable" rather than "✅". | ||
| "Pass " ++ showℕ n ++ ": " ++ showTag tag ++ " ✅" ++ | ||
| "Pass " ++ showℕ n ++ ": " ++ showTag tag | ||
| ++ (if hasRelation tag then " ✅" else " ❓ (certifier unavailable)") ++ |
There was a problem hiding this comment.
Nit: I wouldn't use a red question mark since it's too eye-catching. Something lower profile like "⚠" is better.
This simplifies the setup of
VerifiedCompilation.lagdaand will help with future certifier changes.RelationOfandcertifyfunctions it is now clear how passes are mapped to their corresponding translation relations and decision procedures/checkersMatchOrCEtoDecidableCEto be consistent with naming in standard libraryCheckable,CertifiablesynonymsTrace Atype, which represents the compiler trace without the duplicate terms (it converts the current dump with duplicates by using the output of previous passes as input of the next, seetoTrace). We should probably dump this newTracestructure from the Haskell side.VerifiedCompilation.NotImplemented, a trivial translation relation which can be used as placeholder for unfinished translation relationsunknown : SimplifierTagto represent passes that we don't know of in the certifier