TL;DR
常に真である、変数や構造体の性質。Wikipedia によると、ある処理の間、真理値が真のまま変わらない述語のことである。
なぜ必要か
Wikipedia によると、不変条件はプログラムについて推論するときに役立つ。コンパイラの最適化、契約による設計、形式手法によるプログラムの正しさの検証などで重視されている。プログラマは、アサーションを使ってコードの中に不変条件を明示することが多い。
例
- テキストの各行の終端は、改行文字(
\n)でなければならない。 - ループ不変条件
- クラス不変条件。一部のオブジェクト指向言語には、これを指定するための構文がある。
Wikipedia では MU パズルが例に挙がっている。MI という文字列を 4 つの変換規則で MU にできるかという問題で、「文字列の中の I の個数は 3 の倍数ではない」という不変条件を見つけると、変換できないことがすぐに分かる。