Metamath Proof Explorer


Theorem wrdind

Description: Perform induction over the structure of a word. (Contributed by Mario Carneiro, 27-Sep-2015) (Revised by Mario Carneiro, 26-Feb-2016) (Proof shortened by AV, 12-Oct-2022)

Ref Expression
Hypotheses wrdind.1 x=φψ
wrdind.2 x=yφχ
wrdind.3 x=y++⟨“z”⟩φθ
wrdind.4 x=Aφτ
wrdind.5 ψ
wrdind.6 yWordBzBχθ
Assertion wrdind AWordBτ

Proof

Step Hyp Ref Expression
1 wrdind.1 x=φψ
2 wrdind.2 x=yφχ
3 wrdind.3 x=y++⟨“z”⟩φθ
4 wrdind.4 x=Aφτ
5 wrdind.5 ψ
6 wrdind.6 yWordBzBχθ
7 lencl AWordBA0
8 eqeq2 n=0x=nx=0
9 8 imbi1d n=0x=nφx=0φ
10 9 ralbidv n=0xWordBx=nφxWordBx=0φ
11 eqeq2 n=mx=nx=m
12 11 imbi1d n=mx=nφx=mφ
13 12 ralbidv n=mxWordBx=nφxWordBx=mφ
14 eqeq2 n=m+1x=nx=m+1
15 14 imbi1d n=m+1x=nφx=m+1φ
16 15 ralbidv n=m+1xWordBx=nφxWordBx=m+1φ
17 eqeq2 n=Ax=nx=A
18 17 imbi1d n=Ax=nφx=Aφ
19 18 ralbidv n=AxWordBx=nφxWordBx=Aφ
20 hasheq0 xWordBx=0x=
21 5 1 mpbiri x=φ
22 20 21 syl6bi xWordBx=0φ
23 22 rgen xWordBx=0φ
24 fveqeq2 x=yx=my=m
25 24 2 imbi12d x=yx=mφy=mχ
26 25 cbvralvw xWordBx=mφyWordBy=mχ
27 simprl m0yWordBy=mχxWordBx=m+1xWordB
28 fzossfz 0..^x0x
29 simprr m0yWordBy=mχxWordBx=m+1x=m+1
30 nn0p1nn m0m+1
31 30 ad2antrr m0yWordBy=mχxWordBx=m+1m+1
32 29 31 eqeltrd m0yWordBy=mχxWordBx=m+1x
33 fzo0end xx10..^x
34 32 33 syl m0yWordBy=mχxWordBx=m+1x10..^x
35 28 34 sselid m0yWordBy=mχxWordBx=m+1x10x
36 pfxlen xWordBx10xxprefixx1=x1
37 27 35 36 syl2anc m0yWordBy=mχxWordBx=m+1xprefixx1=x1
38 29 oveq1d m0yWordBy=mχxWordBx=m+1x1=m+1-1
39 nn0cn m0m
40 39 ad2antrr m0yWordBy=mχxWordBx=m+1m
41 ax-1cn 1
42 pncan m1m+1-1=m
43 40 41 42 sylancl m0yWordBy=mχxWordBx=m+1m+1-1=m
44 37 38 43 3eqtrd m0yWordBy=mχxWordBx=m+1xprefixx1=m
45 fveqeq2 y=xprefixx1y=mxprefixx1=m
46 vex yV
47 46 2 sbcie [˙y/x]˙φχ
48 dfsbcq y=xprefixx1[˙y/x]˙φ[˙xprefixx1/x]˙φ
49 47 48 bitr3id y=xprefixx1χ[˙xprefixx1/x]˙φ
50 45 49 imbi12d y=xprefixx1y=mχxprefixx1=m[˙xprefixx1/x]˙φ
51 simplr m0yWordBy=mχxWordBx=m+1yWordBy=mχ
52 pfxcl xWordBxprefixx1WordB
53 52 ad2antrl m0yWordBy=mχxWordBx=m+1xprefixx1WordB
54 50 51 53 rspcdva m0yWordBy=mχxWordBx=m+1xprefixx1=m[˙xprefixx1/x]˙φ
55 44 54 mpd m0yWordBy=mχxWordBx=m+1[˙xprefixx1/x]˙φ
56 32 nnge1d m0yWordBy=mχxWordBx=m+11x
57 wrdlenge1n0 xWordBx1x
58 57 ad2antrl m0yWordBy=mχxWordBx=m+1x1x
59 56 58 mpbird m0yWordBy=mχxWordBx=m+1x
60 lswcl xWordBxlastSxB
61 27 59 60 syl2anc m0yWordBy=mχxWordBx=m+1lastSxB
62 oveq1 y=xprefixx1y++⟨“z”⟩=xprefixx1++⟨“z”⟩
63 62 sbceq1d y=xprefixx1[˙y++⟨“z”⟩/x]˙φ[˙xprefixx1++⟨“z”⟩/x]˙φ
64 48 63 imbi12d y=xprefixx1[˙y/x]˙φ[˙y++⟨“z”⟩/x]˙φ[˙xprefixx1/x]˙φ[˙xprefixx1++⟨“z”⟩/x]˙φ
65 s1eq z=lastSx⟨“z”⟩=⟨“lastSx”⟩
66 65 oveq2d z=lastSxxprefixx1++⟨“z”⟩=xprefixx1++⟨“lastSx”⟩
67 66 sbceq1d z=lastSx[˙xprefixx1++⟨“z”⟩/x]˙φ[˙xprefixx1++⟨“lastSx”⟩/x]˙φ
68 67 imbi2d z=lastSx[˙xprefixx1/x]˙φ[˙xprefixx1++⟨“z”⟩/x]˙φ[˙xprefixx1/x]˙φ[˙xprefixx1++⟨“lastSx”⟩/x]˙φ
69 ovex y++⟨“z”⟩V
70 69 3 sbcie [˙y++⟨“z”⟩/x]˙φθ
71 6 47 70 3imtr4g yWordBzB[˙y/x]˙φ[˙y++⟨“z”⟩/x]˙φ
72 64 68 71 vtocl2ga xprefixx1WordBlastSxB[˙xprefixx1/x]˙φ[˙xprefixx1++⟨“lastSx”⟩/x]˙φ
73 53 61 72 syl2anc m0yWordBy=mχxWordBx=m+1[˙xprefixx1/x]˙φ[˙xprefixx1++⟨“lastSx”⟩/x]˙φ
74 55 73 mpd m0yWordBy=mχxWordBx=m+1[˙xprefixx1++⟨“lastSx”⟩/x]˙φ
75 wrdfin xWordBxFin
76 75 ad2antrl m0yWordBy=mχxWordBx=m+1xFin
77 hashnncl xFinxx
78 76 77 syl m0yWordBy=mχxWordBx=m+1xx
79 32 78 mpbid m0yWordBy=mχxWordBx=m+1x
80 pfxlswccat xWordBxxprefixx1++⟨“lastSx”⟩=x
81 80 eqcomd xWordBxx=xprefixx1++⟨“lastSx”⟩
82 27 79 81 syl2anc m0yWordBy=mχxWordBx=m+1x=xprefixx1++⟨“lastSx”⟩
83 sbceq1a x=xprefixx1++⟨“lastSx”⟩φ[˙xprefixx1++⟨“lastSx”⟩/x]˙φ
84 82 83 syl m0yWordBy=mχxWordBx=m+1φ[˙xprefixx1++⟨“lastSx”⟩/x]˙φ
85 74 84 mpbird m0yWordBy=mχxWordBx=m+1φ
86 85 expr m0yWordBy=mχxWordBx=m+1φ
87 86 ralrimiva m0yWordBy=mχxWordBx=m+1φ
88 87 ex m0yWordBy=mχxWordBx=m+1φ
89 26 88 biimtrid m0xWordBx=mφxWordBx=m+1φ
90 10 13 16 19 23 89 nn0ind A0xWordBx=Aφ
91 7 90 syl AWordBxWordBx=Aφ
92 eqidd AWordBA=A
93 fveqeq2 x=Ax=AA=A
94 93 4 imbi12d x=Ax=AφA=Aτ
95 94 rspcv AWordBxWordBx=AφA=Aτ
96 91 92 95 mp2d AWordBτ