| 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 26267 | . 2 ⊢ (𝜑 → ∃𝑎 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 7 | rphalfcl 12914 | . . . . 5 ⊢ (𝑎 ∈ ℝ+ → (𝑎 / 2) ∈ ℝ+) | |
| 8 | 7 | adantl 481 | . . . 4 ⊢ ((𝜑 ∧ 𝑎 ∈ ℝ+) → (𝑎 / 2) ∈ ℝ+) |
| 9 | 7 | ad2antlr 727 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / 2) ∈ ℝ+) |
| 10 | nnrp 12897 | . . . . . . . . . . . 12 ⊢ (𝑞 ∈ ℕ → 𝑞 ∈ ℝ+) | |
| 11 | 10 | ad2antll 729 | . . . . . . . . . . 11 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → 𝑞 ∈ ℝ+) |
| 12 | 3 | nnzd 12490 | . . . . . . . . . . . 12 ⊢ (𝜑 → 𝑁 ∈ ℤ) |
| 13 | 12 | ad2antrr 726 | . . . . . . . . . . 11 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → 𝑁 ∈ ℤ) |
| 14 | 11, 13 | rpexpcld 14149 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑞↑𝑁) ∈ ℝ+) |
| 15 | 9, 14 | rpdivcld 12946 | . . . . . . . . 9 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / 2) / (𝑞↑𝑁)) ∈ ℝ+) |
| 16 | 15 | rpred 12929 | . . . . . . . 8 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / 2) / (𝑞↑𝑁)) ∈ ℝ) |
| 17 | simplr 768 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → 𝑎 ∈ ℝ+) | |
| 18 | 17, 14 | rpdivcld 12946 | . . . . . . . . 9 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / (𝑞↑𝑁)) ∈ ℝ+) |
| 19 | 18 | rpred 12929 | . . . . . . . 8 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / (𝑞↑𝑁)) ∈ ℝ) |
| 20 | 4 | adantr 480 | . . . . . . . . . . 11 ⊢ ((𝜑 ∧ 𝑎 ∈ ℝ+) → 𝐴 ∈ ℝ) |
| 21 | znq 12845 | . . . . . . . . . . . 12 ⊢ ((𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ) → (𝑝 / 𝑞) ∈ ℚ) | |
| 22 | qre 12846 | . . . . . . . . . . . 12 ⊢ ((𝑝 / 𝑞) ∈ ℚ → (𝑝 / 𝑞) ∈ ℝ) | |
| 23 | 21, 22 | syl 17 | . . . . . . . . . . 11 ⊢ ((𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ) → (𝑝 / 𝑞) ∈ ℝ) |
| 24 | resubcl 11420 | . . . . . . . . . . 11 ⊢ ((𝐴 ∈ ℝ ∧ (𝑝 / 𝑞) ∈ ℝ) → (𝐴 − (𝑝 / 𝑞)) ∈ ℝ) | |
| 25 | 20, 23, 24 | syl2an 596 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝐴 − (𝑝 / 𝑞)) ∈ ℝ) |
| 26 | 25 | recnd 11135 | . . . . . . . . 9 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝐴 − (𝑝 / 𝑞)) ∈ ℂ) |
| 27 | 26 | abscld 15341 | . . . . . . . 8 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (abs‘(𝐴 − (𝑝 / 𝑞))) ∈ ℝ) |
| 28 | 16, 19, 27 | 3jca 1128 | . . . . . . 7 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (((𝑎 / 2) / (𝑞↑𝑁)) ∈ ℝ ∧ (𝑎 / (𝑞↑𝑁)) ∈ ℝ ∧ (abs‘(𝐴 − (𝑝 / 𝑞))) ∈ ℝ)) |
| 29 | 9 | rpred 12929 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / 2) ∈ ℝ) |
| 30 | rpre 12894 | . . . . . . . . . . 11 ⊢ (𝑎 ∈ ℝ+ → 𝑎 ∈ ℝ) | |
| 31 | 30 | ad2antlr 727 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → 𝑎 ∈ ℝ) |
| 32 | rphalflt 12916 | . . . . . . . . . . 11 ⊢ (𝑎 ∈ ℝ+ → (𝑎 / 2) < 𝑎) | |
| 33 | 32 | ad2antlr 727 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / 2) < 𝑎) |
| 34 | 29, 31, 14, 33 | ltdiv1dd 12986 | . . . . . . . . 9 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / 2) / (𝑞↑𝑁)) < (𝑎 / (𝑞↑𝑁))) |
| 35 | 34 | anim1i 615 | . . . . . . . 8 ⊢ ((((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) ∧ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → (((𝑎 / 2) / (𝑞↑𝑁)) < (𝑎 / (𝑞↑𝑁)) ∧ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 36 | 35 | ex 412 | . . . . . . 7 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞))) → (((𝑎 / 2) / (𝑞↑𝑁)) < (𝑎 / (𝑞↑𝑁)) ∧ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 37 | ltletr 11200 | . . . . . . 7 ⊢ ((((𝑎 / 2) / (𝑞↑𝑁)) ∈ ℝ ∧ (𝑎 / (𝑞↑𝑁)) ∈ ℝ ∧ (abs‘(𝐴 − (𝑝 / 𝑞))) ∈ ℝ) → ((((𝑎 / 2) / (𝑞↑𝑁)) < (𝑎 / (𝑞↑𝑁)) ∧ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) | |
| 38 | 28, 36, 37 | sylsyld 61 | . . . . . 6 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞))) → ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 39 | 38 | orim2d 968 | . . . . 5 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 40 | 39 | ralimdvva 3179 | . . . 4 ⊢ ((𝜑 ∧ 𝑎 ∈ ℝ+) → (∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 41 | oveq1 7348 | . . . . . . . 8 ⊢ (𝑥 = (𝑎 / 2) → (𝑥 / (𝑞↑𝑁)) = ((𝑎 / 2) / (𝑞↑𝑁))) | |
| 42 | 41 | breq1d 5096 | . . . . . . 7 ⊢ (𝑥 = (𝑎 / 2) → ((𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))) ↔ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 43 | 42 | orbi2d 915 | . . . . . 6 ⊢ (𝑥 = (𝑎 / 2) → ((𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))) ↔ (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 44 | 43 | 2ralbidv 3196 | . . . . 5 ⊢ (𝑥 = (𝑎 / 2) → (∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))) ↔ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 45 | 44 | rspcev 3572 | . . . 4 ⊢ (((𝑎 / 2) ∈ ℝ+ ∧ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) → ∃𝑥 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 46 | 8, 40, 45 | syl6an 684 | . . 3 ⊢ ((𝜑 ∧ 𝑎 ∈ ℝ+) → (∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → ∃𝑥 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 47 | 46 | rexlimdva 3133 | . 2 ⊢ (𝜑 → (∃𝑎 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → ∃𝑥 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 48 | 6, 47 | mpd 15 | 1 ⊢ (𝜑 → ∃𝑥 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| Colors of variables: wff setvar class |
| Syntax hints: → wi 4 ∧ wa 395 ∨ wo 847 ∧ w3a 1086 = wceq 1541 ∈ wcel 2111 ∀wral 3047 ∃wrex 3056 class class class wbr 5086 ‘cfv 6476 (class class class)co 7341 ℝcr 11000 0cc0 11001 < clt 11141 ≤ cle 11142 − cmin 11339 / cdiv 11769 ℕcn 12120 2c2 12175 ℤcz 12463 ℚcq 12841 ℝ+crp 12885 ↑cexp 13963 abscabs 15136 Polycply 26111 degcdgr 26114 |
| This theorem was proved from axioms: ax-mp 5 ax-1 6 ax-2 7 ax-3 8 ax-gen 1796 ax-4 1810 ax-5 1911 ax-6 1968 ax-7 2009 ax-8 2113 ax-9 2121 ax-10 2144 ax-11 2160 ax-12 2180 ax-ext 2703 ax-rep 5212 ax-sep 5229 ax-nul 5239 ax-pow 5298 ax-pr 5365 ax-un 7663 ax-inf2 9526 ax-cnex 11057 ax-resscn 11058 ax-1cn 11059 ax-icn 11060 ax-addcl 11061 ax-addrcl 11062 ax-mulcl 11063 ax-mulrcl 11064 ax-mulcom 11065 ax-addass 11066 ax-mulass 11067 ax-distr 11068 ax-i2m1 11069 ax-1ne0 11070 ax-1rid 11071 ax-rnegex 11072 ax-rrecex 11073 ax-cnre 11074 ax-pre-lttri 11075 ax-pre-lttrn 11076 ax-pre-ltadd 11077 ax-pre-mulgt0 11078 ax-pre-sup 11079 ax-addf 11080 |
| This theorem depends on definitions: df-bi 207 df-an 396 df-or 848 df-3or 1087 df-3an 1088 df-tru 1544 df-fal 1554 df-ex 1781 df-nf 1785 df-sb 2068 df-mo 2535 df-eu 2564 df-clab 2710 df-cleq 2723 df-clel 2806 df-nfc 2881 df-ne 2929 df-nel 3033 df-ral 3048 df-rex 3057 df-rmo 3346 df-reu 3347 df-rab 3396 df-v 3438 df-sbc 3737 df-csb 3846 df-dif 3900 df-un 3902 df-in 3904 df-ss 3914 df-pss 3917 df-nul 4279 df-if 4471 df-pw 4547 df-sn 4572 df-pr 4574 df-tp 4576 df-op 4578 df-uni 4855 df-int 4893 df-iun 4938 df-iin 4939 df-br 5087 df-opab 5149 df-mpt 5168 df-tr 5194 df-id 5506 df-eprel 5511 df-po 5519 df-so 5520 df-fr 5564 df-se 5565 df-we 5566 df-xp 5617 df-rel 5618 df-cnv 5619 df-co 5620 df-dm 5621 df-rn 5622 df-res 5623 df-ima 5624 df-pred 6243 df-ord 6304 df-on 6305 df-lim 6306 df-suc 6307 df-iota 6432 df-fun 6478 df-fn 6479 df-f 6480 df-f1 6481 df-fo 6482 df-f1o 6483 df-fv 6484 df-isom 6485 df-riota 7298 df-ov 7344 df-oprab 7345 df-mpo 7346 df-of 7605 df-om 7792 df-1st 7916 df-2nd 7917 df-supp 8086 df-frecs 8206 df-wrecs 8237 df-recs 8286 df-rdg 8324 df-1o 8380 df-2o 8381 df-oadd 8384 df-er 8617 df-map 8747 df-pm 8748 df-ixp 8817 df-en 8865 df-dom 8866 df-sdom 8867 df-fin 8868 df-fsupp 9241 df-fi 9290 df-sup 9321 df-inf 9322 df-oi 9391 df-dju 9789 df-card 9827 df-pnf 11143 df-mnf 11144 df-xr 11145 df-ltxr 11146 df-le 11147 df-sub 11341 df-neg 11342 df-div 11770 df-nn 12121 df-2 12183 df-3 12184 df-4 12185 df-5 12186 df-6 12187 df-7 12188 df-8 12189 df-9 12190 df-n0 12377 df-xnn0 12450 df-z 12464 df-dec 12584 df-uz 12728 df-q 12842 df-rp 12886 df-xneg 13006 df-xadd 13007 df-xmul 13008 df-ioo 13244 df-ico 13246 df-icc 13247 df-fz 13403 df-fzo 13550 df-fl 13691 df-seq 13904 df-exp 13964 df-hash 14233 df-cj 15001 df-re 15002 df-im 15003 df-sqrt 15137 df-abs 15138 df-clim 15390 df-rlim 15391 df-sum 15589 df-struct 17053 df-sets 17070 df-slot 17088 df-ndx 17100 df-base 17116 df-ress 17137 df-plusg 17169 df-mulr 17170 df-starv 17171 df-sca 17172 df-vsca 17173 df-ip 17174 df-tset 17175 df-ple 17176 df-ds 17178 df-unif 17179 df-hom 17180 df-cco 17181 df-rest 17321 df-topn 17322 df-0g 17340 df-gsum 17341 df-topgen 17342 df-pt 17343 df-prds 17346 df-xrs 17401 df-qtop 17406 df-imas 17407 df-xps 17409 df-mre 17483 df-mrc 17484 df-acs 17486 df-mgm 18543 df-sgrp 18622 df-mnd 18638 df-submnd 18687 df-grp 18844 df-minusg 18845 df-mulg 18976 df-subg 19031 df-cntz 19224 df-cmn 19689 df-abl 19690 df-mgp 20054 df-rng 20066 df-ur 20095 df-ring 20148 df-cring 20149 df-subrng 20456 df-subrg 20480 df-psmet 21278 df-xmet 21279 df-met 21280 df-bl 21281 df-mopn 21282 df-fbas 21283 df-fg 21284 df-cnfld 21287 df-top 22804 df-topon 22821 df-topsp 22843 df-bases 22856 df-cld 22929 df-ntr 22930 df-cls 22931 df-nei 23008 df-lp 23046 df-perf 23047 df-cn 23137 df-cnp 23138 df-haus 23225 df-cmp 23297 df-tx 23472 df-hmeo 23665 df-fil 23756 df-fm 23848 df-flim 23849 df-flf 23850 df-xms 24230 df-ms 24231 df-tms 24232 df-cncf 24793 df-0p 25593 df-limc 25789 df-dv 25790 df-dvn 25791 df-cpn 25792 df-ply 26115 df-idp 26116 df-coe 26117 df-dgr 26118 df-quot 26221 |
| This theorem is referenced by: aaliou2 26270 |
| Copyright terms: Public domain | W3C validator |