Metamath Proof Explorer


Theorem sseqp1

Description: Value of the strong sequence builder function at a successor. (Contributed by Thierry Arnoux, 24-Apr-2019)

Ref Expression
Hypotheses sseqval.1 φSV
sseqval.2 φMWordS
sseqval.3 W=WordS.-1M
sseqval.4 φF:WS
sseqfv2.4 φNM
Assertion sseqp1 φMseqstrFN=FMseqstrF0..^N

Proof

Step Hyp Ref Expression
1 sseqval.1 φSV
2 sseqval.2 φMWordS
3 sseqval.3 W=WordS.-1M
4 sseqval.4 φF:WS
5 sseqfv2.4 φNM
6 1 2 3 4 5 sseqfv2 φMseqstrFN=lastSseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩N
7 fveq2 i=MseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩i=seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩M
8 oveq2 i=M0..^i=0..^M
9 8 reseq2d i=MMseqstrF0..^i=MseqstrF0..^M
10 9 fveq2d i=MFMseqstrF0..^i=FMseqstrF0..^M
11 10 s1eqd i=M⟨“FMseqstrF0..^i”⟩=⟨“FMseqstrF0..^M”⟩
12 9 11 oveq12d i=MMseqstrF0..^i++⟨“FMseqstrF0..^i”⟩=MseqstrF0..^M++⟨“FMseqstrF0..^M”⟩
13 7 12 eqeq12d i=MseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩i=MseqstrF0..^i++⟨“FMseqstrF0..^i”⟩seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩M=MseqstrF0..^M++⟨“FMseqstrF0..^M”⟩
14 13 imbi2d i=MφseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩i=MseqstrF0..^i++⟨“FMseqstrF0..^i”⟩φseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩M=MseqstrF0..^M++⟨“FMseqstrF0..^M”⟩
15 fveq2 i=nseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩i=seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n
16 oveq2 i=n0..^i=0..^n
17 16 reseq2d i=nMseqstrF0..^i=MseqstrF0..^n
18 17 fveq2d i=nFMseqstrF0..^i=FMseqstrF0..^n
19 18 s1eqd i=n⟨“FMseqstrF0..^i”⟩=⟨“FMseqstrF0..^n”⟩
20 17 19 oveq12d i=nMseqstrF0..^i++⟨“FMseqstrF0..^i”⟩=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩
21 15 20 eqeq12d i=nseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩i=MseqstrF0..^i++⟨“FMseqstrF0..^i”⟩seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩
22 21 imbi2d i=nφseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩i=MseqstrF0..^i++⟨“FMseqstrF0..^i”⟩φseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩
23 fveq2 i=n+1seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩i=seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n+1
24 oveq2 i=n+10..^i=0..^n+1
25 24 reseq2d i=n+1MseqstrF0..^i=MseqstrF0..^n+1
26 25 fveq2d i=n+1FMseqstrF0..^i=FMseqstrF0..^n+1
27 26 s1eqd i=n+1⟨“FMseqstrF0..^i”⟩=⟨“FMseqstrF0..^n+1”⟩
28 25 27 oveq12d i=n+1MseqstrF0..^i++⟨“FMseqstrF0..^i”⟩=MseqstrF0..^n+1++⟨“FMseqstrF0..^n+1”⟩
29 23 28 eqeq12d i=n+1seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩i=MseqstrF0..^i++⟨“FMseqstrF0..^i”⟩seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n+1=MseqstrF0..^n+1++⟨“FMseqstrF0..^n+1”⟩
30 29 imbi2d i=n+1φseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩i=MseqstrF0..^i++⟨“FMseqstrF0..^i”⟩φseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n+1=MseqstrF0..^n+1++⟨“FMseqstrF0..^n+1”⟩
31 fveq2 i=NseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩i=seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩N
32 oveq2 i=N0..^i=0..^N
33 32 reseq2d i=NMseqstrF0..^i=MseqstrF0..^N
34 33 fveq2d i=NFMseqstrF0..^i=FMseqstrF0..^N
35 34 s1eqd i=N⟨“FMseqstrF0..^i”⟩=⟨“FMseqstrF0..^N”⟩
36 33 35 oveq12d i=NMseqstrF0..^i++⟨“FMseqstrF0..^i”⟩=MseqstrF0..^N++⟨“FMseqstrF0..^N”⟩
37 31 36 eqeq12d i=NseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩i=MseqstrF0..^i++⟨“FMseqstrF0..^i”⟩seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩N=MseqstrF0..^N++⟨“FMseqstrF0..^N”⟩
38 37 imbi2d i=NφseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩i=MseqstrF0..^i++⟨“FMseqstrF0..^i”⟩φseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩N=MseqstrF0..^N++⟨“FMseqstrF0..^N”⟩
39 ovex M++⟨“FM”⟩V
40 lencl MWordSM0
41 2 40 syl φM0
42 fvconst2g M++⟨“FM”⟩VM00×M++⟨“FM”⟩M=M++⟨“FM”⟩
43 39 41 42 sylancr φ0×M++⟨“FM”⟩M=M++⟨“FM”⟩
44 40 nn0zd MWordSM
45 seq1 MseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩M=0×M++⟨“FM”⟩M
46 2 44 45 3syl φseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩M=0×M++⟨“FM”⟩M
47 1 2 3 4 sseqfres φMseqstrF0..^M=M
48 47 fveq2d φFMseqstrF0..^M=FM
49 48 s1eqd φ⟨“FMseqstrF0..^M”⟩=⟨“FM”⟩
50 47 49 oveq12d φMseqstrF0..^M++⟨“FMseqstrF0..^M”⟩=M++⟨“FM”⟩
51 43 46 50 3eqtr4d φseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩M=MseqstrF0..^M++⟨“FMseqstrF0..^M”⟩
52 51 a1i MφseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩M=MseqstrF0..^M++⟨“FMseqstrF0..^M”⟩
53 seqp1 nMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n+1=seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩nxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n+1
54 53 adantl φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n+1=seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩nxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n+1
55 id x=ax=a
56 fveq2 x=aFx=Fa
57 56 s1eqd x=a⟨“Fx”⟩=⟨“Fa”⟩
58 55 57 oveq12d x=ax++⟨“Fx”⟩=a++⟨“Fa”⟩
59 eqidd y=ba++⟨“Fa”⟩=a++⟨“Fa”⟩
60 58 59 cbvmpov xV,yVx++⟨“Fx”⟩=aV,bVa++⟨“Fa”⟩
61 60 a1i φnMxV,yVx++⟨“Fx”⟩=aV,bVa++⟨“Fa”⟩
62 simprl φnMa=seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩nb=0×M++⟨“FM”⟩n+1a=seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n
63 62 fveq2d φnMa=seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩nb=0×M++⟨“FM”⟩n+1Fa=FseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n
64 63 s1eqd φnMa=seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩nb=0×M++⟨“FM”⟩n+1⟨“Fa”⟩=⟨“FseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n”⟩
65 62 64 oveq12d φnMa=seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩nb=0×M++⟨“FM”⟩n+1a++⟨“Fa”⟩=seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n++⟨“FseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n”⟩
66 fvexd φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩nV
67 fvexd φnM0×M++⟨“FM”⟩n+1V
68 ovex seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n++⟨“FseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n”⟩V
69 68 a1i φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n++⟨“FseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n”⟩V
70 61 65 66 67 69 ovmpod φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩nxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n+1=seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n++⟨“FseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n”⟩
71 54 70 eqtrd φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n+1=seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n++⟨“FseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n”⟩
72 71 adantr φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n+1=seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n++⟨“FseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n”⟩
73 1 adantr φnMSV
74 2 adantr φnMMWordS
75 4 adantr φnMF:WS
76 simpr φnMnM
77 73 74 3 75 76 sseqfv2 φnMMseqstrFn=lastSseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n
78 77 adantr φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩MseqstrFn=lastSseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n
79 simpr φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩
80 79 fveq2d φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩lastSseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=lastSMseqstrF0..^n++⟨“FMseqstrF0..^n”⟩
81 1 2 3 4 sseqf φMseqstrF:0S
82 fzo0ssnn0 0..^n0
83 fssres MseqstrF:0S0..^n0MseqstrF0..^n:0..^nS
84 81 82 83 sylancl φMseqstrF0..^n:0..^nS
85 iswrdi MseqstrF0..^n:0..^nSMseqstrF0..^nWordS
86 84 85 syl φMseqstrF0..^nWordS
87 86 adantr φnMMseqstrF0..^nWordS
88 elex MseqstrF0..^nWordSMseqstrF0..^nV
89 87 88 syl φnMMseqstrF0..^nV
90 81 adantr φnMMseqstrF:0S
91 eluznn0 M0nMn0
92 41 91 sylan φnMn0
93 73 90 92 subiwrdlen φnMMseqstrF0..^n=n
94 93 76 eqeltrd φnMMseqstrF0..^nM
95 hashf .:V0+∞
96 ffn .:V0+∞.FnV
97 elpreima .FnVMseqstrF0..^n.-1MMseqstrF0..^nVMseqstrF0..^nM
98 95 96 97 mp2b MseqstrF0..^n.-1MMseqstrF0..^nVMseqstrF0..^nM
99 89 94 98 sylanbrc φnMMseqstrF0..^n.-1M
100 87 99 elind φnMMseqstrF0..^nWordS.-1M
101 100 3 eleqtrrdi φnMMseqstrF0..^nW
102 75 101 ffvelcdmd φnMFMseqstrF0..^nS
103 lswccats1 MseqstrF0..^nWordSFMseqstrF0..^nSlastSMseqstrF0..^n++⟨“FMseqstrF0..^n”⟩=FMseqstrF0..^n
104 87 102 103 syl2anc φnMlastSMseqstrF0..^n++⟨“FMseqstrF0..^n”⟩=FMseqstrF0..^n
105 104 adantr φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩lastSMseqstrF0..^n++⟨“FMseqstrF0..^n”⟩=FMseqstrF0..^n
106 78 80 105 3eqtrrd φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩FMseqstrF0..^n=MseqstrFn
107 106 s1eqd φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩⟨“FMseqstrF0..^n”⟩=⟨“MseqstrFn”⟩
108 107 oveq2d φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩=MseqstrF0..^n++⟨“MseqstrFn”⟩
109 73 90 92 iwrdsplit φnMMseqstrF0..^n+1=MseqstrF0..^n++⟨“MseqstrFn”⟩
110 109 adantr φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩MseqstrF0..^n+1=MseqstrF0..^n++⟨“MseqstrFn”⟩
111 108 79 110 3eqtr4d φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n+1
112 111 fveq2d φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩FseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=FMseqstrF0..^n+1
113 112 s1eqd φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩⟨“FseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n”⟩=⟨“FMseqstrF0..^n+1”⟩
114 111 113 oveq12d φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n++⟨“FseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n”⟩=MseqstrF0..^n+1++⟨“FMseqstrF0..^n+1”⟩
115 72 114 eqtrd φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n+1=MseqstrF0..^n+1++⟨“FMseqstrF0..^n+1”⟩
116 115 ex φnMseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n+1=MseqstrF0..^n+1++⟨“FMseqstrF0..^n+1”⟩
117 116 expcom nMφseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩seqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n+1=MseqstrF0..^n+1++⟨“FMseqstrF0..^n+1”⟩
118 117 a2d nMφseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n=MseqstrF0..^n++⟨“FMseqstrF0..^n”⟩φseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩n+1=MseqstrF0..^n+1++⟨“FMseqstrF0..^n+1”⟩
119 14 22 30 38 52 118 uzind4 NMφseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩N=MseqstrF0..^N++⟨“FMseqstrF0..^N”⟩
120 5 119 mpcom φseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩N=MseqstrF0..^N++⟨“FMseqstrF0..^N”⟩
121 120 fveq2d φlastSseqMxV,yVx++⟨“Fx”⟩0×M++⟨“FM”⟩N=lastSMseqstrF0..^N++⟨“FMseqstrF0..^N”⟩
122 fzo0ssnn0 0..^N0
123 fssres MseqstrF:0S0..^N0MseqstrF0..^N:0..^NS
124 81 122 123 sylancl φMseqstrF0..^N:0..^NS
125 iswrdi MseqstrF0..^N:0..^NSMseqstrF0..^NWordS
126 124 125 syl φMseqstrF0..^NWordS
127 elex MseqstrF0..^NWordSMseqstrF0..^NV
128 126 127 syl φMseqstrF0..^NV
129 eluznn0 M0NMN0
130 41 5 129 syl2anc φN0
131 1 81 130 subiwrdlen φMseqstrF0..^N=N
132 131 5 eqeltrd φMseqstrF0..^NM
133 elpreima .FnVMseqstrF0..^N.-1MMseqstrF0..^NVMseqstrF0..^NM
134 95 96 133 mp2b MseqstrF0..^N.-1MMseqstrF0..^NVMseqstrF0..^NM
135 128 132 134 sylanbrc φMseqstrF0..^N.-1M
136 126 135 elind φMseqstrF0..^NWordS.-1M
137 136 3 eleqtrrdi φMseqstrF0..^NW
138 4 137 ffvelcdmd φFMseqstrF0..^NS
139 lswccats1 MseqstrF0..^NWordSFMseqstrF0..^NSlastSMseqstrF0..^N++⟨“FMseqstrF0..^N”⟩=FMseqstrF0..^N
140 126 138 139 syl2anc φlastSMseqstrF0..^N++⟨“FMseqstrF0..^N”⟩=FMseqstrF0..^N
141 6 121 140 3eqtrd φMseqstrFN=FMseqstrF0..^N