What is a logical tautology and why does EK9 reject it?

← Data Flow Safety · Ref: Q795

EK9 detects logical tautologies and contradictions at compile time (E08085). A tautology is an expression that is ALWAYS true regardless of operand values. A contradiction is ALWAYS false.

TAUTOLOGY PATTERNS (always true)

  flag or not flag        always true
  not flag or flag        always true

CONTRADICTION PATTERNS (always false)

  flag and not flag       always false
  not flag and flag       always false

WHY REJECTED

These expressions indicate logic errors - typically a copy-paste mistake or incorrect variable name. If always-true is intended, use 'true' directly. If always-false, use 'false'.

CORRECT ALTERNATIVES

  ready or fallback          different variables - valid
  enabled and not expired    different variables - valid

See Q632 for define-before-use. See Q789 for unused variables.

Example

defines module qa.dataflowsafety.logicaltautology

  defines function

    checkAvailability()
      ->
        isReady as Boolean
        hasFallback as Boolean
      <- result as Boolean?

      result: isReady or hasFallback

    checkRequirements()
      ->
        isEnabled as Boolean
        isExpired as Boolean
      <- result as Boolean?

      result: isEnabled and not isExpired

Common mistakes

E08085 — The expression 'isReady or not isReady' is a logical tautology - it is always true regardless of the value of isReady. Use different variables or simplify to 'true'. See ek9 -h E08085 for details.

Incorrect:

      result: isReady or not isReady

Correct:

      result: isReady or hasFallback
Other ways to ask this
  • What triggers E08085 logical tautology?
  • Why does 'flag or not flag' cause a compiler error?
  • How does EK9 detect always-true logical expressions?

Coming from another language?

Java: no compiler detection, relies on FindBugs/SpotBugs. Python: no detection, relies on pylint. Rust: clippy warns about tautological comparisons. Kotlin: IntelliJ warns but compiles. Go: go vet does not detect logical tautologies. EK9: compile-time error E08085, code cannot proceed past this check.

Keywords: dead, logical, true, contradiction, false, E08085, always, tautology, code