[n]IN = InN = Nand
[n]IN : TThe latter is because [n]: (T->T)->(T->T), hence [n] I: (T->T), and therefore ([n]I)N : T.
Note: this part is exactly what does not hold in the system of Curry: x is not obliged to have a specific type T and therefore we can assume different types for x, thus obtaining different types for \x.N.
\x1x2...xn. x N1N2...NkHowever, since we have only one -> in the type, n must be 1, and x must be x1 because it can't be free. Moreover, k must be 0 because if we apply x1 to any term then the type of x1 cannot be simply alpha. In conclusion, the term must be \x1. x1, which is I.
(\x. case(x,\x.Omega,I))(inl [false]) -> (\x. case(x,\x.Omega,I))(inl [false]) -> ...
----- -----
(\x. case(x,\x.Omega,I))(inl [false]) -> case(inl [false],\x.Omega,I) -> case(inl [false],\x.Omega,I) -> ...
------------------------------------- ----- -----
(\x. case(x,\x.Omega,I))(inl [false]) -> case(inl [false],\x.Omega,I) -> Omega -> Omega -> ...
------------------------------------ ---------------------------- ----- -----
(\x. case(x,\x.Omega,Y)(inr [false]) -> (\x. case(x,\x.Omega,Y)(inr [false]) -> ...
----- -----
and a normalizing reduction sequence
(\x. case(x,\x.Omega,Y)(inr [false]) -> case(inr [false],\x.Omega,Y)
------------------------------------ ----------------------------
-> (\z.[false](zz))(\z.[false](zz))
-----------
-> (\zy.y)(\z.[false](zz))
-----------------------
-> \y.y (normal form)
Note: By mistake the original term in this
question was (\x. case(x,\x.Omega,Y)(inr [true]). This
term is not normalizing.
G |- M: A + B G |- N: A -> C G |- P: B -> C
+elim ---------------------------------------------------
G |- case(M, N, P) : C