| Metamath Proof Explorer |
< Previous
Next >
Nearby theorems |
||
| Mirrors > Home > MPE Home > Th. List > aaliou | Structured version Visualization version GIF version | ||
| Description: Liouville's theorem on diophantine approximation: Any algebraic number, being a root of a polynomial 𝐹 in integer coefficients, is not approximable beyond order 𝑁 = deg(𝐹) by rational numbers. In this form, it also applies to rational numbers themselves, which are not well approximable by other rational numbers. This is Metamath 100 proof #18. (Contributed by Stefan O'Rear, 16-Nov-2014.) |
| Ref | Expression |
|---|---|
| aalioulem2.a | ⊢ 𝑁 = (deg‘𝐹) |
| aalioulem2.b | ⊢ (𝜑 → 𝐹 ∈ (Poly‘ℤ)) |
| aalioulem2.c | ⊢ (𝜑 → 𝑁 ∈ ℕ) |
| aalioulem2.d | ⊢ (𝜑 → 𝐴 ∈ ℝ) |
| aalioulem3.e | ⊢ (𝜑 → (𝐹‘𝐴) = 0) |
| Ref | Expression |
|---|---|
| aaliou | ⊢ (𝜑 → ∃𝑥 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| Step | Hyp | Ref | Expression |
|---|---|---|---|
| 1 | aalioulem2.a | . . 3 ⊢ 𝑁 = (deg‘𝐹) | |
| 2 | aalioulem2.b | . . 3 ⊢ (𝜑 → 𝐹 ∈ (Poly‘ℤ)) | |
| 3 | aalioulem2.c | . . 3 ⊢ (𝜑 → 𝑁 ∈ ℕ) | |
| 4 | aalioulem2.d | . . 3 ⊢ (𝜑 → 𝐴 ∈ ℝ) | |
| 5 | aalioulem3.e | . . 3 ⊢ (𝜑 → (𝐹‘𝐴) = 0) | |
| 6 | 1, 2, 3, 4, 5 | aalioulem6 26314 | . 2 ⊢ (𝜑 → ∃𝑎 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 7 | rphalfcl 12962 | . . . . 5 ⊢ (𝑎 ∈ ℝ+ → (𝑎 / 2) ∈ ℝ+) | |
| 8 | 7 | adantl 481 | . . . 4 ⊢ ((𝜑 ∧ 𝑎 ∈ ℝ+) → (𝑎 / 2) ∈ ℝ+) |
| 9 | 7 | ad2antlr 728 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / 2) ∈ ℝ+) |
| 10 | nnrp 12945 | . . . . . . . . . . . 12 ⊢ (𝑞 ∈ ℕ → 𝑞 ∈ ℝ+) | |
| 11 | 10 | ad2antll 730 | . . . . . . . . . . 11 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → 𝑞 ∈ ℝ+) |
| 12 | 3 | nnzd 12541 | . . . . . . . . . . . 12 ⊢ (𝜑 → 𝑁 ∈ ℤ) |
| 13 | 12 | ad2antrr 727 | . . . . . . . . . . 11 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → 𝑁 ∈ ℤ) |
| 14 | 11, 13 | rpexpcld 14200 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑞↑𝑁) ∈ ℝ+) |
| 15 | 9, 14 | rpdivcld 12994 | . . . . . . . . 9 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / 2) / (𝑞↑𝑁)) ∈ ℝ+) |
| 16 | 15 | rpred 12977 | . . . . . . . 8 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / 2) / (𝑞↑𝑁)) ∈ ℝ) |
| 17 | simplr 769 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → 𝑎 ∈ ℝ+) | |
| 18 | 17, 14 | rpdivcld 12994 | . . . . . . . . 9 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / (𝑞↑𝑁)) ∈ ℝ+) |
| 19 | 18 | rpred 12977 | . . . . . . . 8 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / (𝑞↑𝑁)) ∈ ℝ) |
| 20 | 4 | adantr 480 | . . . . . . . . . . 11 ⊢ ((𝜑 ∧ 𝑎 ∈ ℝ+) → 𝐴 ∈ ℝ) |
| 21 | znq 12893 | . . . . . . . . . . . 12 ⊢ ((𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ) → (𝑝 / 𝑞) ∈ ℚ) | |
| 22 | qre 12894 | . . . . . . . . . . . 12 ⊢ ((𝑝 / 𝑞) ∈ ℚ → (𝑝 / 𝑞) ∈ ℝ) | |
| 23 | 21, 22 | syl 17 | . . . . . . . . . . 11 ⊢ ((𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ) → (𝑝 / 𝑞) ∈ ℝ) |
| 24 | resubcl 11449 | . . . . . . . . . . 11 ⊢ ((𝐴 ∈ ℝ ∧ (𝑝 / 𝑞) ∈ ℝ) → (𝐴 − (𝑝 / 𝑞)) ∈ ℝ) | |
| 25 | 20, 23, 24 | syl2an 597 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝐴 − (𝑝 / 𝑞)) ∈ ℝ) |
| 26 | 25 | recnd 11164 | . . . . . . . . 9 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝐴 − (𝑝 / 𝑞)) ∈ ℂ) |
| 27 | 26 | abscld 15392 | . . . . . . . 8 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (abs‘(𝐴 − (𝑝 / 𝑞))) ∈ ℝ) |
| 28 | 16, 19, 27 | 3jca 1129 | . . . . . . 7 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (((𝑎 / 2) / (𝑞↑𝑁)) ∈ ℝ ∧ (𝑎 / (𝑞↑𝑁)) ∈ ℝ ∧ (abs‘(𝐴 − (𝑝 / 𝑞))) ∈ ℝ)) |
| 29 | 9 | rpred 12977 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / 2) ∈ ℝ) |
| 30 | rpre 12942 | . . . . . . . . . . 11 ⊢ (𝑎 ∈ ℝ+ → 𝑎 ∈ ℝ) | |
| 31 | 30 | ad2antlr 728 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → 𝑎 ∈ ℝ) |
| 32 | rphalflt 12964 | . . . . . . . . . . 11 ⊢ (𝑎 ∈ ℝ+ → (𝑎 / 2) < 𝑎) | |
| 33 | 32 | ad2antlr 728 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / 2) < 𝑎) |
| 34 | 29, 31, 14, 33 | ltdiv1dd 13034 | . . . . . . . . 9 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / 2) / (𝑞↑𝑁)) < (𝑎 / (𝑞↑𝑁))) |
| 35 | 34 | anim1i 616 | . . . . . . . 8 ⊢ ((((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) ∧ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → (((𝑎 / 2) / (𝑞↑𝑁)) < (𝑎 / (𝑞↑𝑁)) ∧ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 36 | 35 | ex 412 | . . . . . . 7 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞))) → (((𝑎 / 2) / (𝑞↑𝑁)) < (𝑎 / (𝑞↑𝑁)) ∧ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 37 | ltletr 11229 | . . . . . . 7 ⊢ ((((𝑎 / 2) / (𝑞↑𝑁)) ∈ ℝ ∧ (𝑎 / (𝑞↑𝑁)) ∈ ℝ ∧ (abs‘(𝐴 − (𝑝 / 𝑞))) ∈ ℝ) → ((((𝑎 / 2) / (𝑞↑𝑁)) < (𝑎 / (𝑞↑𝑁)) ∧ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) | |
| 38 | 28, 36, 37 | sylsyld 61 | . . . . . 6 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞))) → ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 39 | 38 | orim2d 969 | . . . . 5 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 40 | 39 | ralimdvva 3185 | . . . 4 ⊢ ((𝜑 ∧ 𝑎 ∈ ℝ+) → (∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 41 | oveq1 7367 | . . . . . . . 8 ⊢ (𝑥 = (𝑎 / 2) → (𝑥 / (𝑞↑𝑁)) = ((𝑎 / 2) / (𝑞↑𝑁))) | |
| 42 | 41 | breq1d 5096 | . . . . . . 7 ⊢ (𝑥 = (𝑎 / 2) → ((𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))) ↔ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 43 | 42 | orbi2d 916 | . . . . . 6 ⊢ (𝑥 = (𝑎 / 2) → ((𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))) ↔ (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 44 | 43 | 2ralbidv 3202 | . . . . 5 ⊢ (𝑥 = (𝑎 / 2) → (∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))) ↔ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 45 | 44 | rspcev 3565 | . . . 4 ⊢ (((𝑎 / 2) ∈ ℝ+ ∧ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) → ∃𝑥 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 46 | 8, 40, 45 | syl6an 685 | . . 3 ⊢ ((𝜑 ∧ 𝑎 ∈ ℝ+) → (∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → ∃𝑥 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 47 | 46 | rexlimdva 3139 | . 2 ⊢ (𝜑 → (∃𝑎 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → ∃𝑥 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 48 | 6, 47 | mpd 15 | 1 ⊢ (𝜑 → ∃𝑥 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| Colors of variables: wff setvar class |
| Syntax hints: → wi 4 ∧ wa 395 ∨ wo 848 ∧ w3a 1087 = wceq 1542 ∈ wcel 2114 ∀wral 3052 ∃wrex 3062 class class class wbr 5086 ‘cfv 6492 (class class class)co 7360 ℝcr 11028 0cc0 11029 < clt 11170 ≤ cle 11171 − cmin 11368 / cdiv 11798 ℕcn 12165 2c2 12227 ℤcz 12515 ℚcq 12889 ℝ+crp 12933 ↑cexp 14014 abscabs 15187 Polycply 26159 degcdgr 26162 |
| This theorem was proved from axioms: ax-mp 5 ax-1 6 ax-2 7 ax-3 8 ax-gen 1797 ax-4 1811 ax-5 1912 ax-6 1969 ax-7 2010 ax-8 2116 ax-9 2124 ax-10 2147 ax-11 2163 ax-12 2185 ax-ext 2709 ax-rep 5212 ax-sep 5231 ax-nul 5241 ax-pow 5302 ax-pr 5370 ax-un 7682 ax-inf2 9553 ax-cnex 11085 ax-resscn 11086 ax-1cn 11087 ax-icn 11088 ax-addcl 11089 ax-addrcl 11090 ax-mulcl 11091 ax-mulrcl 11092 ax-mulcom 11093 ax-addass 11094 ax-mulass 11095 ax-distr 11096 ax-i2m1 11097 ax-1ne0 11098 ax-1rid 11099 ax-rnegex 11100 ax-rrecex 11101 ax-cnre 11102 ax-pre-lttri 11103 ax-pre-lttrn 11104 ax-pre-ltadd 11105 ax-pre-mulgt0 11106 ax-pre-sup 11107 ax-addf 11108 |
| This theorem depends on definitions: df-bi 207 df-an 396 df-or 849 df-3or 1088 df-3an 1089 df-tru 1545 df-fal 1555 df-ex 1782 df-nf 1786 df-sb 2069 df-mo 2540 df-eu 2570 df-clab 2716 df-cleq 2729 df-clel 2812 df-nfc 2886 df-ne 2934 df-nel 3038 df-ral 3053 df-rex 3063 df-rmo 3343 df-reu 3344 df-rab 3391 df-v 3432 df-sbc 3730 df-csb 3839 df-dif 3893 df-un 3895 df-in 3897 df-ss 3907 df-pss 3910 df-nul 4275 df-if 4468 df-pw 4544 df-sn 4569 df-pr 4571 df-tp 4573 df-op 4575 df-uni 4852 df-int 4891 df-iun 4936 df-iin 4937 df-br 5087 df-opab 5149 df-mpt 5168 df-tr 5194 df-id 5519 df-eprel 5524 df-po 5532 df-so 5533 df-fr 5577 df-se 5578 df-we 5579 df-xp 5630 df-rel 5631 df-cnv 5632 df-co 5633 df-dm 5634 df-rn 5635 df-res 5636 df-ima 5637 df-pred 6259 df-ord 6320 df-on 6321 df-lim 6322 df-suc 6323 df-iota 6448 df-fun 6494 df-fn 6495 df-f 6496 df-f1 6497 df-fo 6498 df-f1o 6499 df-fv 6500 df-isom 6501 df-riota 7317 df-ov 7363 df-oprab 7364 df-mpo 7365 df-of 7624 df-om 7811 df-1st 7935 df-2nd 7936 df-supp 8104 df-frecs 8224 df-wrecs 8255 df-recs 8304 df-rdg 8342 df-1o 8398 df-2o 8399 df-oadd 8402 df-er 8636 df-map 8768 df-pm 8769 df-ixp 8839 df-en 8887 df-dom 8888 df-sdom 8889 df-fin 8890 df-fsupp 9268 df-fi 9317 df-sup 9348 df-inf 9349 df-oi 9418 df-dju 9816 df-card 9854 df-pnf 11172 df-mnf 11173 df-xr 11174 df-ltxr 11175 df-le 11176 df-sub 11370 df-neg 11371 df-div 11799 df-nn 12166 df-2 12235 df-3 12236 df-4 12237 df-5 12238 df-6 12239 df-7 12240 df-8 12241 df-9 12242 df-n0 12429 df-xnn0 12502 df-z 12516 df-dec 12636 df-uz 12780 df-q 12890 df-rp 12934 df-xneg 13054 df-xadd 13055 df-xmul 13056 df-ioo 13293 df-ico 13295 df-icc 13296 df-fz 13453 df-fzo 13600 df-fl 13742 df-seq 13955 df-exp 14015 df-hash 14284 df-cj 15052 df-re 15053 df-im 15054 df-sqrt 15188 df-abs 15189 df-clim 15441 df-rlim 15442 df-sum 15640 df-struct 17108 df-sets 17125 df-slot 17143 df-ndx 17155 df-base 17171 df-ress 17192 df-plusg 17224 df-mulr 17225 df-starv 17226 df-sca 17227 df-vsca 17228 df-ip 17229 df-tset 17230 df-ple 17231 df-ds 17233 df-unif 17234 df-hom 17235 df-cco 17236 df-rest 17376 df-topn 17377 df-0g 17395 df-gsum 17396 df-topgen 17397 df-pt 17398 df-prds 17401 df-xrs 17457 df-qtop 17462 df-imas 17463 df-xps 17465 df-mre 17539 df-mrc 17540 df-acs 17542 df-mgm 18599 df-sgrp 18678 df-mnd 18694 df-submnd 18743 df-grp 18903 df-minusg 18904 df-mulg 19035 df-subg 19090 df-cntz 19283 df-cmn 19748 df-abl 19749 df-mgp 20113 df-rng 20125 df-ur 20154 df-ring 20207 df-cring 20208 df-subrng 20514 df-subrg 20538 df-psmet 21336 df-xmet 21337 df-met 21338 df-bl 21339 df-mopn 21340 df-fbas 21341 df-fg 21342 df-cnfld 21345 df-top 22869 df-topon 22886 df-topsp 22908 df-bases 22921 df-cld 22994 df-ntr 22995 df-cls 22996 df-nei 23073 df-lp 23111 df-perf 23112 df-cn 23202 df-cnp 23203 df-haus 23290 df-cmp 23362 df-tx 23537 df-hmeo 23730 df-fil 23821 df-fm 23913 df-flim 23914 df-flf 23915 df-xms 24295 df-ms 24296 df-tms 24297 df-cncf 24855 df-0p 25647 df-limc 25843 df-dv 25844 df-dvn 25845 df-cpn 25846 df-ply 26163 df-idp 26164 df-coe 26165 df-dgr 26166 df-quot 26268 |
| This theorem is referenced by: aaliou2 26317 |
| Copyright terms: Public domain | W3C validator |