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

Theorem frlmsplit2 20034
Description: Restriction is homomorphic on free modules. (Contributed by Stefan O'Rear, 3-Feb-2015.) (Proof shortened by AV, 21-Jul-2019.)
Hypotheses
Ref Expression
frlmsplit2.y 𝑌 = (𝑅 freeLMod 𝑈)
frlmsplit2.z 𝑍 = (𝑅 freeLMod 𝑉)
frlmsplit2.b 𝐵 = (Base‘𝑌)
frlmsplit2.c 𝐶 = (Base‘𝑍)
frlmsplit2.f 𝐹 = (𝑥𝐵 ↦ (𝑥𝑉))
Assertion
Ref Expression
frlmsplit2 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝐹 ∈ (𝑌 LMHom 𝑍))
Distinct variable groups:   𝑥,𝑌   𝑥,𝑅   𝑥,𝑈   𝑥,𝑍   𝑥,𝑉   𝑥,𝐵   𝑥,𝐶   𝑥,𝑋
Allowed substitution hint:   𝐹(𝑥)

Proof of Theorem frlmsplit2
StepHypRef Expression
1 simp1 1059 . . . . . 6 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝑅 ∈ Ring)
2 simp2 1060 . . . . . 6 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝑈𝑋)
3 frlmsplit2.y . . . . . . 7 𝑌 = (𝑅 freeLMod 𝑈)
4 frlmsplit2.b . . . . . . 7 𝐵 = (Base‘𝑌)
5 eqid 2621 . . . . . . 7 (LSubSp‘((ringLMod‘𝑅) ↑s 𝑈)) = (LSubSp‘((ringLMod‘𝑅) ↑s 𝑈))
63, 4, 5frlmlss 20017 . . . . . 6 ((𝑅 ∈ Ring ∧ 𝑈𝑋) → 𝐵 ∈ (LSubSp‘((ringLMod‘𝑅) ↑s 𝑈)))
71, 2, 6syl2anc 692 . . . . 5 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝐵 ∈ (LSubSp‘((ringLMod‘𝑅) ↑s 𝑈)))
8 eqid 2621 . . . . . 6 (Base‘((ringLMod‘𝑅) ↑s 𝑈)) = (Base‘((ringLMod‘𝑅) ↑s 𝑈))
98, 5lssss 18859 . . . . 5 (𝐵 ∈ (LSubSp‘((ringLMod‘𝑅) ↑s 𝑈)) → 𝐵 ⊆ (Base‘((ringLMod‘𝑅) ↑s 𝑈)))
10 resmpt 5410 . . . . 5 (𝐵 ⊆ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) → ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) = (𝑥𝐵 ↦ (𝑥𝑉)))
117, 9, 103syl 18 . . . 4 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) = (𝑥𝐵 ↦ (𝑥𝑉)))
12 frlmsplit2.f . . . 4 𝐹 = (𝑥𝐵 ↦ (𝑥𝑉))
1311, 12syl6eqr 2673 . . 3 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) = 𝐹)
14 rlmlmod 19127 . . . . . 6 (𝑅 ∈ Ring → (ringLMod‘𝑅) ∈ LMod)
15 eqid 2621 . . . . . . 7 ((ringLMod‘𝑅) ↑s 𝑈) = ((ringLMod‘𝑅) ↑s 𝑈)
16 eqid 2621 . . . . . . 7 ((ringLMod‘𝑅) ↑s 𝑉) = ((ringLMod‘𝑅) ↑s 𝑉)
17 eqid 2621 . . . . . . 7 (Base‘((ringLMod‘𝑅) ↑s 𝑉)) = (Base‘((ringLMod‘𝑅) ↑s 𝑉))
18 eqid 2621 . . . . . . 7 (𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) = (𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉))
1915, 16, 8, 17, 18pwssplit3 18983 . . . . . 6 (((ringLMod‘𝑅) ∈ LMod ∧ 𝑈𝑋𝑉𝑈) → (𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ∈ (((ringLMod‘𝑅) ↑s 𝑈) LMHom ((ringLMod‘𝑅) ↑s 𝑉)))
2014, 19syl3an1 1356 . . . . 5 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → (𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ∈ (((ringLMod‘𝑅) ↑s 𝑈) LMHom ((ringLMod‘𝑅) ↑s 𝑉)))
21 eqid 2621 . . . . . 6 (((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) = (((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵)
225, 21reslmhm 18974 . . . . 5 (((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ∈ (((ringLMod‘𝑅) ↑s 𝑈) LMHom ((ringLMod‘𝑅) ↑s 𝑉)) ∧ 𝐵 ∈ (LSubSp‘((ringLMod‘𝑅) ↑s 𝑈))) → ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) ∈ ((((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) LMHom ((ringLMod‘𝑅) ↑s 𝑉)))
2320, 7, 22syl2anc 692 . . . 4 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) ∈ ((((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) LMHom ((ringLMod‘𝑅) ↑s 𝑉)))
24143ad2ant1 1080 . . . . . 6 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → (ringLMod‘𝑅) ∈ LMod)
25 simp3 1061 . . . . . . 7 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝑉𝑈)
262, 25ssexd 4767 . . . . . 6 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝑉 ∈ V)
2716pwslmod 18892 . . . . . 6 (((ringLMod‘𝑅) ∈ LMod ∧ 𝑉 ∈ V) → ((ringLMod‘𝑅) ↑s 𝑉) ∈ LMod)
2824, 26, 27syl2anc 692 . . . . 5 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ((ringLMod‘𝑅) ↑s 𝑉) ∈ LMod)
29 frlmsplit2.z . . . . . . 7 𝑍 = (𝑅 freeLMod 𝑉)
30 frlmsplit2.c . . . . . . 7 𝐶 = (Base‘𝑍)
31 eqid 2621 . . . . . . 7 (LSubSp‘((ringLMod‘𝑅) ↑s 𝑉)) = (LSubSp‘((ringLMod‘𝑅) ↑s 𝑉))
3229, 30, 31frlmlss 20017 . . . . . 6 ((𝑅 ∈ Ring ∧ 𝑉 ∈ V) → 𝐶 ∈ (LSubSp‘((ringLMod‘𝑅) ↑s 𝑉)))
331, 26, 32syl2anc 692 . . . . 5 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝐶 ∈ (LSubSp‘((ringLMod‘𝑅) ↑s 𝑉)))
3411rneqd 5315 . . . . . 6 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ran ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) = ran (𝑥𝐵 ↦ (𝑥𝑉)))
35 eqid 2621 . . . . . . . . . . . . 13 (Base‘𝑅) = (Base‘𝑅)
363, 35, 4frlmbasf 20026 . . . . . . . . . . . 12 ((𝑈𝑋𝑥𝐵) → 𝑥:𝑈⟶(Base‘𝑅))
372, 36sylan 488 . . . . . . . . . . 11 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → 𝑥:𝑈⟶(Base‘𝑅))
38 simpl3 1064 . . . . . . . . . . 11 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → 𝑉𝑈)
3937, 38fssresd 6030 . . . . . . . . . 10 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → (𝑥𝑉):𝑉⟶(Base‘𝑅))
40 fvex 6160 . . . . . . . . . . . 12 (Base‘𝑅) ∈ V
41 elmapg 7818 . . . . . . . . . . . 12 (((Base‘𝑅) ∈ V ∧ 𝑉 ∈ V) → ((𝑥𝑉) ∈ ((Base‘𝑅) ↑𝑚 𝑉) ↔ (𝑥𝑉):𝑉⟶(Base‘𝑅)))
4240, 26, 41sylancr 694 . . . . . . . . . . 11 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ((𝑥𝑉) ∈ ((Base‘𝑅) ↑𝑚 𝑉) ↔ (𝑥𝑉):𝑉⟶(Base‘𝑅)))
4342adantr 481 . . . . . . . . . 10 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → ((𝑥𝑉) ∈ ((Base‘𝑅) ↑𝑚 𝑉) ↔ (𝑥𝑉):𝑉⟶(Base‘𝑅)))
4439, 43mpbird 247 . . . . . . . . 9 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → (𝑥𝑉) ∈ ((Base‘𝑅) ↑𝑚 𝑉))
45 eqid 2621 . . . . . . . . . . . 12 (0g𝑅) = (0g𝑅)
463, 45, 4frlmbasfsupp 20024 . . . . . . . . . . 11 ((𝑈𝑋𝑥𝐵) → 𝑥 finSupp (0g𝑅))
472, 46sylan 488 . . . . . . . . . 10 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → 𝑥 finSupp (0g𝑅))
48 fvex 6160 . . . . . . . . . . 11 (0g𝑅) ∈ V
4948a1i 11 . . . . . . . . . 10 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → (0g𝑅) ∈ V)
5047, 49fsuppres 8247 . . . . . . . . 9 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → (𝑥𝑉) finSupp (0g𝑅))
5129, 35, 45, 30frlmelbas 20022 . . . . . . . . . . 11 ((𝑅 ∈ Ring ∧ 𝑉 ∈ V) → ((𝑥𝑉) ∈ 𝐶 ↔ ((𝑥𝑉) ∈ ((Base‘𝑅) ↑𝑚 𝑉) ∧ (𝑥𝑉) finSupp (0g𝑅))))
521, 26, 51syl2anc 692 . . . . . . . . . 10 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ((𝑥𝑉) ∈ 𝐶 ↔ ((𝑥𝑉) ∈ ((Base‘𝑅) ↑𝑚 𝑉) ∧ (𝑥𝑉) finSupp (0g𝑅))))
5352adantr 481 . . . . . . . . 9 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → ((𝑥𝑉) ∈ 𝐶 ↔ ((𝑥𝑉) ∈ ((Base‘𝑅) ↑𝑚 𝑉) ∧ (𝑥𝑉) finSupp (0g𝑅))))
5444, 50, 53mpbir2and 956 . . . . . . . 8 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → (𝑥𝑉) ∈ 𝐶)
55 eqid 2621 . . . . . . . 8 (𝑥𝐵 ↦ (𝑥𝑉)) = (𝑥𝐵 ↦ (𝑥𝑉))
5654, 55fmptd 6343 . . . . . . 7 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → (𝑥𝐵 ↦ (𝑥𝑉)):𝐵𝐶)
57 frn 6012 . . . . . . 7 ((𝑥𝐵 ↦ (𝑥𝑉)):𝐵𝐶 → ran (𝑥𝐵 ↦ (𝑥𝑉)) ⊆ 𝐶)
5856, 57syl 17 . . . . . 6 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ran (𝑥𝐵 ↦ (𝑥𝑉)) ⊆ 𝐶)
5934, 58eqsstrd 3620 . . . . 5 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ran ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) ⊆ 𝐶)
60 eqid 2621 . . . . . 6 (((ringLMod‘𝑅) ↑s 𝑉) ↾s 𝐶) = (((ringLMod‘𝑅) ↑s 𝑉) ↾s 𝐶)
6160, 31reslmhm2b 18976 . . . . 5 ((((ringLMod‘𝑅) ↑s 𝑉) ∈ LMod ∧ 𝐶 ∈ (LSubSp‘((ringLMod‘𝑅) ↑s 𝑉)) ∧ ran ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) ⊆ 𝐶) → (((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) ∈ ((((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) LMHom ((ringLMod‘𝑅) ↑s 𝑉)) ↔ ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) ∈ ((((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) LMHom (((ringLMod‘𝑅) ↑s 𝑉) ↾s 𝐶))))
6228, 33, 59, 61syl3anc 1323 . . . 4 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → (((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) ∈ ((((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) LMHom ((ringLMod‘𝑅) ↑s 𝑉)) ↔ ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) ∈ ((((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) LMHom (((ringLMod‘𝑅) ↑s 𝑉) ↾s 𝐶))))
6323, 62mpbid 222 . . 3 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) ∈ ((((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) LMHom (((ringLMod‘𝑅) ↑s 𝑉) ↾s 𝐶)))
6413, 63eqeltrrd 2699 . 2 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝐹 ∈ ((((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) LMHom (((ringLMod‘𝑅) ↑s 𝑉) ↾s 𝐶)))
653, 4frlmpws 20016 . . . 4 ((𝑅 ∈ Ring ∧ 𝑈𝑋) → 𝑌 = (((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵))
661, 2, 65syl2anc 692 . . 3 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝑌 = (((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵))
6729, 30frlmpws 20016 . . . 4 ((𝑅 ∈ Ring ∧ 𝑉 ∈ V) → 𝑍 = (((ringLMod‘𝑅) ↑s 𝑉) ↾s 𝐶))
681, 26, 67syl2anc 692 . . 3 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝑍 = (((ringLMod‘𝑅) ↑s 𝑉) ↾s 𝐶))
6966, 68oveq12d 6625 . 2 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → (𝑌 LMHom 𝑍) = ((((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) LMHom (((ringLMod‘𝑅) ↑s 𝑉) ↾s 𝐶)))
7064, 69eleqtrrd 2701 1 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝐹 ∈ (𝑌 LMHom 𝑍))
Colors of variables: wff setvar class
Syntax hints:  wi 4  wb 196  wa 384  w3a 1036   = wceq 1480  wcel 1987  Vcvv 3186  wss 3556   class class class wbr 4615  cmpt 4675  ran crn 5077  cres 5078  wf 5845  cfv 5849  (class class class)co 6607  𝑚 cmap 7805   finSupp cfsupp 8222  Basecbs 15784  s cress 15785  0gc0g 16024  s cpws 16031  Ringcrg 18471  LModclmod 18787  LSubSpclss 18854   LMHom clmhm 18941  ringLModcrglmod 19091   freeLMod cfrlm 20012
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1719  ax-4 1734  ax-5 1836  ax-6 1885  ax-7 1932  ax-8 1989  ax-9 1996  ax-10 2016  ax-11 2031  ax-12 2044  ax-13 2245  ax-ext 2601  ax-rep 4733  ax-sep 4743  ax-nul 4751  ax-pow 4805  ax-pr 4869  ax-un 6905  ax-cnex 9939  ax-resscn 9940  ax-1cn 9941  ax-icn 9942  ax-addcl 9943  ax-addrcl 9944  ax-mulcl 9945  ax-mulrcl 9946  ax-mulcom 9947  ax-addass 9948  ax-mulass 9949  ax-distr 9950  ax-i2m1 9951  ax-1ne0 9952  ax-1rid 9953  ax-rnegex 9954  ax-rrecex 9955  ax-cnre 9956  ax-pre-lttri 9957  ax-pre-lttrn 9958  ax-pre-ltadd 9959  ax-pre-mulgt0 9960
This theorem depends on definitions:  df-bi 197  df-or 385  df-an 386  df-3or 1037  df-3an 1038  df-tru 1483  df-ex 1702  df-nf 1707  df-sb 1878  df-eu 2473  df-mo 2474  df-clab 2608  df-cleq 2614  df-clel 2617  df-nfc 2750  df-ne 2791  df-nel 2894  df-ral 2912  df-rex 2913  df-reu 2914  df-rmo 2915  df-rab 2916  df-v 3188  df-sbc 3419  df-csb 3516  df-dif 3559  df-un 3561  df-in 3563  df-ss 3570  df-pss 3572  df-nul 3894  df-if 4061  df-pw 4134  df-sn 4151  df-pr 4153  df-tp 4155  df-op 4157  df-uni 4405  df-int 4443  df-iun 4489  df-br 4616  df-opab 4676  df-mpt 4677  df-tr 4715  df-eprel 4987  df-id 4991  df-po 4997  df-so 4998  df-fr 5035  df-we 5037  df-xp 5082  df-rel 5083  df-cnv 5084  df-co 5085  df-dm 5086  df-rn 5087  df-res 5088  df-ima 5089  df-pred 5641  df-ord 5687  df-on 5688  df-lim 5689  df-suc 5690  df-iota 5812  df-fun 5851  df-fn 5852  df-f 5853  df-f1 5854  df-fo 5855  df-f1o 5856  df-fv 5857  df-riota 6568  df-ov 6610  df-oprab 6611  df-mpt2 6612  df-of 6853  df-om 7016  df-1st 7116  df-2nd 7117  df-supp 7244  df-wrecs 7355  df-recs 7416  df-rdg 7454  df-1o 7508  df-oadd 7512  df-er 7690  df-map 7807  df-ixp 7856  df-en 7903  df-dom 7904  df-sdom 7905  df-fin 7906  df-fsupp 8223  df-sup 8295  df-pnf 10023  df-mnf 10024  df-xr 10025  df-ltxr 10026  df-le 10027  df-sub 10215  df-neg 10216  df-nn 10968  df-2 11026  df-3 11027  df-4 11028  df-5 11029  df-6 11030  df-7 11031  df-8 11032  df-9 11033  df-n0 11240  df-z 11325  df-dec 11441  df-uz 11635  df-fz 12272  df-struct 15786  df-ndx 15787  df-slot 15788  df-base 15789  df-sets 15790  df-ress 15791  df-plusg 15878  df-mulr 15879  df-sca 15881  df-vsca 15882  df-ip 15883  df-tset 15884  df-ple 15885  df-ds 15888  df-hom 15890  df-cco 15891  df-0g 16026  df-prds 16032  df-pws 16034  df-mgm 17166  df-sgrp 17208  df-mnd 17219  df-mhm 17259  df-submnd 17260  df-grp 17349  df-minusg 17350  df-sbg 17351  df-subg 17515  df-ghm 17582  df-mgp 18414  df-ur 18426  df-ring 18473  df-subrg 18702  df-lmod 18789  df-lss 18855  df-lmhm 18944  df-sra 19094  df-rgmod 19095  df-dsmm 19998  df-frlm 20013
This theorem is referenced by:  frlmsslss  20035
  Copyright terms: Public domain W3C validator