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

Theorem iuncon 21041
Description: The indexed union of connected overlapping subspaces sharing a common point is connected. (Contributed by Mario Carneiro, 11-Jun-2014.)
Hypotheses
Ref Expression
iuncon.2 (𝜑𝐽 ∈ (TopOn‘𝑋))
iuncon.3 ((𝜑𝑘𝐴) → 𝐵𝑋)
iuncon.4 ((𝜑𝑘𝐴) → 𝑃𝐵)
iuncon.5 ((𝜑𝑘𝐴) → (𝐽t 𝐵) ∈ Con)
Assertion
Ref Expression
iuncon (𝜑 → (𝐽t 𝑘𝐴 𝐵) ∈ Con)
Distinct variable groups:   𝐴,𝑘   𝑘,𝐽   𝑃,𝑘   𝑘,𝑋   𝜑,𝑘
Allowed substitution hint:   𝐵(𝑘)

Proof of Theorem iuncon
Dummy variables 𝑢 𝑣 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 simpr 476 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝑘𝐴 𝐵 ⊆ (𝑢𝑣))
2 simplr1 1096 . . . . . . . . . 10 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → (𝑢 𝑘𝐴 𝐵) ≠ ∅)
3 n0 3890 . . . . . . . . . . 11 ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ↔ ∃𝑣 𝑣 ∈ (𝑢 𝑘𝐴 𝐵))
4 inss2 3796 . . . . . . . . . . . . . 14 (𝑢 𝑘𝐴 𝐵) ⊆ 𝑘𝐴 𝐵
54sseli 3564 . . . . . . . . . . . . 13 (𝑣 ∈ (𝑢 𝑘𝐴 𝐵) → 𝑣 𝑘𝐴 𝐵)
6 eliun 4460 . . . . . . . . . . . . . 14 (𝑣 𝑘𝐴 𝐵 ↔ ∃𝑘𝐴 𝑣𝐵)
7 rexn0 4026 . . . . . . . . . . . . . 14 (∃𝑘𝐴 𝑣𝐵𝐴 ≠ ∅)
86, 7sylbi 206 . . . . . . . . . . . . 13 (𝑣 𝑘𝐴 𝐵𝐴 ≠ ∅)
95, 8syl 17 . . . . . . . . . . . 12 (𝑣 ∈ (𝑢 𝑘𝐴 𝐵) → 𝐴 ≠ ∅)
109exlimiv 1845 . . . . . . . . . . 11 (∃𝑣 𝑣 ∈ (𝑢 𝑘𝐴 𝐵) → 𝐴 ≠ ∅)
113, 10sylbi 206 . . . . . . . . . 10 ((𝑢 𝑘𝐴 𝐵) ≠ ∅ → 𝐴 ≠ ∅)
122, 11syl 17 . . . . . . . . 9 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝐴 ≠ ∅)
13 simplll 794 . . . . . . . . . 10 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝜑)
14 iuncon.4 . . . . . . . . . . 11 ((𝜑𝑘𝐴) → 𝑃𝐵)
1514ralrimiva 2949 . . . . . . . . . 10 (𝜑 → ∀𝑘𝐴 𝑃𝐵)
1613, 15syl 17 . . . . . . . . 9 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → ∀𝑘𝐴 𝑃𝐵)
17 r19.2z 4012 . . . . . . . . 9 ((𝐴 ≠ ∅ ∧ ∀𝑘𝐴 𝑃𝐵) → ∃𝑘𝐴 𝑃𝐵)
1812, 16, 17syl2anc 691 . . . . . . . 8 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → ∃𝑘𝐴 𝑃𝐵)
19 eliun 4460 . . . . . . . 8 (𝑃 𝑘𝐴 𝐵 ↔ ∃𝑘𝐴 𝑃𝐵)
2018, 19sylibr 223 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝑃 𝑘𝐴 𝐵)
211, 20sseldd 3569 . . . . . 6 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝑃 ∈ (𝑢𝑣))
22 elun 3715 . . . . . 6 (𝑃 ∈ (𝑢𝑣) ↔ (𝑃𝑢𝑃𝑣))
2321, 22sylib 207 . . . . 5 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → (𝑃𝑢𝑃𝑣))
24 iuncon.2 . . . . . . . 8 (𝜑𝐽 ∈ (TopOn‘𝑋))
2513, 24syl 17 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝐽 ∈ (TopOn‘𝑋))
26 iuncon.3 . . . . . . . 8 ((𝜑𝑘𝐴) → 𝐵𝑋)
2713, 26sylan 487 . . . . . . 7 (((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) ∧ 𝑘𝐴) → 𝐵𝑋)
2813, 14sylan 487 . . . . . . 7 (((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) ∧ 𝑘𝐴) → 𝑃𝐵)
29 iuncon.5 . . . . . . . 8 ((𝜑𝑘𝐴) → (𝐽t 𝐵) ∈ Con)
3013, 29sylan 487 . . . . . . 7 (((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) ∧ 𝑘𝐴) → (𝐽t 𝐵) ∈ Con)
31 simpllr 795 . . . . . . . 8 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → (𝑢𝐽𝑣𝐽))
3231simpld 474 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝑢𝐽)
3331simprd 478 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝑣𝐽)
34 simplr2 1097 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → (𝑣 𝑘𝐴 𝐵) ≠ ∅)
35 simplr3 1098 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))
36 nfv 1830 . . . . . . . . 9 𝑘(𝜑 ∧ (𝑢𝐽𝑣𝐽))
37 nfcv 2751 . . . . . . . . . . . 12 𝑘𝑢
38 nfiu1 4486 . . . . . . . . . . . 12 𝑘 𝑘𝐴 𝐵
3937, 38nfin 3782 . . . . . . . . . . 11 𝑘(𝑢 𝑘𝐴 𝐵)
40 nfcv 2751 . . . . . . . . . . 11 𝑘
4139, 40nfne 2882 . . . . . . . . . 10 𝑘(𝑢 𝑘𝐴 𝐵) ≠ ∅
42 nfcv 2751 . . . . . . . . . . . 12 𝑘𝑣
4342, 38nfin 3782 . . . . . . . . . . 11 𝑘(𝑣 𝑘𝐴 𝐵)
4443, 40nfne 2882 . . . . . . . . . 10 𝑘(𝑣 𝑘𝐴 𝐵) ≠ ∅
45 nfcv 2751 . . . . . . . . . . 11 𝑘(𝑢𝑣)
46 nfcv 2751 . . . . . . . . . . . 12 𝑘𝑋
4746, 38nfdif 3693 . . . . . . . . . . 11 𝑘(𝑋 𝑘𝐴 𝐵)
4845, 47nfss 3561 . . . . . . . . . 10 𝑘(𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵)
4941, 44, 48nf3an 1819 . . . . . . . . 9 𝑘((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))
5036, 49nfan 1816 . . . . . . . 8 𝑘((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵)))
5137, 42nfun 3731 . . . . . . . . 9 𝑘(𝑢𝑣)
5238, 51nfss 3561 . . . . . . . 8 𝑘 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)
5350, 52nfan 1816 . . . . . . 7 𝑘(((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣))
5425, 27, 28, 30, 32, 33, 34, 35, 1, 53iunconlem 21040 . . . . . 6 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → ¬ 𝑃𝑢)
55 incom 3767 . . . . . . . 8 (𝑣𝑢) = (𝑢𝑣)
5655, 35syl5eqss 3612 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → (𝑣𝑢) ⊆ (𝑋 𝑘𝐴 𝐵))
57 uncom 3719 . . . . . . . 8 (𝑢𝑣) = (𝑣𝑢)
581, 57syl6sseq 3614 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝑘𝐴 𝐵 ⊆ (𝑣𝑢))
5925, 27, 28, 30, 33, 32, 2, 56, 58, 53iunconlem 21040 . . . . . 6 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → ¬ 𝑃𝑣)
60 ioran 510 . . . . . 6 (¬ (𝑃𝑢𝑃𝑣) ↔ (¬ 𝑃𝑢 ∧ ¬ 𝑃𝑣))
6154, 59, 60sylanbrc 695 . . . . 5 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → ¬ (𝑃𝑢𝑃𝑣))
6223, 61pm2.65da 598 . . . 4 (((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) → ¬ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣))
6362ex 449 . . 3 ((𝜑 ∧ (𝑢𝐽𝑣𝐽)) → (((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵)) → ¬ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)))
6463ralrimivva 2954 . 2 (𝜑 → ∀𝑢𝐽𝑣𝐽 (((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵)) → ¬ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)))
6526ralrimiva 2949 . . . 4 (𝜑 → ∀𝑘𝐴 𝐵𝑋)
66 iunss 4497 . . . 4 ( 𝑘𝐴 𝐵𝑋 ↔ ∀𝑘𝐴 𝐵𝑋)
6765, 66sylibr 223 . . 3 (𝜑 𝑘𝐴 𝐵𝑋)
68 connsub 21034 . . 3 ((𝐽 ∈ (TopOn‘𝑋) ∧ 𝑘𝐴 𝐵𝑋) → ((𝐽t 𝑘𝐴 𝐵) ∈ Con ↔ ∀𝑢𝐽𝑣𝐽 (((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵)) → ¬ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣))))
6924, 67, 68syl2anc 691 . 2 (𝜑 → ((𝐽t 𝑘𝐴 𝐵) ∈ Con ↔ ∀𝑢𝐽𝑣𝐽 (((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵)) → ¬ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣))))
7064, 69mpbird 246 1 (𝜑 → (𝐽t 𝑘𝐴 𝐵) ∈ Con)
Colors of variables: wff setvar class
Syntax hints:  ¬ wn 3  wi 4  wb 195  wo 382  wa 383  w3a 1031  wex 1695  wcel 1977  wne 2780  wral 2896  wrex 2897  cdif 3537  cun 3538  cin 3539  wss 3540  c0 3874   ciun 4455  cfv 5804  (class class class)co 6549  t crest 15904  TopOnctopon 20518  Conccon 21024
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
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-ral 2901  df-rex 2902  df-reu 2903  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-ov 6552  df-oprab 6553  df-mpt2 6554  df-om 6958  df-1st 7059  df-2nd 7060  df-wrecs 7294  df-recs 7355  df-rdg 7393  df-oadd 7451  df-er 7629  df-en 7842  df-fin 7845  df-fi 8200  df-rest 15906  df-topgen 15927  df-top 20521  df-bases 20522  df-topon 20523  df-cld 20633  df-con 21025
This theorem is referenced by:  uncon  21042  concompcon  21045
  Copyright terms: Public domain W3C validator