You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lean4game/server/nng/NNG/Doc/Tactics.lean

166 lines
3.1 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 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`)
* `rw [h] at h2` (changes `X` to `Y` in hypothesis `h2` instead of the goal)
* `rw [h] at *` (changes `X` to `Y` in the goal and all hypotheses)
## 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:
```
Objects:
x y :
Assumptions:
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 `rfl`.
### Example:
You can use `rw` to change a hypothesis as well.
For example, if your local context looks like this:
```
Objects:
x y :
Assumptions:
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
"
"
TacticDoc exact
"
"
TacticDoc apply
"
"
TacticDoc intro
"
"
TacticDoc «have»
"
"
TacticDoc constructor
"
"
TacticDoc rcases
"
"
TacticDoc left
"
"
TacticDoc right
"
"
TacticDoc contradiction
"
"
TacticDoc exfalso
"
"