Metamath Proof Explorer


Theorem wrdpmtrlast

Description: Reorder a word, so that the symbol given at index I is at the end. (Contributed by Thierry Arnoux, 27-May-2025)

Ref Expression
Hypotheses wrdpmtrlast.1 𝐽 = ( 0 ..^ ( ♯ ‘ 𝑊 ) )
wrdpmtrlast.2 ( 𝜑𝐼𝐽 )
wrdpmtrlast.3 ( 𝜑𝑊 ∈ Word 𝑆 )
wrdpmtrlast.4 𝑈 = ( ( 𝑊𝑠 ) prefix ( ( ♯ ‘ 𝑊 ) − 1 ) )
Assertion wrdpmtrlast ( 𝜑 → ∃ 𝑠 ( 𝑠 : 𝐽1-1-onto𝐽 ∧ ( 𝑊𝑠 ) = ( 𝑈 ++ ⟨“ ( 𝑊𝐼 ) ”⟩ ) ) )

Proof

Step Hyp Ref Expression
1 wrdpmtrlast.1 𝐽 = ( 0 ..^ ( ♯ ‘ 𝑊 ) )
2 wrdpmtrlast.2 ( 𝜑𝐼𝐽 )
3 wrdpmtrlast.3 ( 𝜑𝑊 ∈ Word 𝑆 )
4 wrdpmtrlast.4 𝑈 = ( ( 𝑊𝑠 ) prefix ( ( ♯ ‘ 𝑊 ) − 1 ) )
5 1 2 fzo0pmtrlast ( 𝜑 → ∃ 𝑠 ( 𝑠 : 𝐽1-1-onto𝐽 ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) )
6 simplr ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → 𝑠 : 𝐽1-1-onto𝐽 )
7 f1of ( 𝑠 : 𝐽1-1-onto𝐽𝑠 : 𝐽𝐽 )
8 1 feq2i ( 𝑠 : 𝐽𝐽𝑠 : ( 0 ..^ ( ♯ ‘ 𝑊 ) ) ⟶ 𝐽 )
9 7 8 sylib ( 𝑠 : 𝐽1-1-onto𝐽𝑠 : ( 0 ..^ ( ♯ ‘ 𝑊 ) ) ⟶ 𝐽 )
10 6 9 syl ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → 𝑠 : ( 0 ..^ ( ♯ ‘ 𝑊 ) ) ⟶ 𝐽 )
11 iswrdi ( 𝑠 : ( 0 ..^ ( ♯ ‘ 𝑊 ) ) ⟶ 𝐽𝑠 ∈ Word 𝐽 )
12 10 11 syl ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → 𝑠 ∈ Word 𝐽 )
13 eqidd ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ♯ ‘ 𝑊 ) = ( ♯ ‘ 𝑊 ) )
14 3 ad2antrr ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → 𝑊 ∈ Word 𝑆 )
15 13 14 wrdfd ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → 𝑊 : ( 0 ..^ ( ♯ ‘ 𝑊 ) ) ⟶ 𝑆 )
16 1 feq2i ( 𝑊 : 𝐽𝑆𝑊 : ( 0 ..^ ( ♯ ‘ 𝑊 ) ) ⟶ 𝑆 )
17 15 16 sylibr ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → 𝑊 : 𝐽𝑆 )
18 lenco ( ( 𝑠 ∈ Word 𝐽𝑊 : 𝐽𝑆 ) → ( ♯ ‘ ( 𝑊𝑠 ) ) = ( ♯ ‘ 𝑠 ) )
19 12 17 18 syl2anc ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ♯ ‘ ( 𝑊𝑠 ) ) = ( ♯ ‘ 𝑠 ) )
20 10 ffund ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → Fun 𝑠 )
21 hashfundm ( ( 𝑠 ∈ Word 𝐽 ∧ Fun 𝑠 ) → ( ♯ ‘ 𝑠 ) = ( ♯ ‘ dom 𝑠 ) )
22 12 20 21 syl2anc ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ♯ ‘ 𝑠 ) = ( ♯ ‘ dom 𝑠 ) )
23 10 fdmd ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → dom 𝑠 = ( 0 ..^ ( ♯ ‘ 𝑊 ) ) )
24 23 fveq2d ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ♯ ‘ dom 𝑠 ) = ( ♯ ‘ ( 0 ..^ ( ♯ ‘ 𝑊 ) ) ) )
25 2 1 eleqtrdi ( 𝜑𝐼 ∈ ( 0 ..^ ( ♯ ‘ 𝑊 ) ) )
26 25 ad2antrr ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → 𝐼 ∈ ( 0 ..^ ( ♯ ‘ 𝑊 ) ) )
27 elfzo0 ( 𝐼 ∈ ( 0 ..^ ( ♯ ‘ 𝑊 ) ) ↔ ( 𝐼 ∈ ℕ0 ∧ ( ♯ ‘ 𝑊 ) ∈ ℕ ∧ 𝐼 < ( ♯ ‘ 𝑊 ) ) )
28 27 simp2bi ( 𝐼 ∈ ( 0 ..^ ( ♯ ‘ 𝑊 ) ) → ( ♯ ‘ 𝑊 ) ∈ ℕ )
29 26 28 syl ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ♯ ‘ 𝑊 ) ∈ ℕ )
30 29 nnnn0d ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ♯ ‘ 𝑊 ) ∈ ℕ0 )
31 hashfzo0 ( ( ♯ ‘ 𝑊 ) ∈ ℕ0 → ( ♯ ‘ ( 0 ..^ ( ♯ ‘ 𝑊 ) ) ) = ( ♯ ‘ 𝑊 ) )
32 30 31 syl ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ♯ ‘ ( 0 ..^ ( ♯ ‘ 𝑊 ) ) ) = ( ♯ ‘ 𝑊 ) )
33 22 24 32 3eqtrd ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ♯ ‘ 𝑠 ) = ( ♯ ‘ 𝑊 ) )
34 19 33 eqtr2d ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ♯ ‘ 𝑊 ) = ( ♯ ‘ ( 𝑊𝑠 ) ) )
35 34 oveq1d ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ( ♯ ‘ 𝑊 ) − 1 ) = ( ( ♯ ‘ ( 𝑊𝑠 ) ) − 1 ) )
36 35 oveq2d ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ( 𝑊𝑠 ) prefix ( ( ♯ ‘ 𝑊 ) − 1 ) ) = ( ( 𝑊𝑠 ) prefix ( ( ♯ ‘ ( 𝑊𝑠 ) ) − 1 ) ) )
37 4 36 eqtrid ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → 𝑈 = ( ( 𝑊𝑠 ) prefix ( ( ♯ ‘ ( 𝑊𝑠 ) ) − 1 ) ) )
38 26 ne0d ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( 0 ..^ ( ♯ ‘ 𝑊 ) ) ≠ ∅ )
39 f0dom0 ( 𝑠 : ( 0 ..^ ( ♯ ‘ 𝑊 ) ) ⟶ 𝐽 → ( ( 0 ..^ ( ♯ ‘ 𝑊 ) ) = ∅ ↔ 𝑠 = ∅ ) )
40 39 necon3bid ( 𝑠 : ( 0 ..^ ( ♯ ‘ 𝑊 ) ) ⟶ 𝐽 → ( ( 0 ..^ ( ♯ ‘ 𝑊 ) ) ≠ ∅ ↔ 𝑠 ≠ ∅ ) )
41 40 biimpa ( ( 𝑠 : ( 0 ..^ ( ♯ ‘ 𝑊 ) ) ⟶ 𝐽 ∧ ( 0 ..^ ( ♯ ‘ 𝑊 ) ) ≠ ∅ ) → 𝑠 ≠ ∅ )
42 10 38 41 syl2anc ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → 𝑠 ≠ ∅ )
43 lswco ( ( 𝑠 ∈ Word 𝐽𝑠 ≠ ∅ ∧ 𝑊 : 𝐽𝑆 ) → ( lastS ‘ ( 𝑊𝑠 ) ) = ( 𝑊 ‘ ( lastS ‘ 𝑠 ) ) )
44 12 42 17 43 syl3anc ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( lastS ‘ ( 𝑊𝑠 ) ) = ( 𝑊 ‘ ( lastS ‘ 𝑠 ) ) )
45 lsw ( 𝑠 ∈ Word 𝐽 → ( lastS ‘ 𝑠 ) = ( 𝑠 ‘ ( ( ♯ ‘ 𝑠 ) − 1 ) ) )
46 12 45 syl ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( lastS ‘ 𝑠 ) = ( 𝑠 ‘ ( ( ♯ ‘ 𝑠 ) − 1 ) ) )
47 33 oveq1d ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ( ♯ ‘ 𝑠 ) − 1 ) = ( ( ♯ ‘ 𝑊 ) − 1 ) )
48 47 fveq2d ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( 𝑠 ‘ ( ( ♯ ‘ 𝑠 ) − 1 ) ) = ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) )
49 simpr ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 )
50 46 48 49 3eqtrd ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( lastS ‘ 𝑠 ) = 𝐼 )
51 50 fveq2d ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( 𝑊 ‘ ( lastS ‘ 𝑠 ) ) = ( 𝑊𝐼 ) )
52 44 51 eqtr2d ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( 𝑊𝐼 ) = ( lastS ‘ ( 𝑊𝑠 ) ) )
53 52 s1eqd ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ⟨“ ( 𝑊𝐼 ) ”⟩ = ⟨“ ( lastS ‘ ( 𝑊𝑠 ) ) ”⟩ )
54 37 53 oveq12d ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( 𝑈 ++ ⟨“ ( 𝑊𝐼 ) ”⟩ ) = ( ( ( 𝑊𝑠 ) prefix ( ( ♯ ‘ ( 𝑊𝑠 ) ) − 1 ) ) ++ ⟨“ ( lastS ‘ ( 𝑊𝑠 ) ) ”⟩ ) )
55 1 6 14 wrdpmcl ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( 𝑊𝑠 ) ∈ Word 𝑆 )
56 fzo0end ( ( ♯ ‘ 𝑊 ) ∈ ℕ → ( ( ♯ ‘ 𝑊 ) − 1 ) ∈ ( 0 ..^ ( ♯ ‘ 𝑊 ) ) )
57 29 56 syl ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ( ♯ ‘ 𝑊 ) − 1 ) ∈ ( 0 ..^ ( ♯ ‘ 𝑊 ) ) )
58 57 1 eleqtrrdi ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ( ♯ ‘ 𝑊 ) − 1 ) ∈ 𝐽 )
59 17 fdmd ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → dom 𝑊 = 𝐽 )
60 58 59 eleqtrrd ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ( ♯ ‘ 𝑊 ) − 1 ) ∈ dom 𝑊 )
61 dff1o5 ( 𝑠 : 𝐽1-1-onto𝐽 ↔ ( 𝑠 : 𝐽1-1𝐽 ∧ ran 𝑠 = 𝐽 ) )
62 61 simprbi ( 𝑠 : 𝐽1-1-onto𝐽 → ran 𝑠 = 𝐽 )
63 6 62 syl ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ran 𝑠 = 𝐽 )
64 58 63 eleqtrrd ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ( ♯ ‘ 𝑊 ) − 1 ) ∈ ran 𝑠 )
65 60 64 elind ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ( ♯ ‘ 𝑊 ) − 1 ) ∈ ( dom 𝑊 ∩ ran 𝑠 ) )
66 65 ne0d ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( dom 𝑊 ∩ ran 𝑠 ) ≠ ∅ )
67 coeq0 ( ( 𝑊𝑠 ) = ∅ ↔ ( dom 𝑊 ∩ ran 𝑠 ) = ∅ )
68 67 necon3bii ( ( 𝑊𝑠 ) ≠ ∅ ↔ ( dom 𝑊 ∩ ran 𝑠 ) ≠ ∅ )
69 66 68 sylibr ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( 𝑊𝑠 ) ≠ ∅ )
70 pfxlswccat ( ( ( 𝑊𝑠 ) ∈ Word 𝑆 ∧ ( 𝑊𝑠 ) ≠ ∅ ) → ( ( ( 𝑊𝑠 ) prefix ( ( ♯ ‘ ( 𝑊𝑠 ) ) − 1 ) ) ++ ⟨“ ( lastS ‘ ( 𝑊𝑠 ) ) ”⟩ ) = ( 𝑊𝑠 ) )
71 55 69 70 syl2anc ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( ( ( 𝑊𝑠 ) prefix ( ( ♯ ‘ ( 𝑊𝑠 ) ) − 1 ) ) ++ ⟨“ ( lastS ‘ ( 𝑊𝑠 ) ) ”⟩ ) = ( 𝑊𝑠 ) )
72 54 71 eqtr2d ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( 𝑊𝑠 ) = ( 𝑈 ++ ⟨“ ( 𝑊𝐼 ) ”⟩ ) )
73 6 72 jca ( ( ( 𝜑𝑠 : 𝐽1-1-onto𝐽 ) ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( 𝑠 : 𝐽1-1-onto𝐽 ∧ ( 𝑊𝑠 ) = ( 𝑈 ++ ⟨“ ( 𝑊𝐼 ) ”⟩ ) ) )
74 73 expl ( 𝜑 → ( ( 𝑠 : 𝐽1-1-onto𝐽 ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ( 𝑠 : 𝐽1-1-onto𝐽 ∧ ( 𝑊𝑠 ) = ( 𝑈 ++ ⟨“ ( 𝑊𝐼 ) ”⟩ ) ) ) )
75 74 eximdv ( 𝜑 → ( ∃ 𝑠 ( 𝑠 : 𝐽1-1-onto𝐽 ∧ ( 𝑠 ‘ ( ( ♯ ‘ 𝑊 ) − 1 ) ) = 𝐼 ) → ∃ 𝑠 ( 𝑠 : 𝐽1-1-onto𝐽 ∧ ( 𝑊𝑠 ) = ( 𝑈 ++ ⟨“ ( 𝑊𝐼 ) ”⟩ ) ) ) )
76 5 75 mpd ( 𝜑 → ∃ 𝑠 ( 𝑠 : 𝐽1-1-onto𝐽 ∧ ( 𝑊𝑠 ) = ( 𝑈 ++ ⟨“ ( 𝑊𝐼 ) ”⟩ ) ) )