Zulip Chat Archive

Stream: new members

Topic: Issue with `add_smul`: Field vs Semiring


Arien Malec (Dec 10 2023 at 21:09):

One of the Axler problems is to show that "the additive inverse condition can be replaced with the condition that
0𝑣 = 0 for all 𝑣 ∈ 𝑉", which wants to proceed by showing that v-v = 1• v + -1 • v = (1 + -1) • v = 0 • v = 0

In:

import Mathlib.Algebra.Field.Basic
import Mathlib.Algebra.Module.Basic


variable [Field F] [AddCommGroup V] [Module F V]

example: (v: V), (0: F)v = 0  w, v + w = 0 := fun v h => by
  use ((-1: F)  v)
  rw [one_smul F v, smul_comm, one_smul F ((-1: F)  v),  add_smul F]

I get an odd error at add_smul

F: Type ?u.538
V: Type ?u.541
inst✝²: Field F
inst✝¹: AddCommGroup V
inst: Module F V
v: V
h: 0  v = 0
 1  v + -1  v = 0
All Messages (2)
Scratch.lean:10:53
failed to synthesize instance
  Semiring (Type ?u.538)

Which is confusing because Field?

Richard Copley (Dec 10 2023 at 21:12):

add_mul's first explicit argument r should be of type R, where Semiring R is known to be true. Here you provide F, which is of type Type ?u.538 ...

Arien Malec (Dec 10 2023 at 21:14):

Right but F: Type ?u.538 and Field: F? and Field extend CommRing which extends Ring which extends Semiring?

Richard Copley (Dec 10 2023 at 21:21):

Sure. But you need an r : F, not an r : Type ?u.538.

Anyway. The real problem is that those 0s and 1s and -1s you're seeing aren't of type F.
Try

example (v : V) (h : (0 : F)  v = 0) :  w, v + w = 0 := by
  use ((-1 : F)  v)

Arien Malec (Dec 10 2023 at 21:23):

Same issue...

Arien Malec (Dec 10 2023 at 21:24):

I updated the code to make all the things explicit..

Ruben Van de Velde (Dec 10 2023 at 21:25):

add_smul does not expect a type, it expects two values

Ruben Van de Velde (Dec 10 2023 at 21:26):

This could be seen as inconsistent with one_smul, but I guess there's no value you could pass which lean could derive the type from

Arien Malec (Dec 10 2023 at 21:28):

I was recently grumping that the foo_smul theorems require an explicit R and just now got used to it :-)

Eric Wieser (Dec 10 2023 at 21:40):

It's only the ones that don't take an explicit r : R which instead take an R : Type _, and this is deliberate


Last updated: Dec 20 2023 at 11:08 UTC