Two calculators, two answers
Kojo and Ama are shopping at the market in Kumasi, in Ghana. They buy a bag for 2 cedis and 3 bottles of water at 4 cedis each. Kojo types into his small calculator:
His calculator says 20. Ama types exactly the same keys into the calculator on her phone. It says 14.
Which one is right? The shopkeeper knows: the bag costs 2 cedis, and the three bottles cost cedis, so the total is cedis. Kojo's calculator worked from left to right as he typed, , then — as if he had bought 5 bottles!
Mathematicians all over the world have agreed on a rule for reading an expression like , so that everybody gets the same answer. In this lesson you will learn that rule, and then use it to find numbers that are hiding.
Names for numbers
An expression like is a name for a number. It names 14. The number 14 has many other names: , , , .
Brackets say "work this out first". In , we add first: . In , we multiply first: .
What if there are no brackets? Think about how we talk. "Three bags of 4 oranges, and 2 more oranges" is . It would be a nuisance to write brackets every time: . So everybody agrees: multiplication and division are done before addition and subtraction, unless brackets say otherwise. Then and both mean "some groups, plus some more" — just what we usually want.
Sometimes a number is hidden, and we only know something about it:
"Three times some number makes 24." Which number is in the box? You may know straight away: 8. In this lesson you will learn a way that works even when the numbers are big — by undoing what was done to the hidden number.
Big ideas
Definition— expression
An expression is a combination of numbers and operations (, , , ), possibly with brackets, that names a number.
Definition— order of operations
To work out an expression:
- work out anything in brackets first;
- then do multiplication and division, from left to right;
- then do addition and subtraction, from left to right.
Definition— equation
An equation says that two expressions have the same value. The equals sign "=" means "has the same value as". So , and are all true equations.
Definition— unknown
An unknown is a number we are asked to find. It is shown by a box, , or by a letter, such as . A letter in an expression always stands for a number.
Definition— inverse operations
Two operations are inverse operations when one undoes the other.
- Adding 17 is undone by subtracting 17 (and subtracting 17 is undone by adding 17).
- Multiplying by 3 is undone by dividing by 3 (and dividing by 3 is undone by multiplying by 3).
Multiplying by any number except 0 can be undone in this way.
Definition— rule
An input–output rule tells you what to do to any input number to get the output. "Double, then add 1" is a rule. Written as an expression, with the letter standing for the input, it is .
Let's try together
Example— Using the order of operations
- (multiply first).
- (brackets first).
- (divide first).
- . Division and multiplication are on the same level, so we go from left to right. (Not !)
- , also from left to right. (Not .)
Example— Finding an unknown by undoing
. Something plus 17 makes 40. To find it, undo "add 17" by subtracting 17: . Check: ✓.
. Three times something makes 24. Undo "multiply by 3" by dividing by 3: . Check: ✓.
. This is the same equation written the other way round — "24 has the same value as 3 times something". The answer is still 8.
. Undo "subtract 9" by adding 9: . Check: ✓.
. Careful: here the unknown is the number we divide by. 36 shared into groups of some size gives 4 groups, so the size is . Check: ✓. Always check your answer in the original equation!
Example— Think of a number
Ama says: "I thought of a number, multiplied it by 3, then added 1. I got 22." What was her number?
Two things happened to the number, in this order: multiply by 3, then add 1. To undo them, we start from the end and work backwards, undoing the last step first:
- undo "add 1": ;
- undo "multiply by 3": .
Her number was 7. Check: ✓. As an equation: , so .
Example— Rules and tables
The rule "double, then add 1" is . To complete a table, put each input in place of :
| input | 1 | 2 | 3 | 4 | 10 |
|---|---|---|---|---|---|
| output | 3 | 5 | 7 | 9 | 21 |
Going backwards: which input gives the output 15? Undo the steps in reverse order: , then . The input is 7.
Now a table without its rule:
| input | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| output | 4 | 7 | 10 | 13 |
Each time the input goes up by 1, the output goes up by 3. That suggests "multiply by 3": , , … — always 1 less than the output. So the rule is "multiply by 3, then add 1", or . Check: ✓. Now we can predict: input 10 gives .
Example— Letters are numbers
At a fruit stall, one apple costs cedis and one banana costs cedis. Then 4 apples and 3 bananas cost
Here is not "an apple": it is the number of cedis one apple costs. If and , the cost is cedis.
Why undoing finds the unknown — and why it is the only answer
Theorem— Finding an unknown by subtracting
The only number that makes true is .
Proof
The proof has two parts.
If a number works, it must be 23. Suppose some number makes true. Then and are the same number. Take 17 away from this same number, and you get the same result either way:
On the left, adding 17 and then taking 17 away gets you back where you started, so the left side is just . On the right, . So .
And 23 does work: .
∎
The same reasoning shows that has exactly one answer: if , divide both sides by 3. Dividing by 3 undoes multiplying by 3, so ; and .
When there is no answer. Not every equation has a whole-number answer.
- : we know (too small) and (too big), and the bigger the number in the box, the bigger gets. So no whole number works. (A fraction does: . You can meet it in Fractions and decimals.)
- : zero times any number is 0, never 5. No number works at all.
- : this is true for every number, so it does not tell us what is in the box.
That is why "multiplying is undone by dividing" needs the number to be non-zero. Multiplying by 0 sends 3 to 0 and 7 to 0 — and once you only see the 0, nothing can tell you whether it came from 3 or from 7. It cannot be undone.
Explore: balance the scale
An equation is like a balance: the two sides weigh the same. Each box on the scale holds the same unknown number of weights. Do the same thing to both sides — take 1 away from both, or divide both into equal shares — and the scale stays level. When one box is left alone, you have found the unknown.
□ + 7 = 19
Take 1 from both sides until the box is alone. How many times must you do it?
- x (unknown weight)
- 1 (unit weight)
x + 7 = 19
Do the same thing to both sides. Try to get x on its own.
The scale is still level: both sides changed by the same amount.
Your steps
- x + 7 = 19
Make your own equation
Left side
Right side
3 × □ + 2 = 20
Two steps: what should you take away first? Then divide both sides by 3.
- x (unknown weight)
- 1 (unit weight)
3x + 2 = 20
Do the same thing to both sides. Try to get x on its own.
The scale is still level: both sides changed by the same amount.
Your steps
- 3x + 2 = 20
Make your own equation
Left side
Right side
What to notice:
- In the second scale, try dividing by 3 first. The scale refuses: 20 weights cannot be split into 3 equal shares. Undoing the "+ 2" first makes the division work — the last step is undone first.
- The record beside the scale is a list of equations, each one true. That list is your working.
Rules make growing patterns, too. Here each step has tiles. Predict the number of tiles in step 10 before you reveal the rule.
Double, then add 1
How many tiles in step 10? Which step has 25 tiles?
| Step | 1 | 2 | 3 | 4 | 10 |
|---|---|---|---|---|---|
| Tiles | 3 | 5 | 7 | 9 | ? |
| Change | +2 | +2 | +2 |
Gideon's true-or-false game
Gideon only plays with statements that are exactly true or exactly false. Decide, and give a reason.
- "." — False. Multiplication comes first: .
- "." — True. The brackets are worked out first.
- "The only number that makes true is 23." — True. Subtracting 17 from both sides shows it must be 23, and .
- " has a whole-number answer." — False. and ; 25 is in between.
- " is not a proper equation, because the answer must come after the equals sign." — False! "=" means "has the same value as". The equation is fine, and .
For grown-ups · the same ideas in Lean, a proof checker
Lean reads expressions with the same order of operations as we do:
/-- Without brackets, multiplication comes before addition: `2 + 3 * 4` is `2 + 12 = 14`.
Brackets change the grouping: `(2 + 3) * 4` is `5 * 4 = 20`. Lean follows the same convention
as the lesson. -/
theorem order_of_operations : 2 + 3 * 4 = 14 ∧ (2 + 3) * 4 = 20 := by
decide/-- Operations of the same kind are done from left to right: `18 / 3 * 2` is `6 * 2 = 12`
(not `18 / 6 = 3`), and `10 - 4 - 3` is `6 - 3 = 3` (not `10 - 1 = 9`). And `20 - 8 / 4` is
`20 - 2 = 18`, because division comes before subtraction. -/
theorem left_to_right : 18 / 3 * 2 = 12 ∧ 10 - 4 - 3 = 3 ∧ 20 - 8 / 4 = 18 := by
decideInverse operations, for every number. Lean's whole numbers (Nat) stop at 0 when you subtract and round down when you divide, so these two facts are exactly what "undoes" means here. Multiplying by 0 cannot be undone:
/-- Subtracting `b` undoes adding `b`: whatever number `n` you start with, add `b` and then take
`b` away, and you are back at `n`. This is core Lean's `Nat.add_sub_cancel`. -/
theorem sub_undoes_add (n b : Nat) : n + b - b = n :=
Nat.add_sub_cancel n b/-- Dividing by `a` undoes multiplying by `a`, as long as `a` is not 0. This is core Lean's
`Nat.mul_div_cancel_left`. -/
theorem div_undoes_mul (n a : Nat) (ha : 0 < a) : a * n / a = n :=
Nat.mul_div_cancel_left n ha/-- Multiplying by 0 **cannot** be undone: it sends 3 and 7 (and every other number) to the same
answer, 0, so nothing can tell us afterwards which number we started with. -/
theorem zero_cannot_be_undone : 0 * 3 = 0 * 7 ∧ 3 ≠ 7 := by
decideSolving equations. The symbol ↔ ("exactly when") packs both parts of the human proof into one statement: if the equation holds, the unknown must be 23; and if the unknown is 23, the equation holds. The calc steps follow the human reasoning line by line:
/-- **□ + 17 = 40 exactly when □ = 23.** If □ + 17 = 40, then taking 17 away from both sides
gives □ = 40 − 17 = 23 — so 23 is the only possible answer. And 23 really works. -/
theorem add_unknown (x : Nat) : x + 17 = 40 ↔ x = 23 := by
constructor
· intro h
calc x = x + 17 - 17 := (Nat.add_sub_cancel x 17).symm
_ = 40 - 17 := by rw [h]
_ = 23 := by decide
· intro h
rw [h]/-- The same reasoning for **any** numbers: when `b ≤ c`, the equation □ + b = c has exactly one
whole-number answer, □ = c − b. -/
theorem add_solution (b c x : Nat) (h : b ≤ c) : x + b = c ↔ x = c - b := by
omega/-- **3 × □ = 24 exactly when □ = 8.** If 3 × □ = 24, dividing both sides by 3 gives
□ = 24 ÷ 3 = 8. And 8 really works. -/
theorem mul_unknown (x : Nat) : 3 * x = 24 ↔ x = 8 := by
constructor
· intro h
calc x = 3 * x / 3 := (Nat.mul_div_cancel_left x (by decide)).symm
_ = 24 / 3 := by rw [h]
_ = 8 := by decide
· intro h
rw [h]/-- The equals sign means "has the same value as", so an equation can be written either way
round: 24 = 3 × □ is the same equation as 3 × □ = 24, with the same answer. -/
theorem unknown_on_left (x : Nat) : 24 = 3 * x ↔ x = 8 := by
constructor
· intro h
exact (mul_unknown x).mp h.symm
· intro h
exact ((mul_unknown x).mpr h).symm/-- **Two steps.** "Multiply by 3, then add 1" gives 22 exactly when the number was 7. To find
it, undo the steps in reverse order: take away 1, then divide by 3. -/
theorem think_of_a_number (x : Nat) : 3 * x + 1 = 22 ↔ x = 7 := by
constructor
· intro h
calc x = (3 * x + 1 - 1) / 3 := by
rw [Nat.add_sub_cancel, Nat.mul_div_cancel_left x (by decide)]
_ = (22 - 1) / 3 := by rw [h]
_ = 7 := by decide
· intro h
rw [h]Equations without whole-number answers:
/-- Some equations have **no** whole-number answer: 3 × □ = 25 has none, because 25 is not a
multiple of 3 (`3 × 8 = 24` is too small and `3 × 9 = 27` too big). The answer is the fraction
25/3, which lives outside the whole numbers. -/
theorem no_whole_answer : ¬ ∃ x : Nat, 3 * x = 25 := by
omega/-- Why "multiplying by a **non-zero** number" matters: 0 × □ = 5 has no answer at all, and
0 × □ = 0 is true for every number, so it does not pin down □. -/
theorem zero_times_unknown : (∀ x : Nat, 0 * x ≠ 5) ∧ (∀ x : Nat, 0 * x = 0) :=
⟨fun x => by rw [Nat.zero_mul]; decide, fun x => Nat.zero_mul x⟩A rule is a function: give it an input, and it gives an output. Lean can fill in a table, work backwards, and prove why the rule from the table has the multiplier 3 — for every input, not just the ones in the table:
/-- The rule "double, then add 1", written as an expression in `n`: `2 * n + 1`. -/
def doubleAddOne (n : Nat) : Nat := 2 * n + 1/-- Completing the table for the rule: the inputs 1, 2, 3 and 10 give 3, 5, 7 and 21. -/
theorem doubleAddOne_table : [1, 2, 3, 10].map doubleAddOne = [3, 5, 7, 21] := by
decide/-- Working backwards: the rule gives 15 only for the input 7 (undo: take away 1, then
halve). -/
theorem doubleAddOne_backwards (n : Nat) : doubleAddOne n = 15 ↔ n = 7 := by
unfold doubleAddOne
omega/-- The rule found from the table 1 → 4, 2 → 7, 3 → 10, 4 → 13: "multiply by 3, then add 1". -/
def threeNPlusOne (n : Nat) : Nat := 3 * n + 1/-- The rule fits every row of the table. -/
theorem threeNPlusOne_table : [1, 2, 3, 4].map threeNPlusOne = [4, 7, 10, 13] := by
decide/-- Why the multiplier is 3: for **every** input, going up by 1 makes the output go up by 3. -/
theorem threeNPlusOne_step (n : Nat) : threeNPlusOne (n + 1) = threeNPlusOne n + 3 := by
unfold threeNPlusOne
omegaWhat is not formalised: Lean does not prove that the order of operations is "right" — it is a convention, and Lean simply follows it. Nor does it prove that is the rule behind the table; it proves that this rule fits and grows by 3 at each step. A table on its own can never prove which rule produced it.
Margaret's calculators
"""Two ways to read an expression: left to right, or by the convention.
A simple calculator works from left to right as you type, so it reads
2 + 3 x 4 as (2 + 3) x 4 = 20. The convention used in mathematics (and by
scientific calculators and programming languages) does multiplication and
division before addition and subtraction, giving 2 + 12 = 14. The program
evaluates some expressions both ways, then checks every expression
'a op b op c' with digits 1 to 9 and the four operations, and reports for
each pair of operations how often the two readings agree. Division is exact
(fractions), so nothing is rounded.
"""
import textwrap
from fractions import Fraction
OPS = {
"+": lambda x, y: x + y,
"-": lambda x, y: x - y,
"x": lambda x, y: x * y,
"/": lambda x, y: x / y,
}
def tokens(text):
"""Split '2 + 3 x 4' into numbers (as Fractions) and symbols."""
return [Fraction(t) if t.isdigit() else t for t in text.split()]
def left_to_right(toks):
"""Work strictly from left to right, as a simple calculator does."""
value = toks[0]
for i in range(1, len(toks), 2):
value = OPS[toks[i]](value, toks[i + 1])
return value
def by_convention(toks):
"""Brackets first, then x and /, then + and -, each left to right."""
pos = 0
def factor():
nonlocal pos
if toks[pos] == "(":
pos += 1
value = expression()
pos += 1 # skip ")"
return value
pos += 1
return toks[pos - 1]
def term():
nonlocal pos
value = factor()
while pos < len(toks) and toks[pos] in ("x", "/"):
op = toks[pos]
pos += 1
value = OPS[op](value, factor())
return value
def expression():
nonlocal pos
value = term()
while pos < len(toks) and toks[pos] in ("+", "-"):
op = toks[pos]
pos += 1
value = OPS[op](value, term())
return value
return expression()
"""How many of the 729 'a op1 b op2 c' read the same both ways."""
def agreement(op1, op2):
"""How many of the 729 expressions 'a op1 b op2 c' read the same both ways."""
same = 0
for a in range(1, 10):
for b in range(1, 10):
for c in range(1, 10):
toks = [Fraction(a), op1, Fraction(b), op2, Fraction(c)]
same += left_to_right(toks) == by_convention(toks)
return same
def main():
print("Expression left to right by the convention")
for text in ["2 + 3 x 4", "20 - 8 / 4", "18 / 3 x 2", "10 - 4 - 3",
"3 x 4 + 2"]:
toks = tokens(text)
print(f"{text:<17} {str(left_to_right(toks)):>13}"
f" {str(by_convention(toks)):>17}")
print("(2 + 3) x 4 brackets first: "
f"{by_convention(tokens('( 2 + 3 ) x 4'))}")
print()
print("Every 'a op1 b op2 c' with digits 1-9: out of 729, how many")
print("give the same answer read both ways?")
print("op1 \\ op2 " + "".join(f"{op2:>7}" for op2 in OPS))
for op1 in OPS:
row = "".join(f"{agreement(op1, op2):>7}" for op2 in OPS)
print(f" {op1} {row}")
print("The readings can only differ when + or - comes before x or /.")
print()
print(textwrap.fill(
"Epistemic status: exact (fractions, no rounding) and exhaustive for "
"the 11664 expressions with three digits from 1 to 9. It shows when "
"the convention matters; it does not show that the convention is "
"'true'. The order of operations is an agreement, chosen so that "
"expressions like 3 x 4 + 2 need no brackets.",
width=78,
))
if __name__ == "__main__":
main()The two calculators always agree except when or comes before or . Even then they agree in 81 of the 729 cases — exactly when the last number is 1, because multiplying or dividing by 1 changes nothing.
"""Which rule made this table? Searching input-output rules.
A table of inputs and outputs is evidence about a rule. The program tries
every rule of the form 'multiply by a, then add b' (a x n + b) with a and b
from 0 to 10 and lists those that fit the first rows of a table. One row
fits several rules; two rows pin down one rule of this kind - but a rule of
a different kind (n x n + 3) also fits those two rows, and only a third row
tells them apart. Finally it works backwards: which input gives a chosen
output, found by undoing the rule's steps in reverse order and checked by
running the rule forwards.
"""
import textwrap
TABLE = [(1, 4), (2, 7), (3, 10), (4, 13)]
def fits(rule, rows):
"""Does the rule give the right output for every row (input, output)?"""
return all(rule(n) == out for n, out in rows)
def linear_rules_that_fit(rows, largest=10):
"""All (a, b) with 0 <= a, b <= largest such that a x n + b fits."""
return [(a, b)
for a in range(largest + 1)
for b in range(largest + 1)
if fits(lambda n, a=a, b=b: a * n + b, rows)]
def square_plus_three(n):
"""A rule of a different kind: n x n + 3."""
return n * n + 3
def undo_three_n_plus_one(output):
"""Undo 'multiply by 3, then add 1' in reverse: take 1, then divide by 3.
Returns None when there is no whole-number input."""
if output < 1 or (output - 1) % 3 != 0:
return None
return (output - 1) // 3
def main():
print("The table: " + ", ".join(f"{n} -> {out}" for n, out in TABLE))
print("Rules 'a x n + b' (a, b from 0 to 10) that fit the first rows:")
for k in range(1, len(TABLE) + 1):
found = linear_rules_that_fit(TABLE[:k])
rules = ", ".join(f"{a} x n + {b}" for a, b in found)
rows = "row: " if k == 1 else "rows:"
print(f" {k} {rows} {rules}")
print()
print("A different kind of rule: n x n + 3")
for k in (2, 3):
print(f" fits the first {k} rows:"
f" {fits(square_plus_three, TABLE[:k])}")
print(" (3 x 3 + 3 = 12, but the table says 3 -> 10.)")
print()
print("Working backwards from outputs of 3 x n + 1:")
for output in (22, 31, 100, 24):
n = undo_three_n_plus_one(output)
if n is None:
print(f" output {output}: no whole-number input")
else:
print(f" output {output}: input {n}"
f" (check: 3 x {n} + 1 = {3 * n + 1})")
print()
print(textwrap.fill(
"Epistemic status: exact and exhaustive, but only for rules of the "
"form a x n + b with a and b from 0 to 10. A table with a few rows "
"never proves which rule made it - other kinds of rules can fit the "
"same rows. Knowing the rule, the backward answers are certain: each "
"is checked by running the rule forwards.",
width=78,
))
if __name__ == "__main__":
main()One row of the table fits five different rules. Two rows leave just one rule of this kind, . But a rule of a different kind, , also fits the first two rows: and ! Only the third row tells them apart. A computer search like this is exact for the rules it tries, but a table with a few rows can never prove which rule made it.
Your turn
Work out brackets first, then multiplication and division, then addition and subtraction. Always check an unknown by putting it back into the equation. You can ask for a hint whenever you like.
1. Expressions, unknowns and rules
Warm-upHumanWork out .
2. Expressions, unknowns and rules
CoreHumanWork out .
3. Expressions, unknowns and rules
Warm-upHumanFind the unknown: .
4. Expressions, unknowns and rules
CoreHumanFind the unknown: .
5. Expressions, unknowns and rules
CoreHumanTendai thought of a number. He doubled it, then added 6, and got 20. What was his number?
6. Expressions, unknowns and rules
CoreHumanWhich rule fits every row of this table?
| input | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| output | 5 | 8 | 11 | 14 |
7. Expressions, unknowns and rules
StretchHumanWhere should the brackets go to make this true?
8. Expressions, unknowns and rules
CoreHumanAt a stall, one pencil costs shillings and one rubber costs shillings. What does mean?
9. Expressions, unknowns and rules
StretchFormalIn Lean, ↔ means "exactly when", ∀ x : Nat means "for every whole number " and ∃ x means "there is a number ". Which statement says that 23 is the only answer to ?
Things that trip people up
Misconception
Working strictly from left to right. is not 20. Multiplication and division come before addition and subtraction, so it is . Only operations on the same level are done from left to right: .
Misconception
"The answer must come after the equals sign." The equals sign means "has the same value as", not "and the answer is". is a perfectly good equation, and so is .
Misconception
Writing a chain of calculations with "=". "" looks like working, but it claims that has the same value as 14, which is false. Write instead: , where every "=" is true.
Misconception
"A letter stands for a thing." In , the letter does not mean "apples". It stands for a number — for example the price of one apple, or the number of apples in a bag.
Misconception
Undoing steps in the original order. To undo "multiply by 3, then add 1", subtract 1 first, then divide by 3. Undoing in the original order gives the wrong answer: for the output 22, dividing by 3 first does not even give a whole number.
Other ways of seeing
Algebra— The algebraist: one line for every number
A rule like is a tiny piece of algebra: one short line describes infinitely many calculations, one for each number . Algebra lets us reason about all of them at once. For example, is always odd, whatever whole number is, because is even and one more than an even number is odd. Next you will write expressions with letters more freely, and solve harder equations, in variables and algebraic expressions and linear equations.
Computation— Computers follow the same agreement
Scientific calculators, spreadsheets and programming languages all use the order of operations: in Python, 2 + 3 * 4 gives 14. Lean, the proof checker in this lesson, reads 2 + 3 * 4 the same way. A computer cannot ask what you meant, so this agreement matters even more for machines than for people.
The set of answers
For an equation with an unknown, we can collect all the numbers that make it true into a set, called its solution set:
- has the solution set : exactly one answer.
- has no whole-number answer: its solution set (among whole numbers) is the empty set .
- is true for every whole number: its solution set is the set of all whole numbers.
"Solve the equation" means "find the solution set" — and the two parts of our proof show exactly that the solution set of is : nothing else is in it, and 23 is.
Undoing a chain
"Multiply by 3, then add 1" is a chain of two actions, one after the other. Undoing it means undoing the steps in the reverse order: first "subtract 1", then "divide by 3" — just as you take off your shoes before your socks. You can explore chains of actions, and why undoing goes backwards, in One thing after another.
History and global context
- Egypt. The Rhind Mathematical Papyrus, copied by the scribe Ahmes around 1550 BCE from an older text, contains problems with an unknown quantity, called aha ("heap"). Problem 24 asks for a quantity which, together with one seventh of itself, makes 19. The scribe solved it by "false position": try 7 (then 7 plus its seventh is 8), and then scale up, giving .
- China. The Nine Chapters on the Mathematical Art, compiled about two thousand years ago, solves problems with several unknown quantities at once, using counting rods laid out on a board.
- India. Indian mathematicians, from Brahmagupta in the 7th century onwards, named unknown quantities with words, such as yāvat-tāvat ("as much as"), and used the names of colours — "black", "blue", "yellow" — when there were several unknowns at once.
- Baghdad. Around 820 CE, Muḥammad ibn Mūsā al-Khwārizmī wrote a book on solving equations. Its title contains the word al-jabr, "restoring": moving a quantity that is taken away on one side of an equation to the other side. That word became our word algebra.
- The equals sign. In 1557 the Welsh mathematician Robert Recorde introduced "=" in The Whetstone of Witte, choosing two parallel lines because "no two things can be more equal".
- Letters. In 1591 François Viète in France used letters for unknown and known numbers; in 1637 René Descartes used , and for unknowns, as we still do.
- The order of operations grew up gradually as mathematicians wrote more and more algebra; it has no single inventor. Today it is taught, with small differences in the names (such as BODMAS, BIDMAS and PEMDAS), all over the world.
For grown-ups: further reading
- Gay Robins and Charles Shute, The Rhind Mathematical Papyrus: An Ancient Egyptian Text (1987) — the papyrus, with its aha problems, explained.
- Victor J. Katz, A History of Mathematics: An Introduction (1993; later editions) — the history of algebra in Egypt, Mesopotamia, China, India and the Islamic world.
- Liping Ma, Knowing and Teaching Elementary Mathematics (1999) — how deep understanding of arithmetic, including inverse operations, prepares children for algebra.
- George Pólya, How to Solve It (1945) — including "working backwards", the strategy behind undoing steps in reverse order.