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 49075
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 12401 . . . . . 6 2 ∈ V
21tpid3 4734 . . . . 5 2 ∈ {0, 1, 2}
32orci 879 . . . 4 (2 ∈ {0, 1, 2} ∨ 2 ∈ {3, 4, 5})
4 elun 4100 . . . 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 49072 . . 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 12394 . . . . 5 1 ∈ {0, 1, 2}
1211orci 879 . . . 4 (1 ∈ {0, 1, 2} ∨ 1 ∈ {3, 4, 5})
13 elun 4100 . . . 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 12406 . . . . . 6 3 ∈ V
1615tpid1 4729 . . . . 5 3 ∈ {3, 4, 5}
1716olci 880 . . . 4 (3 ∈ {0, 1, 2} ∨ 3 ∈ {3, 4, 5})
18 elun 4100 . . . 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 4782 . . . . 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 3455 . . . . . . . . . . . . . 14 𝑛 ∈ V
221, 21pm3.2i 476 . . . . . . . . . . . . 13 (2 ∈ V ∧ 𝑛 ∈ V)
23 c0ex 11281 . . . . . . . . . . . . . 14 0 ∈ V
24 1ex 11284 . . . . . . . . . . . . . 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 12430 . . . . . . . . . . . . . 14 2 ≠ 0
28 1ne2 12534 . . . . . . . . . . . . . . 15 1 ≠ 2
2928necomi 3010 . . . . . . . . . . . . . 14 2 ≠ 1
3027, 29pm3.2i 476 . . . . . . . . . . . . 13 (2 ≠ 0 ∧ 2 ≠ 1)
3130orci 879 . . . . . . . . . . . 12 ((2 ≠ 0 ∧ 2 ≠ 1) ∨ (𝑛 ≠ 0 ∧ 𝑛 ≠ 1))
32 prneimg 4814 . . . . . . . . . . . 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 2958 . . . . . . . . . 10 ¬ {2, 𝑛} = {0, 1}
3534biorfi 952 . . . . . . . . 9 (({2, 𝑛} = {1, 2} ∨ {2, 𝑛} = {2, 3}) ↔ ({2, 𝑛} = {0, 1} ∨ ({2, 𝑛} = {1, 2} ∨ {2, 𝑛} = {2, 3})))
36 prcom 4693 . . . . . . . . . . . 12 {1, 2} = {2, 1}
3736eqeq2i 2774 . . . . . . . . . . 11 ({2, 𝑛} = {1, 2} ↔ {2, 𝑛} = {2, 1})
3821a1i 11 . . . . . . . . . . . . 13 (1 ∈ V → 𝑛 ∈ V)
39 id 23 . . . . . . . . . . . . 13 (1 ∈ V → 1 ∈ V)
4038, 39preq2b 4807 . . . . . . . . . . . 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 12605 . . . . . . . . . . 11 3 ∈ ℕ0
4421a1i 11 . . . . . . . . . . . . 13 (3 ∈ ℕ0 → 𝑛 ∈ V)
45 id 23 . . . . . . . . . . . . 13 (3 ∈ ℕ0 → 3 ∈ ℕ0)
4644, 45preq2b 4807 . . . . . . . . . . . 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 12398 . . . . . . . . . . . . . 14 2 ∈ ℝ
5352, 21pm3.2i 476 . . . . . . . . . . . . 13 (2 ∈ ℝ ∧ 𝑛 ∈ V)
54 4nn0 12606 . . . . . . . . . . . . . 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 12497 . . . . . . . . . . . . . . 15 2 < 3
5852, 57ltneii 11404 . . . . . . . . . . . . . 14 2 ≠ 3
59 2lt4 12501 . . . . . . . . . . . . . . 15 2 < 4
6052, 59ltneii 11404 . . . . . . . . . . . . . 14 2 ≠ 4
6158, 60pm3.2i 476 . . . . . . . . . . . . 13 (2 ≠ 3 ∧ 2 ≠ 4)
6261orci 879 . . . . . . . . . . . 12 ((2 ≠ 3 ∧ 2 ≠ 4) ∨ (𝑛 ≠ 3 ∧ 𝑛 ≠ 4))
63 prneimg 4814 . . . . . . . . . . . 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 2958 . . . . . . . . . 10 ¬ {2, 𝑛} = {3, 4}
66 5nn0 12607 . . . . . . . . . . . . . 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 12505 . . . . . . . . . . . . . . 15 2 < 5
7052, 69ltneii 11404 . . . . . . . . . . . . . 14 2 ≠ 5
7160, 70pm3.2i 476 . . . . . . . . . . . . 13 (2 ≠ 4 ∧ 2 ≠ 5)
7271orci 879 . . . . . . . . . . . 12 ((2 ≠ 4 ∧ 2 ≠ 5) ∨ (𝑛 ≠ 4 ∧ 𝑛 ≠ 5))
73 prneimg 4814 . . . . . . . . . . . 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 2958 . . . . . . . . . 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 4814 . . . . . . . . . . . 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 2958 . . . . . . . . . 10 ¬ {2, 𝑛} = {0, 5}
8365, 75, 823pm3.2ni 1519 . . . . . . . . 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 4814 . . . . . . . . . . 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 2958 . . . . . . . . 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 4609 . . . . . . 7 (𝑛 ∈ {1, 3} ↔ (𝑛 = 1 ∨ 𝑛 = 3))
95 prex 5396 . . . . . . . 8 {2, 𝑛} ∈ V
96 el7g 4651 . . . . . . . 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 4034 . . . 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 2767 . . 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 2784 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 1570   ∈ wcel 2145   ≠ wne 2956  {crab 3413  Vcvv 3451   ∪ cun 3897  {csn 4584  {cpr 4586  {ctp 4588  ⟨cop 4590  (class class class)co 7412  ℝcr 11180  0cc0 11181  1c1 11182  2c2 12378  3c3 12379  4c4 12380  5c5 12381  ℕ0cn0 12587  ...cfz 13620  ⟨“cs7 14977   NeighbVtx cnbgr 29895
This proof depends on axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1828  ax-4 1842  ax-5 1943  ax-6 2000  ax-7 2041  ax-8 2147  ax-9 2155  ax-10 2178  ax-11 2194  ax-12 2213  ax-ext 2733  ax-rep 5232  ax-sep 5249  ax-nul 5260  ax-pow 5327  ax-pr 5391  ax-un 7740  ax-cnex 11237  ax-resscn 11238  ax-1cn 11239  ax-icn 11240  ax-addcl 11241  ax-addrcl 11242  ax-mulcl 11243  ax-mulrcl 11244  ax-mulcom 11245  ax-addass 11246  ax-mulass 11247  ax-distr 11248  ax-i2m1 11249  ax-1ne0 11250  ax-1rid 11251  ax-rnegex 11252  ax-rrecex 11253  ax-cnre 11254  ax-pre-lttri 11255  ax-pre-lttrn 11256  ax-pre-ltadd 11257  ax-pre-mulgt0 11258
This proof depends on definitions:  df-bi 210  df-an 402  df-or 862  df-3or 1104  df-3an 1105  df-tru 1573  df-fal 1583  df-ex 1813  df-nf 1817  df-sb 2100  df-mo 2565  df-eu 2595  df-clab 2740  df-cleq 2753  df-clel 2836  df-nfc 2910  df-ne 2957  df-nel 3063  df-ral 3078  df-rex 3088  df-reu 3367  df-rab 3414  df-v 3453  df-sbc 3740  df-csb 3848  df-dif 3902  df-un 3904  df-in 3906  df-ss 3916  df-pss 3919  df-nul 4280  df-if 4483  df-pw 4559  df-sn 4585  df-pr 4587  df-tp 4589  df-op 4591  df-uni 4868  df-int 4908  df-iun 4953  df-br 5104  df-opab 5168  df-mpt 5187  df-tr 5213  df-id 5546  df-eprel 5551  df-po 5559  df-so 5560  df-fr 5604  df-we 5606  df-xp 5657  df-rel 5658  df-cnv 5659  df-co 5660  df-dm 5661  df-rn 5662  df-res 5663  df-ima 5664  df-pred 6297  df-ord 6358  df-on 6359  df-lim 6360  df-suc 6361  df-iota 6487  df-fun 6533  df-fn 6534  df-f 6535  df-f1 6536  df-fo 6537  df-f1o 6538  df-fv 6539  df-riota 7369  df-ov 7415  df-oprab 7416  df-mpo 7417  df-om 7867  df-1st 7990  df-2nd 7991  df-frecs 8283  df-wrecs 8314  df-recs 8363  df-rdg 8402  df-1o 8460  df-2o 8461  df-oadd 8464  df-er 8701  df-en 8958  df-dom 8959  df-sdom 8960  df-fin 8961  df-dju 9963  df-card 10001  df-pnf 11326  df-mnf 11327  df-xr 11328  df-ltxr 11329  df-le 11330  df-sub 11524  df-neg 11525  df-nn 12317  df-2 12386  df-3 12387  df-4 12388  df-5 12389  df-6 12390  df-7 12391  df-n0 12588  df-xnn0 12661  df-z 12675  df-uz 12947  df-fz 13621  df-fzo 13769  df-hash 14455  df-word 14639  df-concat 14696  df-s1 14723  df-s2 14979  df-s3 14980  df-s4 14981  df-s5 14982  df-s6 14983  df-s7 14984  df-vtx 29558  df-iedg 29559  df-edg 29608  df-upgr 29642  df-umgr 29643  df-usgr 29714  df-nbgr 29896
This theorem is used by:  usgrexmpl2trifr  49079
  Copyright terms: Public domain W3C validator