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

Theorem orbsta 18439
 Description: The Orbit-Stabilizer theorem. The mapping 𝐹 is a bijection from the cosets of the stabilizer subgroup of 𝐴 to the orbit of 𝐴. (Contributed by Mario Carneiro, 15-Jan-2015.)
Hypotheses
Ref Expression
gasta.1 𝑋 = (Base‘𝐺)
gasta.2 𝐻 = {𝑢𝑋 ∣ (𝑢 𝐴) = 𝐴}
orbsta.r = (𝐺 ~QG 𝐻)
orbsta.f 𝐹 = ran (𝑘𝑋 ↦ ⟨[𝑘] , (𝑘 𝐴)⟩)
orbsta.o 𝑂 = {⟨𝑥, 𝑦⟩ ∣ ({𝑥, 𝑦} ⊆ 𝑌 ∧ ∃𝑔𝑋 (𝑔 𝑥) = 𝑦)}
Assertion
Ref Expression
orbsta (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → 𝐹:(𝑋 / )–1-1-onto→[𝐴]𝑂)
Distinct variable groups:   𝑔,𝑘,𝑥,𝑦,   𝑢,𝑔, ,𝑘,𝑥,𝑦   𝑥,𝐻,𝑦   𝐴,𝑔,𝑘,𝑢,𝑥,𝑦   𝑔,𝐺,𝑘,𝑢,𝑥,𝑦   𝑔,𝑋,𝑘,𝑢,𝑥,𝑦   𝑘,𝑂   𝑔,𝑌,𝑘,𝑥,𝑦
Allowed substitution hints:   (𝑢)   𝐹(𝑥,𝑦,𝑢,𝑔,𝑘)   𝐻(𝑢,𝑔,𝑘)   𝑂(𝑥,𝑦,𝑢,𝑔)   𝑌(𝑢)

Proof of Theorem orbsta
Dummy variables 𝑎 𝑏 𝑤 𝑧 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 gasta.1 . . . . 5 𝑋 = (Base‘𝐺)
2 gasta.2 . . . . 5 𝐻 = {𝑢𝑋 ∣ (𝑢 𝐴) = 𝐴}
3 orbsta.r . . . . 5 = (𝐺 ~QG 𝐻)
4 orbsta.f . . . . 5 𝐹 = ran (𝑘𝑋 ↦ ⟨[𝑘] , (𝑘 𝐴)⟩)
51, 2, 3, 4orbstafun 18437 . . . 4 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → Fun 𝐹)
6 simpr 488 . . . . . . . 8 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → 𝐴𝑌)
76adantr 484 . . . . . . 7 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑘𝑋) → 𝐴𝑌)
81gaf 18421 . . . . . . . . . 10 ( ∈ (𝐺 GrpAct 𝑌) → :(𝑋 × 𝑌)⟶𝑌)
98adantr 484 . . . . . . . . 9 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → :(𝑋 × 𝑌)⟶𝑌)
109adantr 484 . . . . . . . 8 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑘𝑋) → :(𝑋 × 𝑌)⟶𝑌)
11 simpr 488 . . . . . . . 8 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑘𝑋) → 𝑘𝑋)
1210, 11, 7fovrnd 7304 . . . . . . 7 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑘𝑋) → (𝑘 𝐴) ∈ 𝑌)
13 eqid 2801 . . . . . . . 8 (𝑘 𝐴) = (𝑘 𝐴)
14 oveq1 7146 . . . . . . . . . 10 ( = 𝑘 → ( 𝐴) = (𝑘 𝐴))
1514eqeq1d 2803 . . . . . . . . 9 ( = 𝑘 → (( 𝐴) = (𝑘 𝐴) ↔ (𝑘 𝐴) = (𝑘 𝐴)))
1615rspcev 3574 . . . . . . . 8 ((𝑘𝑋 ∧ (𝑘 𝐴) = (𝑘 𝐴)) → ∃𝑋 ( 𝐴) = (𝑘 𝐴))
1711, 13, 16sylancl 589 . . . . . . 7 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑘𝑋) → ∃𝑋 ( 𝐴) = (𝑘 𝐴))
18 orbsta.o . . . . . . . 8 𝑂 = {⟨𝑥, 𝑦⟩ ∣ ({𝑥, 𝑦} ⊆ 𝑌 ∧ ∃𝑔𝑋 (𝑔 𝑥) = 𝑦)}
1918gaorb 18433 . . . . . . 7 (𝐴𝑂(𝑘 𝐴) ↔ (𝐴𝑌 ∧ (𝑘 𝐴) ∈ 𝑌 ∧ ∃𝑋 ( 𝐴) = (𝑘 𝐴)))
207, 12, 17, 19syl3anbrc 1340 . . . . . 6 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑘𝑋) → 𝐴𝑂(𝑘 𝐴))
21 ovex 7172 . . . . . . 7 (𝑘 𝐴) ∈ V
22 elecg 8319 . . . . . . 7 (((𝑘 𝐴) ∈ V ∧ 𝐴𝑌) → ((𝑘 𝐴) ∈ [𝐴]𝑂𝐴𝑂(𝑘 𝐴)))
2321, 7, 22sylancr 590 . . . . . 6 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑘𝑋) → ((𝑘 𝐴) ∈ [𝐴]𝑂𝐴𝑂(𝑘 𝐴)))
2420, 23mpbird 260 . . . . 5 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑘𝑋) → (𝑘 𝐴) ∈ [𝐴]𝑂)
251, 2gastacl 18435 . . . . . 6 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → 𝐻 ∈ (SubGrp‘𝐺))
261, 3eqger 18326 . . . . . 6 (𝐻 ∈ (SubGrp‘𝐺) → Er 𝑋)
2725, 26syl 17 . . . . 5 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → Er 𝑋)
281fvexi 6663 . . . . . 6 𝑋 ∈ V
2928a1i 11 . . . . 5 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → 𝑋 ∈ V)
304, 24, 27, 29qliftf 8372 . . . 4 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → (Fun 𝐹𝐹:(𝑋 / )⟶[𝐴]𝑂))
315, 30mpbid 235 . . 3 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → 𝐹:(𝑋 / )⟶[𝐴]𝑂)
32 eqid 2801 . . . . 5 (𝑋 / ) = (𝑋 / )
33 fveqeq2 6658 . . . . . . 7 ([𝑧] = 𝑎 → ((𝐹‘[𝑧] ) = (𝐹𝑏) ↔ (𝐹𝑎) = (𝐹𝑏)))
34 eqeq1 2805 . . . . . . 7 ([𝑧] = 𝑎 → ([𝑧] = 𝑏𝑎 = 𝑏))
3533, 34imbi12d 348 . . . . . 6 ([𝑧] = 𝑎 → (((𝐹‘[𝑧] ) = (𝐹𝑏) → [𝑧] = 𝑏) ↔ ((𝐹𝑎) = (𝐹𝑏) → 𝑎 = 𝑏)))
3635ralbidv 3165 . . . . 5 ([𝑧] = 𝑎 → (∀𝑏 ∈ (𝑋 / )((𝐹‘[𝑧] ) = (𝐹𝑏) → [𝑧] = 𝑏) ↔ ∀𝑏 ∈ (𝑋 / )((𝐹𝑎) = (𝐹𝑏) → 𝑎 = 𝑏)))
37 fveq2 6649 . . . . . . . . 9 ([𝑤] = 𝑏 → (𝐹‘[𝑤] ) = (𝐹𝑏))
3837eqeq2d 2812 . . . . . . . 8 ([𝑤] = 𝑏 → ((𝐹‘[𝑧] ) = (𝐹‘[𝑤] ) ↔ (𝐹‘[𝑧] ) = (𝐹𝑏)))
39 eqeq2 2813 . . . . . . . 8 ([𝑤] = 𝑏 → ([𝑧] = [𝑤] ↔ [𝑧] = 𝑏))
4038, 39imbi12d 348 . . . . . . 7 ([𝑤] = 𝑏 → (((𝐹‘[𝑧] ) = (𝐹‘[𝑤] ) → [𝑧] = [𝑤] ) ↔ ((𝐹‘[𝑧] ) = (𝐹𝑏) → [𝑧] = 𝑏)))
411, 2, 3, 4orbstaval 18438 . . . . . . . . . . . 12 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑧𝑋) → (𝐹‘[𝑧] ) = (𝑧 𝐴))
4241adantrr 716 . . . . . . . . . . 11 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → (𝐹‘[𝑧] ) = (𝑧 𝐴))
431, 2, 3, 4orbstaval 18438 . . . . . . . . . . . 12 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑤𝑋) → (𝐹‘[𝑤] ) = (𝑤 𝐴))
4443adantrl 715 . . . . . . . . . . 11 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → (𝐹‘[𝑤] ) = (𝑤 𝐴))
4542, 44eqeq12d 2817 . . . . . . . . . 10 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → ((𝐹‘[𝑧] ) = (𝐹‘[𝑤] ) ↔ (𝑧 𝐴) = (𝑤 𝐴)))
461, 2, 3gastacos 18436 . . . . . . . . . 10 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → (𝑧 𝑤 ↔ (𝑧 𝐴) = (𝑤 𝐴)))
4727adantr 484 . . . . . . . . . . 11 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → Er 𝑋)
48 simprl 770 . . . . . . . . . . 11 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → 𝑧𝑋)
4947, 48erth 8325 . . . . . . . . . 10 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → (𝑧 𝑤 ↔ [𝑧] = [𝑤] ))
5045, 46, 493bitr2d 310 . . . . . . . . 9 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → ((𝐹‘[𝑧] ) = (𝐹‘[𝑤] ) ↔ [𝑧] = [𝑤] ))
5150biimpd 232 . . . . . . . 8 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → ((𝐹‘[𝑧] ) = (𝐹‘[𝑤] ) → [𝑧] = [𝑤] ))
5251anassrs 471 . . . . . . 7 (((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑧𝑋) ∧ 𝑤𝑋) → ((𝐹‘[𝑧] ) = (𝐹‘[𝑤] ) → [𝑧] = [𝑤] ))
5332, 40, 52ectocld 8351 . . . . . 6 (((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑧𝑋) ∧ 𝑏 ∈ (𝑋 / )) → ((𝐹‘[𝑧] ) = (𝐹𝑏) → [𝑧] = 𝑏))
5453ralrimiva 3152 . . . . 5 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑧𝑋) → ∀𝑏 ∈ (𝑋 / )((𝐹‘[𝑧] ) = (𝐹𝑏) → [𝑧] = 𝑏))
5532, 36, 54ectocld 8351 . . . 4 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑎 ∈ (𝑋 / )) → ∀𝑏 ∈ (𝑋 / )((𝐹𝑎) = (𝐹𝑏) → 𝑎 = 𝑏))
5655ralrimiva 3152 . . 3 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → ∀𝑎 ∈ (𝑋 / )∀𝑏 ∈ (𝑋 / )((𝐹𝑎) = (𝐹𝑏) → 𝑎 = 𝑏))
57 dff13 6995 . . 3 (𝐹:(𝑋 / )–1-1→[𝐴]𝑂 ↔ (𝐹:(𝑋 / )⟶[𝐴]𝑂 ∧ ∀𝑎 ∈ (𝑋 / )∀𝑏 ∈ (𝑋 / )((𝐹𝑎) = (𝐹𝑏) → 𝑎 = 𝑏)))
5831, 56, 57sylanbrc 586 . 2 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → 𝐹:(𝑋 / )–1-1→[𝐴]𝑂)
59 vex 3447 . . . . . . . . 9 ∈ V
60 elecg 8319 . . . . . . . . 9 (( ∈ V ∧ 𝐴𝑌) → ( ∈ [𝐴]𝑂𝐴𝑂))
6159, 6, 60sylancr 590 . . . . . . . 8 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → ( ∈ [𝐴]𝑂𝐴𝑂))
6218gaorb 18433 . . . . . . . 8 (𝐴𝑂 ↔ (𝐴𝑌𝑌 ∧ ∃𝑤𝑋 (𝑤 𝐴) = ))
6361, 62syl6bb 290 . . . . . . 7 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → ( ∈ [𝐴]𝑂 ↔ (𝐴𝑌𝑌 ∧ ∃𝑤𝑋 (𝑤 𝐴) = )))
6463biimpa 480 . . . . . 6 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ ∈ [𝐴]𝑂) → (𝐴𝑌𝑌 ∧ ∃𝑤𝑋 (𝑤 𝐴) = ))
6564simp3d 1141 . . . . 5 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ ∈ [𝐴]𝑂) → ∃𝑤𝑋 (𝑤 𝐴) = )
663ovexi 7173 . . . . . . . . . 10 ∈ V
6766ecelqsi 8340 . . . . . . . . 9 (𝑤𝑋 → [𝑤] ∈ (𝑋 / ))
6843eqcomd 2807 . . . . . . . . 9 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑤𝑋) → (𝑤 𝐴) = (𝐹‘[𝑤] ))
69 fveq2 6649 . . . . . . . . . 10 (𝑧 = [𝑤] → (𝐹𝑧) = (𝐹‘[𝑤] ))
7069rspceeqv 3589 . . . . . . . . 9 (([𝑤] ∈ (𝑋 / ) ∧ (𝑤 𝐴) = (𝐹‘[𝑤] )) → ∃𝑧 ∈ (𝑋 / )(𝑤 𝐴) = (𝐹𝑧))
7167, 68, 70syl2an2 685 . . . . . . . 8 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑤𝑋) → ∃𝑧 ∈ (𝑋 / )(𝑤 𝐴) = (𝐹𝑧))
72 eqeq1 2805 . . . . . . . . 9 ((𝑤 𝐴) = → ((𝑤 𝐴) = (𝐹𝑧) ↔ = (𝐹𝑧)))
7372rexbidv 3259 . . . . . . . 8 ((𝑤 𝐴) = → (∃𝑧 ∈ (𝑋 / )(𝑤 𝐴) = (𝐹𝑧) ↔ ∃𝑧 ∈ (𝑋 / ) = (𝐹𝑧)))
7471, 73syl5ibcom 248 . . . . . . 7 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑤𝑋) → ((𝑤 𝐴) = → ∃𝑧 ∈ (𝑋 / ) = (𝐹𝑧)))
7574rexlimdva 3246 . . . . . 6 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → (∃𝑤𝑋 (𝑤 𝐴) = → ∃𝑧 ∈ (𝑋 / ) = (𝐹𝑧)))
7675imp 410 . . . . 5 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ ∃𝑤𝑋 (𝑤 𝐴) = ) → ∃𝑧 ∈ (𝑋 / ) = (𝐹𝑧))
7765, 76syldan 594 . . . 4 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ ∈ [𝐴]𝑂) → ∃𝑧 ∈ (𝑋 / ) = (𝐹𝑧))
7877ralrimiva 3152 . . 3 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → ∀ ∈ [ 𝐴]𝑂𝑧 ∈ (𝑋 / ) = (𝐹𝑧))
79 dffo3 6849 . . 3 (𝐹:(𝑋 / )–onto→[𝐴]𝑂 ↔ (𝐹:(𝑋 / )⟶[𝐴]𝑂 ∧ ∀ ∈ [ 𝐴]𝑂𝑧 ∈ (𝑋 / ) = (𝐹𝑧)))
8031, 78, 79sylanbrc 586 . 2 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → 𝐹:(𝑋 / )–onto→[𝐴]𝑂)
81 df-f1o 6335 . 2 (𝐹:(𝑋 / )–1-1-onto→[𝐴]𝑂 ↔ (𝐹:(𝑋 / )–1-1→[𝐴]𝑂𝐹:(𝑋 / )–onto→[𝐴]𝑂))
8258, 80, 81sylanbrc 586 1 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → 𝐹:(𝑋 / )–1-1-onto→[𝐴]𝑂)
 Colors of variables: wff setvar class Syntax hints:   → wi 4   ↔ wb 209   ∧ wa 399   ∧ w3a 1084   = wceq 1538   ∈ wcel 2112  ∀wral 3109  ∃wrex 3110  {crab 3113  Vcvv 3444   ⊆ wss 3884  {cpr 4530  ⟨cop 4534   class class class wbr 5033  {copab 5095   ↦ cmpt 5113   × cxp 5521  ran crn 5524  Fun wfun 6322  ⟶wf 6324  –1-1→wf1 6325  –onto→wfo 6326  –1-1-onto→wf1o 6327  ‘cfv 6328  (class class class)co 7139   Er wer 8273  [cec 8274   / cqs 8275  Basecbs 16479  SubGrpcsubg 18269   ~QG cqg 18271   GrpAct cga 18415 This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1797  ax-4 1811  ax-5 1911  ax-6 1970  ax-7 2015  ax-8 2114  ax-9 2122  ax-10 2143  ax-11 2159  ax-12 2176  ax-ext 2773  ax-sep 5170  ax-nul 5177  ax-pow 5234  ax-pr 5298  ax-un 7445  ax-cnex 10586  ax-resscn 10587  ax-1cn 10588  ax-icn 10589  ax-addcl 10590  ax-addrcl 10591  ax-mulcl 10592  ax-mulrcl 10593  ax-mulcom 10594  ax-addass 10595  ax-mulass 10596  ax-distr 10597  ax-i2m1 10598  ax-1ne0 10599  ax-1rid 10600  ax-rnegex 10601  ax-rrecex 10602  ax-cnre 10603  ax-pre-lttri 10604  ax-pre-lttrn 10605  ax-pre-ltadd 10606  ax-pre-mulgt0 10607 This theorem depends on definitions:  df-bi 210  df-an 400  df-or 845  df-3or 1085  df-3an 1086  df-tru 1541  df-ex 1782  df-nf 1786  df-sb 2070  df-mo 2601  df-eu 2632  df-clab 2780  df-cleq 2794  df-clel 2873  df-nfc 2941  df-ne 2991  df-nel 3095  df-ral 3114  df-rex 3115  df-reu 3116  df-rmo 3117  df-rab 3118  df-v 3446  df-sbc 3724  df-csb 3832  df-dif 3887  df-un 3889  df-in 3891  df-ss 3901  df-pss 3903  df-nul 4247  df-if 4429  df-pw 4502  df-sn 4529  df-pr 4531  df-tp 4533  df-op 4535  df-uni 4804  df-iun 4886  df-br 5034  df-opab 5096  df-mpt 5114  df-tr 5140  df-id 5428  df-eprel 5433  df-po 5442  df-so 5443  df-fr 5482  df-we 5484  df-xp 5529  df-rel 5530  df-cnv 5531  df-co 5532  df-dm 5533  df-rn 5534  df-res 5535  df-ima 5536  df-pred 6120  df-ord 6166  df-on 6167  df-lim 6168  df-suc 6169  df-iota 6287  df-fun 6330  df-fn 6331  df-f 6332  df-f1 6333  df-fo 6334  df-f1o 6335  df-fv 6336  df-riota 7097  df-ov 7142  df-oprab 7143  df-mpo 7144  df-om 7565  df-1st 7675  df-2nd 7676  df-wrecs 7934  df-recs 7995  df-rdg 8033  df-er 8276  df-ec 8278  df-qs 8282  df-map 8395  df-en 8497  df-dom 8498  df-sdom 8499  df-pnf 10670  df-mnf 10671  df-xr 10672  df-ltxr 10673  df-le 10674  df-sub 10865  df-neg 10866  df-nn 11630  df-2 11692  df-ndx 16482  df-slot 16483  df-base 16485  df-sets 16486  df-ress 16487  df-plusg 16574  df-0g 16711  df-mgm 17848  df-sgrp 17897  df-mnd 17908  df-grp 18102  df-minusg 18103  df-subg 18272  df-eqg 18274  df-ga 18416 This theorem is referenced by:  orbsta2  18440
 Copyright terms: Public domain W3C validator