| 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 26261 | . 2 ⊢ (𝜑 → ∃𝑎 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 7 | rphalfcl 12940 | . . . . 5 ⊢ (𝑎 ∈ ℝ+ → (𝑎 / 2) ∈ ℝ+) | |
| 8 | 7 | adantl 481 | . . . 4 ⊢ ((𝜑 ∧ 𝑎 ∈ ℝ+) → (𝑎 / 2) ∈ ℝ+) |
| 9 | 7 | ad2antlr 727 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / 2) ∈ ℝ+) |
| 10 | nnrp 12923 | . . . . . . . . . . . 12 ⊢ (𝑞 ∈ ℕ → 𝑞 ∈ ℝ+) | |
| 11 | 10 | ad2antll 729 | . . . . . . . . . . 11 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → 𝑞 ∈ ℝ+) |
| 12 | 3 | nnzd 12516 | . . . . . . . . . . . 12 ⊢ (𝜑 → 𝑁 ∈ ℤ) |
| 13 | 12 | ad2antrr 726 | . . . . . . . . . . 11 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → 𝑁 ∈ ℤ) |
| 14 | 11, 13 | rpexpcld 14172 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑞↑𝑁) ∈ ℝ+) |
| 15 | 9, 14 | rpdivcld 12972 | . . . . . . . . 9 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / 2) / (𝑞↑𝑁)) ∈ ℝ+) |
| 16 | 15 | rpred 12955 | . . . . . . . 8 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / 2) / (𝑞↑𝑁)) ∈ ℝ) |
| 17 | simplr 768 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → 𝑎 ∈ ℝ+) | |
| 18 | 17, 14 | rpdivcld 12972 | . . . . . . . . 9 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / (𝑞↑𝑁)) ∈ ℝ+) |
| 19 | 18 | rpred 12955 | . . . . . . . 8 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / (𝑞↑𝑁)) ∈ ℝ) |
| 20 | 4 | adantr 480 | . . . . . . . . . . 11 ⊢ ((𝜑 ∧ 𝑎 ∈ ℝ+) → 𝐴 ∈ ℝ) |
| 21 | znq 12871 | . . . . . . . . . . . 12 ⊢ ((𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ) → (𝑝 / 𝑞) ∈ ℚ) | |
| 22 | qre 12872 | . . . . . . . . . . . 12 ⊢ ((𝑝 / 𝑞) ∈ ℚ → (𝑝 / 𝑞) ∈ ℝ) | |
| 23 | 21, 22 | syl 17 | . . . . . . . . . . 11 ⊢ ((𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ) → (𝑝 / 𝑞) ∈ ℝ) |
| 24 | resubcl 11446 | . . . . . . . . . . 11 ⊢ ((𝐴 ∈ ℝ ∧ (𝑝 / 𝑞) ∈ ℝ) → (𝐴 − (𝑝 / 𝑞)) ∈ ℝ) | |
| 25 | 20, 23, 24 | syl2an 596 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝐴 − (𝑝 / 𝑞)) ∈ ℝ) |
| 26 | 25 | recnd 11162 | . . . . . . . . 9 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝐴 − (𝑝 / 𝑞)) ∈ ℂ) |
| 27 | 26 | abscld 15364 | . . . . . . . 8 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (abs‘(𝐴 − (𝑝 / 𝑞))) ∈ ℝ) |
| 28 | 16, 19, 27 | 3jca 1128 | . . . . . . 7 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (((𝑎 / 2) / (𝑞↑𝑁)) ∈ ℝ ∧ (𝑎 / (𝑞↑𝑁)) ∈ ℝ ∧ (abs‘(𝐴 − (𝑝 / 𝑞))) ∈ ℝ)) |
| 29 | 9 | rpred 12955 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / 2) ∈ ℝ) |
| 30 | rpre 12920 | . . . . . . . . . . 11 ⊢ (𝑎 ∈ ℝ+ → 𝑎 ∈ ℝ) | |
| 31 | 30 | ad2antlr 727 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → 𝑎 ∈ ℝ) |
| 32 | rphalflt 12942 | . . . . . . . . . . 11 ⊢ (𝑎 ∈ ℝ+ → (𝑎 / 2) < 𝑎) | |
| 33 | 32 | ad2antlr 727 | . . . . . . . . . 10 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → (𝑎 / 2) < 𝑎) |
| 34 | 29, 31, 14, 33 | ltdiv1dd 13012 | . . . . . . . . 9 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / 2) / (𝑞↑𝑁)) < (𝑎 / (𝑞↑𝑁))) |
| 35 | 34 | anim1i 615 | . . . . . . . 8 ⊢ ((((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) ∧ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → (((𝑎 / 2) / (𝑞↑𝑁)) < (𝑎 / (𝑞↑𝑁)) ∧ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 36 | 35 | ex 412 | . . . . . . 7 ⊢ (((𝜑 ∧ 𝑎 ∈ ℝ+) ∧ (𝑝 ∈ ℤ ∧ 𝑞 ∈ ℕ)) → ((𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞))) → (((𝑎 / 2) / (𝑞↑𝑁)) < (𝑎 / (𝑞↑𝑁)) ∧ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 37 | ltletr 11226 | . . . . . . 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 3176 | . . . 4 ⊢ ((𝜑 ∧ 𝑎 ∈ ℝ+) → (∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 41 | oveq1 7360 | . . . . . . . 8 ⊢ (𝑥 = (𝑎 / 2) → (𝑥 / (𝑞↑𝑁)) = ((𝑎 / 2) / (𝑞↑𝑁))) | |
| 42 | 41 | breq1d 5105 | . . . . . . 7 ⊢ (𝑥 = (𝑎 / 2) → ((𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))) ↔ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 43 | 42 | orbi2d 915 | . . . . . 6 ⊢ (𝑥 = (𝑎 / 2) → ((𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))) ↔ (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 44 | 43 | 2ralbidv 3193 | . . . . 5 ⊢ (𝑥 = (𝑎 / 2) → (∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))) ↔ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 45 | 44 | rspcev 3579 | . . . 4 ⊢ (((𝑎 / 2) ∈ ℝ+ ∧ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ ((𝑎 / 2) / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) → ∃𝑥 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞))))) |
| 46 | 8, 40, 45 | syl6an 684 | . . 3 ⊢ ((𝜑 ∧ 𝑎 ∈ ℝ+) → (∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑎 / (𝑞↑𝑁)) ≤ (abs‘(𝐴 − (𝑝 / 𝑞)))) → ∃𝑥 ∈ ℝ+ ∀𝑝 ∈ ℤ ∀𝑞 ∈ ℕ (𝐴 = (𝑝 / 𝑞) ∨ (𝑥 / (𝑞↑𝑁)) < (abs‘(𝐴 − (𝑝 / 𝑞)))))) |
| 47 | 46 | rexlimdva 3130 | . 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 1540 ∈ wcel 2109 ∀wral 3044 ∃wrex 3053 class class class wbr 5095 ‘cfv 6486 (class class class)co 7353 ℝcr 11027 0cc0 11028 < clt 11168 ≤ cle 11169 − cmin 11365 / cdiv 11795 ℕcn 12146 2c2 12201 ℤcz 12489 ℚcq 12867 ℝ+crp 12911 ↑cexp 13986 abscabs 15159 Polycply 26105 degcdgr 26108 |
| This theorem was proved from axioms: ax-mp 5 ax-1 6 ax-2 7 ax-3 8 ax-gen 1795 ax-4 1809 ax-5 1910 ax-6 1967 ax-7 2008 ax-8 2111 ax-9 2119 ax-10 2142 ax-11 2158 ax-12 2178 ax-ext 2701 ax-rep 5221 ax-sep 5238 ax-nul 5248 ax-pow 5307 ax-pr 5374 ax-un 7675 ax-inf2 9556 ax-cnex 11084 ax-resscn 11085 ax-1cn 11086 ax-icn 11087 ax-addcl 11088 ax-addrcl 11089 ax-mulcl 11090 ax-mulrcl 11091 ax-mulcom 11092 ax-addass 11093 ax-mulass 11094 ax-distr 11095 ax-i2m1 11096 ax-1ne0 11097 ax-1rid 11098 ax-rnegex 11099 ax-rrecex 11100 ax-cnre 11101 ax-pre-lttri 11102 ax-pre-lttrn 11103 ax-pre-ltadd 11104 ax-pre-mulgt0 11105 ax-pre-sup 11106 ax-addf 11107 |
| This theorem depends on definitions: df-bi 207 df-an 396 df-or 848 df-3or 1087 df-3an 1088 df-tru 1543 df-fal 1553 df-ex 1780 df-nf 1784 df-sb 2066 df-mo 2533 df-eu 2562 df-clab 2708 df-cleq 2721 df-clel 2803 df-nfc 2878 df-ne 2926 df-nel 3030 df-ral 3045 df-rex 3054 df-rmo 3345 df-reu 3346 df-rab 3397 df-v 3440 df-sbc 3745 df-csb 3854 df-dif 3908 df-un 3910 df-in 3912 df-ss 3922 df-pss 3925 df-nul 4287 df-if 4479 df-pw 4555 df-sn 4580 df-pr 4582 df-tp 4584 df-op 4586 df-uni 4862 df-int 4900 df-iun 4946 df-iin 4947 df-br 5096 df-opab 5158 df-mpt 5177 df-tr 5203 df-id 5518 df-eprel 5523 df-po 5531 df-so 5532 df-fr 5576 df-se 5577 df-we 5578 df-xp 5629 df-rel 5630 df-cnv 5631 df-co 5632 df-dm 5633 df-rn 5634 df-res 5635 df-ima 5636 df-pred 6253 df-ord 6314 df-on 6315 df-lim 6316 df-suc 6317 df-iota 6442 df-fun 6488 df-fn 6489 df-f 6490 df-f1 6491 df-fo 6492 df-f1o 6493 df-fv 6494 df-isom 6495 df-riota 7310 df-ov 7356 df-oprab 7357 df-mpo 7358 df-of 7617 df-om 7807 df-1st 7931 df-2nd 7932 df-supp 8101 df-frecs 8221 df-wrecs 8252 df-recs 8301 df-rdg 8339 df-1o 8395 df-2o 8396 df-oadd 8399 df-er 8632 df-map 8762 df-pm 8763 df-ixp 8832 df-en 8880 df-dom 8881 df-sdom 8882 df-fin 8883 df-fsupp 9271 df-fi 9320 df-sup 9351 df-inf 9352 df-oi 9421 df-dju 9816 df-card 9854 df-pnf 11170 df-mnf 11171 df-xr 11172 df-ltxr 11173 df-le 11174 df-sub 11367 df-neg 11368 df-div 11796 df-nn 12147 df-2 12209 df-3 12210 df-4 12211 df-5 12212 df-6 12213 df-7 12214 df-8 12215 df-9 12216 df-n0 12403 df-xnn0 12476 df-z 12490 df-dec 12610 df-uz 12754 df-q 12868 df-rp 12912 df-xneg 13032 df-xadd 13033 df-xmul 13034 df-ioo 13270 df-ico 13272 df-icc 13273 df-fz 13429 df-fzo 13576 df-fl 13714 df-seq 13927 df-exp 13987 df-hash 14256 df-cj 15024 df-re 15025 df-im 15026 df-sqrt 15160 df-abs 15161 df-clim 15413 df-rlim 15414 df-sum 15612 df-struct 17076 df-sets 17093 df-slot 17111 df-ndx 17123 df-base 17139 df-ress 17160 df-plusg 17192 df-mulr 17193 df-starv 17194 df-sca 17195 df-vsca 17196 df-ip 17197 df-tset 17198 df-ple 17199 df-ds 17201 df-unif 17202 df-hom 17203 df-cco 17204 df-rest 17344 df-topn 17345 df-0g 17363 df-gsum 17364 df-topgen 17365 df-pt 17366 df-prds 17369 df-xrs 17424 df-qtop 17429 df-imas 17430 df-xps 17432 df-mre 17506 df-mrc 17507 df-acs 17509 df-mgm 18532 df-sgrp 18611 df-mnd 18627 df-submnd 18676 df-grp 18833 df-minusg 18834 df-mulg 18965 df-subg 19020 df-cntz 19214 df-cmn 19679 df-abl 19680 df-mgp 20044 df-rng 20056 df-ur 20085 df-ring 20138 df-cring 20139 df-subrng 20449 df-subrg 20473 df-psmet 21271 df-xmet 21272 df-met 21273 df-bl 21274 df-mopn 21275 df-fbas 21276 df-fg 21277 df-cnfld 21280 df-top 22797 df-topon 22814 df-topsp 22836 df-bases 22849 df-cld 22922 df-ntr 22923 df-cls 22924 df-nei 23001 df-lp 23039 df-perf 23040 df-cn 23130 df-cnp 23131 df-haus 23218 df-cmp 23290 df-tx 23465 df-hmeo 23658 df-fil 23749 df-fm 23841 df-flim 23842 df-flf 23843 df-xms 24224 df-ms 24225 df-tms 24226 df-cncf 24787 df-0p 25587 df-limc 25783 df-dv 25784 df-dvn 25785 df-cpn 25786 df-ply 26109 df-idp 26110 df-coe 26111 df-dgr 26112 df-quot 26215 |
| This theorem is referenced by: aaliou2 26264 |
| Copyright terms: Public domain | W3C validator |