@@ -152,111 +152,3 @@ def commandWithoutAsync : (act : CommandElabM α) → CommandElabM α :=
152
152
153
153
def withoutAsync [Monad m] [MonadWithOptions m] : (act : m α) → m α :=
154
154
withOptions (Elab.async.set · false )
155
-
156
-
157
- /--
158
- Consistently rewrite all substrings that look like automatic metavariables (e.g "?m.123") so
159
- that they're ?m.1, ?m.2, etc.
160
- -/
161
- def normalizeMetavars (str : String) : String := Id.run do
162
- let mut out := ""
163
- let mut iter := str.iter
164
- let mut gensymCounter := 1
165
- let mut nums : Std.HashMap String Nat := {}
166
- -- States are:
167
- -- * none - Not looking at a metavar
168
- -- * 0 - Saw the ?
169
- -- * 1 - Saw the m
170
- -- * 2 - Saw the .
171
- -- * 3 - Saw one or more digits
172
- let mut state : Option (Fin 4 × String.Iterator) := none
173
- while h : iter.hasNext do
174
- let c := iter.curr' h
175
-
176
- match state with
177
- | none =>
178
- if c == '?' then
179
- state := some (0 , iter)
180
- else
181
- out := out.push c
182
- | some (0 , i) =>
183
- state := if c == 'm' then some (1 , i) else none
184
- | some (1 , i) =>
185
- state := if c == '.' then some (2 , i) else none
186
- | some (2 , i) =>
187
- state := if c.isDigit then some (3 , i) else none
188
- | some (3 , i) =>
189
- unless c.isDigit do
190
- state := none
191
- let mvarStr := i.extract iter
192
- match nums[mvarStr]? with
193
- | none =>
194
- nums := nums.insert mvarStr gensymCounter
195
- out := out ++ s! "?m.{ gensymCounter} "
196
- gensymCounter := gensymCounter + 1
197
- | some s => out := out ++ s! "?m.{ s} "
198
- out := out.push c
199
-
200
- iter := iter.next
201
- match state with
202
- | some (3 , i) =>
203
- let mvarStr := i.extract iter
204
- match nums[mvarStr]? with
205
- | none =>
206
- nums := nums.insert mvarStr gensymCounter
207
- out := out ++ s! "?m.{ gensymCounter} "
208
- gensymCounter := gensymCounter + 1
209
- | some s => out := out ++ s! "?m.{ s} "
210
- | some (_, i) =>
211
- out := out ++ i.extract iter
212
- | _ => pure ()
213
-
214
- out
215
-
216
- /-- info: "List ?m.1" -/
217
- #guard_msgs in
218
- #eval normalizeMetavars "List ?m.9783"
219
-
220
- /-- info: "List ?m.1 " -/
221
- #guard_msgs in
222
- #eval normalizeMetavars "List ?m.9783 "
223
-
224
- /-- info: "x : ?m.1\nxs : List ?m.1\nelem : x ∈ xs\n⊢ xs.length > 0\n" -/
225
- #guard_msgs in
226
- #eval normalizeMetavars
227
- r##"x : ?m.1034
228
- xs : List ?m.1034
229
- elem : x ∈ xs
230
- ⊢ xs.length > 0
231
- " ##
232
-
233
- /-- info: "x : ?m.1\nxs : List ?m.1\nelem : x ∈ xs\n⊢ xs.length > 0" -/
234
- #guard_msgs in
235
- #eval normalizeMetavars
236
- r##"x : ?m.1034
237
- xs : List ?m.1034
238
- elem : x ∈ xs
239
- ⊢ xs.length > 0" ##
240
-
241
- /-- info: "x : ?m.1\nxs : List ?m.2\nelem : x ∈ xs\n⊢ xs.length > 0" -/
242
- #guard_msgs in
243
- #eval normalizeMetavars
244
- r##"x : ?m.1034
245
- xs : List ?m.10345
246
- elem : x ∈ xs
247
- ⊢ xs.length > 0" ##
248
-
249
- /-- info: "x : ?m.1\nxs : List ?m.2\nelem : x ∈ xs\n⊢ xs.length > 0" -/
250
- #guard_msgs in
251
- #eval normalizeMetavars
252
- r##"x : ?m.1035
253
- xs : List ?m.1034
254
- elem : x ∈ xs
255
- ⊢ xs.length > 0" ##
256
-
257
- #eval normalizeMetavars
258
- r##"x : ?m.1035
259
- α : Type ?u.1234
260
- xs : List ?m.1034
261
- elem : x ∈ xs
262
- ⊢ xs.length > 0" ##
0 commit comments