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

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

Proof of Theorem iunconn
Dummy variables 𝑢 𝑣 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 simpr 476 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝑘𝐴 𝐵 ⊆ (𝑢𝑣))
2 simplr1 1123 . . . . . . . . . 10 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → (𝑢 𝑘𝐴 𝐵) ≠ ∅)
3 n0 3964 . . . . . . . . . . 11 ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ↔ ∃𝑣 𝑣 ∈ (𝑢 𝑘𝐴 𝐵))
4 inss2 3867 . . . . . . . . . . . . . 14 (𝑢 𝑘𝐴 𝐵) ⊆ 𝑘𝐴 𝐵
54sseli 3632 . . . . . . . . . . . . 13 (𝑣 ∈ (𝑢 𝑘𝐴 𝐵) → 𝑣 𝑘𝐴 𝐵)
6 eliun 4556 . . . . . . . . . . . . . 14 (𝑣 𝑘𝐴 𝐵 ↔ ∃𝑘𝐴 𝑣𝐵)
7 rexn0 4107 . . . . . . . . . . . . . 14 (∃𝑘𝐴 𝑣𝐵𝐴 ≠ ∅)
86, 7sylbi 207 . . . . . . . . . . . . 13 (𝑣 𝑘𝐴 𝐵𝐴 ≠ ∅)
95, 8syl 17 . . . . . . . . . . . 12 (𝑣 ∈ (𝑢 𝑘𝐴 𝐵) → 𝐴 ≠ ∅)
109exlimiv 1898 . . . . . . . . . . 11 (∃𝑣 𝑣 ∈ (𝑢 𝑘𝐴 𝐵) → 𝐴 ≠ ∅)
113, 10sylbi 207 . . . . . . . . . 10 ((𝑢 𝑘𝐴 𝐵) ≠ ∅ → 𝐴 ≠ ∅)
122, 11syl 17 . . . . . . . . 9 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝐴 ≠ ∅)
13 simplll 813 . . . . . . . . . 10 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝜑)
14 iunconn.4 . . . . . . . . . . 11 ((𝜑𝑘𝐴) → 𝑃𝐵)
1514ralrimiva 2995 . . . . . . . . . 10 (𝜑 → ∀𝑘𝐴 𝑃𝐵)
1613, 15syl 17 . . . . . . . . 9 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → ∀𝑘𝐴 𝑃𝐵)
17 r19.2z 4093 . . . . . . . . 9 ((𝐴 ≠ ∅ ∧ ∀𝑘𝐴 𝑃𝐵) → ∃𝑘𝐴 𝑃𝐵)
1812, 16, 17syl2anc 694 . . . . . . . 8 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → ∃𝑘𝐴 𝑃𝐵)
19 eliun 4556 . . . . . . . 8 (𝑃 𝑘𝐴 𝐵 ↔ ∃𝑘𝐴 𝑃𝐵)
2018, 19sylibr 224 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝑃 𝑘𝐴 𝐵)
211, 20sseldd 3637 . . . . . 6 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝑃 ∈ (𝑢𝑣))
22 elun 3786 . . . . . 6 (𝑃 ∈ (𝑢𝑣) ↔ (𝑃𝑢𝑃𝑣))
2321, 22sylib 208 . . . . 5 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → (𝑃𝑢𝑃𝑣))
24 iunconn.2 . . . . . . . 8 (𝜑𝐽 ∈ (TopOn‘𝑋))
2513, 24syl 17 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝐽 ∈ (TopOn‘𝑋))
26 iunconn.3 . . . . . . . 8 ((𝜑𝑘𝐴) → 𝐵𝑋)
2713, 26sylan 487 . . . . . . 7 (((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) ∧ 𝑘𝐴) → 𝐵𝑋)
2813, 14sylan 487 . . . . . . 7 (((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) ∧ 𝑘𝐴) → 𝑃𝐵)
29 iunconn.5 . . . . . . . 8 ((𝜑𝑘𝐴) → (𝐽t 𝐵) ∈ Conn)
3013, 29sylan 487 . . . . . . 7 (((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) ∧ 𝑘𝐴) → (𝐽t 𝐵) ∈ Conn)
31 simpllr 815 . . . . . . . 8 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → (𝑢𝐽𝑣𝐽))
3231simpld 474 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝑢𝐽)
3331simprd 478 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝑣𝐽)
34 simplr2 1124 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → (𝑣 𝑘𝐴 𝐵) ≠ ∅)
35 simplr3 1125 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))
36 nfv 1883 . . . . . . . . 9 𝑘(𝜑 ∧ (𝑢𝐽𝑣𝐽))
37 nfcv 2793 . . . . . . . . . . . 12 𝑘𝑢
38 nfiu1 4582 . . . . . . . . . . . 12 𝑘 𝑘𝐴 𝐵
3937, 38nfin 3853 . . . . . . . . . . 11 𝑘(𝑢 𝑘𝐴 𝐵)
40 nfcv 2793 . . . . . . . . . . 11 𝑘
4139, 40nfne 2923 . . . . . . . . . 10 𝑘(𝑢 𝑘𝐴 𝐵) ≠ ∅
42 nfcv 2793 . . . . . . . . . . . 12 𝑘𝑣
4342, 38nfin 3853 . . . . . . . . . . 11 𝑘(𝑣 𝑘𝐴 𝐵)
4443, 40nfne 2923 . . . . . . . . . 10 𝑘(𝑣 𝑘𝐴 𝐵) ≠ ∅
45 nfcv 2793 . . . . . . . . . . 11 𝑘(𝑢𝑣)
46 nfcv 2793 . . . . . . . . . . . 12 𝑘𝑋
4746, 38nfdif 3764 . . . . . . . . . . 11 𝑘(𝑋 𝑘𝐴 𝐵)
4845, 47nfss 3629 . . . . . . . . . 10 𝑘(𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵)
4941, 44, 48nf3an 1871 . . . . . . . . 9 𝑘((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))
5036, 49nfan 1868 . . . . . . . 8 𝑘((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵)))
5137, 42nfun 3802 . . . . . . . . 9 𝑘(𝑢𝑣)
5238, 51nfss 3629 . . . . . . . 8 𝑘 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)
5350, 52nfan 1868 . . . . . . 7 𝑘(((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣))
5425, 27, 28, 30, 32, 33, 34, 35, 1, 53iunconnlem 21278 . . . . . 6 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → ¬ 𝑃𝑢)
55 incom 3838 . . . . . . . 8 (𝑣𝑢) = (𝑢𝑣)
5655, 35syl5eqss 3682 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → (𝑣𝑢) ⊆ (𝑋 𝑘𝐴 𝐵))
57 uncom 3790 . . . . . . . 8 (𝑢𝑣) = (𝑣𝑢)
581, 57syl6sseq 3684 . . . . . . 7 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → 𝑘𝐴 𝐵 ⊆ (𝑣𝑢))
5925, 27, 28, 30, 33, 32, 2, 56, 58, 53iunconnlem 21278 . . . . . 6 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → ¬ 𝑃𝑣)
60 ioran 510 . . . . . 6 (¬ (𝑃𝑢𝑃𝑣) ↔ (¬ 𝑃𝑢 ∧ ¬ 𝑃𝑣))
6154, 59, 60sylanbrc 699 . . . . 5 ((((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) ∧ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)) → ¬ (𝑃𝑢𝑃𝑣))
6223, 61pm2.65da 599 . . . 4 (((𝜑 ∧ (𝑢𝐽𝑣𝐽)) ∧ ((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵))) → ¬ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣))
6362ex 449 . . 3 ((𝜑 ∧ (𝑢𝐽𝑣𝐽)) → (((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵)) → ¬ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)))
6463ralrimivva 3000 . 2 (𝜑 → ∀𝑢𝐽𝑣𝐽 (((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵)) → ¬ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣)))
6526ralrimiva 2995 . . . 4 (𝜑 → ∀𝑘𝐴 𝐵𝑋)
66 iunss 4593 . . . 4 ( 𝑘𝐴 𝐵𝑋 ↔ ∀𝑘𝐴 𝐵𝑋)
6765, 66sylibr 224 . . 3 (𝜑 𝑘𝐴 𝐵𝑋)
68 connsub 21272 . . 3 ((𝐽 ∈ (TopOn‘𝑋) ∧ 𝑘𝐴 𝐵𝑋) → ((𝐽t 𝑘𝐴 𝐵) ∈ Conn ↔ ∀𝑢𝐽𝑣𝐽 (((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵)) → ¬ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣))))
6924, 67, 68syl2anc 694 . 2 (𝜑 → ((𝐽t 𝑘𝐴 𝐵) ∈ Conn ↔ ∀𝑢𝐽𝑣𝐽 (((𝑢 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑣 𝑘𝐴 𝐵) ≠ ∅ ∧ (𝑢𝑣) ⊆ (𝑋 𝑘𝐴 𝐵)) → ¬ 𝑘𝐴 𝐵 ⊆ (𝑢𝑣))))
7064, 69mpbird 247 1 (𝜑 → (𝐽t 𝑘𝐴 𝐵) ∈ Conn)
Colors of variables: wff setvar class
Syntax hints:  ¬ wn 3  wi 4  wb 196  wo 382  wa 383  w3a 1054  wex 1744  wcel 2030  wne 2823  wral 2941  wrex 2942  cdif 3604  cun 3605  cin 3606  wss 3607  c0 3948   ciun 4552  cfv 5926  (class class class)co 6690  t crest 16128  TopOnctopon 20763  Conncconn 21262
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1762  ax-4 1777  ax-5 1879  ax-6 1945  ax-7 1981  ax-8 2032  ax-9 2039  ax-10 2059  ax-11 2074  ax-12 2087  ax-13 2282  ax-ext 2631  ax-rep 4804  ax-sep 4814  ax-nul 4822  ax-pow 4873  ax-pr 4936  ax-un 6991
This theorem depends on definitions:  df-bi 197  df-or 384  df-an 385  df-3or 1055  df-3an 1056  df-tru 1526  df-ex 1745  df-nf 1750  df-sb 1938  df-eu 2502  df-mo 2503  df-clab 2638  df-cleq 2644  df-clel 2647  df-nfc 2782  df-ne 2824  df-ral 2946  df-rex 2947  df-reu 2948  df-rab 2950  df-v 3233  df-sbc 3469  df-csb 3567  df-dif 3610  df-un 3612  df-in 3614  df-ss 3621  df-pss 3623  df-nul 3949  df-if 4120  df-pw 4193  df-sn 4211  df-pr 4213  df-tp 4215  df-op 4217  df-uni 4469  df-int 4508  df-iun 4554  df-br 4686  df-opab 4746  df-mpt 4763  df-tr 4786  df-id 5053  df-eprel 5058  df-po 5064  df-so 5065  df-fr 5102  df-we 5104  df-xp 5149  df-rel 5150  df-cnv 5151  df-co 5152  df-dm 5153  df-rn 5154  df-res 5155  df-ima 5156  df-pred 5718  df-ord 5764  df-on 5765  df-lim 5766  df-suc 5767  df-iota 5889  df-fun 5928  df-fn 5929  df-f 5930  df-f1 5931  df-fo 5932  df-f1o 5933  df-fv 5934  df-ov 6693  df-oprab 6694  df-mpt2 6695  df-om 7108  df-1st 7210  df-2nd 7211  df-wrecs 7452  df-recs 7513  df-rdg 7551  df-oadd 7609  df-er 7787  df-en 7998  df-fin 8001  df-fi 8358  df-rest 16130  df-topgen 16151  df-top 20747  df-topon 20764  df-bases 20798  df-cld 20871  df-conn 21263
This theorem is referenced by:  unconn  21280  conncompconn  21283
  Copyright terms: Public domain W3C validator