Skip to content

Commit

Permalink
feat: support incrementality in command mode
Browse files Browse the repository at this point in the history
  • Loading branch information
kim-em committed Mar 13, 2024
1 parent b828b05 commit c12ce63
Show file tree
Hide file tree
Showing 8 changed files with 30 additions and 37 deletions.
7 changes: 6 additions & 1 deletion REPL/Main.lean
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ structure State where
-/
cmdStates : Array CommandSnapshot := #[]
incrementalStates : Array IncrementalState := #[]
latestInitialIncrementalState : Option Nat := none
latestIncrementalState : HashMap Nat Nat := {}
/--
Proof states after individual tactics.
Expand Down Expand Up @@ -203,7 +204,9 @@ def runCommand (s : Command) : M IO (CommandResponse ⊕ Error) := do
let (incrementalStateBefore?, notFound) ← do
let j? ← match s.incr with
| none => match s.env with
| none => pure none
| none => match (← get).latestInitialIncrementalState with
| none => pure none
| j => pure j
| some i => match (← get).latestIncrementalState.find? i with
| none => pure none
| j => pure j
Expand Down Expand Up @@ -235,6 +238,8 @@ def runCommand (s : Command) : M IO (CommandResponse ⊕ Error) := do
let incr ← recordIncrementalState incrementalState
if let some i := s.env then
modify fun c => { c with latestIncrementalState := c.latestIncrementalState.insert i incr }
else
modify fun c => { c with latestInitialIncrementalState := some incr }
let jsonTrees := match s.infotree with
| some "full" => trees
| some "tactics" => trees.bind InfoTree.retainTacticInfo
Expand Down
2 changes: 1 addition & 1 deletion lean-toolchain
Original file line number Diff line number Diff line change
@@ -1 +1 @@
lean4
leanprover/lean4-pr-releases:pr-release-3636
2 changes: 1 addition & 1 deletion test/Mathlib/lean-toolchain
Original file line number Diff line number Diff line change
@@ -1 +1 @@
lean4
leanprover/lean4-pr-releases:pr-release-3636
14 changes: 6 additions & 8 deletions test/incrementality.expected.out
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
{"incr": 0, "env": 0}

!
{"sorries":
[{"proofState": 0,
Expand All @@ -11,8 +9,8 @@
"pos": {"line": 1, "column": 0},
"endPos": {"line": 1, "column": 7},
"data": "declaration uses 'sorry'"}],
"incr": 1,
"env": 1}
"incr": 0,
"env": 0}

{"sorries":
[{"proofState": 1,
Expand All @@ -24,8 +22,8 @@
"pos": {"line": 1, "column": 0},
"endPos": {"line": 1, "column": 7},
"data": "declaration uses 'sorry'"}],
"incr": 2,
"env": 2}
"incr": 1,
"env": 1}

{"sorries":
[{"proofState": 2,
Expand All @@ -37,8 +35,8 @@
"pos": {"line": 1, "column": 0},
"endPos": {"line": 1, "column": 7},
"data": "declaration uses 'sorry'"}],
"incr": 3,
"env": 3}
"incr": 2,
"env": 2}

{"message": "Unknown incremental state."}

10 changes: 4 additions & 6 deletions test/incrementality.in
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
{"cmd": "import Lean\nopen Lean"}
{"cmd": "example : True := by\n dbg_trace \"!\"\n sorry"}

{"cmd": "example : True := by\n dbg_trace \"!\"\n sorry", "env": 0}
{"cmd": "example : True := by\n dbg_trace \"!\"\n sorry"}

{"cmd": "example : True := by\n dbg_trace \"!\"\n sorry", "env": 0}
{"cmd": "example : True := by\n dbg_trace \"!\"\n sorry", "incr": 1}

{"cmd": "example : True := by\n dbg_trace \"!\"\n sorry", "env": 0, "incr": 1}

{"cmd": "example : True := by\n dbg_trace \"!\"\n sorry", "env": 0, "incr": 37}
{"cmd": "example : True := by\n dbg_trace \"!\"\n sorry", "incr": 37}

4 changes: 0 additions & 4 deletions test/incrementality.lean
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
import Lean

open Lean

example : True := by
dbg_trace "!"
sorry
18 changes: 8 additions & 10 deletions test/incrementality_2.expected.out
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
{"incr": 0, "env": 0}

!1
!2
{"messages":
Expand All @@ -11,8 +9,8 @@
"pos": {"line": 1, "column": 0},
"endPos": {"line": 1, "column": 7},
"data": "declaration uses 'sorry'"}],
"incr": 1,
"env": 1}
"incr": 0,
"env": 0}

{"sorries":
[{"proofState": 0,
Expand All @@ -24,8 +22,8 @@
"pos": {"line": 1, "column": 0},
"endPos": {"line": 1, "column": 7},
"data": "declaration uses 'sorry'"}],
"incr": 2,
"env": 2}
"incr": 1,
"env": 1}

{"messages":
[{"severity": "error",
Expand All @@ -36,8 +34,8 @@
"pos": {"line": 1, "column": 0},
"endPos": {"line": 1, "column": 7},
"data": "declaration uses 'sorry'"}],
"incr": 3,
"env": 3}
"incr": 2,
"env": 2}

!2
{"messages":
Expand All @@ -49,6 +47,6 @@
"pos": {"line": 1, "column": 0},
"endPos": {"line": 1, "column": 7},
"data": "declaration uses 'sorry'"}],
"incr": 4,
"env": 4}
"incr": 3,
"env": 3}

10 changes: 4 additions & 6 deletions test/incrementality_2.in
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
{"cmd": "import Lean\nopen Lean"}
{"cmd": "example : True := by\n dbg_trace \"!1\"\n dbg_trace \"!2\""}

{"cmd": "example : True := by\n dbg_trace \"!1\"\n dbg_trace \"!2\"", "env": 0}
{"cmd": "example : True := by\n dbg_trace \"!1\"\n sorry"}

{"cmd": "example : True := by\n dbg_trace \"!1\"\n sorry", "env": 0}
{"cmd": "example : True := by\n dbg_trace \"!1\"\n dbg_trace \"!2\"", "incr": 0}

{"cmd": "example : True := by\n dbg_trace \"!1\"\n dbg_trace \"!2\"", "env": 0, "incr": 1}

{"cmd": "example : True := by\n dbg_trace \"!1\"\n dbg_trace \"!2\"", "env": 0, "incr": 2}
{"cmd": "example : True := by\n dbg_trace \"!1\"\n dbg_trace \"!2\"", "incr": 1}

0 comments on commit c12ce63

Please sign in to comment.