modify Statement

This commit is contained in:
Jon Eugster
2023-04-16 18:12:36 +02:00
parent 545d20bb5a
commit 8d395d56e7
8 changed files with 147 additions and 13 deletions
+8
View File
@@ -3,4 +3,12 @@ import GameServer.Commands
DefinitionDoc MyNat as "ℕ"
"
The Natural Numbers.
## Game Modifications
This notation is for our own version of the natural numbers, called `MyNat`.
The natural numbers implemented in Lean's core are called `Nat`.
If you end up getting someting of type `Nat` in this game, you probably
need to write `(4 : ℕ)` to force it to be of type `MyNat`.
"
+105
View File
@@ -2,6 +2,34 @@ import GameServer.Commands
TacticDoc rfl
"
## Summary
`rfl` proves goals of the form `X = X`.
## Details
The `rfl` tactic will close any goal of the form `A = B`
where `A` and `B` are *exactly the same thing*.
## Example:
If it looks like this in the top right hand box:
```
Objects:
a b c d : ℕ
Goal:
(a + b) * (c + d) = (a + b) * (c + d)
```
then `rfl` will close the goal and solve the level.
## Game modifications
`rfl` in this game is weakened.
The real `rfl` could also proof goals of the form `A = B` where the
two sides are not *exactly identical* but merely
*\"definitionally equal\"*. That means the real `rfl`
could prove things like `a + 0 = a`.
"
TacticDoc rewrite
@@ -10,6 +38,83 @@ TacticDoc rewrite
TacticDoc rw
"
## Summary
If `h` is a proof of `X = Y`, then `rw h,` will change
all `X`s in the goal to `Y`s. Variants: `rw ← h` (changes
`Y` to `X`) and
`rw h at h2` (changes `X` to `Y` in hypothesis `h2` instead
of the goal).
## Details
The `rw` tactic is a way to do \"substituting in\". There
are two distinct situations where use this tactics.
1) If `h : A = B` is a hypothesis (i.e., a proof of `A = B`)
in your local context (the box in the top right)
and if your goal contains one or more `A`s, then `rw h`
will change them all to `B`'s.
2) The `rw` tactic will also work with proofs of theorems
which are equalities (look for them in the drop down
menu on the left, within Theorem Statements).
For example, in world 1 level 4
we learn about `add_zero x : x + 0 = x`, and `rw add_zero`
will change `x + 0` into `x` in your goal (or fail with
an error if Lean cannot find `x + 0` in the goal).
Important note: if `h` is not a proof of the form `A = B`
or `A ↔ B` (for example if `h` is a function, an implication,
or perhaps even a proposition itself rather than its proof),
then `rw` is not the tactic you want to use. For example,
`rw (P = Q)` is never correct: `P = Q` is the true-false
statement itself, not the proof.
If `h : P = Q` is its proof, then `rw h` will work.
Pro tip 1: If `h : A = B` and you want to change
`B`s to `A`s instead, try `rw ←h` (get the arrow with `\\l` and
note that this is a small letter L, not a number 1).
### Example:
If it looks like this in the top right hand box:
```
x y : ℕ
h : x = y + y
Goal:
succ (x + 0) = succ (y + y)
```
then
`rw add_zero,`
will change the goal into `⊢ succ x = succ (y + y)`, and then
`rw h,`
will change the goal into `⊢ succ (y + y) = succ (y + y)`, which
can be solved with `refl,`.
### Example:
You can use `rw` to change a hypothesis as well.
For example, if your local context looks like this:
```
x y : ℕ
h1 : x = y + 3
h2 : 2 * y = x
Goal:
y = 3
```
then `rw h1 at h2` will turn `h2` into `h2 : 2 * y = y + 3`.
## Game modifications
The real `rw` tactic does automatically try to call `rfl` afterwards. We disabled this
feature for the game.
"
TacticDoc induction