linarith
Summary
The linarith tactic solves certain kind of linear equalities and inequalities. Unlike the ring tactic, linarith uses hypotheses in the tactic state. It’s very handy for epsilon-delta proofs.
Examples
If your local context looks like this:
a b c d : ℝ
h1 : a < b
h2 : b ≤ c
h3 : c = d
⊢ a + a < d + b
then you would like to say that the goal “obviously” follows from the conclusions. but actually proving it from first principles is a little bit messy, and will involve knowing or discovering the names of lemmas such as lt_of_lt_of_le and add_lt_add. Fortunately, you don’t have to do this: linarith closes this goal immediately. Note that in contrast to ring, linarith does have access to the hypotheses in your local context.
If you have a goal of the form
|x| < εthenlinarithmight not be much help yet, because it doesn’t know about absolute values. So you couldrw abs_ltand get a goal of the form-ε < x ∧ x < ε. Well,linarithstill won’t be of any help, because it doesn’t know about goals with∧in either! However after yousplit, perhapslinarithwill be able to help you.
import tactic
import data.real.basic
example (x ε : ℝ) (hε : 0 < ε) (h1 : x < ε / 2) (h2 : -x < ε / 2) : |x| < ε :=
begin
rw abs_lt, -- `⊢ -ε < x ∧ x < ε`
split; -- semicolon instead of comma means "do next tactic on all the goals this tactic produces"
linarith -- solves both goals
end