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

Theorem mapunen 8708
 Description: Equinumerosity law for set exponentiation of a disjoint union. Exercise 4.45 of [Mendelson] p. 255. (Contributed by NM, 23-Sep-2004.) (Revised by Mario Carneiro, 29-Apr-2015.)
Assertion
Ref Expression
mapunen (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → (𝐶m (𝐴𝐵)) ≈ ((𝐶m 𝐴) × (𝐶m 𝐵)))

Proof of Theorem mapunen
Dummy variables 𝑥 𝑦 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 ovexd 7186 . 2 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → (𝐶m (𝐴𝐵)) ∈ V)
2 ovexd 7186 . . 3 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → (𝐶m 𝐴) ∈ V)
3 ovexd 7186 . . 3 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → (𝐶m 𝐵) ∈ V)
42, 3xpexd 7473 . 2 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → ((𝐶m 𝐴) × (𝐶m 𝐵)) ∈ V)
5 elmapi 8439 . . . . 5 (𝑥 ∈ (𝐶m (𝐴𝐵)) → 𝑥:(𝐴𝐵)⟶𝐶)
6 ssun1 4078 . . . . 5 𝐴 ⊆ (𝐴𝐵)
7 fssres 6530 . . . . 5 ((𝑥:(𝐴𝐵)⟶𝐶𝐴 ⊆ (𝐴𝐵)) → (𝑥𝐴):𝐴𝐶)
85, 6, 7sylancl 590 . . . 4 (𝑥 ∈ (𝐶m (𝐴𝐵)) → (𝑥𝐴):𝐴𝐶)
9 ssun2 4079 . . . . 5 𝐵 ⊆ (𝐴𝐵)
10 fssres 6530 . . . . 5 ((𝑥:(𝐴𝐵)⟶𝐶𝐵 ⊆ (𝐴𝐵)) → (𝑥𝐵):𝐵𝐶)
115, 9, 10sylancl 590 . . . 4 (𝑥 ∈ (𝐶m (𝐴𝐵)) → (𝑥𝐵):𝐵𝐶)
128, 11jca 516 . . 3 (𝑥 ∈ (𝐶m (𝐴𝐵)) → ((𝑥𝐴):𝐴𝐶 ∧ (𝑥𝐵):𝐵𝐶))
13 opelxp 5561 . . . 4 (⟨(𝑥𝐴), (𝑥𝐵)⟩ ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)) ↔ ((𝑥𝐴) ∈ (𝐶m 𝐴) ∧ (𝑥𝐵) ∈ (𝐶m 𝐵)))
14 simpl3 1191 . . . . . 6 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → 𝐶𝑋)
15 simpl1 1189 . . . . . 6 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → 𝐴𝑉)
1614, 15elmapd 8431 . . . . 5 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → ((𝑥𝐴) ∈ (𝐶m 𝐴) ↔ (𝑥𝐴):𝐴𝐶))
17 simpl2 1190 . . . . . 6 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → 𝐵𝑊)
1814, 17elmapd 8431 . . . . 5 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → ((𝑥𝐵) ∈ (𝐶m 𝐵) ↔ (𝑥𝐵):𝐵𝐶))
1916, 18anbi12d 634 . . . 4 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → (((𝑥𝐴) ∈ (𝐶m 𝐴) ∧ (𝑥𝐵) ∈ (𝐶m 𝐵)) ↔ ((𝑥𝐴):𝐴𝐶 ∧ (𝑥𝐵):𝐵𝐶)))
2013, 19syl5bb 286 . . 3 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → (⟨(𝑥𝐴), (𝑥𝐵)⟩ ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)) ↔ ((𝑥𝐴):𝐴𝐶 ∧ (𝑥𝐵):𝐵𝐶)))
2112, 20syl5ibr 249 . 2 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → (𝑥 ∈ (𝐶m (𝐴𝐵)) → ⟨(𝑥𝐴), (𝑥𝐵)⟩ ∈ ((𝐶m 𝐴) × (𝐶m 𝐵))))
22 xp1st 7726 . . . . . . 7 (𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)) → (1st𝑦) ∈ (𝐶m 𝐴))
2322adantl 486 . . . . . 6 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵))) → (1st𝑦) ∈ (𝐶m 𝐴))
24 elmapi 8439 . . . . . 6 ((1st𝑦) ∈ (𝐶m 𝐴) → (1st𝑦):𝐴𝐶)
2523, 24syl 17 . . . . 5 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵))) → (1st𝑦):𝐴𝐶)
26 xp2nd 7727 . . . . . . 7 (𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)) → (2nd𝑦) ∈ (𝐶m 𝐵))
2726adantl 486 . . . . . 6 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵))) → (2nd𝑦) ∈ (𝐶m 𝐵))
28 elmapi 8439 . . . . . 6 ((2nd𝑦) ∈ (𝐶m 𝐵) → (2nd𝑦):𝐵𝐶)
2927, 28syl 17 . . . . 5 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵))) → (2nd𝑦):𝐵𝐶)
30 simplr 769 . . . . 5 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵))) → (𝐴𝐵) = ∅)
3125, 29, 30fun2d 6528 . . . 4 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵))) → ((1st𝑦) ∪ (2nd𝑦)):(𝐴𝐵)⟶𝐶)
3231ex 417 . . 3 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → (𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)) → ((1st𝑦) ∪ (2nd𝑦)):(𝐴𝐵)⟶𝐶))
33 unexg 7471 . . . . 5 ((𝐴𝑉𝐵𝑊) → (𝐴𝐵) ∈ V)
3415, 17, 33syl2anc 588 . . . 4 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → (𝐴𝐵) ∈ V)
3514, 34elmapd 8431 . . 3 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → (((1st𝑦) ∪ (2nd𝑦)) ∈ (𝐶m (𝐴𝐵)) ↔ ((1st𝑦) ∪ (2nd𝑦)):(𝐴𝐵)⟶𝐶))
3632, 35sylibrd 262 . 2 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → (𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)) → ((1st𝑦) ∪ (2nd𝑦)) ∈ (𝐶m (𝐴𝐵))))
37 1st2nd2 7733 . . . . . . 7 (𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)) → 𝑦 = ⟨(1st𝑦), (2nd𝑦)⟩)
3837ad2antll 729 . . . . . 6 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ (𝑥 ∈ (𝐶m (𝐴𝐵)) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)))) → 𝑦 = ⟨(1st𝑦), (2nd𝑦)⟩)
3925adantrl 716 . . . . . . . 8 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ (𝑥 ∈ (𝐶m (𝐴𝐵)) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)))) → (1st𝑦):𝐴𝐶)
4029adantrl 716 . . . . . . . 8 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ (𝑥 ∈ (𝐶m (𝐴𝐵)) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)))) → (2nd𝑦):𝐵𝐶)
41 res0 5828 . . . . . . . . . 10 ((1st𝑦) ↾ ∅) = ∅
42 res0 5828 . . . . . . . . . 10 ((2nd𝑦) ↾ ∅) = ∅
4341, 42eqtr4i 2785 . . . . . . . . 9 ((1st𝑦) ↾ ∅) = ((2nd𝑦) ↾ ∅)
44 simplr 769 . . . . . . . . . 10 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ (𝑥 ∈ (𝐶m (𝐴𝐵)) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)))) → (𝐴𝐵) = ∅)
4544reseq2d 5824 . . . . . . . . 9 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ (𝑥 ∈ (𝐶m (𝐴𝐵)) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)))) → ((1st𝑦) ↾ (𝐴𝐵)) = ((1st𝑦) ↾ ∅))
4644reseq2d 5824 . . . . . . . . 9 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ (𝑥 ∈ (𝐶m (𝐴𝐵)) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)))) → ((2nd𝑦) ↾ (𝐴𝐵)) = ((2nd𝑦) ↾ ∅))
4743, 45, 463eqtr4a 2820 . . . . . . . 8 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ (𝑥 ∈ (𝐶m (𝐴𝐵)) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)))) → ((1st𝑦) ↾ (𝐴𝐵)) = ((2nd𝑦) ↾ (𝐴𝐵)))
48 fresaunres1 6537 . . . . . . . 8 (((1st𝑦):𝐴𝐶 ∧ (2nd𝑦):𝐵𝐶 ∧ ((1st𝑦) ↾ (𝐴𝐵)) = ((2nd𝑦) ↾ (𝐴𝐵))) → (((1st𝑦) ∪ (2nd𝑦)) ↾ 𝐴) = (1st𝑦))
4939, 40, 47, 48syl3anc 1369 . . . . . . 7 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ (𝑥 ∈ (𝐶m (𝐴𝐵)) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)))) → (((1st𝑦) ∪ (2nd𝑦)) ↾ 𝐴) = (1st𝑦))
50 fresaunres2 6536 . . . . . . . 8 (((1st𝑦):𝐴𝐶 ∧ (2nd𝑦):𝐵𝐶 ∧ ((1st𝑦) ↾ (𝐴𝐵)) = ((2nd𝑦) ↾ (𝐴𝐵))) → (((1st𝑦) ∪ (2nd𝑦)) ↾ 𝐵) = (2nd𝑦))
5139, 40, 47, 50syl3anc 1369 . . . . . . 7 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ (𝑥 ∈ (𝐶m (𝐴𝐵)) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)))) → (((1st𝑦) ∪ (2nd𝑦)) ↾ 𝐵) = (2nd𝑦))
5249, 51opeq12d 4772 . . . . . 6 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ (𝑥 ∈ (𝐶m (𝐴𝐵)) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)))) → ⟨(((1st𝑦) ∪ (2nd𝑦)) ↾ 𝐴), (((1st𝑦) ∪ (2nd𝑦)) ↾ 𝐵)⟩ = ⟨(1st𝑦), (2nd𝑦)⟩)
5338, 52eqtr4d 2797 . . . . 5 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ (𝑥 ∈ (𝐶m (𝐴𝐵)) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)))) → 𝑦 = ⟨(((1st𝑦) ∪ (2nd𝑦)) ↾ 𝐴), (((1st𝑦) ∪ (2nd𝑦)) ↾ 𝐵)⟩)
54 reseq1 5818 . . . . . . 7 (𝑥 = ((1st𝑦) ∪ (2nd𝑦)) → (𝑥𝐴) = (((1st𝑦) ∪ (2nd𝑦)) ↾ 𝐴))
55 reseq1 5818 . . . . . . 7 (𝑥 = ((1st𝑦) ∪ (2nd𝑦)) → (𝑥𝐵) = (((1st𝑦) ∪ (2nd𝑦)) ↾ 𝐵))
5654, 55opeq12d 4772 . . . . . 6 (𝑥 = ((1st𝑦) ∪ (2nd𝑦)) → ⟨(𝑥𝐴), (𝑥𝐵)⟩ = ⟨(((1st𝑦) ∪ (2nd𝑦)) ↾ 𝐴), (((1st𝑦) ∪ (2nd𝑦)) ↾ 𝐵)⟩)
5756eqeq2d 2770 . . . . 5 (𝑥 = ((1st𝑦) ∪ (2nd𝑦)) → (𝑦 = ⟨(𝑥𝐴), (𝑥𝐵)⟩ ↔ 𝑦 = ⟨(((1st𝑦) ∪ (2nd𝑦)) ↾ 𝐴), (((1st𝑦) ∪ (2nd𝑦)) ↾ 𝐵)⟩))
5853, 57syl5ibrcom 250 . . . 4 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ (𝑥 ∈ (𝐶m (𝐴𝐵)) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)))) → (𝑥 = ((1st𝑦) ∪ (2nd𝑦)) → 𝑦 = ⟨(𝑥𝐴), (𝑥𝐵)⟩))
59 ffn 6499 . . . . . . . 8 (𝑥:(𝐴𝐵)⟶𝐶𝑥 Fn (𝐴𝐵))
60 fnresdm 6450 . . . . . . . 8 (𝑥 Fn (𝐴𝐵) → (𝑥 ↾ (𝐴𝐵)) = 𝑥)
615, 59, 603syl 18 . . . . . . 7 (𝑥 ∈ (𝐶m (𝐴𝐵)) → (𝑥 ↾ (𝐴𝐵)) = 𝑥)
6261ad2antrl 728 . . . . . 6 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ (𝑥 ∈ (𝐶m (𝐴𝐵)) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)))) → (𝑥 ↾ (𝐴𝐵)) = 𝑥)
6362eqcomd 2765 . . . . 5 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ (𝑥 ∈ (𝐶m (𝐴𝐵)) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)))) → 𝑥 = (𝑥 ↾ (𝐴𝐵)))
64 vex 3414 . . . . . . . . . 10 𝑥 ∈ V
6564resex 5872 . . . . . . . . 9 (𝑥𝐴) ∈ V
6664resex 5872 . . . . . . . . 9 (𝑥𝐵) ∈ V
6765, 66op1std 7704 . . . . . . . 8 (𝑦 = ⟨(𝑥𝐴), (𝑥𝐵)⟩ → (1st𝑦) = (𝑥𝐴))
6865, 66op2ndd 7705 . . . . . . . 8 (𝑦 = ⟨(𝑥𝐴), (𝑥𝐵)⟩ → (2nd𝑦) = (𝑥𝐵))
6967, 68uneq12d 4070 . . . . . . 7 (𝑦 = ⟨(𝑥𝐴), (𝑥𝐵)⟩ → ((1st𝑦) ∪ (2nd𝑦)) = ((𝑥𝐴) ∪ (𝑥𝐵)))
70 resundi 5838 . . . . . . 7 (𝑥 ↾ (𝐴𝐵)) = ((𝑥𝐴) ∪ (𝑥𝐵))
7169, 70eqtr4di 2812 . . . . . 6 (𝑦 = ⟨(𝑥𝐴), (𝑥𝐵)⟩ → ((1st𝑦) ∪ (2nd𝑦)) = (𝑥 ↾ (𝐴𝐵)))
7271eqeq2d 2770 . . . . 5 (𝑦 = ⟨(𝑥𝐴), (𝑥𝐵)⟩ → (𝑥 = ((1st𝑦) ∪ (2nd𝑦)) ↔ 𝑥 = (𝑥 ↾ (𝐴𝐵))))
7363, 72syl5ibrcom 250 . . . 4 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ (𝑥 ∈ (𝐶m (𝐴𝐵)) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)))) → (𝑦 = ⟨(𝑥𝐴), (𝑥𝐵)⟩ → 𝑥 = ((1st𝑦) ∪ (2nd𝑦))))
7458, 73impbid 215 . . 3 ((((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) ∧ (𝑥 ∈ (𝐶m (𝐴𝐵)) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵)))) → (𝑥 = ((1st𝑦) ∪ (2nd𝑦)) ↔ 𝑦 = ⟨(𝑥𝐴), (𝑥𝐵)⟩))
7574ex 417 . 2 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → ((𝑥 ∈ (𝐶m (𝐴𝐵)) ∧ 𝑦 ∈ ((𝐶m 𝐴) × (𝐶m 𝐵))) → (𝑥 = ((1st𝑦) ∪ (2nd𝑦)) ↔ 𝑦 = ⟨(𝑥𝐴), (𝑥𝐵)⟩)))
761, 4, 21, 36, 75en3d 8565 1 (((𝐴𝑉𝐵𝑊𝐶𝑋) ∧ (𝐴𝐵) = ∅) → (𝐶m (𝐴𝐵)) ≈ ((𝐶m 𝐴) × (𝐶m 𝐵)))
 Colors of variables: wff setvar class Syntax hints:   → wi 4   ↔ wb 209   ∧ wa 400   ∧ w3a 1085   = wceq 1539   ∈ wcel 2112  Vcvv 3410   ∪ cun 3857   ∩ cin 3858   ⊆ wss 3859  ∅c0 4226  ⟨cop 4529   class class class wbr 5033   × cxp 5523   ↾ cres 5527   Fn wfn 6331  ⟶wf 6332  ‘cfv 6336  (class class class)co 7151  1st c1st 7692  2nd c2nd 7693   ↑m cmap 8417   ≈ cen 8525 This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1798  ax-4 1812  ax-5 1912  ax-6 1971  ax-7 2016  ax-8 2114  ax-9 2122  ax-10 2143  ax-11 2159  ax-12 2176  ax-ext 2730  ax-sep 5170  ax-nul 5177  ax-pow 5235  ax-pr 5299  ax-un 7460 This theorem depends on definitions:  df-bi 210  df-an 401  df-or 846  df-3an 1087  df-tru 1542  df-fal 1552  df-ex 1783  df-nf 1787  df-sb 2071  df-mo 2558  df-eu 2589  df-clab 2737  df-cleq 2751  df-clel 2831  df-nfc 2902  df-ne 2953  df-ral 3076  df-rex 3077  df-rab 3080  df-v 3412  df-sbc 3698  df-csb 3807  df-dif 3862  df-un 3864  df-in 3866  df-ss 3876  df-nul 4227  df-if 4422  df-pw 4497  df-sn 4524  df-pr 4526  df-op 4530  df-uni 4800  df-iun 4886  df-br 5034  df-opab 5096  df-mpt 5114  df-id 5431  df-xp 5531  df-rel 5532  df-cnv 5533  df-co 5534  df-dm 5535  df-rn 5536  df-res 5537  df-ima 5538  df-iota 6295  df-fun 6338  df-fn 6339  df-f 6340  df-f1 6341  df-fo 6342  df-f1o 6343  df-fv 6344  df-ov 7154  df-oprab 7155  df-mpo 7156  df-1st 7694  df-2nd 7695  df-map 8419  df-en 8529 This theorem is referenced by:  map2xp  8709  mapdom2  8710  mapdjuen  9633  ackbij1lem5  9677  hashmap  13839  mpct  42193
 Copyright terms: Public domain W3C validator