|
|
import NNG.Metadata
|
|
|
import NNG.MyNat.Addition
|
|
|
import NNG.Levels.Addition.Level_5
|
|
|
|
|
|
Game "NNG"
|
|
|
World "Addition"
|
|
|
Level 6
|
|
|
Title "add_right_comm"
|
|
|
|
|
|
open MyNat
|
|
|
|
|
|
Introduction
|
|
|
"
|
|
|
Lean sometimes writes `a + b + c`. What does it mean? The convention is
|
|
|
that if there are no brackets displayed in an addition formula, the brackets
|
|
|
are around the left most `+` (Lean's addition is \"left associative\").
|
|
|
So the goal in this level is `(a + b) + c = (a + c) + b`. This isn't
|
|
|
quite `add_assoc` or `add_comm`, it's something you'll have to prove
|
|
|
by putting these two theorems together.
|
|
|
|
|
|
If you hadn't picked up on this already, `rw [add_assoc]` will
|
|
|
change `(x + y) + z` to `x + (y + z)`, but to change it back
|
|
|
you will need `rw [← add_assoc]`. Get the left arrow by typing `\\l`
|
|
|
then the space bar (note that this is L for left, not a number 1).
|
|
|
Similarly, if `h : a = b` then `rw [h]` will change `a`'s to `b`'s
|
|
|
and `rw [← h]` will change `b`'s to `a`'s.
|
|
|
|
|
|
Also, you can be (and will need to be, in this level) more precise
|
|
|
about where to rewrite theorems. `rw add_comm,` will just find the
|
|
|
first `? + ?` it sees and swap it around. You can target more specific
|
|
|
additions like this: `rw add_comm a` will swap around
|
|
|
additions of the form `a + ?`, and `rw add_comm a b,` will only
|
|
|
swap additions of the form `a + b`.
|
|
|
"
|
|
|
|
|
|
Statement add_right_comm
|
|
|
"For all natural numbers $a, b$ and $c$, we have
|
|
|
$a + b + c = a + c + b$."
|
|
|
(a b c : ℕ) : a + b + c = a + c + b := by
|
|
|
rw [add_assoc]
|
|
|
rw [add_comm b c]
|
|
|
rw [←add_assoc]
|
|
|
rfl
|
|
|
|
|
|
Conclusion
|
|
|
"
|
|
|
"
|