Metamath Proof Explorer


Theorem ccatpfx

Description: Concatenating a prefix with an adjacent subword makes a longer prefix. (Contributed by AV, 7-May-2020)

Ref Expression
Assertion ccatpfx ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S prefix Y ++ S substr Y Z = S prefix Z

Proof

Step Hyp Ref Expression
1 pfxcl ⊢ S ∈ Word A → S prefix Y ∈ Word A
2 swrdcl ⊢ S ∈ Word A → S substr Y Z ∈ Word A
3 ccatcl ⊢ S prefix Y ∈ Word A ∧ S substr Y Z ∈ Word A → S prefix Y ++ S substr Y Z ∈ Word A
4 1 2 3 syl2anc ⊢ S ∈ Word A → S prefix Y ++ S substr Y Z ∈ Word A
5 wrdfn ⊢ S prefix Y ++ S substr Y Z ∈ Word A → S prefix Y ++ S substr Y Z Fn 0 ..^ S prefix Y ++ S substr Y Z
6 4 5 syl ⊢ S ∈ Word A → S prefix Y ++ S substr Y Z Fn 0 ..^ S prefix Y ++ S substr Y Z
7 6 adantr ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S prefix Y ++ S substr Y Z Fn 0 ..^ S prefix Y ++ S substr Y Z
8 ccatlen ⊢ S prefix Y ∈ Word A ∧ S substr Y Z ∈ Word A → S prefix Y ++ S substr Y Z = S prefix Y + S substr Y Z
9 1 2 8 syl2anc ⊢ S ∈ Word A → S prefix Y ++ S substr Y Z = S prefix Y + S substr Y Z
10 9 adantr ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S prefix Y ++ S substr Y Z = S prefix Y + S substr Y Z
11 fzass4 ⊢ Y ∈ 0 … S ∧ Z ∈ Y … S ↔ Y ∈ 0 … Z ∧ Z ∈ 0 … S
12 11 biimpri ⊢ Y ∈ 0 … Z ∧ Z ∈ 0 … S → Y ∈ 0 … S ∧ Z ∈ Y … S
13 12 simpld ⊢ Y ∈ 0 … Z ∧ Z ∈ 0 … S → Y ∈ 0 … S
14 pfxlen ⊢ S ∈ Word A ∧ Y ∈ 0 … S → S prefix Y = Y
15 13 14 sylan2 ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S prefix Y = Y
16 swrdlen ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S substr Y Z = Z − Y
17 16 3expb ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S substr Y Z = Z − Y
18 15 17 oveq12d ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S prefix Y + S substr Y Z = Y + Z - Y
19 elfzelz ⊢ Y ∈ 0 … Z → Y ∈ ℤ
20 19 zcnd ⊢ Y ∈ 0 … Z → Y ∈ ℂ
21 elfzelz ⊢ Z ∈ 0 … S → Z ∈ ℤ
22 21 zcnd ⊢ Z ∈ 0 … S → Z ∈ ℂ
23 pncan3 ⊢ Y ∈ ℂ ∧ Z ∈ ℂ → Y + Z - Y = Z
24 20 22 23 syl2an ⊢ Y ∈ 0 … Z ∧ Z ∈ 0 … S → Y + Z - Y = Z
25 24 adantl ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → Y + Z - Y = Z
26 10 18 25 3eqtrd ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S prefix Y ++ S substr Y Z = Z
27 26 oveq2d ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → 0 ..^ S prefix Y ++ S substr Y Z = 0 ..^ Z
28 27 fneq2d ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S prefix Y ++ S substr Y Z Fn 0 ..^ S prefix Y ++ S substr Y Z ↔ S prefix Y ++ S substr Y Z Fn 0 ..^ Z
29 7 28 mpbid ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S prefix Y ++ S substr Y Z Fn 0 ..^ Z
30 pfxfn ⊢ S ∈ Word A ∧ Z ∈ 0 … S → S prefix Z Fn 0 ..^ Z
31 30 adantrl ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S prefix Z Fn 0 ..^ Z
32 id ⊢ x ∈ 0 ..^ Z → x ∈ 0 ..^ Z
33 19 ad2antrl ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → Y ∈ ℤ
34 fzospliti ⊢ x ∈ 0 ..^ Z ∧ Y ∈ ℤ → x ∈ 0 ..^ Y ∨ x ∈ Y ..^ Z
35 32 33 34 syl2anr ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ 0 ..^ Z → x ∈ 0 ..^ Y ∨ x ∈ Y ..^ Z
36 1 ad2antrr ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ 0 ..^ Y → S prefix Y ∈ Word A
37 2 ad2antrr ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ 0 ..^ Y → S substr Y Z ∈ Word A
38 15 oveq2d ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → 0 ..^ S prefix Y = 0 ..^ Y
39 38 eleq2d ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → x ∈ 0 ..^ S prefix Y ↔ x ∈ 0 ..^ Y
40 39 biimpar ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ 0 ..^ Y → x ∈ 0 ..^ S prefix Y
41 ccatval1 ⊢ S prefix Y ∈ Word A ∧ S substr Y Z ∈ Word A ∧ x ∈ 0 ..^ S prefix Y → S prefix Y ++ S substr Y Z ⁡ x = S prefix Y ⁡ x
42 36 37 40 41 syl3anc ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ 0 ..^ Y → S prefix Y ++ S substr Y Z ⁡ x = S prefix Y ⁡ x
43 simpl ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S ∈ Word A
44 13 adantl ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → Y ∈ 0 … S
45 id ⊢ x ∈ 0 ..^ Y → x ∈ 0 ..^ Y
46 pfxfv ⊢ S ∈ Word A ∧ Y ∈ 0 … S ∧ x ∈ 0 ..^ Y → S prefix Y ⁡ x = S ⁡ x
47 43 44 45 46 syl2an3an ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ 0 ..^ Y → S prefix Y ⁡ x = S ⁡ x
48 42 47 eqtrd ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ 0 ..^ Y → S prefix Y ++ S substr Y Z ⁡ x = S ⁡ x
49 1 ad2antrr ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ Y ..^ Z → S prefix Y ∈ Word A
50 2 ad2antrr ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ Y ..^ Z → S substr Y Z ∈ Word A
51 18 25 eqtrd ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S prefix Y + S substr Y Z = Z
52 15 51 oveq12d ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S prefix Y ..^ S prefix Y + S substr Y Z = Y ..^ Z
53 52 eleq2d ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → x ∈ S prefix Y ..^ S prefix Y + S substr Y Z ↔ x ∈ Y ..^ Z
54 53 biimpar ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ Y ..^ Z → x ∈ S prefix Y ..^ S prefix Y + S substr Y Z
55 ccatval2 ⊢ S prefix Y ∈ Word A ∧ S substr Y Z ∈ Word A ∧ x ∈ S prefix Y ..^ S prefix Y + S substr Y Z → S prefix Y ++ S substr Y Z ⁡ x = S substr Y Z ⁡ x − S prefix Y
56 49 50 54 55 syl3anc ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ Y ..^ Z → S prefix Y ++ S substr Y Z ⁡ x = S substr Y Z ⁡ x − S prefix Y
57 id ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S
58 57 3expb ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S
59 15 oveq2d ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → x − S prefix Y = x − Y
60 59 adantr ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ Y ..^ Z → x − S prefix Y = x − Y
61 id ⊢ x ∈ Y ..^ Z → x ∈ Y ..^ Z
62 fzosubel ⊢ x ∈ Y ..^ Z ∧ Y ∈ ℤ → x − Y ∈ Y − Y ..^ Z − Y
63 61 33 62 syl2anr ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ Y ..^ Z → x − Y ∈ Y − Y ..^ Z − Y
64 20 subidd ⊢ Y ∈ 0 … Z → Y − Y = 0
65 64 oveq1d ⊢ Y ∈ 0 … Z → Y − Y ..^ Z − Y = 0 ..^ Z − Y
66 65 eleq2d ⊢ Y ∈ 0 … Z → x − Y ∈ Y − Y ..^ Z − Y ↔ x − Y ∈ 0 ..^ Z − Y
67 66 ad2antrl ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → x − Y ∈ Y − Y ..^ Z − Y ↔ x − Y ∈ 0 ..^ Z − Y
68 67 adantr ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ Y ..^ Z → x − Y ∈ Y − Y ..^ Z − Y ↔ x − Y ∈ 0 ..^ Z − Y
69 63 68 mpbid ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ Y ..^ Z → x − Y ∈ 0 ..^ Z − Y
70 60 69 eqeltrd ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ Y ..^ Z → x − S prefix Y ∈ 0 ..^ Z − Y
71 swrdfv ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x − S prefix Y ∈ 0 ..^ Z − Y → S substr Y Z ⁡ x − S prefix Y = S ⁡ x - S prefix Y + Y
72 58 70 71 syl2an2r ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ Y ..^ Z → S substr Y Z ⁡ x − S prefix Y = S ⁡ x - S prefix Y + Y
73 59 oveq1d ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → x - S prefix Y + Y = x - Y + Y
74 73 adantr ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ Y ..^ Z → x - S prefix Y + Y = x - Y + Y
75 elfzoelz ⊢ x ∈ Y ..^ Z → x ∈ ℤ
76 75 zcnd ⊢ x ∈ Y ..^ Z → x ∈ ℂ
77 20 ad2antrl ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → Y ∈ ℂ
78 npcan ⊢ x ∈ ℂ ∧ Y ∈ ℂ → x - Y + Y = x
79 76 77 78 syl2anr ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ Y ..^ Z → x - Y + Y = x
80 74 79 eqtrd ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ Y ..^ Z → x - S prefix Y + Y = x
81 80 fveq2d ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ Y ..^ Z → S ⁡ x - S prefix Y + Y = S ⁡ x
82 56 72 81 3eqtrd ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ Y ..^ Z → S prefix Y ++ S substr Y Z ⁡ x = S ⁡ x
83 48 82 jaodan ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ 0 ..^ Y ∨ x ∈ Y ..^ Z → S prefix Y ++ S substr Y Z ⁡ x = S ⁡ x
84 35 83 syldan ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ 0 ..^ Z → S prefix Y ++ S substr Y Z ⁡ x = S ⁡ x
85 pfxfv ⊢ S ∈ Word A ∧ Z ∈ 0 … S ∧ x ∈ 0 ..^ Z → S prefix Z ⁡ x = S ⁡ x
86 85 3expa ⊢ S ∈ Word A ∧ Z ∈ 0 … S ∧ x ∈ 0 ..^ Z → S prefix Z ⁡ x = S ⁡ x
87 86 adantlrl ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ 0 ..^ Z → S prefix Z ⁡ x = S ⁡ x
88 84 87 eqtr4d ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S ∧ x ∈ 0 ..^ Z → S prefix Y ++ S substr Y Z ⁡ x = S prefix Z ⁡ x
89 29 31 88 eqfnfvd ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S prefix Y ++ S substr Y Z = S prefix Z
90 89 3impb ⊢ S ∈ Word A ∧ Y ∈ 0 … Z ∧ Z ∈ 0 … S → S prefix Y ++ S substr Y Z = S prefix Z