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

Theorem bezoutlemex 11994
Description: Lemma for Bézout's identity. Existence of a number which we will later show to be the greater common divisor and its decomposition into cofactors. (Contributed by Mario Carneiro and Jim Kingdon, 3-Jan-2022.)
Assertion
Ref Expression
bezoutlemex ((𝐴 ∈ ℕ0𝐵 ∈ ℕ0) → ∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝐵)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦))))
Distinct variable groups:   𝐴,𝑑,𝑥,𝑦   𝑧,𝐴,𝑑   𝐵,𝑑,𝑥,𝑦   𝑧,𝐵

Proof of Theorem bezoutlemex
Dummy variables 𝑎 𝑏 𝑠 𝑡 𝑤 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 oveq2 5880 . . . . . . . 8 (𝑦 = 𝑡 → (𝐵 · 𝑦) = (𝐵 · 𝑡))
21oveq2d 5888 . . . . . . 7 (𝑦 = 𝑡 → ((𝐴 · 𝑥) + (𝐵 · 𝑦)) = ((𝐴 · 𝑥) + (𝐵 · 𝑡)))
32eqeq2d 2189 . . . . . 6 (𝑦 = 𝑡 → (𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) ↔ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑡))))
43cbvrexv 2704 . . . . 5 (∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) ↔ ∃𝑡 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑡)))
54rexbii 2484 . . . 4 (∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) ↔ ∃𝑥 ∈ ℤ ∃𝑡 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑡)))
6 oveq2 5880 . . . . . . . 8 (𝑥 = 𝑠 → (𝐴 · 𝑥) = (𝐴 · 𝑠))
76oveq1d 5887 . . . . . . 7 (𝑥 = 𝑠 → ((𝐴 · 𝑥) + (𝐵 · 𝑡)) = ((𝐴 · 𝑠) + (𝐵 · 𝑡)))
87eqeq2d 2189 . . . . . 6 (𝑥 = 𝑠 → (𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑡)) ↔ 𝑑 = ((𝐴 · 𝑠) + (𝐵 · 𝑡))))
98rexbidv 2478 . . . . 5 (𝑥 = 𝑠 → (∃𝑡 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑡)) ↔ ∃𝑡 ∈ ℤ 𝑑 = ((𝐴 · 𝑠) + (𝐵 · 𝑡))))
109cbvrexv 2704 . . . 4 (∃𝑥 ∈ ℤ ∃𝑡 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑡)) ↔ ∃𝑠 ∈ ℤ ∃𝑡 ∈ ℤ 𝑑 = ((𝐴 · 𝑠) + (𝐵 · 𝑡)))
115, 10bitri 184 . . 3 (∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) ↔ ∃𝑠 ∈ ℤ ∃𝑡 ∈ ℤ 𝑑 = ((𝐴 · 𝑠) + (𝐵 · 𝑡)))
12 simpl 109 . . 3 ((𝐴 ∈ ℕ0𝐵 ∈ ℕ0) → 𝐴 ∈ ℕ0)
13 simpr 110 . . 3 ((𝐴 ∈ ℕ0𝐵 ∈ ℕ0) → 𝐵 ∈ ℕ0)
1411, 12, 13bezoutlemb 11993 . 2 ((𝐴 ∈ ℕ0𝐵 ∈ ℕ0) → [𝐵 / 𝑑]𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)))
15 dfsbcq2 2965 . . . 4 (𝑏 = 𝐵 → ([𝑏 / 𝑑]∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) ↔ [𝐵 / 𝑑]𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦))))
16 breq2 4006 . . . . . . . . 9 (𝑏 = 𝐵 → (𝑧𝑏𝑧𝐵))
1716anbi2d 464 . . . . . . . 8 (𝑏 = 𝐵 → ((𝑧𝐴𝑧𝑏) ↔ (𝑧𝐴𝑧𝐵)))
1817imbi2d 230 . . . . . . 7 (𝑏 = 𝐵 → ((𝑧𝑑 → (𝑧𝐴𝑧𝑏)) ↔ (𝑧𝑑 → (𝑧𝐴𝑧𝐵))))
1918ralbidv 2477 . . . . . 6 (𝑏 = 𝐵 → (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝑏)) ↔ ∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝐵))))
2019anbi1d 465 . . . . 5 (𝑏 = 𝐵 → ((∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝑏)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦))) ↔ (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝐵)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)))))
2120rexbidv 2478 . . . 4 (𝑏 = 𝐵 → (∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝑏)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦))) ↔ ∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝐵)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)))))
2215, 21imbi12d 234 . . 3 (𝑏 = 𝐵 → (([𝑏 / 𝑑]∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) → ∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝑏)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)))) ↔ ([𝐵 / 𝑑]𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) → ∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝐵)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦))))))
2311, 12, 13bezoutlema 11992 . . . 4 ((𝐴 ∈ ℕ0𝐵 ∈ ℕ0) → [𝐴 / 𝑑]𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)))
24 dfsbcq2 2965 . . . . . 6 (𝑎 = 𝐴 → ([𝑎 / 𝑑]∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) ↔ [𝐴 / 𝑑]𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦))))
25 breq2 4006 . . . . . . . . . . . . 13 (𝑎 = 𝐴 → (𝑧𝑎𝑧𝐴))
2625anbi1d 465 . . . . . . . . . . . 12 (𝑎 = 𝐴 → ((𝑧𝑎𝑧𝑏) ↔ (𝑧𝐴𝑧𝑏)))
2726imbi2d 230 . . . . . . . . . . 11 (𝑎 = 𝐴 → ((𝑧𝑑 → (𝑧𝑎𝑧𝑏)) ↔ (𝑧𝑑 → (𝑧𝐴𝑧𝑏))))
2827ralbidv 2477 . . . . . . . . . 10 (𝑎 = 𝐴 → (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝑎𝑧𝑏)) ↔ ∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝑏))))
2928anbi1d 465 . . . . . . . . 9 (𝑎 = 𝐴 → ((∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝑎𝑧𝑏)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦))) ↔ (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝑏)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)))))
3029rexbidv 2478 . . . . . . . 8 (𝑎 = 𝐴 → (∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝑎𝑧𝑏)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦))) ↔ ∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝑏)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)))))
3130imbi2d 230 . . . . . . 7 (𝑎 = 𝐴 → (([𝑏 / 𝑑]∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) → ∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝑎𝑧𝑏)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)))) ↔ ([𝑏 / 𝑑]∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) → ∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝑏)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦))))))
3231ralbidv 2477 . . . . . 6 (𝑎 = 𝐴 → (∀𝑏 ∈ ℕ0 ([𝑏 / 𝑑]∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) → ∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝑎𝑧𝑏)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)))) ↔ ∀𝑏 ∈ ℕ0 ([𝑏 / 𝑑]∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) → ∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝑏)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦))))))
3324, 32imbi12d 234 . . . . 5 (𝑎 = 𝐴 → (([𝑎 / 𝑑]∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) → ∀𝑏 ∈ ℕ0 ([𝑏 / 𝑑]∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) → ∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝑎𝑧𝑏)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦))))) ↔ ([𝐴 / 𝑑]𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) → ∀𝑏 ∈ ℕ0 ([𝑏 / 𝑑]∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) → ∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝑏)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)))))))
34 breq1 4005 . . . . . . . 8 (𝑧 = 𝑤 → (𝑧𝑑𝑤𝑑))
35 breq1 4005 . . . . . . . . 9 (𝑧 = 𝑤 → (𝑧𝑎𝑤𝑎))
36 breq1 4005 . . . . . . . . 9 (𝑧 = 𝑤 → (𝑧𝑏𝑤𝑏))
3735, 36anbi12d 473 . . . . . . . 8 (𝑧 = 𝑤 → ((𝑧𝑎𝑧𝑏) ↔ (𝑤𝑎𝑤𝑏)))
3834, 37imbi12d 234 . . . . . . 7 (𝑧 = 𝑤 → ((𝑧𝑑 → (𝑧𝑎𝑧𝑏)) ↔ (𝑤𝑑 → (𝑤𝑎𝑤𝑏))))
3938cbvralv 2703 . . . . . 6 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝑎𝑧𝑏)) ↔ ∀𝑤 ∈ ℕ0 (𝑤𝑑 → (𝑤𝑎𝑤𝑏)))
4011, 39, 12, 13bezoutlemmain 11991 . . . . 5 ((𝐴 ∈ ℕ0𝐵 ∈ ℕ0) → ∀𝑎 ∈ ℕ0 ([𝑎 / 𝑑]∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) → ∀𝑏 ∈ ℕ0 ([𝑏 / 𝑑]∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) → ∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝑎𝑧𝑏)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦))))))
4133, 40, 12rspcdva 2846 . . . 4 ((𝐴 ∈ ℕ0𝐵 ∈ ℕ0) → ([𝐴 / 𝑑]𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) → ∀𝑏 ∈ ℕ0 ([𝑏 / 𝑑]∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) → ∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝑏)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦))))))
4223, 41mpd 13 . . 3 ((𝐴 ∈ ℕ0𝐵 ∈ ℕ0) → ∀𝑏 ∈ ℕ0 ([𝑏 / 𝑑]∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) → ∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝑏)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)))))
4322, 42, 13rspcdva 2846 . 2 ((𝐴 ∈ ℕ0𝐵 ∈ ℕ0) → ([𝐵 / 𝑑]𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)) → ∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝐵)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦)))))
4414, 43mpd 13 1 ((𝐴 ∈ ℕ0𝐵 ∈ ℕ0) → ∃𝑑 ∈ ℕ0 (∀𝑧 ∈ ℕ0 (𝑧𝑑 → (𝑧𝐴𝑧𝐵)) ∧ ∃𝑥 ∈ ℤ ∃𝑦 ∈ ℤ 𝑑 = ((𝐴 · 𝑥) + (𝐵 · 𝑦))))
Colors of variables: wff set class
Syntax hints:  wi 4  wa 104   = wceq 1353  [wsb 1762  wcel 2148  wral 2455  wrex 2456  [wsbc 2962   class class class wbr 4002  (class class class)co 5872   + caddc 7811   · cmul 7813  0cn0 9172  cz 9249  cdvds 11787
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-ia1 106  ax-ia2 107  ax-ia3 108  ax-in1 614  ax-in2 615  ax-io 709  ax-5 1447  ax-7 1448  ax-gen 1449  ax-ie1 1493  ax-ie2 1494  ax-8 1504  ax-10 1505  ax-11 1506  ax-i12 1507  ax-bndl 1509  ax-4 1510  ax-17 1526  ax-i9 1530  ax-ial 1534  ax-i5r 1535  ax-13 2150  ax-14 2151  ax-ext 2159  ax-coll 4117  ax-sep 4120  ax-nul 4128  ax-pow 4173  ax-pr 4208  ax-un 4432  ax-setind 4535  ax-iinf 4586  ax-cnex 7899  ax-resscn 7900  ax-1cn 7901  ax-1re 7902  ax-icn 7903  ax-addcl 7904  ax-addrcl 7905  ax-mulcl 7906  ax-mulrcl 7907  ax-addcom 7908  ax-mulcom 7909  ax-addass 7910  ax-mulass 7911  ax-distr 7912  ax-i2m1 7913  ax-0lt1 7914  ax-1rid 7915  ax-0id 7916  ax-rnegex 7917  ax-precex 7918  ax-cnre 7919  ax-pre-ltirr 7920  ax-pre-ltwlin 7921  ax-pre-lttrn 7922  ax-pre-apti 7923  ax-pre-ltadd 7924  ax-pre-mulgt0 7925  ax-pre-mulext 7926  ax-arch 7927
This theorem depends on definitions:  df-bi 117  df-dc 835  df-3or 979  df-3an 980  df-tru 1356  df-fal 1359  df-nf 1461  df-sb 1763  df-eu 2029  df-mo 2030  df-clab 2164  df-cleq 2170  df-clel 2173  df-nfc 2308  df-ne 2348  df-nel 2443  df-ral 2460  df-rex 2461  df-reu 2462  df-rmo 2463  df-rab 2464  df-v 2739  df-sbc 2963  df-csb 3058  df-dif 3131  df-un 3133  df-in 3135  df-ss 3142  df-nul 3423  df-if 3535  df-pw 3577  df-sn 3598  df-pr 3599  df-op 3601  df-uni 3810  df-int 3845  df-iun 3888  df-br 4003  df-opab 4064  df-mpt 4065  df-tr 4101  df-id 4292  df-po 4295  df-iso 4296  df-iord 4365  df-on 4367  df-ilim 4368  df-suc 4370  df-iom 4589  df-xp 4631  df-rel 4632  df-cnv 4633  df-co 4634  df-dm 4635  df-rn 4636  df-res 4637  df-ima 4638  df-iota 5177  df-fun 5217  df-fn 5218  df-f 5219  df-f1 5220  df-fo 5221  df-f1o 5222  df-fv 5223  df-riota 5828  df-ov 5875  df-oprab 5876  df-mpo 5877  df-1st 6138  df-2nd 6139  df-recs 6303  df-frec 6389  df-pnf 7990  df-mnf 7991  df-xr 7992  df-ltxr 7993  df-le 7994  df-sub 8126  df-neg 8127  df-reap 8528  df-ap 8535  df-div 8626  df-inn 8916  df-2 8974  df-n0 9173  df-z 9250  df-uz 9525  df-q 9616  df-rp 9650  df-fz 10005  df-fl 10265  df-mod 10318  df-seqfrec 10441  df-exp 10515  df-cj 10844  df-re 10845  df-im 10846  df-rsqrt 11000  df-abs 11001  df-dvds 11788
This theorem is referenced by:  bezoutlemzz  11995
  Copyright terms: Public domain W3C validator