• ↑↓ to navigate
  • ↵ to open
  • ⟶ to select
  • ⌘ ⌥ ↵ to open in a panel
  • ←→ to navigate
  • esc to dismiss
⌘ '
keyboard shortcuts

The Problem

Can we automatically determine non-trivial properties of programs?

Core Idea

Rice’s theorem states that for all non-trivial properties of partial functions (computed by Turing machines), it is undecidable whether a given Turing machine computes a partial function with that property.

How It Works

A property is “non-trivial” if it is not always true or always false for all Turing machines. Examples:

  • “Does this machine’s output equal its input?”
  • “Does this machine output a prime number?”
  • “Does this machine halt on empty input?”

All such properties are undecidable—proving many problems are unsolvable without case-by-case analysis.

Key Properties

  • Proved by Henry Gordon Rice in 1953
  • Applies to all non-trivial properties of partial functions
  • Generalizes the halting problem to many properties
  • Any property about the function a program computes is undecidable

Visual Explanation

Rice_s_Theorem A Rice'S Theorem Input B Rice'S Theorem Core Mechanism A->B triggers C Rice'S Theorem Output B->C produces

Semantic Network

semantic_Rice_s_Theorem THIS Rice'S Theorem REL1 Related Concept THIS--REL1 related REL2 Builds Into THIS--REL2 builds into

Edge Cases & Gotchas

  • The theorem applies to properties of the function computed, not the program’s syntax
  • Trivial properties (always true/false) are still decidable

Why This Matters

Rice’s theorem tells us that any non-trivial property of program behavior is undecidable. This fundamental limit applies to program verification, malware detection, and many other areas.