DEV-MODE auth (username + password, local only) ยท GitHub live mode
PProofGardenLean Judge
C0001published๐ŸŒฑ 5 Seeds

Nat add zero

Prove that adding zero on the right is the identity on `Nat`. Define `answer : โˆ€ (n : Nat), n + 0 = n` somewhere in your submission body. You may write any helper `def`/`lemma`/`theorem`/`instance` you like, but the file must contain a top-level `answer` of the required type. The app automatically appends `def solution_target : โˆ€ (n : Nat), n + 0 = n := answer` after your body โ€” the file won't compile unless your `answer` matches. Forbidden tokens (the static filter will reject your submission instantly): `sorry`, `admit`, `axiom`, `unsafe`, `opaque`, `constant`, `native_decide`, `implemented_by`, `extern`, `macro`, `syntax`, `elab`, `run_cmd`, `initialize`, `set_option`, `attribute`, `import`, `namespace`, `section`, `end`, `universe`, `#eval`, `#check`, `#print`, `#reduce`, `#guard`. One-liner solution: `theorem answer (n : Nat) : n + 0 = n := Nat.add_zero n`.

Theorem to prove
theorem answer (n : Nat) : n + 0 = n := by
  ?
You write Lean inside the wrapper namespace. Your body must define a top-level answer with type โˆ€ (n : Nat), n + 0 = n. You can declare any def, theorem, lemma, instance, open, variable etc. โ€” the static filter only blocks soundness-bypass tokens (sorry, axiom, native_decide, โ€ฆ) and wrapper-escape tokens (namespace, end, import, โ€ฆ).
Generated file template (preview)
import ProofGarden.Challenges.C0001.Statement
import Mathlib

namespace ProofGarden.Challenges.C0001.Submissions.<submission-id>

-- โ”Œโ”€โ”€ USER BODY START
-- โ”‚  (your submission)  e.g.:
-- โ”‚  theorem answer (n : Nat) : n + 0 = n := by
-- โ”‚    sorry  -- โ† FORBIDDEN; use real tactics
-- โ””โ”€โ”€ USER BODY END

def solution_target : โˆ€ (n : Nat), n + 0 = n := answer
#print axioms solution_target

end ProofGarden.Challenges.C0001.Submissions.<submission-id>

Sign in to submit a proof body.

Sign inCreate account
Allowed proof-body format

Any sequence of Lean tactics is fine. The static filter rejects tokens that don't belong inside a tactic block โ€” the full list:

importnamespacesectionenduniverseaxiomsorryadmitnative_decideopaqueconstantimplemented_byexternunsafemacrosyntaxelabrun_cmdinitializeset_optionattribute#eval#check#print#reduce#guardlocal attributesolution_target
Recent submissions

Activity

  • GitHub failedalice5/22/2026, 2:22:36 PM
  • Acceptedalice5/22/2026, 2:21:59 PM
  • GitHub failedalice5/22/2026, 2:18:27 PM
  • GitHub failedalice5/22/2026, 2:17:50 PM
  • Acceptedalice5/22/2026, 1:27:22 PM
  • Static rejectedalice5/22/2026, 1:27:19 PM
  • Acceptedalice5/22/2026, 1:25:53 PM