Metamath Proof Explorer


Theorem pfxccat3a

Description: A prefix of a concatenation is either a prefix of the first concatenated word or a concatenation of the first word with a prefix of the second word. (Contributed by Alexander van der Vekens, 31-Mar-2018) (Revised by AV, 10-May-2020)

Ref Expression
Hypotheses swrdccatin2.l 𝐿 = ( ♯ ‘ 𝐴 )
pfxccatpfx2.m 𝑀 = ( ♯ ‘ 𝐵 )
Assertion pfxccat3a ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) → ( 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) → ( ( 𝐴 ++ 𝐵 ) prefix 𝑁 ) = if ( 𝑁𝐿 , ( 𝐴 prefix 𝑁 ) , ( 𝐴 ++ ( 𝐵 prefix ( 𝑁𝐿 ) ) ) ) ) )

Proof

Step Hyp Ref Expression
1 swrdccatin2.l 𝐿 = ( ♯ ‘ 𝐴 )
2 pfxccatpfx2.m 𝑀 = ( ♯ ‘ 𝐵 )
3 simprl ( ( 𝑁𝐿 ∧ ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) ) → ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) )
4 elfznn0 ( 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) → 𝑁 ∈ ℕ0 )
5 4 adantl ( ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) → 𝑁 ∈ ℕ0 )
6 5 adantl ( ( 𝑁𝐿 ∧ ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) ) → 𝑁 ∈ ℕ0 )
7 lencl ( 𝐴 ∈ Word 𝑉 → ( ♯ ‘ 𝐴 ) ∈ ℕ0 )
8 1 7 eqeltrid ( 𝐴 ∈ Word 𝑉𝐿 ∈ ℕ0 )
9 8 adantr ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) → 𝐿 ∈ ℕ0 )
10 9 adantr ( ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) → 𝐿 ∈ ℕ0 )
11 10 adantl ( ( 𝑁𝐿 ∧ ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) ) → 𝐿 ∈ ℕ0 )
12 simpl ( ( 𝑁𝐿 ∧ ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) ) → 𝑁𝐿 )
13 elfz2nn0 ( 𝑁 ∈ ( 0 ... 𝐿 ) ↔ ( 𝑁 ∈ ℕ0𝐿 ∈ ℕ0𝑁𝐿 ) )
14 6 11 12 13 syl3anbrc ( ( 𝑁𝐿 ∧ ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) ) → 𝑁 ∈ ( 0 ... 𝐿 ) )
15 df-3an ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉𝑁 ∈ ( 0 ... 𝐿 ) ) ↔ ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... 𝐿 ) ) )
16 3 14 15 sylanbrc ( ( 𝑁𝐿 ∧ ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) ) → ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉𝑁 ∈ ( 0 ... 𝐿 ) ) )
17 1 pfxccatpfx1 ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉𝑁 ∈ ( 0 ... 𝐿 ) ) → ( ( 𝐴 ++ 𝐵 ) prefix 𝑁 ) = ( 𝐴 prefix 𝑁 ) )
18 16 17 syl ( ( 𝑁𝐿 ∧ ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) ) → ( ( 𝐴 ++ 𝐵 ) prefix 𝑁 ) = ( 𝐴 prefix 𝑁 ) )
19 iftrue ( 𝑁𝐿 → if ( 𝑁𝐿 , ( 𝐴 prefix 𝑁 ) , ( 𝐴 ++ ( 𝐵 prefix ( 𝑁𝐿 ) ) ) ) = ( 𝐴 prefix 𝑁 ) )
20 19 adantr ( ( 𝑁𝐿 ∧ ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) ) → if ( 𝑁𝐿 , ( 𝐴 prefix 𝑁 ) , ( 𝐴 ++ ( 𝐵 prefix ( 𝑁𝐿 ) ) ) ) = ( 𝐴 prefix 𝑁 ) )
21 18 20 eqtr4d ( ( 𝑁𝐿 ∧ ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) ) → ( ( 𝐴 ++ 𝐵 ) prefix 𝑁 ) = if ( 𝑁𝐿 , ( 𝐴 prefix 𝑁 ) , ( 𝐴 ++ ( 𝐵 prefix ( 𝑁𝐿 ) ) ) ) )
22 simprl ( ( ¬ 𝑁𝐿 ∧ ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) ) → ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) )
23 elfz2nn0 ( 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ↔ ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) )
24 1 eleq1i ( 𝐿 ∈ ℕ0 ↔ ( ♯ ‘ 𝐴 ) ∈ ℕ0 )
25 nn0ltp1le ( ( 𝐿 ∈ ℕ0𝑁 ∈ ℕ0 ) → ( 𝐿 < 𝑁 ↔ ( 𝐿 + 1 ) ≤ 𝑁 ) )
26 nn0re ( 𝐿 ∈ ℕ0𝐿 ∈ ℝ )
27 nn0re ( 𝑁 ∈ ℕ0𝑁 ∈ ℝ )
28 ltnle ( ( 𝐿 ∈ ℝ ∧ 𝑁 ∈ ℝ ) → ( 𝐿 < 𝑁 ↔ ¬ 𝑁𝐿 ) )
29 26 27 28 syl2an ( ( 𝐿 ∈ ℕ0𝑁 ∈ ℕ0 ) → ( 𝐿 < 𝑁 ↔ ¬ 𝑁𝐿 ) )
30 25 29 bitr3d ( ( 𝐿 ∈ ℕ0𝑁 ∈ ℕ0 ) → ( ( 𝐿 + 1 ) ≤ 𝑁 ↔ ¬ 𝑁𝐿 ) )
31 30 3ad2antr1 ( ( 𝐿 ∈ ℕ0 ∧ ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) ) → ( ( 𝐿 + 1 ) ≤ 𝑁 ↔ ¬ 𝑁𝐿 ) )
32 simpr3 ( ( 𝐿 ∈ ℕ0 ∧ ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) ) → 𝑁 ≤ ( 𝐿 + 𝑀 ) )
33 32 anim1ci ( ( ( 𝐿 ∈ ℕ0 ∧ ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) ) ∧ ( 𝐿 + 1 ) ≤ 𝑁 ) → ( ( 𝐿 + 1 ) ≤ 𝑁𝑁 ≤ ( 𝐿 + 𝑀 ) ) )
34 nn0z ( 𝑁 ∈ ℕ0𝑁 ∈ ℤ )
35 34 3ad2ant1 ( ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) → 𝑁 ∈ ℤ )
36 35 adantl ( ( 𝐿 ∈ ℕ0 ∧ ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) ) → 𝑁 ∈ ℤ )
37 36 adantr ( ( ( 𝐿 ∈ ℕ0 ∧ ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) ) ∧ ( 𝐿 + 1 ) ≤ 𝑁 ) → 𝑁 ∈ ℤ )
38 peano2nn0 ( 𝐿 ∈ ℕ0 → ( 𝐿 + 1 ) ∈ ℕ0 )
39 38 nn0zd ( 𝐿 ∈ ℕ0 → ( 𝐿 + 1 ) ∈ ℤ )
40 39 adantr ( ( 𝐿 ∈ ℕ0 ∧ ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) ) → ( 𝐿 + 1 ) ∈ ℤ )
41 40 adantr ( ( ( 𝐿 ∈ ℕ0 ∧ ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) ) ∧ ( 𝐿 + 1 ) ≤ 𝑁 ) → ( 𝐿 + 1 ) ∈ ℤ )
42 nn0z ( ( 𝐿 + 𝑀 ) ∈ ℕ0 → ( 𝐿 + 𝑀 ) ∈ ℤ )
43 42 3ad2ant2 ( ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) → ( 𝐿 + 𝑀 ) ∈ ℤ )
44 43 adantl ( ( 𝐿 ∈ ℕ0 ∧ ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) ) → ( 𝐿 + 𝑀 ) ∈ ℤ )
45 44 adantr ( ( ( 𝐿 ∈ ℕ0 ∧ ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) ) ∧ ( 𝐿 + 1 ) ≤ 𝑁 ) → ( 𝐿 + 𝑀 ) ∈ ℤ )
46 elfz ( ( 𝑁 ∈ ℤ ∧ ( 𝐿 + 1 ) ∈ ℤ ∧ ( 𝐿 + 𝑀 ) ∈ ℤ ) → ( 𝑁 ∈ ( ( 𝐿 + 1 ) ... ( 𝐿 + 𝑀 ) ) ↔ ( ( 𝐿 + 1 ) ≤ 𝑁𝑁 ≤ ( 𝐿 + 𝑀 ) ) ) )
47 37 41 45 46 syl3anc ( ( ( 𝐿 ∈ ℕ0 ∧ ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) ) ∧ ( 𝐿 + 1 ) ≤ 𝑁 ) → ( 𝑁 ∈ ( ( 𝐿 + 1 ) ... ( 𝐿 + 𝑀 ) ) ↔ ( ( 𝐿 + 1 ) ≤ 𝑁𝑁 ≤ ( 𝐿 + 𝑀 ) ) ) )
48 33 47 mpbird ( ( ( 𝐿 ∈ ℕ0 ∧ ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) ) ∧ ( 𝐿 + 1 ) ≤ 𝑁 ) → 𝑁 ∈ ( ( 𝐿 + 1 ) ... ( 𝐿 + 𝑀 ) ) )
49 48 ex ( ( 𝐿 ∈ ℕ0 ∧ ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) ) → ( ( 𝐿 + 1 ) ≤ 𝑁𝑁 ∈ ( ( 𝐿 + 1 ) ... ( 𝐿 + 𝑀 ) ) ) )
50 31 49 sylbird ( ( 𝐿 ∈ ℕ0 ∧ ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) ) → ( ¬ 𝑁𝐿𝑁 ∈ ( ( 𝐿 + 1 ) ... ( 𝐿 + 𝑀 ) ) ) )
51 50 ex ( 𝐿 ∈ ℕ0 → ( ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) → ( ¬ 𝑁𝐿𝑁 ∈ ( ( 𝐿 + 1 ) ... ( 𝐿 + 𝑀 ) ) ) ) )
52 24 51 sylbir ( ( ♯ ‘ 𝐴 ) ∈ ℕ0 → ( ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) → ( ¬ 𝑁𝐿𝑁 ∈ ( ( 𝐿 + 1 ) ... ( 𝐿 + 𝑀 ) ) ) ) )
53 7 52 syl ( 𝐴 ∈ Word 𝑉 → ( ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) → ( ¬ 𝑁𝐿𝑁 ∈ ( ( 𝐿 + 1 ) ... ( 𝐿 + 𝑀 ) ) ) ) )
54 53 adantr ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) → ( ( 𝑁 ∈ ℕ0 ∧ ( 𝐿 + 𝑀 ) ∈ ℕ0𝑁 ≤ ( 𝐿 + 𝑀 ) ) → ( ¬ 𝑁𝐿𝑁 ∈ ( ( 𝐿 + 1 ) ... ( 𝐿 + 𝑀 ) ) ) ) )
55 23 54 syl5bi ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) → ( 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) → ( ¬ 𝑁𝐿𝑁 ∈ ( ( 𝐿 + 1 ) ... ( 𝐿 + 𝑀 ) ) ) ) )
56 55 imp ( ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) → ( ¬ 𝑁𝐿𝑁 ∈ ( ( 𝐿 + 1 ) ... ( 𝐿 + 𝑀 ) ) ) )
57 56 impcom ( ( ¬ 𝑁𝐿 ∧ ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) ) → 𝑁 ∈ ( ( 𝐿 + 1 ) ... ( 𝐿 + 𝑀 ) ) )
58 df-3an ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉𝑁 ∈ ( ( 𝐿 + 1 ) ... ( 𝐿 + 𝑀 ) ) ) ↔ ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( ( 𝐿 + 1 ) ... ( 𝐿 + 𝑀 ) ) ) )
59 22 57 58 sylanbrc ( ( ¬ 𝑁𝐿 ∧ ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) ) → ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉𝑁 ∈ ( ( 𝐿 + 1 ) ... ( 𝐿 + 𝑀 ) ) ) )
60 1 2 pfxccatpfx2 ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉𝑁 ∈ ( ( 𝐿 + 1 ) ... ( 𝐿 + 𝑀 ) ) ) → ( ( 𝐴 ++ 𝐵 ) prefix 𝑁 ) = ( 𝐴 ++ ( 𝐵 prefix ( 𝑁𝐿 ) ) ) )
61 59 60 syl ( ( ¬ 𝑁𝐿 ∧ ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) ) → ( ( 𝐴 ++ 𝐵 ) prefix 𝑁 ) = ( 𝐴 ++ ( 𝐵 prefix ( 𝑁𝐿 ) ) ) )
62 iffalse ( ¬ 𝑁𝐿 → if ( 𝑁𝐿 , ( 𝐴 prefix 𝑁 ) , ( 𝐴 ++ ( 𝐵 prefix ( 𝑁𝐿 ) ) ) ) = ( 𝐴 ++ ( 𝐵 prefix ( 𝑁𝐿 ) ) ) )
63 62 adantr ( ( ¬ 𝑁𝐿 ∧ ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) ) → if ( 𝑁𝐿 , ( 𝐴 prefix 𝑁 ) , ( 𝐴 ++ ( 𝐵 prefix ( 𝑁𝐿 ) ) ) ) = ( 𝐴 ++ ( 𝐵 prefix ( 𝑁𝐿 ) ) ) )
64 61 63 eqtr4d ( ( ¬ 𝑁𝐿 ∧ ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) ) → ( ( 𝐴 ++ 𝐵 ) prefix 𝑁 ) = if ( 𝑁𝐿 , ( 𝐴 prefix 𝑁 ) , ( 𝐴 ++ ( 𝐵 prefix ( 𝑁𝐿 ) ) ) ) )
65 21 64 pm2.61ian ( ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) ∧ 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) ) → ( ( 𝐴 ++ 𝐵 ) prefix 𝑁 ) = if ( 𝑁𝐿 , ( 𝐴 prefix 𝑁 ) , ( 𝐴 ++ ( 𝐵 prefix ( 𝑁𝐿 ) ) ) ) )
66 65 ex ( ( 𝐴 ∈ Word 𝑉𝐵 ∈ Word 𝑉 ) → ( 𝑁 ∈ ( 0 ... ( 𝐿 + 𝑀 ) ) → ( ( 𝐴 ++ 𝐵 ) prefix 𝑁 ) = if ( 𝑁𝐿 , ( 𝐴 prefix 𝑁 ) , ( 𝐴 ++ ( 𝐵 prefix ( 𝑁𝐿 ) ) ) ) ) )