Mám-li parsovací funkci, která mi ze stringu dělá číslo, tak nemůže vracet číslo jen tak. Bez ohledu na to, jaký nástroj zvolím. Prostě je tam rozdvojka. Pokud mám funkci, která na vstupu přijímá číslo, a volá funkci, která vyžaduje jen sudé, tak se nevyhnu rozhodování co s lichejma.
Jasně, ale pokud třeba z kódu nějak vyplyne, že například predikát
Even dostává vždy dvojnásobek nějakého neznámého čísla, tak taky automaticky víš, že je sudé. Tohle jsou umělé příklady, v praxi jsou vztahy mezi hodnotami, typy a funkcemi mnohem složitější a symbolická analýza obecně odhalí víc chyb, než jen prosté kontroly konstant.
Obecně to je o tom, kde je dno rekurze. U konstant to je nula, ale mnohdy stačí nějaké větší číslo. To je třeba případ konkatenace seznamů.