The nontriviality
tactic. #
Tries to generate a Nontrivial α
instance using nontrivial_of_ne
or nontrivial_of_lt
and local hypotheses.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Attempts to generate a Nontrivial α
hypothesis.
The tactic first looks for an instance using infer_instance
.
If the goal is an (in)equality, the type α
is inferred from the goal.
Otherwise, the type needs to be specified in the tactic invocation, as nontriviality α
.
The nontriviality
tactic will first look for strict inequalities amongst the hypotheses,
and use these to derive the Nontrivial
instance directly.
Otherwise, it will perform a case split on Subsingleton α ∨ Nontrivial α
, and attempt to discharge
the Subsingleton
goal using simp [h₁, h₂, ..., hₙ, nontriviality]
, where [h₁, h₂, ..., hₙ]
is
a list of additional simp
lemmas that can be passed to nontriviality
using the syntax
nontriviality α using h₁, h₂, ..., hₙ
.
example {R : Type} [OrderedRing R] {a : R} (h : 0 < a) : 0 < a := by
nontriviality -- There is now a `nontrivial R` hypothesis available.
assumption
example {R : Type} [CommRing R] {r s : R} : r * s = s * r := by
nontriviality -- There is now a `nontrivial R` hypothesis available.
apply mul_comm
example {R : Type} [OrderedRing R] {a : R} (h : 0 < a) : (2 : ℕ) ∣ 4 := by
nontriviality R -- there is now a `nontrivial R` hypothesis available.
dec_trivial
def myeq {α : Type} (a b : α) : Prop := a = b
example {α : Type} (a b : α) (h : a = b) : myeq a b := by
success_if_fail nontriviality α -- Fails
nontriviality α using myeq -- There is now a `nontrivial α` hypothesis available
assumption
Equations
- One or more equations did not get rendered due to their size.
Instances For
Elaborator for the nontriviality
tactic.