MPE Home Metamath Proof Explorer < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  MPE Home  >  Th. List  >  gsumccat Structured version   Visualization version   GIF version

Theorem gsumccat 17817
Description: Homomorphic property of composites. (Contributed by Stefan O'Rear, 16-Aug-2015.) (Revised by Mario Carneiro, 1-Oct-2015.)
Hypotheses
Ref Expression
gsumwcl.b 𝐵 = (Base‘𝐺)
gsumccat.p + = (+g𝐺)
Assertion
Ref Expression
gsumccat ((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) → (𝐺 Σg (𝑊 ++ 𝑋)) = ((𝐺 Σg 𝑊) + (𝐺 Σg 𝑋)))

Proof of Theorem gsumccat
Dummy variables 𝑥 𝑦 𝑧 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 oveq1 7023 . . . 4 (𝑊 = ∅ → (𝑊 ++ 𝑋) = (∅ ++ 𝑋))
21oveq2d 7032 . . 3 (𝑊 = ∅ → (𝐺 Σg (𝑊 ++ 𝑋)) = (𝐺 Σg (∅ ++ 𝑋)))
3 oveq2 7024 . . . . 5 (𝑊 = ∅ → (𝐺 Σg 𝑊) = (𝐺 Σg ∅))
4 eqid 2795 . . . . . 6 (0g𝐺) = (0g𝐺)
54gsum0 17717 . . . . 5 (𝐺 Σg ∅) = (0g𝐺)
63, 5syl6eq 2847 . . . 4 (𝑊 = ∅ → (𝐺 Σg 𝑊) = (0g𝐺))
76oveq1d 7031 . . 3 (𝑊 = ∅ → ((𝐺 Σg 𝑊) + (𝐺 Σg 𝑋)) = ((0g𝐺) + (𝐺 Σg 𝑋)))
82, 7eqeq12d 2810 . 2 (𝑊 = ∅ → ((𝐺 Σg (𝑊 ++ 𝑋)) = ((𝐺 Σg 𝑊) + (𝐺 Σg 𝑋)) ↔ (𝐺 Σg (∅ ++ 𝑋)) = ((0g𝐺) + (𝐺 Σg 𝑋))))
9 oveq2 7024 . . . . 5 (𝑋 = ∅ → (𝑊 ++ 𝑋) = (𝑊 ++ ∅))
109oveq2d 7032 . . . 4 (𝑋 = ∅ → (𝐺 Σg (𝑊 ++ 𝑋)) = (𝐺 Σg (𝑊 ++ ∅)))
11 oveq2 7024 . . . . . 6 (𝑋 = ∅ → (𝐺 Σg 𝑋) = (𝐺 Σg ∅))
1211, 5syl6eq 2847 . . . . 5 (𝑋 = ∅ → (𝐺 Σg 𝑋) = (0g𝐺))
1312oveq2d 7032 . . . 4 (𝑋 = ∅ → ((𝐺 Σg 𝑊) + (𝐺 Σg 𝑋)) = ((𝐺 Σg 𝑊) + (0g𝐺)))
1410, 13eqeq12d 2810 . . 3 (𝑋 = ∅ → ((𝐺 Σg (𝑊 ++ 𝑋)) = ((𝐺 Σg 𝑊) + (𝐺 Σg 𝑋)) ↔ (𝐺 Σg (𝑊 ++ ∅)) = ((𝐺 Σg 𝑊) + (0g𝐺))))
15 gsumwcl.b . . . . . 6 𝐵 = (Base‘𝐺)
16 gsumccat.p . . . . . 6 + = (+g𝐺)
17 simpl1 1184 . . . . . 6 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → 𝐺 ∈ Mnd)
18 lennncl 13730 . . . . . . . . . . 11 ((𝑊 ∈ Word 𝐵𝑊 ≠ ∅) → (♯‘𝑊) ∈ ℕ)
19183ad2antl2 1179 . . . . . . . . . 10 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ 𝑊 ≠ ∅) → (♯‘𝑊) ∈ ℕ)
2019adantrr 713 . . . . . . . . 9 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (♯‘𝑊) ∈ ℕ)
21 lennncl 13730 . . . . . . . . . . 11 ((𝑋 ∈ Word 𝐵𝑋 ≠ ∅) → (♯‘𝑋) ∈ ℕ)
22213ad2antl3 1180 . . . . . . . . . 10 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ 𝑋 ≠ ∅) → (♯‘𝑋) ∈ ℕ)
2322adantrl 712 . . . . . . . . 9 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (♯‘𝑋) ∈ ℕ)
2420, 23nnaddcld 11537 . . . . . . . 8 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → ((♯‘𝑊) + (♯‘𝑋)) ∈ ℕ)
25 nnm1nn0 11786 . . . . . . . 8 (((♯‘𝑊) + (♯‘𝑋)) ∈ ℕ → (((♯‘𝑊) + (♯‘𝑋)) − 1) ∈ ℕ0)
2624, 25syl 17 . . . . . . 7 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (((♯‘𝑊) + (♯‘𝑋)) − 1) ∈ ℕ0)
27 nn0uz 12129 . . . . . . 7 0 = (ℤ‘0)
2826, 27syl6eleq 2893 . . . . . 6 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (((♯‘𝑊) + (♯‘𝑋)) − 1) ∈ (ℤ‘0))
29 simpl2 1185 . . . . . . . . 9 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → 𝑊 ∈ Word 𝐵)
30 simpl3 1186 . . . . . . . . 9 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → 𝑋 ∈ Word 𝐵)
31 ccatcl 13772 . . . . . . . . 9 ((𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) → (𝑊 ++ 𝑋) ∈ Word 𝐵)
3229, 30, 31syl2anc 584 . . . . . . . 8 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (𝑊 ++ 𝑋) ∈ Word 𝐵)
33 wrdf 13712 . . . . . . . 8 ((𝑊 ++ 𝑋) ∈ Word 𝐵 → (𝑊 ++ 𝑋):(0..^(♯‘(𝑊 ++ 𝑋)))⟶𝐵)
3432, 33syl 17 . . . . . . 7 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (𝑊 ++ 𝑋):(0..^(♯‘(𝑊 ++ 𝑋)))⟶𝐵)
35 ccatlen 13773 . . . . . . . . . . 11 ((𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) → (♯‘(𝑊 ++ 𝑋)) = ((♯‘𝑊) + (♯‘𝑋)))
3629, 30, 35syl2anc 584 . . . . . . . . . 10 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (♯‘(𝑊 ++ 𝑋)) = ((♯‘𝑊) + (♯‘𝑋)))
3736oveq2d 7032 . . . . . . . . 9 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (0..^(♯‘(𝑊 ++ 𝑋))) = (0..^((♯‘𝑊) + (♯‘𝑋))))
3820nnzd 11935 . . . . . . . . . . 11 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (♯‘𝑊) ∈ ℤ)
3923nnzd 11935 . . . . . . . . . . 11 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (♯‘𝑋) ∈ ℤ)
4038, 39zaddcld 11940 . . . . . . . . . 10 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → ((♯‘𝑊) + (♯‘𝑋)) ∈ ℤ)
41 fzoval 12889 . . . . . . . . . 10 (((♯‘𝑊) + (♯‘𝑋)) ∈ ℤ → (0..^((♯‘𝑊) + (♯‘𝑋))) = (0...(((♯‘𝑊) + (♯‘𝑋)) − 1)))
4240, 41syl 17 . . . . . . . . 9 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (0..^((♯‘𝑊) + (♯‘𝑋))) = (0...(((♯‘𝑊) + (♯‘𝑋)) − 1)))
4337, 42eqtrd 2831 . . . . . . . 8 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (0..^(♯‘(𝑊 ++ 𝑋))) = (0...(((♯‘𝑊) + (♯‘𝑋)) − 1)))
4443feq2d 6368 . . . . . . 7 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → ((𝑊 ++ 𝑋):(0..^(♯‘(𝑊 ++ 𝑋)))⟶𝐵 ↔ (𝑊 ++ 𝑋):(0...(((♯‘𝑊) + (♯‘𝑋)) − 1))⟶𝐵))
4534, 44mpbid 233 . . . . . 6 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (𝑊 ++ 𝑋):(0...(((♯‘𝑊) + (♯‘𝑋)) − 1))⟶𝐵)
4615, 16, 17, 28, 45gsumval2 17719 . . . . 5 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (𝐺 Σg (𝑊 ++ 𝑋)) = (seq0( + , (𝑊 ++ 𝑋))‘(((♯‘𝑊) + (♯‘𝑋)) − 1)))
47 nnm1nn0 11786 . . . . . . . . . 10 ((♯‘𝑊) ∈ ℕ → ((♯‘𝑊) − 1) ∈ ℕ0)
4820, 47syl 17 . . . . . . . . 9 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → ((♯‘𝑊) − 1) ∈ ℕ0)
4948, 27syl6eleq 2893 . . . . . . . 8 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → ((♯‘𝑊) − 1) ∈ (ℤ‘0))
50 wrdf 13712 . . . . . . . . . 10 (𝑊 ∈ Word 𝐵𝑊:(0..^(♯‘𝑊))⟶𝐵)
5129, 50syl 17 . . . . . . . . 9 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → 𝑊:(0..^(♯‘𝑊))⟶𝐵)
52 fzoval 12889 . . . . . . . . . . 11 ((♯‘𝑊) ∈ ℤ → (0..^(♯‘𝑊)) = (0...((♯‘𝑊) − 1)))
5338, 52syl 17 . . . . . . . . . 10 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (0..^(♯‘𝑊)) = (0...((♯‘𝑊) − 1)))
5453feq2d 6368 . . . . . . . . 9 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (𝑊:(0..^(♯‘𝑊))⟶𝐵𝑊:(0...((♯‘𝑊) − 1))⟶𝐵))
5551, 54mpbid 233 . . . . . . . 8 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → 𝑊:(0...((♯‘𝑊) − 1))⟶𝐵)
5615, 16, 17, 49, 55gsumval2 17719 . . . . . . 7 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (𝐺 Σg 𝑊) = (seq0( + , 𝑊)‘((♯‘𝑊) − 1)))
57 nnm1nn0 11786 . . . . . . . . . 10 ((♯‘𝑋) ∈ ℕ → ((♯‘𝑋) − 1) ∈ ℕ0)
5823, 57syl 17 . . . . . . . . 9 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → ((♯‘𝑋) − 1) ∈ ℕ0)
5958, 27syl6eleq 2893 . . . . . . . 8 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → ((♯‘𝑋) − 1) ∈ (ℤ‘0))
60 wrdf 13712 . . . . . . . . . 10 (𝑋 ∈ Word 𝐵𝑋:(0..^(♯‘𝑋))⟶𝐵)
6130, 60syl 17 . . . . . . . . 9 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → 𝑋:(0..^(♯‘𝑋))⟶𝐵)
62 fzoval 12889 . . . . . . . . . . 11 ((♯‘𝑋) ∈ ℤ → (0..^(♯‘𝑋)) = (0...((♯‘𝑋) − 1)))
6339, 62syl 17 . . . . . . . . . 10 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (0..^(♯‘𝑋)) = (0...((♯‘𝑋) − 1)))
6463feq2d 6368 . . . . . . . . 9 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (𝑋:(0..^(♯‘𝑋))⟶𝐵𝑋:(0...((♯‘𝑋) − 1))⟶𝐵))
6561, 64mpbid 233 . . . . . . . 8 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → 𝑋:(0...((♯‘𝑋) − 1))⟶𝐵)
6615, 16, 17, 59, 65gsumval2 17719 . . . . . . 7 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (𝐺 Σg 𝑋) = (seq0( + , 𝑋)‘((♯‘𝑋) − 1)))
6756, 66oveq12d 7034 . . . . . 6 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → ((𝐺 Σg 𝑊) + (𝐺 Σg 𝑋)) = ((seq0( + , 𝑊)‘((♯‘𝑊) − 1)) + (seq0( + , 𝑋)‘((♯‘𝑋) − 1))))
6815, 16mndcl 17740 . . . . . . . . . 10 ((𝐺 ∈ Mnd ∧ 𝑥𝐵𝑦𝐵) → (𝑥 + 𝑦) ∈ 𝐵)
69683expb 1113 . . . . . . . . 9 ((𝐺 ∈ Mnd ∧ (𝑥𝐵𝑦𝐵)) → (𝑥 + 𝑦) ∈ 𝐵)
7017, 69sylan 580 . . . . . . . 8 ((((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) ∧ (𝑥𝐵𝑦𝐵)) → (𝑥 + 𝑦) ∈ 𝐵)
7115, 16mndass 17741 . . . . . . . . 9 ((𝐺 ∈ Mnd ∧ (𝑥𝐵𝑦𝐵𝑧𝐵)) → ((𝑥 + 𝑦) + 𝑧) = (𝑥 + (𝑦 + 𝑧)))
7217, 71sylan 580 . . . . . . . 8 ((((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) ∧ (𝑥𝐵𝑦𝐵𝑧𝐵)) → ((𝑥 + 𝑦) + 𝑧) = (𝑥 + (𝑦 + 𝑧)))
73 uzid 12108 . . . . . . . . . . 11 ((♯‘𝑊) ∈ ℤ → (♯‘𝑊) ∈ (ℤ‘(♯‘𝑊)))
7438, 73syl 17 . . . . . . . . . 10 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (♯‘𝑊) ∈ (ℤ‘(♯‘𝑊)))
75 uzaddcl 12153 . . . . . . . . . 10 (((♯‘𝑊) ∈ (ℤ‘(♯‘𝑊)) ∧ ((♯‘𝑋) − 1) ∈ ℕ0) → ((♯‘𝑊) + ((♯‘𝑋) − 1)) ∈ (ℤ‘(♯‘𝑊)))
7674, 58, 75syl2anc 584 . . . . . . . . 9 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → ((♯‘𝑊) + ((♯‘𝑋) − 1)) ∈ (ℤ‘(♯‘𝑊)))
7720nncnd 11502 . . . . . . . . . 10 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (♯‘𝑊) ∈ ℂ)
7823nncnd 11502 . . . . . . . . . 10 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (♯‘𝑋) ∈ ℂ)
79 1cnd 10482 . . . . . . . . . 10 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → 1 ∈ ℂ)
8077, 78, 79addsubassd 10865 . . . . . . . . 9 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (((♯‘𝑊) + (♯‘𝑋)) − 1) = ((♯‘𝑊) + ((♯‘𝑋) − 1)))
81 ax-1cn 10441 . . . . . . . . . . 11 1 ∈ ℂ
82 npcan 10743 . . . . . . . . . . 11 (((♯‘𝑊) ∈ ℂ ∧ 1 ∈ ℂ) → (((♯‘𝑊) − 1) + 1) = (♯‘𝑊))
8377, 81, 82sylancl 586 . . . . . . . . . 10 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (((♯‘𝑊) − 1) + 1) = (♯‘𝑊))
8483fveq2d 6542 . . . . . . . . 9 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (ℤ‘(((♯‘𝑊) − 1) + 1)) = (ℤ‘(♯‘𝑊)))
8576, 80, 843eltr4d 2898 . . . . . . . 8 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (((♯‘𝑊) + (♯‘𝑋)) − 1) ∈ (ℤ‘(((♯‘𝑊) − 1) + 1)))
8645ffvelrnda 6716 . . . . . . . 8 ((((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) ∧ 𝑥 ∈ (0...(((♯‘𝑊) + (♯‘𝑋)) − 1))) → ((𝑊 ++ 𝑋)‘𝑥) ∈ 𝐵)
8770, 72, 85, 49, 86seqsplit 13253 . . . . . . 7 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (seq0( + , (𝑊 ++ 𝑋))‘(((♯‘𝑊) + (♯‘𝑋)) − 1)) = ((seq0( + , (𝑊 ++ 𝑋))‘((♯‘𝑊) − 1)) + (seq(((♯‘𝑊) − 1) + 1)( + , (𝑊 ++ 𝑋))‘(((♯‘𝑊) + (♯‘𝑋)) − 1))))
88 simpll2 1206 . . . . . . . . . 10 ((((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) ∧ 𝑥 ∈ (0...((♯‘𝑊) − 1))) → 𝑊 ∈ Word 𝐵)
89 simpll3 1207 . . . . . . . . . 10 ((((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) ∧ 𝑥 ∈ (0...((♯‘𝑊) − 1))) → 𝑋 ∈ Word 𝐵)
9053eleq2d 2868 . . . . . . . . . . 11 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (𝑥 ∈ (0..^(♯‘𝑊)) ↔ 𝑥 ∈ (0...((♯‘𝑊) − 1))))
9190biimpar 478 . . . . . . . . . 10 ((((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) ∧ 𝑥 ∈ (0...((♯‘𝑊) − 1))) → 𝑥 ∈ (0..^(♯‘𝑊)))
92 ccatval1 13775 . . . . . . . . . 10 ((𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵𝑥 ∈ (0..^(♯‘𝑊))) → ((𝑊 ++ 𝑋)‘𝑥) = (𝑊𝑥))
9388, 89, 91, 92syl3anc 1364 . . . . . . . . 9 ((((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) ∧ 𝑥 ∈ (0...((♯‘𝑊) − 1))) → ((𝑊 ++ 𝑋)‘𝑥) = (𝑊𝑥))
9449, 93seqfveq 13244 . . . . . . . 8 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (seq0( + , (𝑊 ++ 𝑋))‘((♯‘𝑊) − 1)) = (seq0( + , 𝑊)‘((♯‘𝑊) − 1)))
9577addid2d 10688 . . . . . . . . . . . 12 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (0 + (♯‘𝑊)) = (♯‘𝑊))
9683, 95eqtr4d 2834 . . . . . . . . . . 11 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (((♯‘𝑊) − 1) + 1) = (0 + (♯‘𝑊)))
9796seqeq1d 13225 . . . . . . . . . 10 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → seq(((♯‘𝑊) − 1) + 1)( + , (𝑊 ++ 𝑋)) = seq(0 + (♯‘𝑊))( + , (𝑊 ++ 𝑋)))
9877, 78addcomd 10689 . . . . . . . . . . . 12 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → ((♯‘𝑊) + (♯‘𝑋)) = ((♯‘𝑋) + (♯‘𝑊)))
9998oveq1d 7031 . . . . . . . . . . 11 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (((♯‘𝑊) + (♯‘𝑋)) − 1) = (((♯‘𝑋) + (♯‘𝑊)) − 1))
10078, 77, 79addsubd 10866 . . . . . . . . . . 11 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (((♯‘𝑋) + (♯‘𝑊)) − 1) = (((♯‘𝑋) − 1) + (♯‘𝑊)))
10199, 100eqtrd 2831 . . . . . . . . . 10 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (((♯‘𝑊) + (♯‘𝑋)) − 1) = (((♯‘𝑋) − 1) + (♯‘𝑊)))
10297, 101fveq12d 6545 . . . . . . . . 9 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (seq(((♯‘𝑊) − 1) + 1)( + , (𝑊 ++ 𝑋))‘(((♯‘𝑊) + (♯‘𝑋)) − 1)) = (seq(0 + (♯‘𝑊))( + , (𝑊 ++ 𝑋))‘(((♯‘𝑋) − 1) + (♯‘𝑊))))
103 simpll2 1206 . . . . . . . . . . . 12 ((((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) ∧ 𝑥 ∈ (0...((♯‘𝑋) − 1))) → 𝑊 ∈ Word 𝐵)
104 simpll3 1207 . . . . . . . . . . . 12 ((((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) ∧ 𝑥 ∈ (0...((♯‘𝑋) − 1))) → 𝑋 ∈ Word 𝐵)
10563eleq2d 2868 . . . . . . . . . . . . 13 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (𝑥 ∈ (0..^(♯‘𝑋)) ↔ 𝑥 ∈ (0...((♯‘𝑋) − 1))))
106105biimpar 478 . . . . . . . . . . . 12 ((((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) ∧ 𝑥 ∈ (0...((♯‘𝑋) − 1))) → 𝑥 ∈ (0..^(♯‘𝑋)))
107 ccatval3 13777 . . . . . . . . . . . 12 ((𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵𝑥 ∈ (0..^(♯‘𝑋))) → ((𝑊 ++ 𝑋)‘(𝑥 + (♯‘𝑊))) = (𝑋𝑥))
108103, 104, 106, 107syl3anc 1364 . . . . . . . . . . 11 ((((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) ∧ 𝑥 ∈ (0...((♯‘𝑋) − 1))) → ((𝑊 ++ 𝑋)‘(𝑥 + (♯‘𝑊))) = (𝑋𝑥))
109108eqcomd 2801 . . . . . . . . . 10 ((((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) ∧ 𝑥 ∈ (0...((♯‘𝑋) − 1))) → (𝑋𝑥) = ((𝑊 ++ 𝑋)‘(𝑥 + (♯‘𝑊))))
11059, 38, 109seqshft2 13246 . . . . . . . . 9 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (seq0( + , 𝑋)‘((♯‘𝑋) − 1)) = (seq(0 + (♯‘𝑊))( + , (𝑊 ++ 𝑋))‘(((♯‘𝑋) − 1) + (♯‘𝑊))))
111102, 110eqtr4d 2834 . . . . . . . 8 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (seq(((♯‘𝑊) − 1) + 1)( + , (𝑊 ++ 𝑋))‘(((♯‘𝑊) + (♯‘𝑋)) − 1)) = (seq0( + , 𝑋)‘((♯‘𝑋) − 1)))
11294, 111oveq12d 7034 . . . . . . 7 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → ((seq0( + , (𝑊 ++ 𝑋))‘((♯‘𝑊) − 1)) + (seq(((♯‘𝑊) − 1) + 1)( + , (𝑊 ++ 𝑋))‘(((♯‘𝑊) + (♯‘𝑋)) − 1))) = ((seq0( + , 𝑊)‘((♯‘𝑊) − 1)) + (seq0( + , 𝑋)‘((♯‘𝑋) − 1))))
11387, 112eqtrd 2831 . . . . . 6 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (seq0( + , (𝑊 ++ 𝑋))‘(((♯‘𝑊) + (♯‘𝑋)) − 1)) = ((seq0( + , 𝑊)‘((♯‘𝑊) − 1)) + (seq0( + , 𝑋)‘((♯‘𝑋) − 1))))
11467, 113eqtr4d 2834 . . . . 5 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → ((𝐺 Σg 𝑊) + (𝐺 Σg 𝑋)) = (seq0( + , (𝑊 ++ 𝑋))‘(((♯‘𝑊) + (♯‘𝑋)) − 1)))
11546, 114eqtr4d 2834 . . . 4 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ (𝑊 ≠ ∅ ∧ 𝑋 ≠ ∅)) → (𝐺 Σg (𝑊 ++ 𝑋)) = ((𝐺 Σg 𝑊) + (𝐺 Σg 𝑋)))
116115anassrs 468 . . 3 ((((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ 𝑊 ≠ ∅) ∧ 𝑋 ≠ ∅) → (𝐺 Σg (𝑊 ++ 𝑋)) = ((𝐺 Σg 𝑊) + (𝐺 Σg 𝑋)))
117 simpl2 1185 . . . . . 6 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ 𝑊 ≠ ∅) → 𝑊 ∈ Word 𝐵)
118 ccatrid 13785 . . . . . 6 (𝑊 ∈ Word 𝐵 → (𝑊 ++ ∅) = 𝑊)
119117, 118syl 17 . . . . 5 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ 𝑊 ≠ ∅) → (𝑊 ++ ∅) = 𝑊)
120119oveq2d 7032 . . . 4 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ 𝑊 ≠ ∅) → (𝐺 Σg (𝑊 ++ ∅)) = (𝐺 Σg 𝑊))
121 simpl1 1184 . . . . 5 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ 𝑊 ≠ ∅) → 𝐺 ∈ Mnd)
12215gsumwcl 17816 . . . . . . 7 ((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵) → (𝐺 Σg 𝑊) ∈ 𝐵)
1231223adant3 1125 . . . . . 6 ((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) → (𝐺 Σg 𝑊) ∈ 𝐵)
124123adantr 481 . . . . 5 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ 𝑊 ≠ ∅) → (𝐺 Σg 𝑊) ∈ 𝐵)
12515, 16, 4mndrid 17751 . . . . 5 ((𝐺 ∈ Mnd ∧ (𝐺 Σg 𝑊) ∈ 𝐵) → ((𝐺 Σg 𝑊) + (0g𝐺)) = (𝐺 Σg 𝑊))
126121, 124, 125syl2anc 584 . . . 4 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ 𝑊 ≠ ∅) → ((𝐺 Σg 𝑊) + (0g𝐺)) = (𝐺 Σg 𝑊))
127120, 126eqtr4d 2834 . . 3 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ 𝑊 ≠ ∅) → (𝐺 Σg (𝑊 ++ ∅)) = ((𝐺 Σg 𝑊) + (0g𝐺)))
12814, 116, 127pm2.61ne 3070 . 2 (((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) ∧ 𝑊 ≠ ∅) → (𝐺 Σg (𝑊 ++ 𝑋)) = ((𝐺 Σg 𝑊) + (𝐺 Σg 𝑋)))
129 ccatlid 13784 . . . . 5 (𝑋 ∈ Word 𝐵 → (∅ ++ 𝑋) = 𝑋)
1301293ad2ant3 1128 . . . 4 ((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) → (∅ ++ 𝑋) = 𝑋)
131130oveq2d 7032 . . 3 ((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) → (𝐺 Σg (∅ ++ 𝑋)) = (𝐺 Σg 𝑋))
132 simp1 1129 . . . 4 ((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) → 𝐺 ∈ Mnd)
13315gsumwcl 17816 . . . 4 ((𝐺 ∈ Mnd ∧ 𝑋 ∈ Word 𝐵) → (𝐺 Σg 𝑋) ∈ 𝐵)
13415, 16, 4mndlid 17750 . . . 4 ((𝐺 ∈ Mnd ∧ (𝐺 Σg 𝑋) ∈ 𝐵) → ((0g𝐺) + (𝐺 Σg 𝑋)) = (𝐺 Σg 𝑋))
135132, 133, 1343imp3i2an 1338 . . 3 ((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) → ((0g𝐺) + (𝐺 Σg 𝑋)) = (𝐺 Σg 𝑋))
136131, 135eqtr4d 2834 . 2 ((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) → (𝐺 Σg (∅ ++ 𝑋)) = ((0g𝐺) + (𝐺 Σg 𝑋)))
1378, 128, 136pm2.61ne 3070 1 ((𝐺 ∈ Mnd ∧ 𝑊 ∈ Word 𝐵𝑋 ∈ Word 𝐵) → (𝐺 Σg (𝑊 ++ 𝑋)) = ((𝐺 Σg 𝑊) + (𝐺 Σg 𝑋)))
Colors of variables: wff setvar class
Syntax hints:  wi 4  wa 396  w3a 1080   = wceq 1522  wcel 2081  wne 2984  c0 4211  wf 6221  cfv 6225  (class class class)co 7016  cc 10381  0cc0 10383  1c1 10384   + caddc 10386  cmin 10717  cn 11486  0cn0 11745  cz 11829  cuz 12093  ...cfz 12742  ..^cfzo 12883  seqcseq 13219  chash 13540  Word cword 13707   ++ cconcat 13768  Basecbs 16312  +gcplusg 16394  0gc0g 16542   Σg cgsu 16543  Mndcmnd 17733
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1777  ax-4 1791  ax-5 1888  ax-6 1947  ax-7 1992  ax-8 2083  ax-9 2091  ax-10 2112  ax-11 2126  ax-12 2141  ax-13 2344  ax-ext 2769  ax-rep 5081  ax-sep 5094  ax-nul 5101  ax-pow 5157  ax-pr 5221  ax-un 7319  ax-cnex 10439  ax-resscn 10440  ax-1cn 10441  ax-icn 10442  ax-addcl 10443  ax-addrcl 10444  ax-mulcl 10445  ax-mulrcl 10446  ax-mulcom 10447  ax-addass 10448  ax-mulass 10449  ax-distr 10450  ax-i2m1 10451  ax-1ne0 10452  ax-1rid 10453  ax-rnegex 10454  ax-rrecex 10455  ax-cnre 10456  ax-pre-lttri 10457  ax-pre-lttrn 10458  ax-pre-ltadd 10459  ax-pre-mulgt0 10460
This theorem depends on definitions:  df-bi 208  df-an 397  df-or 843  df-3or 1081  df-3an 1082  df-tru 1525  df-ex 1762  df-nf 1766  df-sb 2043  df-mo 2576  df-eu 2612  df-clab 2776  df-cleq 2788  df-clel 2863  df-nfc 2935  df-ne 2985  df-nel 3091  df-ral 3110  df-rex 3111  df-reu 3112  df-rmo 3113  df-rab 3114  df-v 3439  df-sbc 3707  df-csb 3812  df-dif 3862  df-un 3864  df-in 3866  df-ss 3874  df-pss 3876  df-nul 4212  df-if 4382  df-pw 4455  df-sn 4473  df-pr 4475  df-tp 4477  df-op 4479  df-uni 4746  df-int 4783  df-iun 4827  df-br 4963  df-opab 5025  df-mpt 5042  df-tr 5064  df-id 5348  df-eprel 5353  df-po 5362  df-so 5363  df-fr 5402  df-we 5404  df-xp 5449  df-rel 5450  df-cnv 5451  df-co 5452  df-dm 5453  df-rn 5454  df-res 5455  df-ima 5456  df-pred 6023  df-ord 6069  df-on 6070  df-lim 6071  df-suc 6072  df-iota 6189  df-fun 6227  df-fn 6228  df-f 6229  df-f1 6230  df-fo 6231  df-f1o 6232  df-fv 6233  df-riota 6977  df-ov 7019  df-oprab 7020  df-mpo 7021  df-om 7437  df-1st 7545  df-2nd 7546  df-wrecs 7798  df-recs 7860  df-rdg 7898  df-1o 7953  df-oadd 7957  df-er 8139  df-en 8358  df-dom 8359  df-sdom 8360  df-fin 8361  df-card 9214  df-pnf 10523  df-mnf 10524  df-xr 10525  df-ltxr 10526  df-le 10527  df-sub 10719  df-neg 10720  df-nn 11487  df-2 11548  df-n0 11746  df-z 11830  df-uz 12094  df-fz 12743  df-fzo 12884  df-seq 13220  df-hash 13541  df-word 13708  df-concat 13769  df-ndx 16315  df-slot 16316  df-base 16318  df-sets 16319  df-ress 16320  df-plusg 16407  df-0g 16544  df-gsum 16545  df-mgm 17681  df-sgrp 17723  df-mnd 17734  df-submnd 17775
This theorem is referenced by:  gsumws2  17818  gsumccatsn  17819  gsumspl  17820  gsumwspan  17822  frmdgsum  17838  frmdup1  17840  gsumwrev  18235  psgnunilem5  18353  psgnuni  18358  frgpuplem  18625  frgpup1  18628  psgnghm  20406  cyc3genpm  30432  mrsubccat  32373  gsumws3  40035  gsumws4  40036
  Copyright terms: Public domain W3C validator