Intuitionistic Logic Explorer < Previous   Next > Nearby theorems Mirrors  >  Home  >  ILE Home  >  Th. List  >  qreccl GIF version

Theorem qreccl 9456
 Description: Closure of reciprocal of rationals. (Contributed by NM, 3-Aug-2004.)
Assertion
Ref Expression
qreccl ((𝐴 ∈ ℚ ∧ 𝐴 ≠ 0) → (1 / 𝐴) ∈ ℚ)

Proof of Theorem qreccl
Dummy variables 𝑥 𝑦 𝑧 𝑤 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 ax-1cn 7732 . . . . . 6 1 ∈ ℂ
2 1ap0 8371 . . . . . 6 1 # 0
31, 2div0api 8525 . . . . 5 (0 / 1) = 0
4 0z 9084 . . . . . 6 0 ∈ ℤ
5 1nn 8750 . . . . . 6 1 ∈ ℕ
6 znq 9438 . . . . . 6 ((0 ∈ ℤ ∧ 1 ∈ ℕ) → (0 / 1) ∈ ℚ)
74, 5, 6mp2an 422 . . . . 5 (0 / 1) ∈ ℚ
83, 7eqeltrri 2213 . . . 4 0 ∈ ℚ
9 qapne 9453 . . . 4 ((𝐴 ∈ ℚ ∧ 0 ∈ ℚ) → (𝐴 # 0 ↔ 𝐴 ≠ 0))
108, 9mpan2 421 . . 3 (𝐴 ∈ ℚ → (𝐴 # 0 ↔ 𝐴 ≠ 0))
1110biimpar 295 . 2 ((𝐴 ∈ ℚ ∧ 𝐴 ≠ 0) → 𝐴 # 0)
12 elq 9436 . . . 4 (𝐴 ∈ ℚ ↔ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℕ 𝐴 = (𝑥 / 𝑦))
13 nnne0 8767 . . . . . . . 8 (𝑦 ∈ ℕ → 𝑦 ≠ 0)
1413ancli 321 . . . . . . 7 (𝑦 ∈ ℕ → (𝑦 ∈ ℕ ∧ 𝑦 ≠ 0))
15 nnz 9092 . . . . . . . . . . . . . . . 16 (𝑦 ∈ ℕ → 𝑦 ∈ ℤ)
16 zapne 9144 . . . . . . . . . . . . . . . 16 ((𝑦 ∈ ℤ ∧ 0 ∈ ℤ) → (𝑦 # 0 ↔ 𝑦 ≠ 0))
1715, 4, 16sylancl 409 . . . . . . . . . . . . . . 15 (𝑦 ∈ ℕ → (𝑦 # 0 ↔ 𝑦 ≠ 0))
1817adantl 275 . . . . . . . . . . . . . 14 ((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) → (𝑦 # 0 ↔ 𝑦 ≠ 0))
1918pm5.32i 449 . . . . . . . . . . . . 13 (((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 # 0) ↔ ((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 ≠ 0))
2019anbi1i 453 . . . . . . . . . . . 12 ((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 # 0) ∧ 𝐴 = (𝑥 / 𝑦)) ↔ (((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 ≠ 0) ∧ 𝐴 = (𝑥 / 𝑦)))
21 breq1 3935 . . . . . . . . . . . . 13 (𝐴 = (𝑥 / 𝑦) → (𝐴 # 0 ↔ (𝑥 / 𝑦) # 0))
22 zcn 9078 . . . . . . . . . . . . . . . 16 (𝑥 ∈ ℤ → 𝑥 ∈ ℂ)
23 nncn 8747 . . . . . . . . . . . . . . . 16 (𝑦 ∈ ℕ → 𝑦 ∈ ℂ)
2422, 23anim12i 336 . . . . . . . . . . . . . . 15 ((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) → (𝑥 ∈ ℂ ∧ 𝑦 ∈ ℂ))
25 divap0b 8462 . . . . . . . . . . . . . . . 16 ((𝑥 ∈ ℂ ∧ 𝑦 ∈ ℂ ∧ 𝑦 # 0) → (𝑥 # 0 ↔ (𝑥 / 𝑦) # 0))
26253expa 1181 . . . . . . . . . . . . . . 15 (((𝑥 ∈ ℂ ∧ 𝑦 ∈ ℂ) ∧ 𝑦 # 0) → (𝑥 # 0 ↔ (𝑥 / 𝑦) # 0))
2724, 26sylan 281 . . . . . . . . . . . . . 14 (((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 # 0) → (𝑥 # 0 ↔ (𝑥 / 𝑦) # 0))
2827bicomd 140 . . . . . . . . . . . . 13 (((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 # 0) → ((𝑥 / 𝑦) # 0 ↔ 𝑥 # 0))
2921, 28sylan9bbr 458 . . . . . . . . . . . 12 ((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 # 0) ∧ 𝐴 = (𝑥 / 𝑦)) → (𝐴 # 0 ↔ 𝑥 # 0))
3020, 29sylbir 134 . . . . . . . . . . 11 ((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 ≠ 0) ∧ 𝐴 = (𝑥 / 𝑦)) → (𝐴 # 0 ↔ 𝑥 # 0))
31 simplll 522 . . . . . . . . . . . 12 ((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 ≠ 0) ∧ 𝐴 = (𝑥 / 𝑦)) → 𝑥 ∈ ℤ)
32 zapne 9144 . . . . . . . . . . . 12 ((𝑥 ∈ ℤ ∧ 0 ∈ ℤ) → (𝑥 # 0 ↔ 𝑥 ≠ 0))
3331, 4, 32sylancl 409 . . . . . . . . . . 11 ((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 ≠ 0) ∧ 𝐴 = (𝑥 / 𝑦)) → (𝑥 # 0 ↔ 𝑥 ≠ 0))
3430, 33bitrd 187 . . . . . . . . . 10 ((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 ≠ 0) ∧ 𝐴 = (𝑥 / 𝑦)) → (𝐴 # 0 ↔ 𝑥 ≠ 0))
35 zmulcl 9126 . . . . . . . . . . . . . . . . 17 ((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℤ) → (𝑥 · 𝑦) ∈ ℤ)
3615, 35sylan2 284 . . . . . . . . . . . . . . . 16 ((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) → (𝑥 · 𝑦) ∈ ℤ)
3736adantr 274 . . . . . . . . . . . . . . 15 (((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑥 ≠ 0) → (𝑥 · 𝑦) ∈ ℤ)
38 msqznn 9170 . . . . . . . . . . . . . . . 16 ((𝑥 ∈ ℤ ∧ 𝑥 ≠ 0) → (𝑥 · 𝑥) ∈ ℕ)
3938adantlr 468 . . . . . . . . . . . . . . 15 (((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑥 ≠ 0) → (𝑥 · 𝑥) ∈ ℕ)
4037, 39jca 304 . . . . . . . . . . . . . 14 (((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑥 ≠ 0) → ((𝑥 · 𝑦) ∈ ℤ ∧ (𝑥 · 𝑥) ∈ ℕ))
4140adantlr 468 . . . . . . . . . . . . 13 ((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 ≠ 0) ∧ 𝑥 ≠ 0) → ((𝑥 · 𝑦) ∈ ℤ ∧ (𝑥 · 𝑥) ∈ ℕ))
4241adantlr 468 . . . . . . . . . . . 12 (((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 ≠ 0) ∧ 𝐴 = (𝑥 / 𝑦)) ∧ 𝑥 ≠ 0) → ((𝑥 · 𝑦) ∈ ℤ ∧ (𝑥 · 𝑥) ∈ ℕ))
4320anbi1i 453 . . . . . . . . . . . . . 14 (((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 # 0) ∧ 𝐴 = (𝑥 / 𝑦)) ∧ 𝑥 # 0) ↔ ((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 ≠ 0) ∧ 𝐴 = (𝑥 / 𝑦)) ∧ 𝑥 # 0))
4433pm5.32i 449 . . . . . . . . . . . . . 14 (((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 ≠ 0) ∧ 𝐴 = (𝑥 / 𝑦)) ∧ 𝑥 # 0) ↔ ((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 ≠ 0) ∧ 𝐴 = (𝑥 / 𝑦)) ∧ 𝑥 ≠ 0))
4543, 44bitri 183 . . . . . . . . . . . . 13 (((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 # 0) ∧ 𝐴 = (𝑥 / 𝑦)) ∧ 𝑥 # 0) ↔ ((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 ≠ 0) ∧ 𝐴 = (𝑥 / 𝑦)) ∧ 𝑥 ≠ 0))
46 oveq2 5785 . . . . . . . . . . . . . . 15 (𝐴 = (𝑥 / 𝑦) → (1 / 𝐴) = (1 / (𝑥 / 𝑦)))
47 dividap 8480 . . . . . . . . . . . . . . . . . . . . 21 ((𝑥 ∈ ℂ ∧ 𝑥 # 0) → (𝑥 / 𝑥) = 1)
4847adantr 274 . . . . . . . . . . . . . . . . . . . 20 (((𝑥 ∈ ℂ ∧ 𝑥 # 0) ∧ (𝑦 ∈ ℂ ∧ 𝑦 # 0)) → (𝑥 / 𝑥) = 1)
4948oveq1d 5792 . . . . . . . . . . . . . . . . . . 19 (((𝑥 ∈ ℂ ∧ 𝑥 # 0) ∧ (𝑦 ∈ ℂ ∧ 𝑦 # 0)) → ((𝑥 / 𝑥) / (𝑥 / 𝑦)) = (1 / (𝑥 / 𝑦)))
50 simpll 518 . . . . . . . . . . . . . . . . . . . 20 (((𝑥 ∈ ℂ ∧ 𝑥 # 0) ∧ (𝑦 ∈ ℂ ∧ 𝑦 # 0)) → 𝑥 ∈ ℂ)
51 simpl 108 . . . . . . . . . . . . . . . . . . . 20 (((𝑥 ∈ ℂ ∧ 𝑥 # 0) ∧ (𝑦 ∈ ℂ ∧ 𝑦 # 0)) → (𝑥 ∈ ℂ ∧ 𝑥 # 0))
52 simpr 109 . . . . . . . . . . . . . . . . . . . 20 (((𝑥 ∈ ℂ ∧ 𝑥 # 0) ∧ (𝑦 ∈ ℂ ∧ 𝑦 # 0)) → (𝑦 ∈ ℂ ∧ 𝑦 # 0))
53 divdivdivap 8492 . . . . . . . . . . . . . . . . . . . 20 (((𝑥 ∈ ℂ ∧ (𝑥 ∈ ℂ ∧ 𝑥 # 0)) ∧ ((𝑥 ∈ ℂ ∧ 𝑥 # 0) ∧ (𝑦 ∈ ℂ ∧ 𝑦 # 0))) → ((𝑥 / 𝑥) / (𝑥 / 𝑦)) = ((𝑥 · 𝑦) / (𝑥 · 𝑥)))
5450, 51, 51, 52, 53syl22anc 1217 . . . . . . . . . . . . . . . . . . 19 (((𝑥 ∈ ℂ ∧ 𝑥 # 0) ∧ (𝑦 ∈ ℂ ∧ 𝑦 # 0)) → ((𝑥 / 𝑥) / (𝑥 / 𝑦)) = ((𝑥 · 𝑦) / (𝑥 · 𝑥)))
5549, 54eqtr3d 2174 . . . . . . . . . . . . . . . . . 18 (((𝑥 ∈ ℂ ∧ 𝑥 # 0) ∧ (𝑦 ∈ ℂ ∧ 𝑦 # 0)) → (1 / (𝑥 / 𝑦)) = ((𝑥 · 𝑦) / (𝑥 · 𝑥)))
5655an4s 577 . . . . . . . . . . . . . . . . 17 (((𝑥 ∈ ℂ ∧ 𝑦 ∈ ℂ) ∧ (𝑥 # 0 ∧ 𝑦 # 0)) → (1 / (𝑥 / 𝑦)) = ((𝑥 · 𝑦) / (𝑥 · 𝑥)))
5724, 56sylan 281 . . . . . . . . . . . . . . . 16 (((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ (𝑥 # 0 ∧ 𝑦 # 0)) → (1 / (𝑥 / 𝑦)) = ((𝑥 · 𝑦) / (𝑥 · 𝑥)))
5857anass1rs 560 . . . . . . . . . . . . . . 15 ((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 # 0) ∧ 𝑥 # 0) → (1 / (𝑥 / 𝑦)) = ((𝑥 · 𝑦) / (𝑥 · 𝑥)))
5946, 58sylan9eqr 2194 . . . . . . . . . . . . . 14 (((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 # 0) ∧ 𝑥 # 0) ∧ 𝐴 = (𝑥 / 𝑦)) → (1 / 𝐴) = ((𝑥 · 𝑦) / (𝑥 · 𝑥)))
6059an32s 557 . . . . . . . . . . . . 13 (((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 # 0) ∧ 𝐴 = (𝑥 / 𝑦)) ∧ 𝑥 # 0) → (1 / 𝐴) = ((𝑥 · 𝑦) / (𝑥 · 𝑥)))
6145, 60sylbir 134 . . . . . . . . . . . 12 (((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 ≠ 0) ∧ 𝐴 = (𝑥 / 𝑦)) ∧ 𝑥 ≠ 0) → (1 / 𝐴) = ((𝑥 · 𝑦) / (𝑥 · 𝑥)))
6242, 61jca 304 . . . . . . . . . . 11 (((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 ≠ 0) ∧ 𝐴 = (𝑥 / 𝑦)) ∧ 𝑥 ≠ 0) → (((𝑥 · 𝑦) ∈ ℤ ∧ (𝑥 · 𝑥) ∈ ℕ) ∧ (1 / 𝐴) = ((𝑥 · 𝑦) / (𝑥 · 𝑥))))
6362ex 114 . . . . . . . . . 10 ((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 ≠ 0) ∧ 𝐴 = (𝑥 / 𝑦)) → (𝑥 ≠ 0 → (((𝑥 · 𝑦) ∈ ℤ ∧ (𝑥 · 𝑥) ∈ ℕ) ∧ (1 / 𝐴) = ((𝑥 · 𝑦) / (𝑥 · 𝑥)))))
6434, 63sylbid 149 . . . . . . . . 9 ((((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 ≠ 0) ∧ 𝐴 = (𝑥 / 𝑦)) → (𝐴 # 0 → (((𝑥 · 𝑦) ∈ ℤ ∧ (𝑥 · 𝑥) ∈ ℕ) ∧ (1 / 𝐴) = ((𝑥 · 𝑦) / (𝑥 · 𝑥)))))
6564ex 114 . . . . . . . 8 (((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) ∧ 𝑦 ≠ 0) → (𝐴 = (𝑥 / 𝑦) → (𝐴 # 0 → (((𝑥 · 𝑦) ∈ ℤ ∧ (𝑥 · 𝑥) ∈ ℕ) ∧ (1 / 𝐴) = ((𝑥 · 𝑦) / (𝑥 · 𝑥))))))
6665anasss 396 . . . . . . 7 ((𝑥 ∈ ℤ ∧ (𝑦 ∈ ℕ ∧ 𝑦 ≠ 0)) → (𝐴 = (𝑥 / 𝑦) → (𝐴 # 0 → (((𝑥 · 𝑦) ∈ ℤ ∧ (𝑥 · 𝑥) ∈ ℕ) ∧ (1 / 𝐴) = ((𝑥 · 𝑦) / (𝑥 · 𝑥))))))
6714, 66sylan2 284 . . . . . 6 ((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) → (𝐴 = (𝑥 / 𝑦) → (𝐴 # 0 → (((𝑥 · 𝑦) ∈ ℤ ∧ (𝑥 · 𝑥) ∈ ℕ) ∧ (1 / 𝐴) = ((𝑥 · 𝑦) / (𝑥 · 𝑥))))))
68 rspceov 5816 . . . . . . . 8 (((𝑥 · 𝑦) ∈ ℤ ∧ (𝑥 · 𝑥) ∈ ℕ ∧ (1 / 𝐴) = ((𝑥 · 𝑦) / (𝑥 · 𝑥))) → ∃𝑧 ∈ ℤ ∃𝑤 ∈ ℕ (1 / 𝐴) = (𝑧 / 𝑤))
69683expa 1181 . . . . . . 7 ((((𝑥 · 𝑦) ∈ ℤ ∧ (𝑥 · 𝑥) ∈ ℕ) ∧ (1 / 𝐴) = ((𝑥 · 𝑦) / (𝑥 · 𝑥))) → ∃𝑧 ∈ ℤ ∃𝑤 ∈ ℕ (1 / 𝐴) = (𝑧 / 𝑤))
70 elq 9436 . . . . . . 7 ((1 / 𝐴) ∈ ℚ ↔ ∃𝑧 ∈ ℤ ∃𝑤 ∈ ℕ (1 / 𝐴) = (𝑧 / 𝑤))
7169, 70sylibr 133 . . . . . 6 ((((𝑥 · 𝑦) ∈ ℤ ∧ (𝑥 · 𝑥) ∈ ℕ) ∧ (1 / 𝐴) = ((𝑥 · 𝑦) / (𝑥 · 𝑥))) → (1 / 𝐴) ∈ ℚ)
7267, 71syl8 71 . . . . 5 ((𝑥 ∈ ℤ ∧ 𝑦 ∈ ℕ) → (𝐴 = (𝑥 / 𝑦) → (𝐴 # 0 → (1 / 𝐴) ∈ ℚ)))
7372rexlimivv 2555 . . . 4 (∃𝑥 ∈ ℤ ∃𝑦 ∈ ℕ 𝐴 = (𝑥 / 𝑦) → (𝐴 # 0 → (1 / 𝐴) ∈ ℚ))
7412, 73sylbi 120 . . 3 (𝐴 ∈ ℚ → (𝐴 # 0 → (1 / 𝐴) ∈ ℚ))
7574imp 123 . 2 ((𝐴 ∈ ℚ ∧ 𝐴 # 0) → (1 / 𝐴) ∈ ℚ)
7611, 75syldan 280 1 ((𝐴 ∈ ℚ ∧ 𝐴 ≠ 0) → (1 / 𝐴) ∈ ℚ)
 Colors of variables: wff set class Syntax hints:   → wi 4   ∧ wa 103   ↔ wb 104   = wceq 1331   ∈ wcel 1480   ≠ wne 2308  ∃wrex 2417   class class class wbr 3932  (class class class)co 5777  ℂcc 7637  0cc0 7639  1c1 7640   · cmul 7644   # cap 8362   / cdiv 8451  ℕcn 8739  ℤcz 9073  ℚcq 9433 This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-ia1 105  ax-ia2 106  ax-ia3 107  ax-in1 603  ax-in2 604  ax-io 698  ax-5 1423  ax-7 1424  ax-gen 1425  ax-ie1 1469  ax-ie2 1470  ax-8 1482  ax-10 1483  ax-11 1484  ax-i12 1485  ax-bndl 1486  ax-4 1487  ax-13 1491  ax-14 1492  ax-17 1506  ax-i9 1510  ax-ial 1514  ax-i5r 1515  ax-ext 2121  ax-sep 4049  ax-pow 4101  ax-pr 4134  ax-un 4358  ax-setind 4455  ax-cnex 7730  ax-resscn 7731  ax-1cn 7732  ax-1re 7733  ax-icn 7734  ax-addcl 7735  ax-addrcl 7736  ax-mulcl 7737  ax-mulrcl 7738  ax-addcom 7739  ax-mulcom 7740  ax-addass 7741  ax-mulass 7742  ax-distr 7743  ax-i2m1 7744  ax-0lt1 7745  ax-1rid 7746  ax-0id 7747  ax-rnegex 7748  ax-precex 7749  ax-cnre 7750  ax-pre-ltirr 7751  ax-pre-ltwlin 7752  ax-pre-lttrn 7753  ax-pre-apti 7754  ax-pre-ltadd 7755  ax-pre-mulgt0 7756  ax-pre-mulext 7757 This theorem depends on definitions:  df-bi 116  df-3or 963  df-3an 964  df-tru 1334  df-fal 1337  df-nf 1437  df-sb 1736  df-eu 2002  df-mo 2003  df-clab 2126  df-cleq 2132  df-clel 2135  df-nfc 2270  df-ne 2309  df-nel 2404  df-ral 2421  df-rex 2422  df-reu 2423  df-rmo 2424  df-rab 2425  df-v 2688  df-sbc 2910  df-csb 3004  df-dif 3073  df-un 3075  df-in 3077  df-ss 3084  df-pw 3512  df-sn 3533  df-pr 3534  df-op 3536  df-uni 3740  df-int 3775  df-iun 3818  df-br 3933  df-opab 3993  df-mpt 3994  df-id 4218  df-po 4221  df-iso 4222  df-xp 4548  df-rel 4549  df-cnv 4550  df-co 4551  df-dm 4552  df-rn 4553  df-res 4554  df-ima 4555  df-iota 5091  df-fun 5128  df-fn 5129  df-f 5130  df-fv 5134  df-riota 5733  df-ov 5780  df-oprab 5781  df-mpo 5782  df-1st 6041  df-2nd 6042  df-pnf 7821  df-mnf 7822  df-xr 7823  df-ltxr 7824  df-le 7825  df-sub 7954  df-neg 7955  df-reap 8356  df-ap 8363  df-div 8452  df-inn 8740  df-n0 8997  df-z 9074  df-q 9434 This theorem is referenced by:  qdivcl  9457  qexpclz  10338
 Copyright terms: Public domain W3C validator