pith. machine review for the scientific record. sign in
def

neg

definition
show as:
view math explainer →
module
IndisputableMonolith.Foundation.RationalsFromLogic
domain
Foundation
line
128 · github
papers citing
none yet

open explainer

Read the cached plain-language explainer.

open lean source

IndisputableMonolith.Foundation.RationalsFromLogic on GitHub at line 128.

browse module

All declarations in this module, on Recognition.

explainer page

A cached Ask Recognition explainer exists for this declaration.

open explainer

depends on

used by

formal source

 125instance : One LogicRat := ⟨one⟩
 126
 127/-- Negation: `-(a/b) = (-a)/b`. -/
 128def neg : LogicRat → LogicRat :=
 129  Quotient.lift
 130    (fun (p : PreRat) => mk (-p.num) p.den p.den_nonzero)
 131    (by
 132      rintro ⟨a, b, hb⟩ ⟨c, d, hd⟩ h
 133      show mk (-a) b hb = mk (-c) d hd
 134      apply sound
 135      show -a * d = -c * b
 136      have h' : a * d = c * b := h
 137      rw [eq_iff_toInt_eq, toInt_mul, toInt_mul, toInt_neg, toInt_neg]
 138      have h'' : toInt a * toInt d = toInt c * toInt b := by
 139        have := congrArg toInt h'
 140        rwa [toInt_mul, toInt_mul] at this
 141      linarith)
 142
 143instance : Neg LogicRat := ⟨neg⟩
 144
 145/-- Addition: `(a/b) + (c/d) = (a*d + c*b) / (b*d)`. -/
 146def add : LogicRat → LogicRat → LogicRat :=
 147  Quotient.lift₂
 148    (fun (p q : PreRat) =>
 149       mk (p.num * q.den + q.num * p.den) (p.den * q.den)
 150         (fun h => p.den_nonzero ((mul_eq_zero.mp h).resolve_right q.den_nonzero)))
 151    (by
 152      rintro ⟨a, b, hb⟩ ⟨c, d, hd⟩ ⟨a', b', hb'⟩ ⟨c', d', hd'⟩ hab hcd
 153      show mk (a * d + c * b) (b * d) _
 154            = mk (a' * d' + c' * b') (b' * d') _
 155      apply sound
 156      show (a * d + c * b) * (b' * d') = (a' * d' + c' * b') * (b * d)
 157      rw [eq_iff_toInt_eq]
 158      simp only [toInt_add, toInt_mul]