あらゆる不都合な動作を「例外が飛びます」とか「終了コード127でプログラムが終了します」とかの “定義済の挙動/状態” へと飛ばしてしまえばそれは “型安全” な言語になるんだけど、それで? という話でしかない。
極論を言えば「未定義動作で必ず abort() する拡張されたC言語」みたいなものがあったらそれは型安全といえるはず。
で、サイレントに狂わなくなるのは確かにだいぶマシではあるが、所詮マシなだけなのよね
で、定義済の挙動であることはわかったけど、そもそも実行時に型エラーが出るようなプログラムを実行できてしまうのは本当に嬉しさ十分なんですか? というのが、開発者が向き合うべき本当の問題なのよ
で、これらを合わせると、「型のつく項が、型を保ったまま、値になるまで行き詰まることなく評価できる (または永久に値にできないまま評価し続ける破目になる)」というのが型システムの安全性 (健全性) という性質である、ということになる
[EDIT: 修正した (https://mastodon.cardina1.red/@lo48576/110698616033544189)]