Step | Hyp | Ref | Expression |
1 |
|
eor |
(len l <= i + n -> nth i (drop l n) = nth (i + n) l) ->
(i + n < len l -> nth i (drop l n) = nth (i + n) l) ->
len l <= i + n \/ i + n < len l ->
nth i (drop l n) = nth (i + n) l |
2 |
|
ntheq0 |
nth i (drop l n) = 0 <-> len (drop l n) <= i |
3 |
|
leeq1 |
len (drop l n) = len l - n -> (len (drop l n) <= i <-> len l - n <= i) |
4 |
|
droplen |
len (drop l n) = len l - n |
5 |
3, 4 |
ax_mp |
len (drop l n) <= i <-> len l - n <= i |
6 |
|
lesubadd |
len l - n <= i <-> len l <= i + n |
7 |
6 |
bi2i |
len l <= i + n -> len l - n <= i |
8 |
5, 7 |
sylibr |
len l <= i + n -> len (drop l n) <= i |
9 |
2, 8 |
sylibr |
len l <= i + n -> nth i (drop l n) = 0 |
10 |
|
ntheq0 |
nth (i + n) l = 0 <-> len l <= i + n |
11 |
10 |
bi2i |
len l <= i + n -> nth (i + n) l = 0 |
12 |
9, 11 |
eqtr4d |
len l <= i + n -> nth i (drop l n) = nth (i + n) l |
13 |
1, 12 |
ax_mp |
(i + n < len l -> nth i (drop l n) = nth (i + n) l) -> len l <= i + n \/ i + n < len l -> nth i (drop l n) = nth (i + n) l |
14 |
|
ltaddsub |
i + n < len l <-> i < len l - n |
15 |
|
nthlfn |
i < len l - n -> nth i (lfn (\ x, nth (x + n) l - 1) (len l - n)) = suc ((\ x, nth (x + n) l - 1) @ i) |
16 |
15 |
conv drop |
i < len l - n -> nth i (drop l n) = suc ((\ x, nth (x + n) l - 1) @ i) |
17 |
14, 16 |
sylbi |
i + n < len l -> nth i (drop l n) = suc ((\ x, nth (x + n) l - 1) @ i) |
18 |
|
anr |
i + n < len l /\ x = i -> x = i |
19 |
18 |
addeq1d |
i + n < len l /\ x = i -> x + n = i + n |
20 |
19 |
ntheq1d |
i + n < len l /\ x = i -> nth (x + n) l = nth (i + n) l |
21 |
20 |
subeq1d |
i + n < len l /\ x = i -> nth (x + n) l - 1 = nth (i + n) l - 1 |
22 |
21 |
applamed |
i + n < len l -> (\ x, nth (x + n) l - 1) @ i = nth (i + n) l - 1 |
23 |
22 |
suceqd |
i + n < len l -> suc ((\ x, nth (x + n) l - 1) @ i) = suc (nth (i + n) l - 1) |
24 |
|
nthne0 |
nth (i + n) l != 0 <-> i + n < len l |
25 |
|
sub1can |
nth (i + n) l != 0 -> suc (nth (i + n) l - 1) = nth (i + n) l |
26 |
24, 25 |
sylbir |
i + n < len l -> suc (nth (i + n) l - 1) = nth (i + n) l |
27 |
23, 26 |
eqtrd |
i + n < len l -> suc ((\ x, nth (x + n) l - 1) @ i) = nth (i + n) l |
28 |
17, 27 |
eqtrd |
i + n < len l -> nth i (drop l n) = nth (i + n) l |
29 |
13, 28 |
ax_mp |
len l <= i + n \/ i + n < len l -> nth i (drop l n) = nth (i + n) l |
30 |
|
leorlt |
len l <= i + n \/ i + n < len l |
31 |
29, 30 |
ax_mp |
nth i (drop l n) = nth (i + n) l |