System F isn't consistent as a logic (pretty much precisely because it has general recursion). In languages with general recursion, you can do things like
Extensions with a letrec-like construct are common, and are sometimes inaccurately called 'System F', but those languages do not have the properties of System F.
You're right. I must have been thinking of one of those extensions you're talking about (F# maybe?). I should have remembered that System F is part of the lambda cube, so it's at least as consistent as CoC
No, they are not. Do you know what "interface" is in Java, and what is "class"? And what is "method"?
Interface Func doesn't refer to FuncToFunc in its declaration, and interface FuncToFunc doesn't refer to Func. The method Y does refer to those two interfaces, but it's declared later than those are, and they don't (and can't, acvtually) refer to it.
because the definition is not strongly typed.
Instead recursion must be added as an additional primitive to
the lambda calculus.
See https://papers.ssrn.com/abstract=3418003