feat: make structure parent projections nameable#7100
Merged
kmill merged 1 commit intoleanprover:masterfrom Feb 18, 2025
Merged
feat: make structure parent projections nameable#7100kmill merged 1 commit intoleanprover:masterfrom
kmill merged 1 commit intoleanprover:masterfrom
Conversation
This PR modifies the `structure` syntax so that parents can be named, like in ``` structure S extends toParent : P ``` The syntax is also modified so that the resultant type comes *before* the `extends` clause (**breaking change**). This is necessary to prevent a parsing ambiguity. Implements RFC leanprover#7099. Will need followup PRs for cleanup after a stage0 update.
ghost
pushed a commit
to leanprover-community/batteries
that referenced
this pull request
Feb 16, 2025
ghost
pushed a commit
to leanprover-community/mathlib4
that referenced
this pull request
Feb 16, 2025
|
Mathlib CI status (docs):
|
kim-em
added a commit
to leanprover-community/mathlib4
that referenced
this pull request
Feb 21, 2025
* lake update * fixes * fix namespace * fix test * Merge master into nightly-testing * chore: bump to nightly-2025-02-06 * copy test from master * Merge master into nightly-testing * chore: bump to nightly-2025-02-07 * chore: bump to nightly-2025-02-08 * update * chore: bump to nightly-2025-02-09 * didn't commit * fix * fix test * Update lean-toolchain for testing leanprover/lean4#7013 * chore: bump to nightly-2025-02-10 * fixes for leanprover/lean4#7013 * fixes for leanprover/lean4#7013 * Trigger CI for leanprover/lean4#7013 * chore: bump to nightly-2025-02-11 * update * Update lean-toolchain for testing leanprover/lean4#7046 * Trigger CI for leanprover/lean4#7046 * Switch from mk to ofBitVec * chore: bump to nightly-2025-02-12 * Update lean-toolchain for testing leanprover/lean4#7050 * lake update * lake update * fixes * another maxheartbeats * fix tests * Update lean-toolchain for testing leanprover/lean4#7059 * fix * chore: bump to nightly-2025-02-13 * lake update * fixes * lake exe shake --fix * Update lean-toolchain for testing leanprover/lean4#7069 * Trigger CI for leanprover/lean4#7069 * chore: adaptations for nightly-2025-02-13 * remove upstreamed * Trigger CI for leanprover/lean4#7059 * Trigger CI for leanprover/lean4#7059 * chore: bump to nightly-2025-02-14 * Trigger CI for leanprover/lean4#7069 * Trigger CI for leanprover/lean4#7069 * Update lean-toolchain for testing leanprover/lean4#7082 * quite a bit more to go * lake update * fix merge * fix * adapt * adapt * Trigger CI for leanprover/lean4#7082 * Trigger CI for leanprover/lean4#7069 * lake update * lake update * fixes * fixes * chore: bump to nightly-2025-02-15 * Trigger CI for leanprover/lean4#7069 * Update lean-toolchain for testing leanprover/lean4#7100 * chore: bump to nightly-2025-02-16 * fixes * fixes 2 * fixes 3 * built mathlib * Trigger CI for leanprover/lean4#7069 * fix simps test * fixes for leanprover/lean4#7059 * fix: cache lib dir (adaption for lean4#7001) (#21967) * fixes * fixes for leanprover/lean4#7059 * restore broken files * chore: bump to nightly-2025-02-17 * lake update * lake update * oops * comment out broken files * longFile * oops, one more * . * searchPath * . * Update lean-toolchain for testing leanprover/lean4#7103 * fixes * update manifest * fix * fix * Trigger CI for leanprover/lean4#7103 * chore: bump to nightly-2025-02-18 * lake update * deprecations * restore computability files broken by defeq yesterday * fixes * chore: adaptations for nightly-2025-02-18 * chore: bump to nightly-2025-02-19 * lake update * fixes * fix merge * chore: adaptations for nightly-2025-02-19 * Merge master into nightly-testing * chore: bump to nightly-2025-02-20 * fix merge * chore: adaptations for nightly-2025-02-20 * minor reverts * more * deprecation * another * more * restore check-yaml * . * . --------- Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Johan Commelin <johan@commelin.net> Co-authored-by: Markus Himmel <markus@lean-fro.org> Co-authored-by: Joachim Breitner <mail@joachim-breitner.de> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Mac Malone <mac@lean-fro.org>
kmill
added a commit
to kmill/lean4
that referenced
this pull request
Feb 23, 2025
This PR does some stage0 cleanup after leanprover#7100, and enables a warning when the old `structure S extends P : Type` syntax is used. It also updates the library to put resulting types in the correct place (`structure S : Type extends P`).
github-merge-queue bot
pushed a commit
that referenced
this pull request
Feb 23, 2025
This PR does some stage0 cleanup after #7100, and enables a warning when the old `structure S extends P : Type` syntax is used. It also updates the library to put resulting types in the new correct place (`structure S : Type extends P`). The `structure` elaborator also has some additional docstrings, and `StructFieldKind.fromParent` is renamed to `StructFieldKind.fromSubobject`.
luisacicolini
pushed a commit
to opencompl/lean4
that referenced
this pull request
Feb 24, 2025
This PR modifies the `structure` syntax so that parents can be named, like in ```lean structure S extends toParent : P ``` **Breaking change:** The syntax is also modified so that the resultant type comes *before* the `extends` clause, for example `structure S : Prop extends P`. This is necessary to prevent a parsing ambiguity, but also this is the natural place for the resultant type. Implements RFC leanprover#7099. Will need followup PRs for cleanup after a stage0 update.
luisacicolini
pushed a commit
to opencompl/lean4
that referenced
this pull request
Feb 24, 2025
This PR does some stage0 cleanup after leanprover#7100, and enables a warning when the old `structure S extends P : Type` syntax is used. It also updates the library to put resulting types in the new correct place (`structure S : Type extends P`). The `structure` elaborator also has some additional docstrings, and `StructFieldKind.fromParent` is renamed to `StructFieldKind.fromSubobject`.
luisacicolini
pushed a commit
to opencompl/lean4
that referenced
this pull request
Feb 25, 2025
This PR modifies the `structure` syntax so that parents can be named, like in ```lean structure S extends toParent : P ``` **Breaking change:** The syntax is also modified so that the resultant type comes *before* the `extends` clause, for example `structure S : Prop extends P`. This is necessary to prevent a parsing ambiguity, but also this is the natural place for the resultant type. Implements RFC leanprover#7099. Will need followup PRs for cleanup after a stage0 update.
luisacicolini
pushed a commit
to opencompl/lean4
that referenced
this pull request
Feb 25, 2025
This PR does some stage0 cleanup after leanprover#7100, and enables a warning when the old `structure S extends P : Type` syntax is used. It also updates the library to put resulting types in the new correct place (`structure S : Type extends P`). The `structure` elaborator also has some additional docstrings, and `StructFieldKind.fromParent` is renamed to `StructFieldKind.fromSubobject`.
kim-em
added a commit
to leanprover-community/mathlib4
that referenced
this pull request
Mar 10, 2025
* chore: adaptations for nightly-2025-02-20 * Merge master into nightly-testing * minor reverts * more * deprecation * another * more * restore check-yaml * . * . * chore: adaptations for nightly-2025-02-20 (#22144) * lake update * fixes * fix namespace * fix test * Merge master into nightly-testing * chore: bump to nightly-2025-02-06 * copy test from master * Merge master into nightly-testing * chore: bump to nightly-2025-02-07 * chore: bump to nightly-2025-02-08 * update * chore: bump to nightly-2025-02-09 * didn't commit * fix * fix test * Update lean-toolchain for testing leanprover/lean4#7013 * chore: bump to nightly-2025-02-10 * fixes for leanprover/lean4#7013 * fixes for leanprover/lean4#7013 * Trigger CI for leanprover/lean4#7013 * chore: bump to nightly-2025-02-11 * update * Update lean-toolchain for testing leanprover/lean4#7046 * Trigger CI for leanprover/lean4#7046 * Switch from mk to ofBitVec * chore: bump to nightly-2025-02-12 * Update lean-toolchain for testing leanprover/lean4#7050 * lake update * lake update * fixes * another maxheartbeats * fix tests * Update lean-toolchain for testing leanprover/lean4#7059 * fix * chore: bump to nightly-2025-02-13 * lake update * fixes * lake exe shake --fix * Update lean-toolchain for testing leanprover/lean4#7069 * Trigger CI for leanprover/lean4#7069 * chore: adaptations for nightly-2025-02-13 * remove upstreamed * Trigger CI for leanprover/lean4#7059 * Trigger CI for leanprover/lean4#7059 * chore: bump to nightly-2025-02-14 * Trigger CI for leanprover/lean4#7069 * Trigger CI for leanprover/lean4#7069 * Update lean-toolchain for testing leanprover/lean4#7082 * quite a bit more to go * lake update * fix merge * fix * adapt * adapt * Trigger CI for leanprover/lean4#7082 * Trigger CI for leanprover/lean4#7069 * lake update * lake update * fixes * fixes * chore: bump to nightly-2025-02-15 * Trigger CI for leanprover/lean4#7069 * Update lean-toolchain for testing leanprover/lean4#7100 * chore: bump to nightly-2025-02-16 * fixes * fixes 2 * fixes 3 * built mathlib * Trigger CI for leanprover/lean4#7069 * fix simps test * fixes for leanprover/lean4#7059 * fix: cache lib dir (adaption for lean4#7001) (#21967) * fixes * fixes for leanprover/lean4#7059 * restore broken files * chore: bump to nightly-2025-02-17 * lake update * lake update * oops * comment out broken files * longFile * oops, one more * . * searchPath * . * Update lean-toolchain for testing leanprover/lean4#7103 * fixes * update manifest * fix * fix * Trigger CI for leanprover/lean4#7103 * chore: bump to nightly-2025-02-18 * lake update * deprecations * restore computability files broken by defeq yesterday * fixes * chore: adaptations for nightly-2025-02-18 * chore: bump to nightly-2025-02-19 * lake update * fixes * fix merge * chore: adaptations for nightly-2025-02-19 * Merge master into nightly-testing * chore: bump to nightly-2025-02-20 * fix merge * chore: adaptations for nightly-2025-02-20 * minor reverts * more * deprecation * another * more * restore check-yaml * . * . --------- Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Johan Commelin <johan@commelin.net> Co-authored-by: Markus Himmel <markus@lean-fro.org> Co-authored-by: Joachim Breitner <mail@joachim-breitner.de> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Mac Malone <mac@lean-fro.org> * chore: bump to nightly-2025-02-21 * chore: bump to nightly-2025-02-22 * chore(Tactic/DeriveTraversable): adapt to `auxDeclToFullName` relocation * Update lean-toolchain for testing leanprover/lean4#7196 * fixes * update batteries * update proofwidgets * Trigger CI for leanprover/lean4#7166 * Trigger CI for leanprover/lean4#7166 * chore: bump to nightly-2025-02-24 * lake update * fixes * deprecations * . * archive * fix tests * fix tests * chore: adaptations for nightly-2025-02-24 (#22266) Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> * chore: bump to nightly-2025-02-25 * Trigger CI for leanprover/lean4#7166 * Trigger CI for leanprover/lean4#7166 * Trigger CI for leanprover/lean4#7166 * Trigger CI for leanprover/lean4#7166 * Adapt * Trigger CI for leanprover/lean4#7166 * revert Mathlib/Data/Multiset/Basic, and refix * Merge master into nightly-testing * chore: bump to nightly-2025-02-26 * remove upstreamed * fix * fix tests * Apply suggestions from code review Co-authored-by: Kevin Buzzard <k.buzzard@imperial.ac.uk> * chore: adaptations for nightly-2025-02-26 (#22347) Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> * chore: bump to nightly-2025-02-27 * Trigger CI for leanprover/lean4#7166 * Update lean-toolchain for testing leanprover/lean4#7259 * fix * I would not have guessed that this lemma already exists! * chore: bump to nightly-2025-02-28 * fix * chore: bump to nightly-2025-03-01 * chore: bump to nightly-2025-03-02 * Merge master into nightly-testing * deprecation * Trigger CI for leanprover/lean4#7166 * deprecation * chore: adaptations for nightly-2025-03-02 (#22460) Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Markus Himmel <markus@lean-fro.org> * chore: adaptations for nightly-2025-03-02 * chore: bump to nightly-2025-03-03 * remove upstreamed * chore: adaptations for nightly-2025-03-03 * Trigger CI for leanprover/lean4#7166 * chore: adaptations for nightly-2025-03-03 (#22493) Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Johan Commelin <johan@commelin.net> * bump toolchain and dependencies * Trigger CI for leanprover/lean4#7166 * chore: bump to nightly-2025-03-04 * lake update * Trigger CI for leanprover/lean4#7166 * chore: bump to nightly-2025-03-05 * fix? * add adaptation notes to revert _root_ * Update lean-toolchain for testing leanprover/lean4#7358 * chore: bump to nightly-2025-03-06 * chore: adaptations for nightly-2025-03-06 * chore: adaptations for nightly-2025-03-06 * Merge master into nightly-testing * chore: bump to nightly-2025-03-06 * Update lean-toolchain for testing leanprover/lean4#7261 * fixes for leanprover/lean4#7358 * fixes for leanprover/lean4#7358 * fixes for leanprover/lean4#7358 * Trigger CI for leanprover/lean4#7358 * Trigger CI for leanprover/lean4#7261 * fix Mathlib.Linter.getNamesFrom * chore: adaptations for nightly-2025-03-06 * chore: bump to nightly-2025-03-07 * lake update * add_div is protected * Update lean-toolchain for testing leanprover/lean4#7378 * More like that * adapt * Trigger CI for leanprover/lean4#7378 * Fix * fix * chore: bump to nightly-2025-03-08 * lake update * chore: bump to nightly-2025-03-09 * chore(RingTheory/LocalRing/ResidueField/Ideal): increase `simp` prio, analogous to #22215 * process adaptation notes --------- Co-authored-by: Kim Morrison <kim@tqft.net> Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Markus Himmel <markus@lean-fro.org> Co-authored-by: Joachim Breitner <mail@joachim-breitner.de> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Mac Malone <mac@lean-fro.org> Co-authored-by: Joseph Rotella <7482866+jrr6@users.noreply.github.com> Co-authored-by: Kevin Buzzard <k.buzzard@imperial.ac.uk> Co-authored-by: Sebastian Ullrich <sebasti@nullri.ch> Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Jovan Gerbscheid <jovan.gerbscheid@gmail.com>
github-merge-queue bot
pushed a commit
that referenced
this pull request
Mar 22, 2025
… are flat (#7302) This PR changes how fields are elaborated in the `structure`/`class` commands and also makes default values respect the structure resolution order when there is diamond inheritance. Before, the details of subobjects were exposed during elaboration, and in the local context any fields that came from a subobject were defined to be projections of the subobject field. Now, every field is represented as a local variable. All parents (not just subobject parents) are now represented in the local context, and they are now local variables defined to be parent constructors applied to field variables (inverting the previous relationship). Other notes: - The entire collection of parents is processed, and all parent projection names are checked for consistency. Every parent appears in the local context now. - For classes, every parent now contributes an instance, not just the parents represented as subobjects. - Default values are now processed according to the parent resolution order. Default value definition/override auxiliary definitions are stored at `StructName.fieldName._default`, and inherited values are stored at `StructName.fieldName._inherited_default`. Metaprograms no longer need to look at parents when doing calculations on default values. - Default value omission for structure instance notation pretty printing has been updated in consideration of this. - Now the elaborator generates a `_flat_ctor` constructor that will be used for structure instance elaboration. All types in this constructor are put in "field normal form" (projections of parent constructors are reduced, and parent constructors are eta reduced), and all fields with autoParams are annotated as such. This is not meant for users, but it may be useful for metaprogramming. - While elaborating fields, any metavariables whose type is one of the parents is assigned to that parent. The hypothesis is that, for the purpose of elaborating structure fields, parents are fixed: there is only *one* instance of any given parent under consideration. See the `Magma` test for an example of this being necessary. The hypothesis may not be true when there are recursive structures, since different values of the structure might not agree on parent fields. Other notes: - The elaborator has been refactored, and it now uses a monad to keep track of the elaboration state. - This PR was motivation for #7100, since we need to be able to make all parents have consistent projection names when there is diamond inheritance. Still to do: - Handle autoParams like we do default values. Inheritance for these is not correct when there is diamond inheritance. - Avoid splitting apart parents if the overlap is only on proof fields. - Non-subobject parent projections do not have parameter binder kinds that are consistent with other projections (i.e., all implicit by default, no inst implicits). This needs to wait on adjustments to the synthOrder algorithm. - We could elide parents with no fields, letting their projections be constant functions. This causes some trouble for defeq checking however (maybe #2258 would address this).
kmill
added a commit
to kmill/lean4
that referenced
this pull request
Mar 23, 2025
… are flat (leanprover#7302) This PR changes how fields are elaborated in the `structure`/`class` commands and also makes default values respect the structure resolution order when there is diamond inheritance. Before, the details of subobjects were exposed during elaboration, and in the local context any fields that came from a subobject were defined to be projections of the subobject field. Now, every field is represented as a local variable. All parents (not just subobject parents) are now represented in the local context, and they are now local variables defined to be parent constructors applied to field variables (inverting the previous relationship). Other notes: - The entire collection of parents is processed, and all parent projection names are checked for consistency. Every parent appears in the local context now. - For classes, every parent now contributes an instance, not just the parents represented as subobjects. - Default values are now processed according to the parent resolution order. Default value definition/override auxiliary definitions are stored at `StructName.fieldName._default`, and inherited values are stored at `StructName.fieldName._inherited_default`. Metaprograms no longer need to look at parents when doing calculations on default values. - Default value omission for structure instance notation pretty printing has been updated in consideration of this. - Now the elaborator generates a `_flat_ctor` constructor that will be used for structure instance elaboration. All types in this constructor are put in "field normal form" (projections of parent constructors are reduced, and parent constructors are eta reduced), and all fields with autoParams are annotated as such. This is not meant for users, but it may be useful for metaprogramming. - While elaborating fields, any metavariables whose type is one of the parents is assigned to that parent. The hypothesis is that, for the purpose of elaborating structure fields, parents are fixed: there is only *one* instance of any given parent under consideration. See the `Magma` test for an example of this being necessary. The hypothesis may not be true when there are recursive structures, since different values of the structure might not agree on parent fields. Other notes: - The elaborator has been refactored, and it now uses a monad to keep track of the elaboration state. - This PR was motivation for leanprover#7100, since we need to be able to make all parents have consistent projection names when there is diamond inheritance. Still to do: - Handle autoParams like we do default values. Inheritance for these is not correct when there is diamond inheritance. - Avoid splitting apart parents if the overlap is only on proof fields. - Non-subobject parent projections do not have parameter binder kinds that are consistent with other projections (i.e., all implicit by default, no inst implicits). This needs to wait on adjustments to the synthOrder algorithm. - We could elide parents with no fields, letting their projections be constant functions. This causes some trouble for defeq checking however (maybe leanprover#2258 would address this).
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 modifies the
structuresyntax so that parents can be named, like inBreaking change: The syntax is also modified so that the resultant type comes before the
extendsclause, for examplestructure S : Prop extends P. This is necessary to prevent a parsing ambiguity, but also this is the natural place for the resultant type. Implements RFC #7099.Will need followup PRs for cleanup after a stage0 update.