import Lean import Pantograph.Proofs import Pantograph.Symbols open Pantograph /- Example of using the internal API to execute tactics! -/ def execute_proof (env: Lean.Environment): IO Unit := do let name := strToName "Nat.add_comm" let context := createContext name env (do let state ← start_proof_state IO.println "Proof state started!" let tactic := "intro n m" let (state, response) ← execute_tactic state tactic IO.println s! "Executed {tactic} Errors: {response.errors} Goals: {response.goals}" --let tactic := "assumption" -- should fail --let (_, response) ← execute_tactic state tactic --IO.println s! "Executed {tactic} Errors: {response.errors} Goals: {response.goals}" let tactic := "rw [Nat.add_comm]" let (state, response) ← execute_tactic state tactic IO.println s! "Executed {tactic} Errors: {response.errors} Goals: {response.goals}" ) |>.run context unsafe def main : IO Unit := do Lean.enableInitializersExecution Lean.initSearchPath (← Lean.findSysroot) let imports := ["Init"] let env: Lean.Environment ← Lean.importModules (imports := imports.map (λ str => { module := strToName str, runtimeOnly := false })) (opts := {}) (trustLevel := 1) execute_proof env example : ∀ (n m : Nat), n + m = m + n := by intros n m rw [Nat.add_comm]