Zulip Chat Archive
Stream: new members
Topic: has_zero equality
Duckki Oe (Oct 22 2020 at 06:52):
How do you prove this?
α: Type
_inst_5: has_zero α
⊢ mul_zero_class.to_has_zero α = _inst_5
Johan Commelin (Oct 22 2020 at 06:54):
It might not be provable
Johan Commelin (Oct 22 2020 at 06:54):
If you have to unrelated instances of has_zero
, they will be actually different.
Johan Commelin (Oct 22 2020 at 06:55):
So we need more context.
Johan Commelin (Oct 22 2020 at 06:56):
I could be evil and write
instance evil_zero : has_zero nat := { zero := 1 }
Now you certainly cannot prove evil_zero = nat.has_zero
, even though both have type has_zero nat
.
Jalex Stark (Oct 22 2020 at 13:10):
by the way format your code using #backticks
Duckki Oe (Oct 22 2020 at 16:29):
I'm trying to prove this:
section std_basis
open matrix
variables {m n: Type*} [fintype m] [fintype n]
variables [decidable_eq m] [decidable_eq n]
variables {α : Type} [has_zero α] [semiring α]
example {i' : m} {j' : n} {v : α}
: ∀ {i j}, ¬ i = i' ∨ ¬ j = j' → std_basis_matrix i' j' v i j = 0
:= begin
intros i j h,
unfold std_basis_matrix,
rwa if_neg, {
sorry
}
end
The zero from std_basis_matrix is not an instance of has_zero α
, instead it seems to be mul_zero_class.to_has_zero α
.
Mario Carneiro (Oct 22 2020 at 16:30):
[has_zero α] [semiring α]
This is bad, you just put two zeros on α
Mario Carneiro (Oct 22 2020 at 16:31):
The error you are getting is because you need one zero and have the other
Mario Carneiro (Oct 22 2020 at 16:32):
you should just delete [has_zero α]
and it should work
Duckki Oe (Oct 22 2020 at 16:37):
That was it. Thanks! @Mario Carneiro
Last updated: Dec 20 2023 at 11:08 UTC