Skip to content

Commit c12ce63

Browse files
committed
feat: support incrementality in command mode
1 parent b828b05 commit c12ce63

8 files changed

+30
-37
lines changed

REPL/Main.lean

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ structure State where
6666
-/
6767
cmdStates : Array CommandSnapshot := #[]
6868
incrementalStates : Array IncrementalState := #[]
69+
latestInitialIncrementalState : Option Nat := none
6970
latestIncrementalState : HashMap Nat Nat := {}
7071
/--
7172
Proof states after individual tactics.
@@ -203,7 +204,9 @@ def runCommand (s : Command) : M IO (CommandResponse ⊕ Error) := do
203204
let (incrementalStateBefore?, notFound) ← do
204205
let j? ← match s.incr with
205206
| none => match s.env with
206-
| none => pure none
207+
| none => match (← get).latestInitialIncrementalState with
208+
| none => pure none
209+
| j => pure j
207210
| some i => match (← get).latestIncrementalState.find? i with
208211
| none => pure none
209212
| j => pure j
@@ -235,6 +238,8 @@ def runCommand (s : Command) : M IO (CommandResponse ⊕ Error) := do
235238
let incr ← recordIncrementalState incrementalState
236239
if let some i := s.env then
237240
modify fun c => { c with latestIncrementalState := c.latestIncrementalState.insert i incr }
241+
else
242+
modify fun c => { c with latestInitialIncrementalState := some incr }
238243
let jsonTrees := match s.infotree with
239244
| some "full" => trees
240245
| some "tactics" => trees.bind InfoTree.retainTacticInfo

lean-toolchain

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
lean4
1+
leanprover/lean4-pr-releases:pr-release-3636

test/Mathlib/lean-toolchain

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
lean4
1+
leanprover/lean4-pr-releases:pr-release-3636

test/incrementality.expected.out

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
{"incr": 0, "env": 0}
2-
31
!
42
{"sorries":
53
[{"proofState": 0,
@@ -11,8 +9,8 @@
119
"pos": {"line": 1, "column": 0},
1210
"endPos": {"line": 1, "column": 7},
1311
"data": "declaration uses 'sorry'"}],
14-
"incr": 1,
15-
"env": 1}
12+
"incr": 0,
13+
"env": 0}
1614

1715
{"sorries":
1816
[{"proofState": 1,
@@ -24,8 +22,8 @@
2422
"pos": {"line": 1, "column": 0},
2523
"endPos": {"line": 1, "column": 7},
2624
"data": "declaration uses 'sorry'"}],
27-
"incr": 2,
28-
"env": 2}
25+
"incr": 1,
26+
"env": 1}
2927

3028
{"sorries":
3129
[{"proofState": 2,
@@ -37,8 +35,8 @@
3735
"pos": {"line": 1, "column": 0},
3836
"endPos": {"line": 1, "column": 7},
3937
"data": "declaration uses 'sorry'"}],
40-
"incr": 3,
41-
"env": 3}
38+
"incr": 2,
39+
"env": 2}
4240

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

test/incrementality.in

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
{"cmd": "import Lean\nopen Lean"}
1+
{"cmd": "example : True := by\n dbg_trace \"!\"\n sorry"}
22

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

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

7-
{"cmd": "example : True := by\n dbg_trace \"!\"\n sorry", "env": 0, "incr": 1}
8-
9-
{"cmd": "example : True := by\n dbg_trace \"!\"\n sorry", "env": 0, "incr": 37}
7+
{"cmd": "example : True := by\n dbg_trace \"!\"\n sorry", "incr": 37}
108

test/incrementality.lean

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
import Lean
2-
3-
open Lean
4-
51
example : True := by
62
dbg_trace "!"
73
sorry

test/incrementality_2.expected.out

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
{"incr": 0, "env": 0}
2-
31
!1
42
!2
53
{"messages":
@@ -11,8 +9,8 @@
119
"pos": {"line": 1, "column": 0},
1210
"endPos": {"line": 1, "column": 7},
1311
"data": "declaration uses 'sorry'"}],
14-
"incr": 1,
15-
"env": 1}
12+
"incr": 0,
13+
"env": 0}
1614

1715
{"sorries":
1816
[{"proofState": 0,
@@ -24,8 +22,8 @@
2422
"pos": {"line": 1, "column": 0},
2523
"endPos": {"line": 1, "column": 7},
2624
"data": "declaration uses 'sorry'"}],
27-
"incr": 2,
28-
"env": 2}
25+
"incr": 1,
26+
"env": 1}
2927

3028
{"messages":
3129
[{"severity": "error",
@@ -36,8 +34,8 @@
3634
"pos": {"line": 1, "column": 0},
3735
"endPos": {"line": 1, "column": 7},
3836
"data": "declaration uses 'sorry'"}],
39-
"incr": 3,
40-
"env": 3}
37+
"incr": 2,
38+
"env": 2}
4139

4240
!2
4341
{"messages":
@@ -49,6 +47,6 @@
4947
"pos": {"line": 1, "column": 0},
5048
"endPos": {"line": 1, "column": 7},
5149
"data": "declaration uses 'sorry'"}],
52-
"incr": 4,
53-
"env": 4}
50+
"incr": 3,
51+
"env": 3}
5452

test/incrementality_2.in

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
{"cmd": "import Lean\nopen Lean"}
1+
{"cmd": "example : True := by\n dbg_trace \"!1\"\n dbg_trace \"!2\""}
22

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

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

7-
{"cmd": "example : True := by\n dbg_trace \"!1\"\n dbg_trace \"!2\"", "env": 0, "incr": 1}
8-
9-
{"cmd": "example : True := by\n dbg_trace \"!1\"\n dbg_trace \"!2\"", "env": 0, "incr": 2}
7+
{"cmd": "example : True := by\n dbg_trace \"!1\"\n dbg_trace \"!2\"", "incr": 1}

0 commit comments

Comments
 (0)