A normal form could float let-expressions up as high as possible, similar to A-normal form. This could be used for relating multiple scope-related passes. Such as let-floating and reordering.
Perhaps there is a way to combine this with renaming (e.g. using de Bruijn indices) to also solve renaming of variables.
It seems likely we will have to require uniqueness of names for this.
A normal form could float let-expressions up as high as possible, similar to A-normal form. This could be used for relating multiple scope-related passes. Such as let-floating and reordering.
Perhaps there is a way to combine this with renaming (e.g. using de Bruijn indices) to also solve renaming of variables.
It seems likely we will have to require uniqueness of names for this.