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/CREATE_GAME.md

3.3 KiB

Level

A level is a single exercise that should be solved by the user. Here is an example:

import GameServer.Commands            -- also import everything else you need.

Game "NNG"
World "Addition"
Level 2                               -- must start at `1` and be consequtive.
Title "add_zero"

Introduction ""                       -- optional. Is displayed throughout the level.

Statement MyNat.zero_add              -- optional. if name is specified, the lemma will be added to the inventory in future levels.
"description in mathematical term"    -- optional. mathematical description
    (n : ) : n + 0 = n := by         -- statement: exactly how it would be in a `theorem`. (bug: forgets about implicit arguments)
  intro k
  rw [add_zero]
  Hint "look at {k}."                 -- hint at this place. `{k}` gets the user's name for the variable (bug currently)
  Hint (hidden := true) "more"        -- hidden hint
  use n
  Branch                              -- A branch in the proof. Does not modify the goal but useful
    simp                              -- to place hints at dead ends etc.
    tauto
  rw [add_comm]
  rfl

LemmaTab "Nat"                        -- optional. specify the tab that's open in the lemma inventory

NewLemma add_zero                     -- optional. add lemma to inventory
NewTactic rw                          -- optional. add tactic to inventory
NewDefinition Nat                     -- optional. add definition to inventory
DisabledLemma add_zero                -- optional. disable specific lemmas
DisabledTactic tauto simp             -- optional. disable tactics
OnlyLemma add_zero                    -- optional. disable all lemmas but these
OnlyTactic assumption rw              -- optional. disable all tactics but these

Conclusion ""                         -- optional. Show when level completed

And in the following there are some tips that might be important.

Imports

You're level can import levels from the same world

import NNG.Levels.Addition.Level_1

as well as entire other worlds

import NNG.Levels.Multiplication

However, you must not import a single level in a different world's level or it will mess up the World introduction texts (bug?)

Documentation (Lemmas, Tactics, Definitions)

It will complain when the specified lemma/tactic names do not have documentation. In that case you need to add LemmaDoc/TacticDoc/DefinitionDoc entries in the doc part (and ctrl+shift+X-reload your file in VSCode). See info under Game > Documentation

World

combines multiple levels, like a chapter. Description pending.

Game

Combines different games in form of a directed graph. Description pending.

Documentation

It is recommended to have all documentation for the inventory centrally and import it in the levels

LemmaDoc MyNat.add_squared as "add_squared" in "Pow"
"(missing)"

TacticDoc constructor
"(missing)"

DefinitionDoc One as "1"
"(missing)"

Notes:

  • The lemma name must be fully qualified. The string display name can be arbitrary.
  • Tactics must have their proper name. use TacticDoc «have» "" if it does not work without french quotes.
  • Definition names can be arbitrary. E.g. I used DefinitionDoc Symbol.Fun as "fun x ↦ x" "(missing)" once.

There will be features added to get automatic information from mathlib!