Zulip Chat Archive

Stream: general

Topic: simp lemmas with hypotheses


Scott Morrison (Feb 08 2019 at 05:01):

The lemma

@[simp] lemma degree_C (ha : a ≠ 0) : degree (C a) = (0 : with_bot ℕ) := ...

in polynomial.lean is marked as simp. However it doesn't get applied by simp, even when there's an explicit hypothesis ha : a ≠ 0 available.

Scott Morrison (Feb 08 2019 at 05:01):

Is there are way to have simp use it? If not, why are lemmas like this marked with simp?

Simon Hudon (Feb 08 2019 at 22:50):

Yes, you just need simp *

Scott Morrison (Feb 08 2019 at 23:23):

@Simon Hudon, sorry, I don't understand. Here's my example:

import data.polynomial

open polynomial

variables {α : Type} [integral_domain α] [decidable_eq α]

lemma test (a : α) (ha : a ≠ 0) : degree (C a) = (0 : with_bot ℕ) :=
by simp [degree_C ha]

lemma test' (a : α) (ha : a ≠ 0) : degree (C a) = (0 : with_bot ℕ) :=
by simp * -- fails

Scott Morrison (Feb 08 2019 at 23:23):

I don't understand how to convince simp to use degree_C, without holding its hand.

Simon Hudon (Feb 08 2019 at 23:29):

Can you show the error message?

Scott Morrison (Feb 08 2019 at 23:32):

tactic failed, there are unsolved goals
state:
α : Type,
_inst_1 : integral_domain α,
_inst_2 : decidable_eq α,
a : α,
ha : a ≠ 0
⊢ some 0 = 0

Simon Hudon (Feb 08 2019 at 23:33):

what if you write by simp * ; refl?

Mario Carneiro (Feb 08 2019 at 23:42):

where did some 0 come from?

Scott Morrison (Feb 08 2019 at 23:45):

@Simon Hudon, by simp *; refl seems to do it.

Scott Morrison (Feb 08 2019 at 23:45):

I think I don't understand what simp * does. I always thought that just included all the local hypotheses as simp lemmas.

Scott Morrison (Feb 08 2019 at 23:47):

I'm not really sure how we got a some 0 here, @Mario Carneiro. This seems to be closely related to the question @Aditya Agarwal had: there are many ways to get something in with_bot nat...

Mario Carneiro (Feb 08 2019 at 23:48):

The preferred way is the coercion, which has the advantage that it actually has type with_bot nat instead of option nat

Mario Carneiro (Feb 08 2019 at 23:48):

with some n a lot of simp lemmas won't trigger for it

Scott Morrison (Feb 08 2019 at 23:55):

Shoot... I've been working with a copy of mathlib with a dumb stray simp lemma I introduced earlier.

Scott Morrison (Feb 08 2019 at 23:55):

My "minimal working examples" are just wrong...

Scott Morrison (Feb 08 2019 at 23:56):

In particular, that some 0 was entirely my doing.


Last updated: Dec 20 2023 at 11:08 UTC