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

Theorem frlmsplit2 19931
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 1054 . . . . . 6 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝑅 ∈ Ring)
2 simp2 1055 . . . . . 6 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝑈𝑋)
3 frlmsplit2.y . . . . . . 7 𝑌 = (𝑅 freeLMod 𝑈)
4 frlmsplit2.b . . . . . . 7 𝐵 = (Base‘𝑌)
5 eqid 2610 . . . . . . 7 (LSubSp‘((ringLMod‘𝑅) ↑s 𝑈)) = (LSubSp‘((ringLMod‘𝑅) ↑s 𝑈))
63, 4, 5frlmlss 19914 . . . . . 6 ((𝑅 ∈ Ring ∧ 𝑈𝑋) → 𝐵 ∈ (LSubSp‘((ringLMod‘𝑅) ↑s 𝑈)))
71, 2, 6syl2anc 691 . . . . 5 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝐵 ∈ (LSubSp‘((ringLMod‘𝑅) ↑s 𝑈)))
8 eqid 2610 . . . . . 6 (Base‘((ringLMod‘𝑅) ↑s 𝑈)) = (Base‘((ringLMod‘𝑅) ↑s 𝑈))
98, 5lssss 18758 . . . . 5 (𝐵 ∈ (LSubSp‘((ringLMod‘𝑅) ↑s 𝑈)) → 𝐵 ⊆ (Base‘((ringLMod‘𝑅) ↑s 𝑈)))
10 resmpt 5369 . . . . 5 (𝐵 ⊆ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) → ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) = (𝑥𝐵 ↦ (𝑥𝑉)))
117, 9, 103syl 18 . . . 4 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) = (𝑥𝐵 ↦ (𝑥𝑉)))
12 frlmsplit2.f . . . 4 𝐹 = (𝑥𝐵 ↦ (𝑥𝑉))
1311, 12syl6eqr 2662 . . 3 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) = 𝐹)
14 rlmlmod 19026 . . . . . 6 (𝑅 ∈ Ring → (ringLMod‘𝑅) ∈ LMod)
15 eqid 2610 . . . . . . 7 ((ringLMod‘𝑅) ↑s 𝑈) = ((ringLMod‘𝑅) ↑s 𝑈)
16 eqid 2610 . . . . . . 7 ((ringLMod‘𝑅) ↑s 𝑉) = ((ringLMod‘𝑅) ↑s 𝑉)
17 eqid 2610 . . . . . . 7 (Base‘((ringLMod‘𝑅) ↑s 𝑉)) = (Base‘((ringLMod‘𝑅) ↑s 𝑉))
18 eqid 2610 . . . . . . 7 (𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) = (𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉))
1915, 16, 8, 17, 18pwssplit3 18882 . . . . . 6 (((ringLMod‘𝑅) ∈ LMod ∧ 𝑈𝑋𝑉𝑈) → (𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ∈ (((ringLMod‘𝑅) ↑s 𝑈) LMHom ((ringLMod‘𝑅) ↑s 𝑉)))
2014, 19syl3an1 1351 . . . . 5 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → (𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ∈ (((ringLMod‘𝑅) ↑s 𝑈) LMHom ((ringLMod‘𝑅) ↑s 𝑉)))
21 eqid 2610 . . . . . 6 (((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) = (((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵)
225, 21reslmhm 18873 . . . . 5 (((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ∈ (((ringLMod‘𝑅) ↑s 𝑈) LMHom ((ringLMod‘𝑅) ↑s 𝑉)) ∧ 𝐵 ∈ (LSubSp‘((ringLMod‘𝑅) ↑s 𝑈))) → ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) ∈ ((((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) LMHom ((ringLMod‘𝑅) ↑s 𝑉)))
2320, 7, 22syl2anc 691 . . . 4 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) ∈ ((((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) LMHom ((ringLMod‘𝑅) ↑s 𝑉)))
24143ad2ant1 1075 . . . . . 6 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → (ringLMod‘𝑅) ∈ LMod)
25 simp3 1056 . . . . . . 7 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝑉𝑈)
262, 25ssexd 4733 . . . . . 6 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝑉 ∈ V)
2716pwslmod 18791 . . . . . 6 (((ringLMod‘𝑅) ∈ LMod ∧ 𝑉 ∈ V) → ((ringLMod‘𝑅) ↑s 𝑉) ∈ LMod)
2824, 26, 27syl2anc 691 . . . . 5 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ((ringLMod‘𝑅) ↑s 𝑉) ∈ LMod)
29 frlmsplit2.z . . . . . . 7 𝑍 = (𝑅 freeLMod 𝑉)
30 frlmsplit2.c . . . . . . 7 𝐶 = (Base‘𝑍)
31 eqid 2610 . . . . . . 7 (LSubSp‘((ringLMod‘𝑅) ↑s 𝑉)) = (LSubSp‘((ringLMod‘𝑅) ↑s 𝑉))
3229, 30, 31frlmlss 19914 . . . . . 6 ((𝑅 ∈ Ring ∧ 𝑉 ∈ V) → 𝐶 ∈ (LSubSp‘((ringLMod‘𝑅) ↑s 𝑉)))
331, 26, 32syl2anc 691 . . . . 5 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝐶 ∈ (LSubSp‘((ringLMod‘𝑅) ↑s 𝑉)))
3411rneqd 5274 . . . . . 6 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ran ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) = ran (𝑥𝐵 ↦ (𝑥𝑉)))
35 eqid 2610 . . . . . . . . . . . . 13 (Base‘𝑅) = (Base‘𝑅)
363, 35, 4frlmbasf 19923 . . . . . . . . . . . 12 ((𝑈𝑋𝑥𝐵) → 𝑥:𝑈⟶(Base‘𝑅))
372, 36sylan 487 . . . . . . . . . . 11 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → 𝑥:𝑈⟶(Base‘𝑅))
38 simpl3 1059 . . . . . . . . . . 11 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → 𝑉𝑈)
3937, 38fssresd 5984 . . . . . . . . . 10 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → (𝑥𝑉):𝑉⟶(Base‘𝑅))
40 fvex 6113 . . . . . . . . . . . 12 (Base‘𝑅) ∈ V
41 elmapg 7757 . . . . . . . . . . . 12 (((Base‘𝑅) ∈ V ∧ 𝑉 ∈ V) → ((𝑥𝑉) ∈ ((Base‘𝑅) ↑𝑚 𝑉) ↔ (𝑥𝑉):𝑉⟶(Base‘𝑅)))
4240, 26, 41sylancr 694 . . . . . . . . . . 11 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ((𝑥𝑉) ∈ ((Base‘𝑅) ↑𝑚 𝑉) ↔ (𝑥𝑉):𝑉⟶(Base‘𝑅)))
4342adantr 480 . . . . . . . . . 10 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → ((𝑥𝑉) ∈ ((Base‘𝑅) ↑𝑚 𝑉) ↔ (𝑥𝑉):𝑉⟶(Base‘𝑅)))
4439, 43mpbird 246 . . . . . . . . 9 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → (𝑥𝑉) ∈ ((Base‘𝑅) ↑𝑚 𝑉))
45 eqid 2610 . . . . . . . . . . . 12 (0g𝑅) = (0g𝑅)
463, 45, 4frlmbasfsupp 19921 . . . . . . . . . . 11 ((𝑈𝑋𝑥𝐵) → 𝑥 finSupp (0g𝑅))
472, 46sylan 487 . . . . . . . . . 10 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → 𝑥 finSupp (0g𝑅))
48 fvex 6113 . . . . . . . . . . 11 (0g𝑅) ∈ V
4948a1i 11 . . . . . . . . . 10 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → (0g𝑅) ∈ V)
5047, 49fsuppres 8183 . . . . . . . . 9 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → (𝑥𝑉) finSupp (0g𝑅))
5129, 35, 45, 30frlmelbas 19919 . . . . . . . . . . 11 ((𝑅 ∈ Ring ∧ 𝑉 ∈ V) → ((𝑥𝑉) ∈ 𝐶 ↔ ((𝑥𝑉) ∈ ((Base‘𝑅) ↑𝑚 𝑉) ∧ (𝑥𝑉) finSupp (0g𝑅))))
521, 26, 51syl2anc 691 . . . . . . . . . 10 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ((𝑥𝑉) ∈ 𝐶 ↔ ((𝑥𝑉) ∈ ((Base‘𝑅) ↑𝑚 𝑉) ∧ (𝑥𝑉) finSupp (0g𝑅))))
5352adantr 480 . . . . . . . . 9 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → ((𝑥𝑉) ∈ 𝐶 ↔ ((𝑥𝑉) ∈ ((Base‘𝑅) ↑𝑚 𝑉) ∧ (𝑥𝑉) finSupp (0g𝑅))))
5444, 50, 53mpbir2and 959 . . . . . . . 8 (((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) ∧ 𝑥𝐵) → (𝑥𝑉) ∈ 𝐶)
55 eqid 2610 . . . . . . . 8 (𝑥𝐵 ↦ (𝑥𝑉)) = (𝑥𝐵 ↦ (𝑥𝑉))
5654, 55fmptd 6292 . . . . . . 7 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → (𝑥𝐵 ↦ (𝑥𝑉)):𝐵𝐶)
57 frn 5966 . . . . . . 7 ((𝑥𝐵 ↦ (𝑥𝑉)):𝐵𝐶 → ran (𝑥𝐵 ↦ (𝑥𝑉)) ⊆ 𝐶)
5856, 57syl 17 . . . . . 6 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ran (𝑥𝐵 ↦ (𝑥𝑉)) ⊆ 𝐶)
5934, 58eqsstrd 3602 . . . . 5 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ran ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) ⊆ 𝐶)
60 eqid 2610 . . . . . 6 (((ringLMod‘𝑅) ↑s 𝑉) ↾s 𝐶) = (((ringLMod‘𝑅) ↑s 𝑉) ↾s 𝐶)
6160, 31reslmhm2b 18875 . . . . 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 1318 . . . 4 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → (((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) ∈ ((((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) LMHom ((ringLMod‘𝑅) ↑s 𝑉)) ↔ ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) ∈ ((((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) LMHom (((ringLMod‘𝑅) ↑s 𝑉) ↾s 𝐶))))
6323, 62mpbid 221 . . 3 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → ((𝑥 ∈ (Base‘((ringLMod‘𝑅) ↑s 𝑈)) ↦ (𝑥𝑉)) ↾ 𝐵) ∈ ((((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) LMHom (((ringLMod‘𝑅) ↑s 𝑉) ↾s 𝐶)))
6413, 63eqeltrrd 2689 . 2 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝐹 ∈ ((((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) LMHom (((ringLMod‘𝑅) ↑s 𝑉) ↾s 𝐶)))
653, 4frlmpws 19913 . . . 4 ((𝑅 ∈ Ring ∧ 𝑈𝑋) → 𝑌 = (((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵))
661, 2, 65syl2anc 691 . . 3 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝑌 = (((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵))
6729, 30frlmpws 19913 . . . 4 ((𝑅 ∈ Ring ∧ 𝑉 ∈ V) → 𝑍 = (((ringLMod‘𝑅) ↑s 𝑉) ↾s 𝐶))
681, 26, 67syl2anc 691 . . 3 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝑍 = (((ringLMod‘𝑅) ↑s 𝑉) ↾s 𝐶))
6966, 68oveq12d 6567 . 2 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → (𝑌 LMHom 𝑍) = ((((ringLMod‘𝑅) ↑s 𝑈) ↾s 𝐵) LMHom (((ringLMod‘𝑅) ↑s 𝑉) ↾s 𝐶)))
7064, 69eleqtrrd 2691 1 ((𝑅 ∈ Ring ∧ 𝑈𝑋𝑉𝑈) → 𝐹 ∈ (𝑌 LMHom 𝑍))
Colors of variables: wff setvar class
Syntax hints:  wi 4  wb 195  wa 383  w3a 1031   = wceq 1475  wcel 1977  Vcvv 3173  wss 3540   class class class wbr 4583  cmpt 4643  ran crn 5039  cres 5040  wf 5800  cfv 5804  (class class class)co 6549  𝑚 cmap 7744   finSupp cfsupp 8158  Basecbs 15695  s cress 15696  0gc0g 15923  s cpws 15930  Ringcrg 18370  LModclmod 18686  LSubSpclss 18753   LMHom clmhm 18840  ringLModcrglmod 18990   freeLMod cfrlm 19909
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1713  ax-4 1728  ax-5 1827  ax-6 1875  ax-7 1922  ax-8 1979  ax-9 1986  ax-10 2006  ax-11 2021  ax-12 2034  ax-13 2234  ax-ext 2590  ax-rep 4699  ax-sep 4709  ax-nul 4717  ax-pow 4769  ax-pr 4833  ax-un 6847  ax-cnex 9871  ax-resscn 9872  ax-1cn 9873  ax-icn 9874  ax-addcl 9875  ax-addrcl 9876  ax-mulcl 9877  ax-mulrcl 9878  ax-mulcom 9879  ax-addass 9880  ax-mulass 9881  ax-distr 9882  ax-i2m1 9883  ax-1ne0 9884  ax-1rid 9885  ax-rnegex 9886  ax-rrecex 9887  ax-cnre 9888  ax-pre-lttri 9889  ax-pre-lttrn 9890  ax-pre-ltadd 9891  ax-pre-mulgt0 9892
This theorem depends on definitions:  df-bi 196  df-or 384  df-an 385  df-3or 1032  df-3an 1033  df-tru 1478  df-ex 1696  df-nf 1701  df-sb 1868  df-eu 2462  df-mo 2463  df-clab 2597  df-cleq 2603  df-clel 2606  df-nfc 2740  df-ne 2782  df-nel 2783  df-ral 2901  df-rex 2902  df-reu 2903  df-rmo 2904  df-rab 2905  df-v 3175  df-sbc 3403  df-csb 3500  df-dif 3543  df-un 3545  df-in 3547  df-ss 3554  df-pss 3556  df-nul 3875  df-if 4037  df-pw 4110  df-sn 4126  df-pr 4128  df-tp 4130  df-op 4132  df-uni 4373  df-int 4411  df-iun 4457  df-br 4584  df-opab 4644  df-mpt 4645  df-tr 4681  df-eprel 4949  df-id 4953  df-po 4959  df-so 4960  df-fr 4997  df-we 4999  df-xp 5044  df-rel 5045  df-cnv 5046  df-co 5047  df-dm 5048  df-rn 5049  df-res 5050  df-ima 5051  df-pred 5597  df-ord 5643  df-on 5644  df-lim 5645  df-suc 5646  df-iota 5768  df-fun 5806  df-fn 5807  df-f 5808  df-f1 5809  df-fo 5810  df-f1o 5811  df-fv 5812  df-riota 6511  df-ov 6552  df-oprab 6553  df-mpt2 6554  df-of 6795  df-om 6958  df-1st 7059  df-2nd 7060  df-supp 7183  df-wrecs 7294  df-recs 7355  df-rdg 7393  df-1o 7447  df-oadd 7451  df-er 7629  df-map 7746  df-ixp 7795  df-en 7842  df-dom 7843  df-sdom 7844  df-fin 7845  df-fsupp 8159  df-sup 8231  df-pnf 9955  df-mnf 9956  df-xr 9957  df-ltxr 9958  df-le 9959  df-sub 10147  df-neg 10148  df-nn 10898  df-2 10956  df-3 10957  df-4 10958  df-5 10959  df-6 10960  df-7 10961  df-8 10962  df-9 10963  df-n0 11170  df-z 11255  df-dec 11370  df-uz 11564  df-fz 12198  df-struct 15697  df-ndx 15698  df-slot 15699  df-base 15700  df-sets 15701  df-ress 15702  df-plusg 15781  df-mulr 15782  df-sca 15784  df-vsca 15785  df-ip 15786  df-tset 15787  df-ple 15788  df-ds 15791  df-hom 15793  df-cco 15794  df-0g 15925  df-prds 15931  df-pws 15933  df-mgm 17065  df-sgrp 17107  df-mnd 17118  df-mhm 17158  df-submnd 17159  df-grp 17248  df-minusg 17249  df-sbg 17250  df-subg 17414  df-ghm 17481  df-mgp 18313  df-ur 18325  df-ring 18372  df-subrg 18601  df-lmod 18688  df-lss 18754  df-lmhm 18843  df-sra 18993  df-rgmod 18994  df-dsmm 19895  df-frlm 19910
This theorem is referenced by:  frlmsslss  19932
  Copyright terms: Public domain W3C validator