MPE Home Metamath Proof Explorer < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  MPE Home  >  Th. List  >  dfac2OLD Structured version   Visualization version   GIF version

Theorem dfac2OLD 9234
Description: Obsolete proof of dfac2 9233 as of 16-Jun-2022. Axiom of Choice (first form) of [Enderton] p. 49 implies of our Axiom of Choice (in the form of ac3 9565). The proof does not make use of AC. Note that the Axiom of Regularity is used by the proof. Specifically, elirrv 8736 and preleqOLD 8757 that are referenced in the proof each make use of Regularity for their derivations. (The reverse implication can be derived without using Regularity; see dfac2a 9231.) (Contributed by NM, 5-Apr-2004.) (Revised by Mario Carneiro, 26-Jun-2015.) (Proof modification is discouraged.) (New usage is discouraged.)
Assertion
Ref Expression
dfac2OLD (CHOICE ↔ ∀𝑥𝑦𝑧𝑥 (𝑧 ≠ ∅ → ∃!𝑤𝑧𝑣𝑦 (𝑧𝑣𝑤𝑣)))
Distinct variable group:   𝑥,𝑧,𝑦,𝑤,𝑣

Proof of Theorem dfac2OLD
Dummy variables 𝑓 𝑢 𝑔 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 dfac3 9223 . . 3 (CHOICE ↔ ∀𝑥𝑓𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧))
2 nfra1 3129 . . . . . . 7 𝑧𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧)
3 rsp 3117 . . . . . . . . . . . . 13 (∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → (𝑧𝑥 → (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧)))
4 equid 2108 . . . . . . . . . . . . . . . . . . 19 𝑧 = 𝑧
5 neeq1 3040 . . . . . . . . . . . . . . . . . . . . 21 (𝑢 = 𝑧 → (𝑢 ≠ ∅ ↔ 𝑧 ≠ ∅))
6 eqeq1 2810 . . . . . . . . . . . . . . . . . . . . 21 (𝑢 = 𝑧 → (𝑢 = 𝑧𝑧 = 𝑧))
75, 6anbi12d 618 . . . . . . . . . . . . . . . . . . . 20 (𝑢 = 𝑧 → ((𝑢 ≠ ∅ ∧ 𝑢 = 𝑧) ↔ (𝑧 ≠ ∅ ∧ 𝑧 = 𝑧)))
87rspcev 3502 . . . . . . . . . . . . . . . . . . 19 ((𝑧𝑥 ∧ (𝑧 ≠ ∅ ∧ 𝑧 = 𝑧)) → ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑢 = 𝑧))
94, 8mpanr2 687 . . . . . . . . . . . . . . . . . 18 ((𝑧𝑥𝑧 ≠ ∅) → ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑢 = 𝑧))
10 fveq2 6404 . . . . . . . . . . . . . . . . . . . . . 22 (𝑢 = 𝑧 → (𝑓𝑢) = (𝑓𝑧))
1110preq1d 4465 . . . . . . . . . . . . . . . . . . . . 21 (𝑢 = 𝑧 → {(𝑓𝑢), 𝑢} = {(𝑓𝑧), 𝑢})
12 preq2 4460 . . . . . . . . . . . . . . . . . . . . 21 (𝑢 = 𝑧 → {(𝑓𝑧), 𝑢} = {(𝑓𝑧), 𝑧})
1311, 12eqtr2d 2841 . . . . . . . . . . . . . . . . . . . 20 (𝑢 = 𝑧 → {(𝑓𝑧), 𝑧} = {(𝑓𝑢), 𝑢})
1413anim2i 605 . . . . . . . . . . . . . . . . . . 19 ((𝑢 ≠ ∅ ∧ 𝑢 = 𝑧) → (𝑢 ≠ ∅ ∧ {(𝑓𝑧), 𝑧} = {(𝑓𝑢), 𝑢}))
1514reximi 3198 . . . . . . . . . . . . . . . . . 18 (∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑢 = 𝑧) → ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ {(𝑓𝑧), 𝑧} = {(𝑓𝑢), 𝑢}))
169, 15syl 17 . . . . . . . . . . . . . . . . 17 ((𝑧𝑥𝑧 ≠ ∅) → ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ {(𝑓𝑧), 𝑧} = {(𝑓𝑢), 𝑢}))
17 prex 5099 . . . . . . . . . . . . . . . . . 18 {(𝑓𝑧), 𝑧} ∈ V
18 eqeq1 2810 . . . . . . . . . . . . . . . . . . . 20 (𝑔 = {(𝑓𝑧), 𝑧} → (𝑔 = {(𝑓𝑢), 𝑢} ↔ {(𝑓𝑧), 𝑧} = {(𝑓𝑢), 𝑢}))
1918anbi2d 616 . . . . . . . . . . . . . . . . . . 19 (𝑔 = {(𝑓𝑧), 𝑧} → ((𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢}) ↔ (𝑢 ≠ ∅ ∧ {(𝑓𝑧), 𝑧} = {(𝑓𝑢), 𝑢})))
2019rexbidv 3240 . . . . . . . . . . . . . . . . . 18 (𝑔 = {(𝑓𝑧), 𝑧} → (∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢}) ↔ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ {(𝑓𝑧), 𝑧} = {(𝑓𝑢), 𝑢})))
2117, 20elab 3545 . . . . . . . . . . . . . . . . 17 ({(𝑓𝑧), 𝑧} ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} ↔ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ {(𝑓𝑧), 𝑧} = {(𝑓𝑢), 𝑢}))
2216, 21sylibr 225 . . . . . . . . . . . . . . . 16 ((𝑧𝑥𝑧 ≠ ∅) → {(𝑓𝑧), 𝑧} ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})})
23 vex 3394 . . . . . . . . . . . . . . . . . 18 𝑧 ∈ V
2423prid2 4489 . . . . . . . . . . . . . . . . 17 𝑧 ∈ {(𝑓𝑧), 𝑧}
25 fvex 6417 . . . . . . . . . . . . . . . . . 18 (𝑓𝑧) ∈ V
2625prid1 4488 . . . . . . . . . . . . . . . . 17 (𝑓𝑧) ∈ {(𝑓𝑧), 𝑧}
2724, 26pm3.2i 458 . . . . . . . . . . . . . . . 16 (𝑧 ∈ {(𝑓𝑧), 𝑧} ∧ (𝑓𝑧) ∈ {(𝑓𝑧), 𝑧})
28 eleq2 2874 . . . . . . . . . . . . . . . . . 18 (𝑣 = {(𝑓𝑧), 𝑧} → (𝑧𝑣𝑧 ∈ {(𝑓𝑧), 𝑧}))
29 eleq2 2874 . . . . . . . . . . . . . . . . . 18 (𝑣 = {(𝑓𝑧), 𝑧} → ((𝑓𝑧) ∈ 𝑣 ↔ (𝑓𝑧) ∈ {(𝑓𝑧), 𝑧}))
3028, 29anbi12d 618 . . . . . . . . . . . . . . . . 17 (𝑣 = {(𝑓𝑧), 𝑧} → ((𝑧𝑣 ∧ (𝑓𝑧) ∈ 𝑣) ↔ (𝑧 ∈ {(𝑓𝑧), 𝑧} ∧ (𝑓𝑧) ∈ {(𝑓𝑧), 𝑧})))
3130rspcev 3502 . . . . . . . . . . . . . . . 16 (({(𝑓𝑧), 𝑧} ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} ∧ (𝑧 ∈ {(𝑓𝑧), 𝑧} ∧ (𝑓𝑧) ∈ {(𝑓𝑧), 𝑧})) → ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣 ∧ (𝑓𝑧) ∈ 𝑣))
3222, 27, 31sylancl 576 . . . . . . . . . . . . . . 15 ((𝑧𝑥𝑧 ≠ ∅) → ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣 ∧ (𝑓𝑧) ∈ 𝑣))
33 eleq1 2873 . . . . . . . . . . . . . . . . 17 (𝑤 = (𝑓𝑧) → (𝑤𝑧 ↔ (𝑓𝑧) ∈ 𝑧))
34 eleq1 2873 . . . . . . . . . . . . . . . . . . 19 (𝑤 = (𝑓𝑧) → (𝑤𝑣 ↔ (𝑓𝑧) ∈ 𝑣))
3534anbi2d 616 . . . . . . . . . . . . . . . . . 18 (𝑤 = (𝑓𝑧) → ((𝑧𝑣𝑤𝑣) ↔ (𝑧𝑣 ∧ (𝑓𝑧) ∈ 𝑣)))
3635rexbidv 3240 . . . . . . . . . . . . . . . . 17 (𝑤 = (𝑓𝑧) → (∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣) ↔ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣 ∧ (𝑓𝑧) ∈ 𝑣)))
3733, 36anbi12d 618 . . . . . . . . . . . . . . . 16 (𝑤 = (𝑓𝑧) → ((𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)) ↔ ((𝑓𝑧) ∈ 𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣 ∧ (𝑓𝑧) ∈ 𝑣))))
3825, 37spcev 3493 . . . . . . . . . . . . . . 15 (((𝑓𝑧) ∈ 𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣 ∧ (𝑓𝑧) ∈ 𝑣)) → ∃𝑤(𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)))
3932, 38sylan2 582 . . . . . . . . . . . . . 14 (((𝑓𝑧) ∈ 𝑧 ∧ (𝑧𝑥𝑧 ≠ ∅)) → ∃𝑤(𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)))
4039ex 399 . . . . . . . . . . . . 13 ((𝑓𝑧) ∈ 𝑧 → ((𝑧𝑥𝑧 ≠ ∅) → ∃𝑤(𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣))))
413, 40syl8 76 . . . . . . . . . . . 12 (∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → (𝑧𝑥 → (𝑧 ≠ ∅ → ((𝑧𝑥𝑧 ≠ ∅) → ∃𝑤(𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣))))))
4241impd 398 . . . . . . . . . . 11 (∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → ((𝑧𝑥𝑧 ≠ ∅) → ((𝑧𝑥𝑧 ≠ ∅) → ∃𝑤(𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)))))
4342pm2.43d 53 . . . . . . . . . 10 (∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → ((𝑧𝑥𝑧 ≠ ∅) → ∃𝑤(𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣))))
44 df-rex 3102 . . . . . . . . . . . . . 14 (∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣) ↔ ∃𝑣(𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} ∧ (𝑧𝑣𝑤𝑣)))
45 vex 3394 . . . . . . . . . . . . . . . . . . . 20 𝑣 ∈ V
46 eqeq1 2810 . . . . . . . . . . . . . . . . . . . . . 22 (𝑔 = 𝑣 → (𝑔 = {(𝑓𝑢), 𝑢} ↔ 𝑣 = {(𝑓𝑢), 𝑢}))
4746anbi2d 616 . . . . . . . . . . . . . . . . . . . . 21 (𝑔 = 𝑣 → ((𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢}) ↔ (𝑢 ≠ ∅ ∧ 𝑣 = {(𝑓𝑢), 𝑢})))
4847rexbidv 3240 . . . . . . . . . . . . . . . . . . . 20 (𝑔 = 𝑣 → (∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢}) ↔ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑣 = {(𝑓𝑢), 𝑢})))
4945, 48elab 3545 . . . . . . . . . . . . . . . . . . 19 (𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} ↔ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑣 = {(𝑓𝑢), 𝑢}))
50 neeq1 3040 . . . . . . . . . . . . . . . . . . . . . . . . . . 27 (𝑧 = 𝑢 → (𝑧 ≠ ∅ ↔ 𝑢 ≠ ∅))
51 fveq2 6404 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 (𝑧 = 𝑢 → (𝑓𝑧) = (𝑓𝑢))
5251eleq1d 2870 . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 (𝑧 = 𝑢 → ((𝑓𝑧) ∈ 𝑧 ↔ (𝑓𝑢) ∈ 𝑧))
53 eleq2 2874 . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 (𝑧 = 𝑢 → ((𝑓𝑢) ∈ 𝑧 ↔ (𝑓𝑢) ∈ 𝑢))
5452, 53bitrd 270 . . . . . . . . . . . . . . . . . . . . . . . . . . 27 (𝑧 = 𝑢 → ((𝑓𝑧) ∈ 𝑧 ↔ (𝑓𝑢) ∈ 𝑢))
5550, 54imbi12d 335 . . . . . . . . . . . . . . . . . . . . . . . . . 26 (𝑧 = 𝑢 → ((𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) ↔ (𝑢 ≠ ∅ → (𝑓𝑢) ∈ 𝑢)))
5655rspccv 3499 . . . . . . . . . . . . . . . . . . . . . . . . 25 (∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → (𝑢𝑥 → (𝑢 ≠ ∅ → (𝑓𝑢) ∈ 𝑢)))
57 elirrv 8736 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 ¬ 𝑤𝑤
58 eleq2 2874 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 (𝑤 = 𝑧 → (𝑤𝑤𝑤𝑧))
5957, 58mtbii 317 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 (𝑤 = 𝑧 → ¬ 𝑤𝑧)
6059con2i 136 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 (𝑤𝑧 → ¬ 𝑤 = 𝑧)
61 vex 3394 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 𝑤 ∈ V
62 fvex 6417 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 (𝑓𝑢) ∈ V
63 vex 3394 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 𝑢 ∈ V
6461, 23, 62, 63prel12OLD 4570 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 𝑤 = 𝑧 → ({𝑤, 𝑧} = {(𝑓𝑢), 𝑢} ↔ (𝑤 ∈ {(𝑓𝑢), 𝑢} ∧ 𝑧 ∈ {(𝑓𝑢), 𝑢})))
65 ancom 450 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 ((𝑤𝑣𝑧𝑣) ↔ (𝑧𝑣𝑤𝑣))
66 eleq2 2874 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 (𝑣 = {(𝑓𝑢), 𝑢} → (𝑤𝑣𝑤 ∈ {(𝑓𝑢), 𝑢}))
67 eleq2 2874 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 (𝑣 = {(𝑓𝑢), 𝑢} → (𝑧𝑣𝑧 ∈ {(𝑓𝑢), 𝑢}))
6866, 67anbi12d 618 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 (𝑣 = {(𝑓𝑢), 𝑢} → ((𝑤𝑣𝑧𝑣) ↔ (𝑤 ∈ {(𝑓𝑢), 𝑢} ∧ 𝑧 ∈ {(𝑓𝑢), 𝑢})))
6965, 68syl5rbbr 277 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 (𝑣 = {(𝑓𝑢), 𝑢} → ((𝑤 ∈ {(𝑓𝑢), 𝑢} ∧ 𝑧 ∈ {(𝑓𝑢), 𝑢}) ↔ (𝑧𝑣𝑤𝑣)))
7064, 69sylan9bbr 502 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 ((𝑣 = {(𝑓𝑢), 𝑢} ∧ ¬ 𝑤 = 𝑧) → ({𝑤, 𝑧} = {(𝑓𝑢), 𝑢} ↔ (𝑧𝑣𝑤𝑣)))
7160, 70sylan2 582 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 ((𝑣 = {(𝑓𝑢), 𝑢} ∧ 𝑤𝑧) → ({𝑤, 𝑧} = {(𝑓𝑢), 𝑢} ↔ (𝑧𝑣𝑤𝑣)))
7271adantrr 699 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 ((𝑣 = {(𝑓𝑢), 𝑢} ∧ (𝑤𝑧 ∧ (𝑓𝑢) ∈ 𝑢)) → ({𝑤, 𝑧} = {(𝑓𝑢), 𝑢} ↔ (𝑧𝑣𝑤𝑣)))
7372pm5.32da 570 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 (𝑣 = {(𝑓𝑢), 𝑢} → (((𝑤𝑧 ∧ (𝑓𝑢) ∈ 𝑢) ∧ {𝑤, 𝑧} = {(𝑓𝑢), 𝑢}) ↔ ((𝑤𝑧 ∧ (𝑓𝑢) ∈ 𝑢) ∧ (𝑧𝑣𝑤𝑣))))
7461, 23, 62, 63preleqOLD 8757 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 (((𝑤𝑧 ∧ (𝑓𝑢) ∈ 𝑢) ∧ {𝑤, 𝑧} = {(𝑓𝑢), 𝑢}) → (𝑤 = (𝑓𝑢) ∧ 𝑧 = 𝑢))
7573, 74syl6bir 245 . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 (𝑣 = {(𝑓𝑢), 𝑢} → (((𝑤𝑧 ∧ (𝑓𝑢) ∈ 𝑢) ∧ (𝑧𝑣𝑤𝑣)) → (𝑤 = (𝑓𝑢) ∧ 𝑧 = 𝑢)))
7651eqeq2d 2816 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 (𝑧 = 𝑢 → (𝑤 = (𝑓𝑧) ↔ 𝑤 = (𝑓𝑢)))
7776biimparc 467 . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 ((𝑤 = (𝑓𝑢) ∧ 𝑧 = 𝑢) → 𝑤 = (𝑓𝑧))
7875, 77syl6 35 . . . . . . . . . . . . . . . . . . . . . . . . . . 27 (𝑣 = {(𝑓𝑢), 𝑢} → (((𝑤𝑧 ∧ (𝑓𝑢) ∈ 𝑢) ∧ (𝑧𝑣𝑤𝑣)) → 𝑤 = (𝑓𝑧)))
7978exp4c 421 . . . . . . . . . . . . . . . . . . . . . . . . . 26 (𝑣 = {(𝑓𝑢), 𝑢} → (𝑤𝑧 → ((𝑓𝑢) ∈ 𝑢 → ((𝑧𝑣𝑤𝑣) → 𝑤 = (𝑓𝑧)))))
8079com13 88 . . . . . . . . . . . . . . . . . . . . . . . . 25 ((𝑓𝑢) ∈ 𝑢 → (𝑤𝑧 → (𝑣 = {(𝑓𝑢), 𝑢} → ((𝑧𝑣𝑤𝑣) → 𝑤 = (𝑓𝑧)))))
8156, 80syl8 76 . . . . . . . . . . . . . . . . . . . . . . . 24 (∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → (𝑢𝑥 → (𝑢 ≠ ∅ → (𝑤𝑧 → (𝑣 = {(𝑓𝑢), 𝑢} → ((𝑧𝑣𝑤𝑣) → 𝑤 = (𝑓𝑧)))))))
8281com4r 94 . . . . . . . . . . . . . . . . . . . . . . 23 (𝑤𝑧 → (∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → (𝑢𝑥 → (𝑢 ≠ ∅ → (𝑣 = {(𝑓𝑢), 𝑢} → ((𝑧𝑣𝑤𝑣) → 𝑤 = (𝑓𝑧)))))))
8382imp 395 . . . . . . . . . . . . . . . . . . . . . 22 ((𝑤𝑧 ∧ ∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧)) → (𝑢𝑥 → (𝑢 ≠ ∅ → (𝑣 = {(𝑓𝑢), 𝑢} → ((𝑧𝑣𝑤𝑣) → 𝑤 = (𝑓𝑧))))))
8483imp4a 411 . . . . . . . . . . . . . . . . . . . . 21 ((𝑤𝑧 ∧ ∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧)) → (𝑢𝑥 → ((𝑢 ≠ ∅ ∧ 𝑣 = {(𝑓𝑢), 𝑢}) → ((𝑧𝑣𝑤𝑣) → 𝑤 = (𝑓𝑧)))))
8584com3l 89 . . . . . . . . . . . . . . . . . . . 20 (𝑢𝑥 → ((𝑢 ≠ ∅ ∧ 𝑣 = {(𝑓𝑢), 𝑢}) → ((𝑤𝑧 ∧ ∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧)) → ((𝑧𝑣𝑤𝑣) → 𝑤 = (𝑓𝑧)))))
8685rexlimiv 3215 . . . . . . . . . . . . . . . . . . 19 (∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑣 = {(𝑓𝑢), 𝑢}) → ((𝑤𝑧 ∧ ∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧)) → ((𝑧𝑣𝑤𝑣) → 𝑤 = (𝑓𝑧))))
8749, 86sylbi 208 . . . . . . . . . . . . . . . . . 18 (𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} → ((𝑤𝑧 ∧ ∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧)) → ((𝑧𝑣𝑤𝑣) → 𝑤 = (𝑓𝑧))))
8887expd 402 . . . . . . . . . . . . . . . . 17 (𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} → (𝑤𝑧 → (∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → ((𝑧𝑣𝑤𝑣) → 𝑤 = (𝑓𝑧)))))
8988com13 88 . . . . . . . . . . . . . . . 16 (∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → (𝑤𝑧 → (𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} → ((𝑧𝑣𝑤𝑣) → 𝑤 = (𝑓𝑧)))))
9089imp4b 410 . . . . . . . . . . . . . . 15 ((∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) ∧ 𝑤𝑧) → ((𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} ∧ (𝑧𝑣𝑤𝑣)) → 𝑤 = (𝑓𝑧)))
9190exlimdv 2024 . . . . . . . . . . . . . 14 ((∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) ∧ 𝑤𝑧) → (∃𝑣(𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} ∧ (𝑧𝑣𝑤𝑣)) → 𝑤 = (𝑓𝑧)))
9244, 91syl5bi 233 . . . . . . . . . . . . 13 ((∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) ∧ 𝑤𝑧) → (∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣) → 𝑤 = (𝑓𝑧)))
9392expimpd 443 . . . . . . . . . . . 12 (∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → ((𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)) → 𝑤 = (𝑓𝑧)))
9493alrimiv 2018 . . . . . . . . . . 11 (∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → ∀𝑤((𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)) → 𝑤 = (𝑓𝑧)))
95 mo2icl 3583 . . . . . . . . . . 11 (∀𝑤((𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)) → 𝑤 = (𝑓𝑧)) → ∃*𝑤(𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)))
9694, 95syl 17 . . . . . . . . . 10 (∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → ∃*𝑤(𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)))
9743, 96jctird 518 . . . . . . . . 9 (∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → ((𝑧𝑥𝑧 ≠ ∅) → (∃𝑤(𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)) ∧ ∃*𝑤(𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)))))
98 df-reu 3103 . . . . . . . . . 10 (∃!𝑤𝑧𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣) ↔ ∃!𝑤(𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)))
99 eu5 2658 . . . . . . . . . 10 (∃!𝑤(𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)) ↔ (∃𝑤(𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)) ∧ ∃*𝑤(𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣))))
10098, 99bitri 266 . . . . . . . . 9 (∃!𝑤𝑧𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣) ↔ (∃𝑤(𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)) ∧ ∃*𝑤(𝑤𝑧 ∧ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣))))
10197, 100syl6ibr 243 . . . . . . . 8 (∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → ((𝑧𝑥𝑧 ≠ ∅) → ∃!𝑤𝑧𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)))
102101expd 402 . . . . . . 7 (∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → (𝑧𝑥 → (𝑧 ≠ ∅ → ∃!𝑤𝑧𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣))))
1032, 102ralrimi 3145 . . . . . 6 (∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → ∀𝑧𝑥 (𝑧 ≠ ∅ → ∃!𝑤𝑧𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)))
104 vex 3394 . . . . . . . . . . . 12 𝑓 ∈ V
105104rnex 7326 . . . . . . . . . . 11 ran 𝑓 ∈ V
106 p0ex 5053 . . . . . . . . . . 11 {∅} ∈ V
107105, 106unex 7182 . . . . . . . . . 10 (ran 𝑓 ∪ {∅}) ∈ V
108 vex 3394 . . . . . . . . . 10 𝑥 ∈ V
109107, 108unex 7182 . . . . . . . . 9 ((ran 𝑓 ∪ {∅}) ∪ 𝑥) ∈ V
110109pwex 5050 . . . . . . . 8 𝒫 ((ran 𝑓 ∪ {∅}) ∪ 𝑥) ∈ V
111 ssun1 3975 . . . . . . . . . . . . . . 15 (ran 𝑓 ∪ {∅}) ⊆ ((ran 𝑓 ∪ {∅}) ∪ 𝑥)
112 fvrn0 6432 . . . . . . . . . . . . . . 15 (𝑓𝑢) ∈ (ran 𝑓 ∪ {∅})
113111, 112sselii 3795 . . . . . . . . . . . . . 14 (𝑓𝑢) ∈ ((ran 𝑓 ∪ {∅}) ∪ 𝑥)
114 elun2 3980 . . . . . . . . . . . . . 14 (𝑢𝑥𝑢 ∈ ((ran 𝑓 ∪ {∅}) ∪ 𝑥))
115 prssi 4542 . . . . . . . . . . . . . 14 (((𝑓𝑢) ∈ ((ran 𝑓 ∪ {∅}) ∪ 𝑥) ∧ 𝑢 ∈ ((ran 𝑓 ∪ {∅}) ∪ 𝑥)) → {(𝑓𝑢), 𝑢} ⊆ ((ran 𝑓 ∪ {∅}) ∪ 𝑥))
116113, 114, 115sylancr 577 . . . . . . . . . . . . 13 (𝑢𝑥 → {(𝑓𝑢), 𝑢} ⊆ ((ran 𝑓 ∪ {∅}) ∪ 𝑥))
117 prex 5099 . . . . . . . . . . . . . 14 {(𝑓𝑢), 𝑢} ∈ V
118117elpw 4357 . . . . . . . . . . . . 13 ({(𝑓𝑢), 𝑢} ∈ 𝒫 ((ran 𝑓 ∪ {∅}) ∪ 𝑥) ↔ {(𝑓𝑢), 𝑢} ⊆ ((ran 𝑓 ∪ {∅}) ∪ 𝑥))
119116, 118sylibr 225 . . . . . . . . . . . 12 (𝑢𝑥 → {(𝑓𝑢), 𝑢} ∈ 𝒫 ((ran 𝑓 ∪ {∅}) ∪ 𝑥))
120 eleq1 2873 . . . . . . . . . . . 12 (𝑔 = {(𝑓𝑢), 𝑢} → (𝑔 ∈ 𝒫 ((ran 𝑓 ∪ {∅}) ∪ 𝑥) ↔ {(𝑓𝑢), 𝑢} ∈ 𝒫 ((ran 𝑓 ∪ {∅}) ∪ 𝑥)))
121119, 120syl5ibrcom 238 . . . . . . . . . . 11 (𝑢𝑥 → (𝑔 = {(𝑓𝑢), 𝑢} → 𝑔 ∈ 𝒫 ((ran 𝑓 ∪ {∅}) ∪ 𝑥)))
122121adantld 480 . . . . . . . . . 10 (𝑢𝑥 → ((𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢}) → 𝑔 ∈ 𝒫 ((ran 𝑓 ∪ {∅}) ∪ 𝑥)))
123122rexlimiv 3215 . . . . . . . . 9 (∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢}) → 𝑔 ∈ 𝒫 ((ran 𝑓 ∪ {∅}) ∪ 𝑥))
124123abssi 3874 . . . . . . . 8 {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} ⊆ 𝒫 ((ran 𝑓 ∪ {∅}) ∪ 𝑥)
125110, 124ssexi 4998 . . . . . . 7 {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} ∈ V
126 rexeq 3328 . . . . . . . . . 10 (𝑦 = {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} → (∃𝑣𝑦 (𝑧𝑣𝑤𝑣) ↔ ∃𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)))
127126reubidv 3315 . . . . . . . . 9 (𝑦 = {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} → (∃!𝑤𝑧𝑣𝑦 (𝑧𝑣𝑤𝑣) ↔ ∃!𝑤𝑧𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)))
128127imbi2d 331 . . . . . . . 8 (𝑦 = {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} → ((𝑧 ≠ ∅ → ∃!𝑤𝑧𝑣𝑦 (𝑧𝑣𝑤𝑣)) ↔ (𝑧 ≠ ∅ → ∃!𝑤𝑧𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣))))
129128ralbidv 3174 . . . . . . 7 (𝑦 = {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} → (∀𝑧𝑥 (𝑧 ≠ ∅ → ∃!𝑤𝑧𝑣𝑦 (𝑧𝑣𝑤𝑣)) ↔ ∀𝑧𝑥 (𝑧 ≠ ∅ → ∃!𝑤𝑧𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣))))
130125, 129spcev 3493 . . . . . 6 (∀𝑧𝑥 (𝑧 ≠ ∅ → ∃!𝑤𝑧𝑣 ∈ {𝑔 ∣ ∃𝑢𝑥 (𝑢 ≠ ∅ ∧ 𝑔 = {(𝑓𝑢), 𝑢})} (𝑧𝑣𝑤𝑣)) → ∃𝑦𝑧𝑥 (𝑧 ≠ ∅ → ∃!𝑤𝑧𝑣𝑦 (𝑧𝑣𝑤𝑣)))
131103, 130syl 17 . . . . 5 (∀𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → ∃𝑦𝑧𝑥 (𝑧 ≠ ∅ → ∃!𝑤𝑧𝑣𝑦 (𝑧𝑣𝑤𝑣)))
132131exlimiv 2021 . . . 4 (∃𝑓𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → ∃𝑦𝑧𝑥 (𝑧 ≠ ∅ → ∃!𝑤𝑧𝑣𝑦 (𝑧𝑣𝑤𝑣)))
133132alimi 1896 . . 3 (∀𝑥𝑓𝑧𝑥 (𝑧 ≠ ∅ → (𝑓𝑧) ∈ 𝑧) → ∀𝑥𝑦𝑧𝑥 (𝑧 ≠ ∅ → ∃!𝑤𝑧𝑣𝑦 (𝑧𝑣𝑤𝑣)))
1341, 133sylbi 208 . 2 (CHOICE → ∀𝑥𝑦𝑧𝑥 (𝑧 ≠ ∅ → ∃!𝑤𝑧𝑣𝑦 (𝑧𝑣𝑤𝑣)))
135 dfac2a 9231 . 2 (∀𝑥𝑦𝑧𝑥 (𝑧 ≠ ∅ → ∃!𝑤𝑧𝑣𝑦 (𝑧𝑣𝑤𝑣)) → CHOICE)
136134, 135impbii 200 1 (CHOICE ↔ ∀𝑥𝑦𝑧𝑥 (𝑧 ≠ ∅ → ∃!𝑤𝑧𝑣𝑦 (𝑧𝑣𝑤𝑣)))
Colors of variables: wff setvar class
Syntax hints:  ¬ wn 3  wi 4  wb 197  wa 384  wal 1635   = wceq 1637  wex 1859  wcel 2156  ∃!weu 2630  ∃*wmo 2631  {cab 2792  wne 2978  wral 3096  wrex 3097  ∃!wreu 3098  cun 3767  wss 3769  c0 4116  𝒫 cpw 4351  {csn 4370  {cpr 4372  ran crn 5312  cfv 6097  CHOICEwac 9217
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1877  ax-4 1894  ax-5 2001  ax-6 2068  ax-7 2104  ax-8 2158  ax-9 2165  ax-10 2185  ax-11 2201  ax-12 2214  ax-13 2420  ax-ext 2784  ax-sep 4975  ax-nul 4983  ax-pow 5035  ax-pr 5096  ax-un 7175  ax-reg 8732
This theorem depends on definitions:  df-bi 198  df-an 385  df-or 866  df-3an 1102  df-tru 1641  df-ex 1860  df-nf 1864  df-sb 2061  df-eu 2634  df-mo 2635  df-clab 2793  df-cleq 2799  df-clel 2802  df-nfc 2937  df-ne 2979  df-ral 3101  df-rex 3102  df-reu 3103  df-rab 3105  df-v 3393  df-sbc 3634  df-dif 3772  df-un 3774  df-in 3776  df-ss 3783  df-nul 4117  df-if 4280  df-pw 4353  df-sn 4371  df-pr 4373  df-op 4377  df-uni 4631  df-br 4845  df-opab 4907  df-mpt 4924  df-id 5219  df-eprel 5224  df-fr 5270  df-xp 5317  df-rel 5318  df-cnv 5319  df-co 5320  df-dm 5321  df-rn 5322  df-res 5323  df-ima 5324  df-iota 6060  df-fun 6099  df-fn 6100  df-f 6101  df-fv 6105  df-riota 6831  df-ac 9218
This theorem is referenced by: (None)
  Copyright terms: Public domain W3C validator