The recursively bound loop is introduced at an odd type. Notice that it takes a type parameter t' but the type of the second argument refers to the outer t#1.
In typing environment:
[loop#3 : (#t'#192:Type -> Tot (l'#194:(Prims.list t#1) -> Tot (((Pulse.Lib.Core.stt Prims.unit) Pulse.Lib.Core.emp) (fun x#224 -> (Pulse.Lib.Core.emp $$ (residual) Prims.Tot Pulse.Lib.Core.vprop))))),
l#2 : (Prims.list t#1),
t#1 : Type]
Leaving out the
#t
produces the error: