Zulip Chat Archive
Stream: new members
Topic: rw not rw'ing
Jake Kesinger (Oct 30 2020 at 23:40):
In this code:
@[simp]
lemma prod_inv_flip {R:Type*} (a:R) (b:R) [field R] (anz:a≠0)(bnz:b≠0): (a*b)⁻¹ = b⁻¹ * a⁻¹ :=
begin
field_simp,
end
@[simp]
lemma prod_inv_flip_is_inv {R:Type*} (a:R) (b:R) [field R] (anz:a≠0)(bnz:b≠0): (a*b)⁻¹ * b * a = 1 :=
begin
finish
end
@[simp]
lemma prod_inv_cancel_right {R:Type*} (a:R) (b:R) (x:R) [field R] (anz:a≠0)(bnz:b≠0) (xnz: x≠ 0):
x * (a*b)⁻¹*b*a = x :=
begin
rw prod_inv_flip_is_inv a b,
sorry,
end
the rw prod_inv_flip_is_inv a b
is failing, and I'm not understanding why.
Jake Kesinger (Oct 30 2020 at 23:41):
I tried set option pp.all true
and got this message:
Rewrite tactic failed, did not find instance of the pattern in the target expression
@has_mul.mul.{u_1} R
(@distrib.to_has_mul.{u_1} R
(@ring.to_distrib.{u_1} R (@division_ring.to_ring.{u_1} R (@field.to_division_ring.{u_1} R _inst_1))))
(@has_mul.mul.{u_1} R
(@distrib.to_has_mul.{u_1} R
(@ring.to_distrib.{u_1} R (@division_ring.to_ring.{u_1} R (@field.to_division_ring.{u_1} R _inst_1))))
(@has_inv.inv.{u_1} R (@field.to_has_inv.{u_1} R _inst_1)
(@has_mul.mul.{u_1} R
(@distrib.to_has_mul.{u_1} R
(@ring.to_distrib.{u_1} R (@division_ring.to_ring.{u_1} R (@field.to_division_ring.{u_1} R _inst_1))))
a
b))
b)
a
Reid Barton (Oct 30 2020 at 23:42):
That's because (despite where you put the spaces :upside_down:) x * (a*b)⁻¹*b*a
means ((x * (a*b)⁻¹)*b)*a
.
Reid Barton (Oct 30 2020 at 23:43):
There is actually another tactic for dealing with this exact issue: assoc_rw
Jake Kesinger (Oct 31 2020 at 00:00):
thanks!
assoc_rw
did the trick, and with ring
I was able to finish all goals, but I was getting failures saying "result contains meta-variables".
I found in another thread the recover
goal, and from that was able to call exact
a couple times to clear hypotheses, but the "For debugging only" in the description of recover
is making me nervous
Kevin Buzzard (Oct 31 2020 at 00:05):
This is normally down to a buggy tactic. Can you post a #mwe?
Jake Kesinger (Oct 31 2020 at 00:13):
trying to minimize now
Jake Kesinger (Oct 31 2020 at 00:18):
import data.real.basic
namespace mwe
@[simp]
lemma abcd_is_adbc {R:Type*} (a:R) (b:R) (c:R) (d:R) [comm_monoid R] : a*b*c*d = a*d*b*c :=
begin
finish
end
@[simp]
lemma prod_inv_flip {R:Type*} (a:R) (b:R) [field R] (anz:a≠0)(bnz:b≠0): (a*b)⁻¹ = b⁻¹ * a⁻¹ :=
by {field_simp}
@[simp]
lemma prod_inv_flip_is_inv {R:Type*} (a:R) (b:R) [field R] (anz:a≠0)(bnz:b≠0): (a*b)⁻¹ * b * a = 1 :=
by {finish}
@[simp]
lemma prod_inv_cancel_right {R:Type*} (a:R) (b:R) (x:R) [field R] (anz:a≠0)(bnz:b≠0) (xnz: x≠ 0):
x * (a*b)⁻¹*b*a = x :=
begin
assoc_rw prod_inv_flip_is_inv a b,
ring,
recover,
exact bnz,
exact anz,
end
end mwe
Floris van Doorn (Oct 31 2020 at 03:40):
It seems like assoc_rw
doesn't handle hypotheses well in a partially applied term. @Simon Hudon
As a workaround, assoc_rw prod_inv_flip_is_inv a b _ _
produced 3 goals as expected.
Simon Hudon (Oct 31 2020 at 03:50):
Would you mind filing a bug with this information and tagging me?
Floris van Doorn (Oct 31 2020 at 03:52):
Simon Hudon (Oct 31 2020 at 03:59):
Thanks!
Last updated: Dec 20 2023 at 11:08 UTC