Static/dynamic is whether type checking is done at compile time or run type.
Strong/weak is how flexible the language is with type conversion.
Another explanation: https://en.hexlet.io/courses/intro_to_programming/lessons/ty...
Strongly typed dynamic: Python
Weakly typed dynamic: Javascript
Strongly typed static: Haskell
Weakly typed static: C
As in:
Static typing - 1 == "1" is false (Python style, integer isn't converted to string for comparison)
Dynamic typing - 1 == "1" is true (PHP style, integer or string may be converted)
Liskov, B; Zilles, S (1974). "Programming with abstract data types".
http://web.cs.iastate.edu/~hridesh/teaching/362/07/01/papers...