Add LawfulScorable scorer laws interface - #46
Draft
heathsanchez wants to merge 1 commit into
Draft
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Draft progress for #45.
This PR adds a proof-carrying
LawfulScorableinterface next to the existing executableScorabletypeclass.What is included:
combineshould not strictly improve the left scoreisBettershould be transitiveemptyshould be a left and right identity forcombineworstshould not beat a real candidatebadnessshould be monotone withisBetterLocal verification:
lake env lean Specimen/Scoring.leanpasseslake buildpassesI kept this as a separate law class rather than modifying
Scorable, so existing scoring strategies remain executable/lightweight and proof-carrying code can request the stronger interface explicitly.Important design note: the issue text says
worstmust be worse than any real schedule. The current instances use finite sentinels such as1000, so a strong global law like “every score beats worst” may not hold for unbounded scores. This draft therefore uses the safer law “worst does not beat a candidate” while leaving open whether the final fix should use bounded laws or a true top sentinel.Next step after feedback: add
LawfulScorableinstances or refine theworstlaw to match the intended branch-and-bound invariant.Refs #45.