File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -298,10 +298,25 @@ def destructMutTuple (tupleName : Name) : VarMap → SSAExpr → SSAExpr
298298 .letE name (.app (.const (.prod₁ type rightTupleType)) (.var tupleName)) (.letE tupleName (.app (.const (.prod₂ type rightTupleType)) (.var tupleName)) (destructMutTuple tupleName ⟨b::l⟩ body))
299299termination_by as _ => as.size
300300
301+ #check Lean.LocalContext
302+ #check Lean.LocalContext.getUnusedName
303+ #check Lean.LocalContext.getUnusedName
304+ #check Name.appendIndexAfter
305+
306+ /- todo :: should be able to prove termination by showing that each name will have a maximal number of prefix occurances in the mutvars varmap -/
307+ private partial def freshNameAux (mutVars : VarMap) (baseName : Name) (idx : Nat) : Name :=
308+ if mutVars.any (·.1 == baseName.appendIndexAfter idx) then
309+ freshNameAux mutVars baseName (idx + 1 )
310+ else
311+ baseName.appendIndexAfter idx
301312/-
302313 for fixed mutVars, if baseName1 and baseName2 don't share a prefix then freshName will give different fresh names.
303314-/
304- def freshName (mutVars : VarMap) (baseName : Name) : Name := sorry
315+ def freshName (mutVars : VarMap) (baseName : Name) : Name :=
316+ if mutVars.any (·.1 == baseName) then
317+ freshNameAux mutVars baseName 1
318+ else
319+ baseName
305320
306321inductive SSADo where
307322| expr : SSAExpr → SSADo
You can’t perform that action at this time.
0 commit comments