Users' Mathboxes Mathbox for Alexander van der Vekens < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  MPE Home  >  Th. List  >   Mathboxes  >  usgrexmpl2nb2 Structured version   Visualization version   GIF version

Theorem usgrexmpl2nb2 49224
Description: The neighborhood of the third vertex of graph 𝐺. (Contributed by AV, 9-Aug-2025.)
Hypotheses
Ref Expression
usgrexmpl2.v 𝑉 = (0...5)
usgrexmpl2.e 𝐸 = ⟨“{0, 1} {1, 2} {2, 3} {3, 4} {4, 5} {0, 3} {0, 5}”⟩
usgrexmpl2.g 𝐺 = ⟨𝑉, 𝐸⟩
Assertion
Ref Expression
usgrexmpl2nb2 (𝐺 NeighbVtx 2) = {1, 3}

Proof of Theorem usgrexmpl2nb2
Dummy variable 𝑛 is distinct from all other variables.
StepHypRef Expression
1 2ex 12423 . . . . . 6 2 ∈ V
21tpid3 4730 . . . . 5 2 ∈ {0, 1, 2}
32orci 879 . . . 4 (2 ∈ {0, 1, 2} ∨ 2 ∈ {3, 4, 5})
4 elun 4152 . . . 4 (2 ∈ ({0, 1, 2} ∪ {3, 4, 5}) ↔ (2 ∈ {0, 1, 2} ∨ 2 ∈ {3, 4, 5}))
53, 4mpbir 234 . . 3 2 ∈ ({0, 1, 2} ∪ {3, 4, 5})
6 usgrexmpl2.v . . . 4 𝑉 = (0...5)
7 usgrexmpl2.e . . . 4 𝐸 = ⟨“{0, 1} {1, 2} {2, 3} {3, 4} {4, 5} {0, 3} {0, 5}”⟩
8 usgrexmpl2.g . . . 4 𝐺 = ⟨𝑉, 𝐸⟩
96, 7, 8usgrexmpl2nblem 49221 . . 3 (2 ∈ ({0, 1, 2} ∪ {3, 4, 5}) → (𝐺 NeighbVtx 2) = {𝑛 ∈ ({0, 1, 2} ∪ {3, 4, 5}) ∣ {2, 𝑛} ∈ ({{0, 3}} ∪ ({{0, 1}, {1, 2}, {2, 3}} ∪ {{3, 4}, {4, 5}, {0, 5}}))})
105, 9ax-mp 5 . 2 (𝐺 NeighbVtx 2) = {𝑛 ∈ ({0, 1, 2} ∪ {3, 4, 5}) ∣ {2, 𝑛} ∈ ({{0, 3}} ∪ ({{0, 1}, {1, 2}, {2, 3}} ∪ {{3, 4}, {4, 5}, {0, 5}}))}
11 1eltp012 12416 . . . . 5 1 ∈ {0, 1, 2}
1211orci 879 . . . 4 (1 ∈ {0, 1, 2} ∨ 1 ∈ {3, 4, 5})
13 elun 4152 . . . 4 (1 ∈ ({0, 1, 2} ∪ {3, 4, 5}) ↔ (1 ∈ {0, 1, 2} ∨ 1 ∈ {3, 4, 5}))
1412, 13mpbir 234 . . 3 1 ∈ ({0, 1, 2} ∪ {3, 4, 5})
15 3ex 12428 . . . . . 6 3 ∈ V
1615tpid1 4725 . . . . 5 3 ∈ {3, 4, 5}
1716olci 880 . . . 4 (3 ∈ {0, 1, 2} ∨ 3 ∈ {3, 4, 5})
18 elun 4152 . . . 4 (3 ∈ ({0, 1, 2} ∪ {3, 4, 5}) ↔ (3 ∈ {0, 1, 2} ∨ 3 ∈ {3, 4, 5}))
1917, 18mpbir 234 . . 3 3 ∈ ({0, 1, 2} ∪ {3, 4, 5})
20 prssi 4776 . . . . 5 ((1 ∈ ({0, 1, 2} ∪ {3, 4, 5}) ∧ 3 ∈ ({0, 1, 2} ∪ {3, 4, 5})) → {1, 3} ⊆ ({0, 1, 2} ∪ {3, 4, 5}))
21 vex 3454 . . . . . . . . . . . . . 14 𝑛 ∈ V
221, 21pm3.2i 476 . . . . . . . . . . . . 13 (2 ∈ V ∧ 𝑛 ∈ V)
23 c0ex 11303 . . . . . . . . . . . . . 14 0 ∈ V
24 1ex 11306 . . . . . . . . . . . . . 14 1 ∈ V
2523, 24pm3.2i 476 . . . . . . . . . . . . 13 (0 ∈ V ∧ 1 ∈ V)
2622, 25pm3.2i 476 . . . . . . . . . . . 12 ((2 ∈ V ∧ 𝑛 ∈ V) ∧ (0 ∈ V ∧ 1 ∈ V))
27 2ne0 12452 . . . . . . . . . . . . . 14 2 ≠ 0
28 1ne2 12556 . . . . . . . . . . . . . . 15 1 ≠ 2
2928necomi 3009 . . . . . . . . . . . . . 14 2 ≠ 1
3027, 29pm3.2i 476 . . . . . . . . . . . . 13 (2 ≠ 0 ∧ 2 ≠ 1)
3130orci 879 . . . . . . . . . . . 12 ((2 ≠ 0 ∧ 2 ≠ 1) ∨ (𝑛 ≠ 0 ∧ 𝑛 ≠ 1))
32 prneimg 4808 . . . . . . . . . . . 12 (((2 ∈ V ∧ 𝑛 ∈ V) ∧ (0 ∈ V ∧ 1 ∈ V)) → (((2 ≠ 0 ∧ 2 ≠ 1) ∨ (𝑛 ≠ 0 ∧ 𝑛 ≠ 1)) → {2, 𝑛} ≠ {0, 1}))
3326, 31, 32mp2 9 . . . . . . . . . . 11 {2, 𝑛} ≠ {0, 1}
3433neii 2957 . . . . . . . . . 10 ¬ {2, 𝑛} = {0, 1}
3534biorfi 952 . . . . . . . . 9 (({2, 𝑛} = {1, 2} ∨ {2, 𝑛} = {2, 3}) ↔ ({2, 𝑛} = {0, 1} ∨ ({2, 𝑛} = {1, 2} ∨ {2, 𝑛} = {2, 3})))
36 prcom 4689 . . . . . . . . . . . 12 {1, 2} = {2, 1}
3736eqeq2i 2773 . . . . . . . . . . 11 ({2, 𝑛} = {1, 2} ↔ {2, 𝑛} = {2, 1})
3821a1i 11 . . . . . . . . . . . . 13 (1 ∈ V → 𝑛 ∈ V)
39 id 23 . . . . . . . . . . . . 13 (1 ∈ V → 1 ∈ V)
4038, 39preq2b 4801 . . . . . . . . . . . 12 (1 ∈ V → ({2, 𝑛} = {2, 1} ↔ 𝑛 = 1))
4124, 40ax-mp 5 . . . . . . . . . . 11 ({2, 𝑛} = {2, 1} ↔ 𝑛 = 1)
4237, 41bitr2i 279 . . . . . . . . . 10 (𝑛 = 1 ↔ {2, 𝑛} = {1, 2})
43 3nn0 12627 . . . . . . . . . . 11 3 ∈ ℕ0
4421a1i 11 . . . . . . . . . . . . 13 (3 ∈ ℕ0 → 𝑛 ∈ V)
45 id 23 . . . . . . . . . . . . 13 (3 ∈ ℕ0 → 3 ∈ ℕ0)
4644, 45preq2b 4801 . . . . . . . . . . . 12 (3 ∈ ℕ0 → ({2, 𝑛} = {2, 3} ↔ 𝑛 = 3))
4746bicomd 226 . . . . . . . . . . 11 (3 ∈ ℕ0 → (𝑛 = 3 ↔ {2, 𝑛} = {2, 3}))
4843, 47ax-mp 5 . . . . . . . . . 10 (𝑛 = 3 ↔ {2, 𝑛} = {2, 3})
4942, 48orbi12i 928 . . . . . . . . 9 ((𝑛 = 1 ∨ 𝑛 = 3) ↔ ({2, 𝑛} = {1, 2} ∨ {2, 𝑛} = {2, 3}))
50 3orass 1106 . . . . . . . . 9 (({2, 𝑛} = {0, 1} ∨ {2, 𝑛} = {1, 2} ∨ {2, 𝑛} = {2, 3}) ↔ ({2, 𝑛} = {0, 1} ∨ ({2, 𝑛} = {1, 2} ∨ {2, 𝑛} = {2, 3})))
5135, 49, 503bitr4i 306 . . . . . . . 8 ((𝑛 = 1 ∨ 𝑛 = 3) ↔ ({2, 𝑛} = {0, 1} ∨ {2, 𝑛} = {1, 2} ∨ {2, 𝑛} = {2, 3}))
52 2re 12420 . . . . . . . . . . . . . 14 2 ∈ ℝ
5352, 21pm3.2i 476 . . . . . . . . . . . . 13 (2 ∈ ℝ ∧ 𝑛 ∈ V)
54 4nn0 12628 . . . . . . . . . . . . . 14 4 ∈ ℕ0
5515, 54pm3.2i 476 . . . . . . . . . . . . 13 (3 ∈ V ∧ 4 ∈ ℕ0)
5653, 55pm3.2i 476 . . . . . . . . . . . 12 ((2 ∈ ℝ ∧ 𝑛 ∈ V) ∧ (3 ∈ V ∧ 4 ∈ ℕ0))
57 2lt3 12519 . . . . . . . . . . . . . . 15 2 < 3
5852, 57ltneii 11426 . . . . . . . . . . . . . 14 2 ≠ 3
59 2lt4 12523 . . . . . . . . . . . . . . 15 2 < 4
6052, 59ltneii 11426 . . . . . . . . . . . . . 14 2 ≠ 4
6158, 60pm3.2i 476 . . . . . . . . . . . . 13 (2 ≠ 3 ∧ 2 ≠ 4)
6261orci 879 . . . . . . . . . . . 12 ((2 ≠ 3 ∧ 2 ≠ 4) ∨ (𝑛 ≠ 3 ∧ 𝑛 ≠ 4))
63 prneimg 4808 . . . . . . . . . . . 12 (((2 ∈ ℝ ∧ 𝑛 ∈ V) ∧ (3 ∈ V ∧ 4 ∈ ℕ0)) → (((2 ≠ 3 ∧ 2 ≠ 4) ∨ (𝑛 ≠ 3 ∧ 𝑛 ≠ 4)) → {2, 𝑛} ≠ {3, 4}))
6456, 62, 63mp2 9 . . . . . . . . . . 11 {2, 𝑛} ≠ {3, 4}
6564neii 2957 . . . . . . . . . 10 ¬ {2, 𝑛} = {3, 4}
66 5nn0 12629 . . . . . . . . . . . . . 14 5 ∈ ℕ0
6754, 66pm3.2i 476 . . . . . . . . . . . . 13 (4 ∈ ℕ0 ∧ 5 ∈ ℕ0)
6853, 67pm3.2i 476 . . . . . . . . . . . 12 ((2 ∈ ℝ ∧ 𝑛 ∈ V) ∧ (4 ∈ ℕ0 ∧ 5 ∈ ℕ0))
69 2lt5 12527 . . . . . . . . . . . . . . 15 2 < 5
7052, 69ltneii 11426 . . . . . . . . . . . . . 14 2 ≠ 5
7160, 70pm3.2i 476 . . . . . . . . . . . . 13 (2 ≠ 4 ∧ 2 ≠ 5)
7271orci 879 . . . . . . . . . . . 12 ((2 ≠ 4 ∧ 2 ≠ 5) ∨ (𝑛 ≠ 4 ∧ 𝑛 ≠ 5))
73 prneimg 4808 . . . . . . . . . . . 12 (((2 ∈ ℝ ∧ 𝑛 ∈ V) ∧ (4 ∈ ℕ0 ∧ 5 ∈ ℕ0)) → (((2 ≠ 4 ∧ 2 ≠ 5) ∨ (𝑛 ≠ 4 ∧ 𝑛 ≠ 5)) → {2, 𝑛} ≠ {4, 5}))
7468, 72, 73mp2 9 . . . . . . . . . . 11 {2, 𝑛} ≠ {4, 5}
7574neii 2957 . . . . . . . . . 10 ¬ {2, 𝑛} = {4, 5}
7623, 66pm3.2i 476 . . . . . . . . . . . . 13 (0 ∈ V ∧ 5 ∈ ℕ0)
7753, 76pm3.2i 476 . . . . . . . . . . . 12 ((2 ∈ ℝ ∧ 𝑛 ∈ V) ∧ (0 ∈ V ∧ 5 ∈ ℕ0))
7827, 70pm3.2i 476 . . . . . . . . . . . . 13 (2 ≠ 0 ∧ 2 ≠ 5)
7978orci 879 . . . . . . . . . . . 12 ((2 ≠ 0 ∧ 2 ≠ 5) ∨ (𝑛 ≠ 0 ∧ 𝑛 ≠ 5))
80 prneimg 4808 . . . . . . . . . . . 12 (((2 ∈ ℝ ∧ 𝑛 ∈ V) ∧ (0 ∈ V ∧ 5 ∈ ℕ0)) → (((2 ≠ 0 ∧ 2 ≠ 5) ∨ (𝑛 ≠ 0 ∧ 𝑛 ≠ 5)) → {2, 𝑛} ≠ {0, 5}))
8177, 79, 80mp2 9 . . . . . . . . . . 11 {2, 𝑛} ≠ {0, 5}
8281neii 2957 . . . . . . . . . 10 ¬ {2, 𝑛} = {0, 5}
8365, 75, 823pm3.2ni 1518 . . . . . . . . 9 ¬ ({2, 𝑛} = {3, 4} ∨ {2, 𝑛} = {4, 5} ∨ {2, 𝑛} = {0, 5})
8483biorfri 953 . . . . . . . 8 (({2, 𝑛} = {0, 1} ∨ {2, 𝑛} = {1, 2} ∨ {2, 𝑛} = {2, 3}) ↔ (({2, 𝑛} = {0, 1} ∨ {2, 𝑛} = {1, 2} ∨ {2, 𝑛} = {2, 3}) ∨ ({2, 𝑛} = {3, 4} ∨ {2, 𝑛} = {4, 5} ∨ {2, 𝑛} = {0, 5})))
8523, 15pm3.2i 476 . . . . . . . . . . . 12 (0 ∈ V ∧ 3 ∈ V)
8653, 85pm3.2i 476 . . . . . . . . . . 11 ((2 ∈ ℝ ∧ 𝑛 ∈ V) ∧ (0 ∈ V ∧ 3 ∈ V))
8727, 58pm3.2i 476 . . . . . . . . . . . 12 (2 ≠ 0 ∧ 2 ≠ 3)
8887orci 879 . . . . . . . . . . 11 ((2 ≠ 0 ∧ 2 ≠ 3) ∨ (𝑛 ≠ 0 ∧ 𝑛 ≠ 3))
89 prneimg 4808 . . . . . . . . . . 11 (((2 ∈ ℝ ∧ 𝑛 ∈ V) ∧ (0 ∈ V ∧ 3 ∈ V)) → (((2 ≠ 0 ∧ 2 ≠ 3) ∨ (𝑛 ≠ 0 ∧ 𝑛 ≠ 3)) → {2, 𝑛} ≠ {0, 3}))
9086, 88, 89mp2 9 . . . . . . . . . 10 {2, 𝑛} ≠ {0, 3}
9190neii 2957 . . . . . . . . 9 ¬ {2, 𝑛} = {0, 3}
9291biorfi 952 . . . . . . . 8 ((({2, 𝑛} = {0, 1} ∨ {2, 𝑛} = {1, 2} ∨ {2, 𝑛} = {2, 3}) ∨ ({2, 𝑛} = {3, 4} ∨ {2, 𝑛} = {4, 5} ∨ {2, 𝑛} = {0, 5})) ↔ ({2, 𝑛} = {0, 3} ∨ (({2, 𝑛} = {0, 1} ∨ {2, 𝑛} = {1, 2} ∨ {2, 𝑛} = {2, 3}) ∨ ({2, 𝑛} = {3, 4} ∨ {2, 𝑛} = {4, 5} ∨ {2, 𝑛} = {0, 5}))))
9351, 84, 923bitri 300 . . . . . . 7 ((𝑛 = 1 ∨ 𝑛 = 3) ↔ ({2, 𝑛} = {0, 3} ∨ (({2, 𝑛} = {0, 1} ∨ {2, 𝑛} = {1, 2} ∨ {2, 𝑛} = {2, 3}) ∨ ({2, 𝑛} = {3, 4} ∨ {2, 𝑛} = {4, 5} ∨ {2, 𝑛} = {0, 5}))))
9421elpr 4605 . . . . . . 7 (𝑛 ∈ {1, 3} ↔ (𝑛 = 1 ∨ 𝑛 = 3))
95 prex 5395 . . . . . . . 8 {2, 𝑛} ∈ V
96 el7g 4647 . . . . . . . 8 ({2, 𝑛} ∈ V → ({2, 𝑛} ∈ ({{0, 3}} ∪ ({{0, 1}, {1, 2}, {2, 3}} ∪ {{3, 4}, {4, 5}, {0, 5}})) ↔ ({2, 𝑛} = {0, 3} ∨ (({2, 𝑛} = {0, 1} ∨ {2, 𝑛} = {1, 2} ∨ {2, 𝑛} = {2, 3}) ∨ ({2, 𝑛} = {3, 4} ∨ {2, 𝑛} = {4, 5} ∨ {2, 𝑛} = {0, 5})))))
9795, 96ax-mp 5 . . . . . . 7 ({2, 𝑛} ∈ ({{0, 3}} ∪ ({{0, 1}, {1, 2}, {2, 3}} ∪ {{3, 4}, {4, 5}, {0, 5}})) ↔ ({2, 𝑛} = {0, 3} ∨ (({2, 𝑛} = {0, 1} ∨ {2, 𝑛} = {1, 2} ∨ {2, 𝑛} = {2, 3}) ∨ ({2, 𝑛} = {3, 4} ∨ {2, 𝑛} = {4, 5} ∨ {2, 𝑛} = {0, 5}))))
9893, 94, 973bitr4i 306 . . . . . 6 (𝑛 ∈ {1, 3} ↔ {2, 𝑛} ∈ ({{0, 3}} ∪ ({{0, 1}, {1, 2}, {2, 3}} ∪ {{3, 4}, {4, 5}, {0, 5}})))
9998a1i 11 . . . . 5 (((1 ∈ ({0, 1, 2} ∪ {3, 4, 5}) ∧ 3 ∈ ({0, 1, 2} ∪ {3, 4, 5})) ∧ 𝑛 ∈ ({0, 1, 2} ∪ {3, 4, 5})) → (𝑛 ∈ {1, 3} ↔ {2, 𝑛} ∈ ({{0, 3}} ∪ ({{0, 1}, {1, 2}, {2, 3}} ∪ {{3, 4}, {4, 5}, {0, 5}}))))
10020, 99eqrrabd 4011 . . . 4 ((1 ∈ ({0, 1, 2} ∪ {3, 4, 5}) ∧ 3 ∈ ({0, 1, 2} ∪ {3, 4, 5})) → {1, 3} = {𝑛 ∈ ({0, 1, 2} ∪ {3, 4, 5}) ∣ {2, 𝑛} ∈ ({{0, 3}} ∪ ({{0, 1}, {1, 2}, {2, 3}} ∪ {{3, 4}, {4, 5}, {0, 5}}))})
101100eqcomd 2766 . . 3 ((1 ∈ ({0, 1, 2} ∪ {3, 4, 5}) ∧ 3 ∈ ({0, 1, 2} ∪ {3, 4, 5})) → {𝑛 ∈ ({0, 1, 2} ∪ {3, 4, 5}) ∣ {2, 𝑛} ∈ ({{0, 3}} ∪ ({{0, 1}, {1, 2}, {2, 3}} ∪ {{3, 4}, {4, 5}, {0, 5}}))} = {1, 3})
10214, 19, 101mp2an 705 . 2 {𝑛 ∈ ({0, 1, 2} ∪ {3, 4, 5}) ∣ {2, 𝑛} ∈ ({{0, 3}} ∪ ({{0, 1}, {1, 2}, {2, 3}} ∪ {{3, 4}, {4, 5}, {0, 5}}))} = {1, 3}
10310, 102eqtri 2783 1 (𝐺 NeighbVtx 2) = {1, 3}
Colors of variables:    wff setvar class
This proof depends on syntax axioms:   ↔ wb 209   ∧ wa 401   ∨ wo 861   ∨ w3o 1102   = wceq 1569   ∈ wcel 2144   ≠ wne 2955  {crab 3412  Vcvv 3450   ∪ cun 4149  {csn 4584  {cpr 4586  {ctp 4588  ⟨cop 4834  (class class class)co 7420  ℝcr 11202  0cc0 11203  1c1 11204  2c2 12400  3c3 12401  4c4 12402  5c5 12403  ℕ0cn0 12609  ...cfz 13642  ⟨“cs7 15001   NeighbVtx cnbgr 29918
This proof depends on axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1827  ax-4 1841  ax-5 1942  ax-6 1999  ax-7 2040  ax-8 2146  ax-9 2154  ax-10 2177  ax-11 2193  ax-12 2212  ax-ext 2732  ax-rep 5231  ax-sep 5248  ax-nul 5259  ax-pow 5326  ax-pr 5390  ax-un 7751  ax-cnex 11259  ax-resscn 11260  ax-1cn 11261  ax-icn 11262  ax-addcl 11263  ax-addrcl 11264  ax-mulcl 11265  ax-mulrcl 11266  ax-mulcom 11267  ax-addass 11268  ax-mulass 11269  ax-distr 11270  ax-i2m1 11271  ax-1ne0 11272  ax-1rid 11273  ax-rnegex 11274  ax-rrecex 11275  ax-cnre 11276  ax-pre-lttri 11277  ax-pre-lttrn 11278  ax-pre-ltadd 11279  ax-pre-mulgt0 11280
This proof depends on definitions:  df-bi 210  df-an 402  df-or 862  df-3or 1104  df-3an 1105  df-tru 1572  df-fal 1582  df-ex 1812  df-nf 1816  df-sb 2099  df-mo 2564  df-eu 2594  df-clab 2739  df-cleq 2752  df-clel 2835  df-nfc 2909  df-ne 2956  df-nel 3062  df-ral 3077  df-rex 3087  df-reu 3366  df-rab 3413  df-v 3452  df-sbc 3739  df-csb 3847  df-ss 3896  df-pss 4014  df-dif 4047  df-in 4091  df-un 4151  df-nul 4279  df-if 4482  df-pw 4558  df-sn 4585  df-pr 4587  df-tp 4589  df-op 4835  df-uni 4867  df-int 4907  df-iun 4952  df-br 5103  df-opab 5167  df-mpt 5186  df-tr 5212  df-id 5545  df-eprel 5550  df-po 5558  df-so 5559  df-fr 5603  df-we 5605  df-xp 5656  df-rel 5657  df-cnv 5658  df-co 5659  df-dm 5660  df-rn 5661  df-res 5662  df-ima 5663  df-pred 6304  df-ord 6365  df-on 6366  df-lim 6367  df-suc 6368  df-iota 6494  df-fun 6540  df-fn 6541  df-f 6542  df-f1 6543  df-fo 6544  df-f1o 6545  df-fv 6546  df-riota 7377  df-ov 7423  df-oprab 7424  df-mpo 7425  df-om 7878  df-1st 8001  df-2nd 8002  df-frecs 8302  df-wrecs 8333  df-recs 8382  df-rdg 8421  df-1o 8479  df-2o 8480  df-oadd 8483  df-er 8720  df-en 8977  df-dom 8978  df-sdom 8979  df-fin 8980  df-dju 9985  df-card 10023  df-pnf 11348  df-mnf 11349  df-xr 11350  df-ltxr 11351  df-le 11352  df-sub 11546  df-neg 11547  df-nn 12339  df-2 12408  df-3 12409  df-4 12410  df-5 12411  df-6 12412  df-7 12413  df-n0 12610  df-xnn0 12683  df-z 12697  df-uz 12969  df-fz 13643  df-fzo 13792  df-hash 14478  df-word 14662  df-concat 14719  df-s1 14746  df-s2 15003  df-s3 15004  df-s4 15005  df-s5 15006  df-s6 15007  df-s7 15008  df-vtx 29581  df-iedg 29582  df-edg 29631  df-upgr 29665  df-umgr 29666  df-usgr 29737  df-nbgr 29919
This theorem is used by:  usgrexmpl2trifr  49228
  Copyright terms: Public domain W3C validator