-
Notifications
You must be signed in to change notification settings - Fork 444
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Equation lemmas are longer generated by a simple match #2042
Labels
Mathlib4 high prio
Mathlib4 high priority issue
Comments
eric-wieser
changed the title
Equation lemmas no longer generated by simple match
Equation lemmas are longer generated by a simple match
Jan 18, 2023
It seems that match statements are a distraction here, as @[simp]
def foo (a : Nat) : Nat := 2 * a results in |
1 task
eric-wieser
added a commit
to leanprover-community/mathlib3
that referenced
this issue
Mar 29, 2023
This adjust definitions such that everything is well-behaved in the case that things are unfolded. For each such definition, a lemma is added that replaces the equation lemma. While this just adds `_apply` noise in Lean 3, it is necessary when porting to Lean 4 as there the equation lemma is not generated in the way that we want.
bors bot
pushed a commit
to leanprover-community/mathlib3
that referenced
this issue
Mar 30, 2023
This adjust definitions such that everything is well-behaved in the case that things are unfolded. For each such definition, a lemma is added that replaces the equation lemma. Before this PR, we used ```lean def transpose (M : matrix m n α) : matrix n m α | x y := M y x ``` which has the nice behavior (in Lean 3 only) of `rw transpose` only unfolding the definition when it is of the applied form `transpose M i j`. If `dunfold transpose` is used then it becomes the undesirable `λ x y, M y x` in both Lean versions. After this PR, we use ```lean def transpose (M : matrix m n α) : matrix n m α := of $ λ x y, M y x -- TODO: set as an equation lemma for `transpose`, see mathlib4#3024 @[simp] lemma transpose_apply (M : matrix m n α) (i j) : transpose M i j = M j i := rfl ``` This no longer has the nice `rw` behavior, but we can't have that in Lean4 anyway (leanprover/lean4#2042). It also makes `dunfold` insert the `of`, which is better for type-safety. This affects * `matrix.transpose` * `matrix.row` * `matrix.col` * `matrix.diagonal` * `matrix.vec_mul_vec` * `matrix.block_diagonal` * `matrix.block_diagonal'` * `matrix.hadamard` * `matrix.kronecker_map` * `pequiv.to_matrix` * `matrix.circulant` * `matrix.mv_polynomial_X` * `algebra.trace_matrix` * `algebra.embeddings_matrix` While this just adds `_apply` noise in Lean 3, it is necessary when porting to Lean 4 as there the equation lemma is not generated in the way that we want. This is hopefully exhaustive; it was found by looking for lines ending in `matrix .*` followed by a `|` line
bors bot
pushed a commit
to leanprover-community/mathlib4
that referenced
this issue
Apr 11, 2023
This is to help with #2960 and work around leanprover/lean4#2042. Ideally we would inspect the function to find that it was declared as `| i, j => A j i` and generate `transpose_apply`, but that's not something I know how to do. Co-authored-by: Scott Morrison <[email protected]> Co-authored-by: Jeremy Tan Jie Rui <[email protected]>
eric-wieser
added a commit
to leanprover-community/mathlib4
that referenced
this issue
Apr 12, 2023
This is to help with #2960 and work around leanprover/lean4#2042. Ideally we would inspect the function to find that it was declared as `| i, j => A j i` and generate `transpose_apply`, but that's not something I know how to do. Co-authored-by: Scott Morrison <[email protected]> Co-authored-by: Jeremy Tan Jie Rui <[email protected]>
leodemoura
added a commit
that referenced
this issue
Oct 29, 2023
It is not being used yet, but we need to add it before solving issue #2042. Reason: bootstrapping.
Merged
Komyyy
pushed a commit
to Komyyy/lean4
that referenced
this issue
Nov 2, 2023
It is not being used yet, but we need to add it before solving issue leanprover#2042. Reason: bootstrapping.
arthur-adjedj
pushed a commit
to arthur-adjedj/lean4
that referenced
this issue
Nov 20, 2023
nomeata
added a commit
that referenced
this issue
Aug 19, 2024
(it never was ever since it was introduced in #2042.)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Prerequisites
Description
Compare this Lean 3 code
vs the same code in Lean 4
The Lean3 behavior was very useful in mathlib; for instance, in the definition of
it means that
simp [transpose]
only simplifies terms of the formtranspose M i j
and nottranspose M
.Steps to Reproduce
Expected behavior: Lean 4 behaves like Lean 3 and generates an equation lemma
foo a = 2 * a
Actual behavior: Lean 4 generates an equation lemma
foo = fun a => 2 * a
Reproduces how often: 100%
Versions
Lean 4.0.0-nightly-2023-01-16
Additional Information
Zulip thread, and an older Zulip message
The text was updated successfully, but these errors were encountered: