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 49207
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 12421 . . . . . 6 2 ∈ V
21tpid3 4733 . . . . 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 49204 . . 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 12414 . . . . 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 12426 . . . . . 6 3 ∈ V
1615tpid1 4728 . . . . 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 4781 . . . . 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 11301 . . . . . . . . . . . . . 14 0 ∈ V
24 1ex 11304 . . . . . . . . . . . . . 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 12450 . . . . . . . . . . . . . 14 2 ≠ 0
28 1ne2 12554 . . . . . . . . . . . . . . 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 4813 . . . . . . . . . . . 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 4692 . . . . . . . . . . . 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 4806 . . . . . . . . . . . 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 12625 . . . . . . . . . . 11 3 ∈ ℕ0
4421a1i 11 . . . . . . . . . . . . 13 (3 ∈ ℕ0 → 𝑛 ∈ V)
45 id 23 . . . . . . . . . . . . 13 (3 ∈ ℕ0 → 3 ∈ ℕ0)
4644, 45preq2b 4806 . . . . . . . . . . . 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 12418 . . . . . . . . . . . . . 14 2 ∈ ℝ
5352, 21pm3.2i 476 . . . . . . . . . . . . 13 (2 ∈ ℝ ∧ 𝑛 ∈ V)
54 4nn0 12626 . . . . . . . . . . . . . 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 12517 . . . . . . . . . . . . . . 15 2 < 3
5852, 57ltneii 11424 . . . . . . . . . . . . . 14 2 ≠ 3
59 2lt4 12521 . . . . . . . . . . . . . . 15 2 < 4
6052, 59ltneii 11424 . . . . . . . . . . . . . 14 2 ≠ 4
6158, 60pm3.2i 476 . . . . . . . . . . . . 13 (2 ≠ 3 ∧ 2 ≠ 4)
6261orci 879 . . . . . . . . . . . 12 ((2 ≠ 3 ∧ 2 ≠ 4) ∨ (𝑛 ≠ 3 ∧ 𝑛 ≠ 4))
63 prneimg 4813 . . . . . . . . . . . 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 12627 . . . . . . . . . . . . . 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 12525 . . . . . . . . . . . . . . 15 2 < 5
7052, 69ltneii 11424 . . . . . . . . . . . . . 14 2 ≠ 5
7160, 70pm3.2i 476 . . . . . . . . . . . . 13 (2 ≠ 4 ∧ 2 ≠ 5)
7271orci 879 . . . . . . . . . . . 12 ((2 ≠ 4 ∧ 2 ≠ 5) ∨ (𝑛 ≠ 4 ∧ 𝑛 ≠ 5))
73 prneimg 4813 . . . . . . . . . . . 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 4813 . . . . . . . . . . . 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 4813 . . . . . . . . . . 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 4608 . . . . . . 7 (𝑛 ∈ {1, 3} ↔ (𝑛 = 1 ∨ 𝑛 = 3))
95 prex 5395 . . . . . . . 8 {2, 𝑛} ∈ V
96 el7g 4650 . . . . . . . 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 4583  {cpr 4585  {ctp 4587  ⟨cop 4589  (class class class)co 7420  ℝcr 11200  0cc0 11201  1c1 11202  2c2 12398  3c3 12399  4c4 12400  5c5 12401  ℕ0cn0 12607  ...cfz 13640  ⟨“cs7 14998   NeighbVtx cnbgr 29914
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 11257  ax-resscn 11258  ax-1cn 11259  ax-icn 11260  ax-addcl 11261  ax-addrcl 11262  ax-mulcl 11263  ax-mulrcl 11264  ax-mulcom 11265  ax-addass 11266  ax-mulass 11267  ax-distr 11268  ax-i2m1 11269  ax-1ne0 11270  ax-1rid 11271  ax-rnegex 11272  ax-rrecex 11273  ax-cnre 11274  ax-pre-lttri 11275  ax-pre-lttrn 11276  ax-pre-ltadd 11277  ax-pre-mulgt0 11278
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 4584  df-pr 4586  df-tp 4588  df-op 4590  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 8300  df-wrecs 8331  df-recs 8380  df-rdg 8419  df-1o 8477  df-2o 8478  df-oadd 8481  df-er 8718  df-en 8975  df-dom 8976  df-sdom 8977  df-fin 8978  df-dju 9983  df-card 10021  df-pnf 11346  df-mnf 11347  df-xr 11348  df-ltxr 11349  df-le 11350  df-sub 11544  df-neg 11545  df-nn 12337  df-2 12406  df-3 12407  df-4 12408  df-5 12409  df-6 12410  df-7 12411  df-n0 12608  df-xnn0 12681  df-z 12695  df-uz 12967  df-fz 13641  df-fzo 13790  df-hash 14476  df-word 14660  df-concat 14717  df-s1 14744  df-s2 15000  df-s3 15001  df-s4 15002  df-s5 15003  df-s6 15004  df-s7 15005  df-vtx 29577  df-iedg 29578  df-edg 29627  df-upgr 29661  df-umgr 29662  df-usgr 29733  df-nbgr 29915
This theorem is used by:  usgrexmpl2trifr  49211
  Copyright terms: Public domain W3C validator