Your definitions are close to what is in the litature. Really, "strong" and "static" are orthoginal. Being static means that your language needs to have some means of determining the types at compile time, while strong means those types are difficult to change during execution (runtime). Pascal/C/etc. determine the types via special syntax (int foo, bar; and such), while more modern Hindley-Milner type systems can figure it out based on what you do with the variable the first time you use it.

"There is no shame in being self-taught, only in not trying to learn in the first place." -- Atrus, Myst: The Book of D'ni.