This might be a stupid question, but why a separate programming language rather than aiming to verify/synthesize invariants in languages people use?
Not a stupid question at all. There are two reasons verification tends to happen in these specialized languages: the languages we usually use are often not expressive enough to write things like specifications, and a bit too expressive in the sense of letting people write program logic that is insanely difficult to verify (think untyped pointers into a dynamically allocated heap for example). So these verification re…
As for being not expressive enough for specifications, isn't the code itself a form of specification? :)