{ "cells": [ { "cell_type": "markdown", "id": "fe7a3037-5c49-4097-9a5d-575b958cc7f8", "metadata": {}, "source": [ "# Data Extraction" ] }, { "cell_type": "code", "execution_count": 1, "id": "fc68ad1d-e64c-48b7-9461-50d872d30473", "metadata": {}, "outputs": [], "source": [ "import os\n", "from pathlib import Path\n", "from pantograph.server import Server" ] }, { "cell_type": "markdown", "id": "fd13c644-d731-4f81-964e-584bbd43e51c", "metadata": {}, "source": [ "## Tactic Invocation\n", "\n", "Pantograph can extract tactic invocation data from a Lean file. A **tactic\n", "invocation** is a tuple containing the before and after goal states, and the\n", "tactic which converts the \"before\" state to the \"after\" state.\n", "\n", "To extract tactic invocation data, use `server.tactic_invocations(file_name)`\n", "and supply the file name of the input Lean file." ] }, { "cell_type": "code", "execution_count": 2, "id": "6282dc6f-4eac-4263-8277-9d54d19ad1a5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "$PWD: /home/aniva/Projects/atp/PyPantograph/examples/Example\n" ] } ], "source": [ "project_path = Path(os.getcwd()).parent.resolve() / 'examples/Example'\n", "print(f\"$PWD: {project_path}\")\n", "server = Server(imports=['Example'], project_path=project_path)\n", "units, invocations = server.tactic_invocations(project_path / \"Example.lean\")" ] }, { "cell_type": "markdown", "id": "c3c1be91-27a5-4481-b09d-a32dbb94b058", "metadata": {}, "source": [ "The function returns a tuple `([str], [TacticInvocation])`. The former element is a list of strings containing each compilation unit, comment data included." ] }, { "cell_type": "code", "execution_count": 3, "id": "e994aa2b-5d5e-4f86-af6c-40e0b3a032d2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "==== #0 ====\n", "/-- Ensure that Aesop is running -/\n", "example : α → α :=\n", " by aesop\n", "\n", "\n", "==== #1 ====\n", "example : ∀ (p q: Prop), p ∨ q → q ∨ p := by\n", " intro p q h\n", " -- Here are some comments\n", " cases h\n", " . apply Or.inr\n", " assumption\n", " . apply Or.inl\n", " assumption\n", "\n" ] } ], "source": [ "for i, u in enumerate(units):\n", " print(f\"==== #{i} ====\")\n", " print(u)" ] }, { "cell_type": "markdown", "id": "52e650fc-4a87-445f-8aa8-707ed9e36c03", "metadata": {}, "source": [ "The latter is a list of `TacticInvocation`, which contains the `.before` (corresponding to the state before the tactic), `.after` (corresponding to the state after the tactic), and `.tactic` (tactic executed) fields. " ] }, { "cell_type": "code", "execution_count": 4, "id": "8e0f0def-dd3c-4550-8a7c-b4aec6c7fd7f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Before]\n", "α : Sort ?u.7\n", "⊢ α → α\n", "[Tactic]\n", "aesop (using [])\n", "[Afte]\n", "\n", "[Before]\n", "⊢ ∀ (p q : Prop), p ∨ q → q ∨ p\n", "[Tactic]\n", "intro p q h (using [])\n", "[Afte]\n", "p q : Prop\n", "h : p ∨ q\n", "⊢ q ∨ p\n", "[Before]\n", "p q : Prop\n", "h : p ∨ q\n", "⊢ q ∨ p\n", "[Tactic]\n", "cases h (using ['Eq.refl', 'Or'])\n", "[Afte]\n", "case inl\n", "p q : Prop\n", "h✝ : p\n", "⊢ q ∨ p\n", "case inr p q : Prop h✝ : q ⊢ q ∨ p\n", "[Before]\n", "case inl\n", "p q : Prop\n", "h✝ : p\n", "⊢ q ∨ p\n", "[Tactic]\n", "apply Or.inr (using ['Or.inr'])\n", "[Afte]\n", "case inl.h\n", "p q : Prop\n", "h✝ : p\n", "⊢ p\n", "[Before]\n", "case inl.h\n", "p q : Prop\n", "h✝ : p\n", "⊢ p\n", "[Tactic]\n", "assumption (using [])\n", "[Afte]\n", "\n", "[Before]\n", "case inr\n", "p q : Prop\n", "h✝ : q\n", "⊢ q ∨ p\n", "[Tactic]\n", "apply Or.inl (using ['Or.inl'])\n", "[Afte]\n", "case inr.h\n", "p q : Prop\n", "h✝ : q\n", "⊢ q\n", "[Before]\n", "case inr.h\n", "p q : Prop\n", "h✝ : q\n", "⊢ q\n", "[Tactic]\n", "assumption (using [])\n", "[Afte]\n", "\n" ] } ], "source": [ "for i in invocations:\n", " print(f\"[Before]\\n{i.before}\")\n", " print(f\"[Tactic]\\n{i.tactic} (using {i.used_constants})\")\n", " print(f\"[Afte]\\n{i.after}\")" ] }, { "cell_type": "code", "execution_count": null, "id": "51f5398b-5416-4dc1-81cd-6d2514758232", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.6" } }, "nbformat": 4, "nbformat_minor": 5 }