Metamath Proof Explorer


Theorem cshwidxmod

Description: The symbol at a given index of a cyclically shifted nonempty word is the symbol at the shifted index of the original word. (Contributed by AV, 13-May-2018) (Revised by AV, 21-May-2018) (Revised by AV, 30-Oct-2018) (Proof shortened by AV, 12-Oct-2022)

Ref Expression
Assertion cshwidxmod W Word V N I 0 ..^ W W cyclShift N I = W I + N mod W

Proof

Step Hyp Ref Expression
1 elfzo0 I 0 ..^ W I 0 W I < W
2 nnne0 W W 0
3 eqneqall W = 0 W 0 W cyclShift N I = W I + N mod W
4 2 3 syl5com W W = 0 W cyclShift N I = W I + N mod W
5 4 3ad2ant2 I 0 W I < W W = 0 W cyclShift N I = W I + N mod W
6 1 5 sylbi I 0 ..^ W W = 0 W cyclShift N I = W I + N mod W
7 6 3ad2ant3 W Word V N I 0 ..^ W W = 0 W cyclShift N I = W I + N mod W
8 lencl W Word V W 0
9 elnnne0 W W 0 W 0
10 simprl W N I 0 ..^ W N
11 cshword W Word V N W cyclShift N = W substr N mod W W ++ W prefix N mod W
12 10 11 sylan2 W Word V W N I 0 ..^ W W cyclShift N = W substr N mod W W ++ W prefix N mod W
13 12 fveq1d W Word V W N I 0 ..^ W W cyclShift N I = W substr N mod W W ++ W prefix N mod W I
14 swrdcl W Word V W substr N mod W W Word V
15 14 adantr W Word V W N I 0 ..^ W W substr N mod W W Word V
16 pfxcl W Word V W prefix N mod W Word V
17 16 adantr W Word V W N I 0 ..^ W W prefix N mod W Word V
18 simpl W Word V W N I 0 ..^ W W Word V
19 simpl N I 0 ..^ W N
20 19 anim2i W N I 0 ..^ W W N
21 20 adantl W Word V W N I 0 ..^ W W N
22 21 ancomd W Word V W N I 0 ..^ W N W
23 zmodfzp1 N W N mod W 0 W
24 22 23 syl W Word V W N I 0 ..^ W N mod W 0 W
25 nn0fz0 W 0 W 0 W
26 8 25 sylib W Word V W 0 W
27 26 adantr W Word V W N I 0 ..^ W W 0 W
28 swrdlen W Word V N mod W 0 W W 0 W W substr N mod W W = W N mod W
29 18 24 27 28 syl3anc W Word V W N I 0 ..^ W W substr N mod W W = W N mod W
30 20 ancomd W N I 0 ..^ W N W
31 30 23 syl W N I 0 ..^ W N mod W 0 W
32 pfxlen W Word V N mod W 0 W W prefix N mod W = N mod W
33 31 32 sylan2 W Word V W N I 0 ..^ W W prefix N mod W = N mod W
34 29 33 oveq12d W Word V W N I 0 ..^ W W substr N mod W W + W prefix N mod W = W - N mod W + N mod W
35 29 34 oveq12d W Word V W N I 0 ..^ W W substr N mod W W ..^ W substr N mod W W + W prefix N mod W = W N mod W ..^ W - N mod W + N mod W
36 35 eleq2d W Word V W N I 0 ..^ W I W substr N mod W W ..^ W substr N mod W W + W prefix N mod W I W N mod W ..^ W - N mod W + N mod W
37 36 biimparc I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W I W substr N mod W W ..^ W substr N mod W W + W prefix N mod W
38 ccatval2 W substr N mod W W Word V W prefix N mod W Word V I W substr N mod W W ..^ W substr N mod W W + W prefix N mod W W substr N mod W W ++ W prefix N mod W I = W prefix N mod W I W substr N mod W W
39 15 17 37 38 syl2an23an I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W W substr N mod W W ++ W prefix N mod W I = W prefix N mod W I W substr N mod W W
40 26 ad2antrl I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W W 0 W
41 18 24 40 28 syl2an23an I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W W substr N mod W W = W N mod W
42 41 oveq2d I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W I W substr N mod W W = I W N mod W
43 42 fveq2d I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W W prefix N mod W I W substr N mod W W = W prefix N mod W I W N mod W
44 elfzo2 I W N mod W ..^ W - N mod W + N mod W I W N mod W W - N mod W + N mod W I < W - N mod W + N mod W
45 eluz2 I W N mod W W N mod W I W N mod W I
46 simpl I N W I
47 nnz W W
48 47 adantl N W W
49 zmodcl N W N mod W 0
50 49 nn0zd N W N mod W
51 48 50 zsubcld N W W N mod W
52 51 adantl I N W W N mod W
53 46 52 zsubcld I N W I W N mod W
54 53 adantlr I W N mod W I N W I W N mod W
55 zre I I
56 nnre W W
57 56 adantl N W W
58 49 nn0red N W N mod W
59 57 58 resubcld N W W N mod W
60 subge0 I W N mod W 0 I W N mod W W N mod W I
61 55 59 60 syl2an I N W 0 I W N mod W W N mod W I
62 61 exbiri I N W W N mod W I 0 I W N mod W
63 62 com23 I W N mod W I N W 0 I W N mod W
64 63 imp31 I W N mod W I N W 0 I W N mod W
65 elnn0uz I W N mod W 0 I W N mod W 0
66 elnn0z I W N mod W 0 I W N mod W 0 I W N mod W
67 65 66 bitr3i I W N mod W 0 I W N mod W 0 I W N mod W
68 54 64 67 sylanbrc I W N mod W I N W I W N mod W 0
69 68 adantlr I W N mod W I I < W - N mod W + N mod W N W I W N mod W 0
70 50 adantl I W N mod W I I < W - N mod W + N mod W N W N mod W
71 55 adantr I N W I
72 59 adantl I N W W N mod W
73 58 adantl I N W N mod W
74 71 72 73 ltsubadd2d I N W I W N mod W < N mod W I < W - N mod W + N mod W
75 74 adantlr I W N mod W I N W I W N mod W < N mod W I < W - N mod W + N mod W
76 75 exbiri I W N mod W I N W I < W - N mod W + N mod W I W N mod W < N mod W
77 76 com23 I W N mod W I I < W - N mod W + N mod W N W I W N mod W < N mod W
78 77 imp31 I W N mod W I I < W - N mod W + N mod W N W I W N mod W < N mod W
79 elfzo2 I W N mod W 0 ..^ N mod W I W N mod W 0 N mod W I W N mod W < N mod W
80 69 70 78 79 syl3anbrc I W N mod W I I < W - N mod W + N mod W N W I W N mod W 0 ..^ N mod W
81 80 exp31 I W N mod W I I < W - N mod W + N mod W N W I W N mod W 0 ..^ N mod W
82 81 3adant1 W N mod W I W N mod W I I < W - N mod W + N mod W N W I W N mod W 0 ..^ N mod W
83 45 82 sylbi I W N mod W I < W - N mod W + N mod W N W I W N mod W 0 ..^ N mod W
84 83 imp I W N mod W I < W - N mod W + N mod W N W I W N mod W 0 ..^ N mod W
85 84 3adant2 I W N mod W W - N mod W + N mod W I < W - N mod W + N mod W N W I W N mod W 0 ..^ N mod W
86 44 85 sylbi I W N mod W ..^ W - N mod W + N mod W N W I W N mod W 0 ..^ N mod W
87 86 expdcom N W I W N mod W ..^ W - N mod W + N mod W I W N mod W 0 ..^ N mod W
88 87 adantr N I 0 ..^ W W I W N mod W ..^ W - N mod W + N mod W I W N mod W 0 ..^ N mod W
89 88 impcom W N I 0 ..^ W I W N mod W ..^ W - N mod W + N mod W I W N mod W 0 ..^ N mod W
90 89 adantl W Word V W N I 0 ..^ W I W N mod W ..^ W - N mod W + N mod W I W N mod W 0 ..^ N mod W
91 90 impcom I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W I W N mod W 0 ..^ N mod W
92 pfxfv W Word V N mod W 0 W I W N mod W 0 ..^ N mod W W prefix N mod W I W N mod W = W I W N mod W
93 18 24 91 92 syl2an23an I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W W prefix N mod W I W N mod W = W I W N mod W
94 elfzoelz I 0 ..^ W I
95 94 zcnd I 0 ..^ W I
96 95 ad2antll W N I 0 ..^ W I
97 nncn W W
98 97 adantr W N I 0 ..^ W W
99 30 49 syl W N I 0 ..^ W N mod W 0
100 99 nn0cnd W N I 0 ..^ W N mod W
101 96 98 100 subsub3d W N I 0 ..^ W I W N mod W = I + N mod W - W
102 101 ad2antll I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W I W N mod W = I + N mod W - W
103 30 ad2antll I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W N W
104 97 adantl N W W
105 49 nn0cnd N W N mod W
106 104 105 npcand N W W - N mod W + N mod W = W
107 106 ex N W W - N mod W + N mod W = W
108 107 adantr N I 0 ..^ W W W - N mod W + N mod W = W
109 108 impcom W N I 0 ..^ W W - N mod W + N mod W = W
110 109 adantl W Word V W N I 0 ..^ W W - N mod W + N mod W = W
111 110 oveq2d W Word V W N I 0 ..^ W W N mod W ..^ W - N mod W + N mod W = W N mod W ..^ W
112 111 eleq2d W Word V W N I 0 ..^ W I W N mod W ..^ W - N mod W + N mod W I W N mod W ..^ W
113 112 biimpac I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W I W N mod W ..^ W
114 modaddmodup N W I W N mod W ..^ W I + N mod W - W = I + N mod W
115 103 113 114 sylc I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W I + N mod W - W = I + N mod W
116 102 115 eqtrd I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W I W N mod W = I + N mod W
117 116 fveq2d I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W W I W N mod W = W I + N mod W
118 93 117 eqtrd I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W W prefix N mod W I W N mod W = W I + N mod W
119 39 43 118 3eqtrd I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W W substr N mod W W ++ W prefix N mod W I = W I + N mod W
120 119 ex I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W W substr N mod W W ++ W prefix N mod W I = W I + N mod W
121 112 notbid W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W - N mod W + N mod W ¬ I W N mod W ..^ W
122 14 ad2antrr W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W W substr N mod W W Word V
123 16 ad2antrr W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W W prefix N mod W Word V
124 49 ancoms W N N mod W 0
125 124 nn0zd W N N mod W
126 125 adantrr W N I 0 ..^ W N mod W
127 zre N N
128 127 adantr N I 0 ..^ W N
129 nnrp W W +
130 modlt N W + N mod W < W
131 128 129 130 syl2anr W N I 0 ..^ W N mod W < W
132 simprrr W Word V W N I 0 ..^ W I 0 ..^ W
133 fzonfzoufzol N mod W N mod W < W I 0 ..^ W ¬ I W N mod W ..^ W I 0 ..^ W N mod W
134 126 131 132 133 syl2an23an W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W I 0 ..^ W N mod W
135 134 imp W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W I 0 ..^ W N mod W
136 simpll W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W W Word V
137 24 adantr W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W N mod W 0 W
138 26 ad2antrr W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W W 0 W
139 136 137 138 28 syl3anc W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W W substr N mod W W = W N mod W
140 139 oveq2d W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W 0 ..^ W substr N mod W W = 0 ..^ W N mod W
141 135 140 eleqtrrd W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W I 0 ..^ W substr N mod W W
142 ccatval1 W substr N mod W W Word V W prefix N mod W Word V I 0 ..^ W substr N mod W W W substr N mod W W ++ W prefix N mod W I = W substr N mod W W I
143 122 123 141 142 syl3anc W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W W substr N mod W W ++ W prefix N mod W I = W substr N mod W W I
144 swrdfv W Word V N mod W 0 W W 0 W I 0 ..^ W N mod W W substr N mod W W I = W I + N mod W
145 136 137 138 135 144 syl31anc W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W W substr N mod W W I = W I + N mod W
146 30 ad2antlr W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W N W
147 modaddmodlo N W I 0 ..^ W N mod W I + N mod W = I + N mod W
148 146 135 147 sylc W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W I + N mod W = I + N mod W
149 148 fveq2d W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W W I + N mod W = W I + N mod W
150 143 145 149 3eqtrd W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W W substr N mod W W ++ W prefix N mod W I = W I + N mod W
151 150 ex W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W W substr N mod W W ++ W prefix N mod W I = W I + N mod W
152 121 151 sylbid W Word V W N I 0 ..^ W ¬ I W N mod W ..^ W - N mod W + N mod W W substr N mod W W ++ W prefix N mod W I = W I + N mod W
153 152 com12 ¬ I W N mod W ..^ W - N mod W + N mod W W Word V W N I 0 ..^ W W substr N mod W W ++ W prefix N mod W I = W I + N mod W
154 120 153 pm2.61i W Word V W N I 0 ..^ W W substr N mod W W ++ W prefix N mod W I = W I + N mod W
155 13 154 eqtrd W Word V W N I 0 ..^ W W cyclShift N I = W I + N mod W
156 155 exp32 W Word V W N I 0 ..^ W W cyclShift N I = W I + N mod W
157 156 com12 W W Word V N I 0 ..^ W W cyclShift N I = W I + N mod W
158 9 157 sylbir W 0 W 0 W Word V N I 0 ..^ W W cyclShift N I = W I + N mod W
159 158 ex W 0 W 0 W Word V N I 0 ..^ W W cyclShift N I = W I + N mod W
160 159 com23 W 0 W Word V W 0 N I 0 ..^ W W cyclShift N I = W I + N mod W
161 8 160 mpcom W Word V W 0 N I 0 ..^ W W cyclShift N I = W I + N mod W
162 161 com23 W Word V N I 0 ..^ W W 0 W cyclShift N I = W I + N mod W
163 162 3impib W Word V N I 0 ..^ W W 0 W cyclShift N I = W I + N mod W
164 7 163 pm2.61dne W Word V N I 0 ..^ W W cyclShift N I = W I + N mod W