| 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 26389 | . 2 ⊢ (𝜑 → ∃𝑎 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 7 | rphalfcl 13016 | . . . . 5 ⊢ (𝑎 ∈ ℝ+ → (𝑎 / 2) ∈ ℝ+) | |
| 8 | 7 | adantl 485 | . . . 4 ⊢ ((𝜑 ∧ 𝑎 ∈ ℝ+) → (𝑎 / 2) ∈ ℝ+) |
| 9 | 7 | ad2antlr 737 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / 2) ∈ ℝ+) |
| 10 | nnrp 12999 | . . . . . . . . . . . 12 ⊢ (𝑞 ∈ ℕ → 𝑞 ∈ ℝ+) | |
| 11 | 10 | ad2antll 739 | . . . . . . . . . . 11 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → 𝑞 ∈ ℝ+) |
| 12 | 3 | nnzd 12588 | . . . . . . . . . . . 12 ⊢ (𝜑 → 𝑁 ∈ ℤ) |
| 13 | 12 | ad2antrr 736 | . . . . . . . . . . 11 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → 𝑁 ∈ ℤ) |
| 14 | 11, 13 | rpexpcld 14254 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑞↑𝑁) ∈ ℝ+) |
| 15 | 9, 14 | rpdivcld 13048 | . . . . . . . . 9 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / 2) / (𝑞↑𝑁)) ∈ ℝ+) |
| 16 | 15 | rpred 13031 | . . . . . . . 8 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / 2) / (𝑞↑𝑁)) ∈ ℝ) |
| 17 | simplr 778 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → 𝑎 ∈ ℝ+) | |
| 18 | 17, 14 | rpdivcld 13048 | . . . . . . . . 9 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / (𝑞↑𝑁)) ∈ ℝ+) |
| 19 | 18 | rpred 13031 | . . . . . . . 8 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / (𝑞↑𝑁)) ∈ ℝ) |
| 20 | 4 | adantr 484 | . . . . . . . . . . 11 ⊢ ((𝜑 ∧ 𝑎 ∈ ℝ+) → 𝐴 ∈ ℝ) |
| 21 | znq 12947 | . . . . . . . . . . . 12 ⊢ ((𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ) → (𝑝 / 𝑞) ∈ ℚ) | |
| 22 | qre 12948 | . . . . . . . . . . . 12 ⊢ ((𝑝 / 𝑞) ∈ ℚ → (𝑝 / 𝑞) ∈ ℝ) | |
| 23 | 21, 22 | syl 17 | . . . . . . . . . . 11 ⊢ ((𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ) → (𝑝 / 𝑞) ∈ ℝ) |
| 24 | resubcl 11489 | . . . . . . . . . . 11 ⊢ ((𝐴 ∈ ℝ ∧ (𝑝 / 𝑞) ∈ ℝ) → (𝐴 − (𝑝 / 𝑞)) ∈ ℝ) | |
| 25 | 20, 23, 24 | syl2an 605 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝐴 − (𝑝 / 𝑞)) ∈ ℝ) |
| 26 | 25 | recnd 11204 | . . . . . . . . 9 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝐴 − (𝑝 / 𝑞)) ∈ ℂ) |
| 27 | 26 | abscld 15457 | . . . . . . . 8 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (abs‘(𝐴 − (𝑝 / 𝑞))) ∈ ℝ) |
| 28 | 16, 19, 27 | 3jca 1140 | . . . . . . 7 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (((𝑎 / 2) / (𝑞↑𝑁)) ∈ ℝ ∧ (𝑎 / (𝑞↑𝑁)) ∈ ℝ ∧ (abs‘(𝐴 − (𝑝 / 𝑞))) ∈ ℝ)) |
| 29 | 9 | rpred 13031 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / 2) ∈ ℝ) |
| 30 | rpre 12996 | . . . . . . . . . . 11 ⊢ (𝑎 ∈ ℝ+ → 𝑎 ∈ ℝ) | |
| 31 | 30 | ad2antlr 737 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → 𝑎 ∈ ℝ) |
| 32 | rphalflt 13018 | . . . . . . . . . . 11 ⊢ (𝑎 ∈ ℝ+ → (𝑎 / 2) < 𝑎) | |
| 33 | 32 | ad2antlr 737 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / 2) < 𝑎) |
| 34 | 29, 31, 14, 33 | ltdiv1dd 13088 | . . . . . . . . 9 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / 2) / (𝑞↑𝑁)) < (𝑎 / (𝑞↑𝑁))) |
| 35 | 34 | anim1i 624 | . . . . . . . 8 ⊢ ((((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) ∧ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → (((𝑎 / 2) / (𝑞↑𝑁)) < (𝑎 / (𝑞↑𝑁)) ∧ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 36 | 35 | ex 416 | . . . . . . 7 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞))) → (((𝑎 / 2) / (𝑞↑𝑁)) < (𝑎 / (𝑞↑𝑁)) ∧ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 37 | ltletr 11269 | . . . . . . 7 ⊢ ((((𝑎 / 2) / (𝑞↑𝑁)) ∈ ℝ ∧ (𝑎 / (𝑞↑𝑁)) ∈ ℝ ∧ (abs‘(𝐴 − (𝑝 / 𝑞))) ∈ ℝ) → ((((𝑎 / 2) / (𝑞↑𝑁)) < (𝑎 / (𝑞↑𝑁)) ∧ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) | |
| 38 | 28, 36, 37 | sylsyld 61 | . . . . . 6 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞))) → ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 39 | 38 | orim2d 979 | . . . . 5 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 40 | 39 | ralimdvva 3208 | . . . 4 ⊢ ((𝜑 ∧ 𝑎 ∈ ℝ+) → (∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 41 | oveq1 7398 | . . . . . . . 8 ⊢ (𝑥 = (𝑎 / 2) → (𝑥 / (𝑞↑𝑁)) = ((𝑎 / 2) / (𝑞↑𝑁))) | |
| 42 | 41 | breq1d 5107 | . . . . . . 7 ⊢ (𝑥 = (𝑎 / 2) → ((𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))) ↔ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 43 | 42 | orbi2d 926 | . . . . . 6 ⊢ (𝑥 = (𝑎 / 2) → ((𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))) ↔ (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 44 | 43 | 2ralbidv 3225 | . . . . 5 ⊢ (𝑥 = (𝑎 / 2) → (∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))) ↔ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 45 | 44 | rspcev 3580 | . . . 4 ⊢ (((𝑎 / 2) ∈ ℝ+ ∧ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) → ∃𝑥 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 46 | 8, 40, 45 | syl6an 694 | . . 3 ⊢ ((𝜑 ∧ 𝑎 ∈ ℝ+) → (∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → ∃𝑥 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 47 | 46 | rexlimdva 3162 | . 2 ⊢ (𝜑 → (∃𝑎 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → ∃𝑥 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 48 | 6, 47 | mpd 15 | 1 ⊢ (𝜑 → ∃𝑥 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| Colors of variables: wff setvar class |
| Syntax hints: → wi 4 ∧ wa 399 ∨ wo 858 ∧ w3a 1097 = wceq 1559 ∈ wcel 2141 ∀wral 3075 ∃wrex 3085 class class class wbr 5097 ‘cfv 6516 (class class class)co 7391 ℝcr 11066 0cc0 11067 < clt 11210 ≤ cle 11211 − cmin 11408 / cdiv 11838 ℕcn 12204 2c2 12266 ℤcz 12562 ℚcq 12943 ℝ+crp 12987 ↑cexp 14068 abscabs 15252 Polycply 26232 degcdgr 26235 |
| This theorem was proved from axioms: ax-mp 5 ax-1 6 ax-2 7 ax-3 8 ax-gen 1814 ax-4 1828 ax-5 1929 ax-6 1986 ax-7 2027 ax-8 2143 ax-9 2151 ax-10 2174 ax-11 2190 ax-12 2211 ax-ext 2733 ax-rep 5224 ax-sep 5243 ax-nul 5253 ax-pow 5319 ax-pr 5387 ax-un 7713 ax-inf2 9590 ax-cnex 11123 ax-resscn 11124 ax-1cn 11125 ax-icn 11126 ax-addcl 11127 ax-addrcl 11128 ax-mulcl 11129 ax-mulrcl 11130 ax-mulcom 11131 ax-addass 11132 ax-mulass 11133 ax-distr 11134 ax-i2m1 11135 ax-1ne0 11136 ax-1rid 11137 ax-rnegex 11138 ax-rrecex 11139 ax-cnre 11140 ax-pre-lttri 11141 ax-pre-lttrn 11142 ax-pre-ltadd 11143 ax-pre-mulgt0 11144 ax-pre-sup 11145 ax-addf 11146 |
| This theorem depends on definitions: df-bi 209 df-an 400 df-or 859 df-3or 1098 df-3an 1099 df-tru 1562 df-fal 1572 df-ex 1799 df-nf 1803 df-sb 2090 df-mo 2565 df-eu 2595 df-clab 2740 df-cleq 2753 df-clel 2836 df-nfc 2910 df-ne 2957 df-nel 3061 df-ral 3076 df-rex 3086 df-rmo 3366 df-reu 3367 df-rab 3414 df-v 3455 df-sbc 3743 df-csb 3851 df-dif 3905 df-un 3907 df-in 3909 df-ss 3919 df-pss 3922 df-nul 4284 df-if 4478 df-pw 4554 df-sn 4580 df-pr 4582 df-tp 4584 df-op 4586 df-uni 4863 df-int 4903 df-iun 4948 df-iin 4949 df-br 5098 df-opab 5160 df-mpt 5179 df-tr 5205 df-id 5538 df-eprel 5543 df-po 5551 df-so 5552 df-fr 5596 df-se 5597 df-we 5598 df-xp 5649 df-rel 5650 df-cnv 5651 df-co 5652 df-dm 5653 df-rn 5654 df-res 5655 df-ima 5656 df-pred 6283 df-ord 6344 df-on 6345 df-lim 6346 df-suc 6347 df-iota 6472 df-fun 6518 df-fn 6519 df-f 6520 df-f1 6521 df-fo 6522 df-f1o 6523 df-fv 6524 df-isom 6525 df-riota 7348 df-ov 7394 df-oprab 7395 df-mpo 7396 df-of 7655 df-om 7842 df-1st 7965 df-2nd 7966 df-supp 8135 df-frecs 8256 df-wrecs 8287 df-recs 8336 df-rdg 8375 df-1o 8431 df-2o 8432 df-oadd 8435 df-er 8672 df-map 8804 df-pm 8805 df-ixp 8874 df-en 8922 df-dom 8923 df-sdom 8924 df-fin 8925 df-fsupp 9302 df-fi 9351 df-sup 9382 df-inf 9383 df-oi 9452 df-dju 9853 df-card 9891 df-pnf 11212 df-mnf 11213 df-xr 11214 df-ltxr 11215 df-le 11216 df-sub 11410 df-neg 11411 df-div 11839 df-nn 12205 df-2 12274 df-3 12275 df-4 12276 df-5 12277 df-6 12278 df-7 12279 df-8 12280 df-9 12281 df-n0 12476 df-xnn0 12549 df-z 12563 df-dec 12683 df-uz 12834 df-q 12944 df-rp 12988 df-xneg 13108 df-xadd 13109 df-xmul 13110 df-ioo 13347 df-ico 13349 df-icc 13350 df-fz 13507 df-fzo 13654 df-fl 13796 df-seq 14009 df-exp 14069 df-hash 14338 df-cj 15117 df-re 15118 df-im 15119 df-sqrt 15253 df-abs 15254 df-clim 15506 df-rlim 15507 df-sum 15705 df-struct 17174 df-sets 17191 df-slot 17209 df-ndx 17221 df-base 17237 df-ress 17258 df-plusg 17290 df-mulr 17291 df-starv 17292 df-sca 17293 df-vsca 17294 df-ip 17295 df-tset 17296 df-ple 17297 df-ds 17299 df-unif 17300 df-hom 17301 df-cco 17302 df-rest 17442 df-topn 17443 df-0g 17461 df-gsum 17462 df-topgen 17463 df-pt 17464 df-prds 17467 df-xrs 17523 df-qtop 17528 df-imas 17529 df-xps 17531 df-mre 17605 df-mrc 17606 df-acs 17608 df-mgm 18665 df-sgrp 18744 df-mnd 18760 df-submnd 18809 df-grp 18969 df-minusg 18970 df-mulg 19101 df-subg 19156 df-cntz 19348 df-cmn 19813 df-abl 19814 df-mgp 20178 df-rng 20190 df-ur 20219 df-ring 20272 df-cring 20273 df-subrng 20583 df-subrg 20607 df-psmet 21404 df-xmet 21405 df-met 21406 df-bl 21407 df-mopn 21408 df-fbas 21409 df-fg 21410 df-cnfld 21413 df-top 22942 df-topon 22959 df-topsp 22981 df-bases 22994 df-cld 23067 df-ntr 23068 df-cls 23069 df-nei 23146 df-lp 23184 df-perf 23185 df-cn 23275 df-cnp 23276 df-haus 23363 df-cmp 23435 df-tx 23610 df-hmeo 23803 df-fil 23894 df-fm 23986 df-flim 23987 df-flf 23988 df-xms 24368 df-ms 24369 df-tms 24370 df-cncf 24928 df-0p 25720 df-limc 25916 df-dv 25917 df-dvn 25918 df-cpn 25919 df-ply 26236 df-idp 26237 df-coe 26238 df-dgr 26239 df-quot 26343 |
| This theorem is referenced by: aaliou2 26392 |
| Copyright terms: Public domain | W3C validator |