@@ -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