Zulip Chat Archive
Stream: new members
Topic: instance of `nontrivial unit`?
Eric Rodriguez (Apr 02 2021 at 13:33):
I'm very confused by docs#tactic.interactive.nontriviality. One of the examples it gives is:
example {R : Type} [comm_ring R] {r s : R} : r * s = s * r :=
begin
nontriviality, -- There is now a `nontrivial R` hypothesis available.
apply mul_comm,
end
But we can easily give unit
a comm_ring
structure (see below), so why are we allowed to have this assumption? If I change the goal to anything else (e.g. nontrivial R
) and then use nontriviality R
, it complains that it can't discount subsingleton R
(which is very sensible!), and if I try show_term
it gives me a term that I cannot get to work. Meanwhile, if I change it just to [comm_ring unit] {r s : unit}
, we have a term in the proof state of nontrivial unit
, which seems like a contradiction; but I don't know where. What is going on?!
All code below the fold:
Patrick Massot (Apr 02 2021 at 13:38):
The tactic is doing its job in:
example {R : Type} [comm_ring R] {r s : R} : r * s = s * r :=
begin
nontriviality, -- There is now a `nontrivial R` hypothesis available.
apply mul_comm,
end
It does a case disjunction: either the ring is trivial and then r*s
and s*r
are the same because the ring has only one element, or it is not trivial and you get to finish the proof using this nontriviality extra assumption.
Eric Rodriguez (Apr 02 2021 at 13:39):
riight so the tactic also solves the goal itself in the case of subsingleton R
! that makes a lot of sense, thanks
Patrick Massot (Apr 02 2021 at 13:40):
That's the whole point of this tactic.
Patrick Massot (Apr 02 2021 at 13:40):
I'm exaggerating a bit, it also tries to infer nontrivility from context
Eric Rodriguez (Apr 02 2021 at 13:41):
I only understood it as inferring nontriviality from context; the previous example was that 0 < a
and so that instantly gives you nontrivial R
. This is a lot cleverer
Bryan Gin-ge Chen (Apr 02 2021 at 13:43):
The last paragraph in the docstring before the examples describes the behavior here:
Otherwise, it will perform a case split on
subsingleton α ∨ nontrivial α
, and attempt to discharge thesubsingleton
goal using ...
Last updated: Dec 20 2023 at 11:08 UTC