| 1 |
1. T : Type
2. T List
3. T List
P:(T  ). nil nil  nil nil & ( x nil.P(x))
 | 1 step |
| 2 |
1. T : Type
2. T List
3. T List
4. u : T
5. v : T List
6. P:(T  ). v filter(P;nil)  v nil & ( x v.P(x))
P:(T  ). [u / v] nil  [u / v] nil & ( x [u / v].P(x))
 | 1 step |
| 3 |
1. T : Type
2. T List
3. u : T
4. v : T List
5. L2:T List, P:(T  ). L2 filter(P;v)  L2 v & ( x L2.P(x))
6. T List
P:(T  ).
nil if P(u) [u / filter(P;v)] else filter(P;v) fi

nil [u / v] & ( x nil.P(x))
 | 1 step |
| 4 |
1. T : Type
2. T List
3. u : T
4. v : T List
5. L2:T List, P:(T  ). L2 filter(P;v)  L2 v & ( x L2.P(x))
6. T List
7. u1 : T
8. v1 : T List
9. P:(T  ). v1 filter(P;[u / v])  v1 [u / v] & ( x v1.P(x))
P:(T  ).
[u1 / v1] if P(u) [u / filter(P;v)] else filter(P;v) fi

[u1 / v1] [u / v] & ( x [u1 / v1].P(x))
 | 20 steps |