@@ -152,111 +152,3 @@ def commandWithoutAsync : (act : CommandElabM α) → CommandElabM α :=
152152
153153def withoutAsync [Monad m] [MonadWithOptions m] : (act : m α) → m α :=
154154 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