SmithParadox
Smith’s paradox [1] is a proof that there exist non-admissible types, that is, types that cannot be used with fixpoint induction.
inadmissible_type : exists (a : U 0) . not (admiss a)
One such type is the type of partial functions from nat
to unit
:
{ h : nat -> partial unit | not (forall x . halts (h x)) }
Let T
be this type, and let f
be the function:
fn g x . if x =? 0 then () else g (x - 1)
Since f
defers to its argument g
, it preserves partiality. Thus
one can show that f : partial T -> partial T
. If T
were
admissible, we could conclude by fixpoint induction that
fix f : partial T
. However fix f
clearly halts, so it would
follow that fix f : T
. That would mean fix f
is a partial
function, but it is easy to show that fix f
is actually total.
[1] Scott Fraser Smith. Partial Objects in Type Theory. Ph.D. dissertation, Cornell University. 1989.