Skip to content

Commit 0f138bd

Browse files
committed
implemented freshName
1 parent db5b285 commit 0f138bd

1 file changed

Lines changed: 16 additions & 1 deletion

File tree

Pullback/UnquoteTy/SSA.lean

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff 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))
299299
termination_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

306321
inductive SSADo where
307322
| expr : SSAExpr → SSADo

0 commit comments

Comments
 (0)