refactor: remove h_mono from PolyTimeComputable.comp#396
Open
JohnEdwardJennings wants to merge 1 commit intoleanprover:mainfrom
Open
refactor: remove h_mono from PolyTimeComputable.comp#396JohnEdwardJennings wants to merge 1 commit intoleanprover:mainfrom
JohnEdwardJennings wants to merge 1 commit intoleanprover:mainfrom
Conversation
Collaborator
|
@BoltonBailey Could you have a first look at this since it was your TODO comment? |
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.
This PR adds proofs autoformalised by @Aristotle-Harmonic.
Co-authored-by: Aristotle (Harmonic) aristotle-harmonic@harmonic.fun
Fixes #378
Summary of changes:
Resolved the TODO on lines 487-488 of
Cslib/Computability/Machines/SingleTapeTuring/Basic.leanwhich asked to remove theh_mono : Monotone hg.time_boundassumption fromPolyTimeComputable.compby developing a function to convert aPolyTimeComputableinto one with a monotone time bound.Changes made:
Added
monotonizeBound— a function that monotonizesf : ℕ → ℕby taking(Finset.range (n+1)).sup' ... f, i.e. the maximum offover{0, ..., n}.Added supporting lemmas:
monotonizeBound_mono: the monotonized bound is monotonele_monotonizeBound: the original function is bounded by the monotonized versionmonotonizeBound_le_of_le: iffis bounded by a monotoneg, the monotonizedfis also bounded bygAdded
TimeComputable.withMonotoneBound— converts aTimeComputableto one with a monotone time bound usingmonotonizeBound.Added
PolyTimeComputable.withMonotoneBound— converts aPolyTimeComputableto one with a monotone time bound, preserving the polynomial bound (using the fact thatPolynomial.eval_monogives monotonicity of polynomial evaluation overℕ).Removed
h_monofromPolyTimeComputable.comp— the composition now internally monotonizeshg's time bound before passing it toTimeComputable.comp, eliminating the need for the caller to supply a monotonicity proof.