I am the guy who posted this question. I somehow figure this out.
In the original form, consider the succ operation is defined as below (+1).
succ = λn.λf.λx. f (n f x)
Thus,
succ ONE
= (λn.λf.λx. f (n f x)) (λf. λx. f x)
= λf.λx. f ((λf. λx. f x) f x)
= λf.λx. f ((λx. f x) x)
= λf.λx. f (f x)
= TWO
Same to succ TWO, succ THREE ...
In my form, let us define succ like following.
succ = λn.λf. f (n f)
Here,
succ ONE
= (λn.λf. f (n f)) (λf. f)
= λf. f ((λf. f) f)
= λf. f f
= TWO
This also works.
However, the pattern breaks when we try to do succ ZERO
In the original form,
succ ZERO
= (λn.λf.λx. f (n f x)) (λf. λx. x)
= λf.λx. f ((λf. λx. x) f x)
= λf.λx. f ((λx. x) x)
= λf.λx. f x
= ONE
But in my form,
succ ZERO
= (λn.λf. f (n f)) (λf. λx. x)
= λf. f ((λf. λx. x) f)
= λf. f (λx. x)
If we really want my new form holds, we have to define ZERO = λf._ where _ is something like NULL or empty, which is not supported by the syntax.
Alternatively, I think we can define:
ZERO := λf. f
ONE := λf. f f
TWO := λf. f (f f)
So that the newly defined succ operation may still hold.
However, other things/rules can break.
For example, in the original form, the boolean FALSE (λx.λy.y) encoding is as same as ZERO. But in my form, this property will no longer hold.
...
There may be better explanations. But finally, I've somehow convinced myself that Church's design is a piece of art!