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

Theorem indpi 9986
Description: Principle of Finite Induction on positive integers. (Contributed by NM, 23-Mar-1996.) (New usage is discouraged.)
Hypotheses
Ref Expression
indpi.1 (𝑥 = 1𝑜 → (𝜑𝜓))
indpi.2 (𝑥 = 𝑦 → (𝜑𝜒))
indpi.3 (𝑥 = (𝑦 +N 1𝑜) → (𝜑𝜃))
indpi.4 (𝑥 = 𝐴 → (𝜑𝜏))
indpi.5 𝜓
indpi.6 (𝑦N → (𝜒𝜃))
Assertion
Ref Expression
indpi (𝐴N𝜏)
Distinct variable groups:   𝑥,𝑦   𝑥,𝐴   𝜓,𝑥   𝜒,𝑥   𝜃,𝑥   𝜏,𝑥   𝜑,𝑦
Allowed substitution hints:   𝜑(𝑥)   𝜓(𝑦)   𝜒(𝑦)   𝜃(𝑦)   𝜏(𝑦)   𝐴(𝑦)

Proof of Theorem indpi
StepHypRef Expression
1 1pi 9962 . . . . . . 7 1𝑜N
21elexi 3366 . . . . . 6 1𝑜 ∈ V
32eqvinc 3484 . . . . 5 (1𝑜 = 𝐴 ↔ ∃𝑥(𝑥 = 1𝑜𝑥 = 𝐴))
4 indpi.4 . . . . 5 (𝑥 = 𝐴 → (𝜑𝜏))
5 indpi.5 . . . . . 6 𝜓
6 indpi.1 . . . . . 6 (𝑥 = 1𝑜 → (𝜑𝜓))
75, 6mpbiri 249 . . . . 5 (𝑥 = 1𝑜𝜑)
83, 4, 7gencl 3388 . . . 4 (1𝑜 = 𝐴𝜏)
98eqcoms 2773 . . 3 (𝐴 = 1𝑜𝜏)
109a1i 11 . 2 (𝐴N → (𝐴 = 1𝑜𝜏))
11 pinn 9957 . . . . 5 (𝐴N𝐴 ∈ ω)
12 elni2 9956 . . . . . 6 (𝐴N ↔ (𝐴 ∈ ω ∧ ∅ ∈ 𝐴))
13 nnord 7275 . . . . . . . . 9 (𝐴 ∈ ω → Ord 𝐴)
14 ordsucss 7220 . . . . . . . . 9 (Ord 𝐴 → (∅ ∈ 𝐴 → suc ∅ ⊆ 𝐴))
1513, 14syl 17 . . . . . . . 8 (𝐴 ∈ ω → (∅ ∈ 𝐴 → suc ∅ ⊆ 𝐴))
16 df-1o 7768 . . . . . . . . 9 1𝑜 = suc ∅
1716sseq1i 3791 . . . . . . . 8 (1𝑜𝐴 ↔ suc ∅ ⊆ 𝐴)
1815, 17syl6ibr 243 . . . . . . 7 (𝐴 ∈ ω → (∅ ∈ 𝐴 → 1𝑜𝐴))
1918imp 395 . . . . . 6 ((𝐴 ∈ ω ∧ ∅ ∈ 𝐴) → 1𝑜𝐴)
2012, 19sylbi 208 . . . . 5 (𝐴N → 1𝑜𝐴)
21 1onn 7928 . . . . . 6 1𝑜 ∈ ω
22 eleq1 2832 . . . . . . . . 9 (𝑥 = 1𝑜 → (𝑥N ↔ 1𝑜N))
23 breq2 4815 . . . . . . . . 9 (𝑥 = 1𝑜 → (1𝑜 <N 𝑥 ↔ 1𝑜 <N 1𝑜))
2422, 23anbi12d 624 . . . . . . . 8 (𝑥 = 1𝑜 → ((𝑥N ∧ 1𝑜 <N 𝑥) ↔ (1𝑜N ∧ 1𝑜 <N 1𝑜)))
2524, 6imbi12d 335 . . . . . . 7 (𝑥 = 1𝑜 → (((𝑥N ∧ 1𝑜 <N 𝑥) → 𝜑) ↔ ((1𝑜N ∧ 1𝑜 <N 1𝑜) → 𝜓)))
26 eleq1 2832 . . . . . . . . 9 (𝑥 = 𝑦 → (𝑥N𝑦N))
27 breq2 4815 . . . . . . . . 9 (𝑥 = 𝑦 → (1𝑜 <N 𝑥 ↔ 1𝑜 <N 𝑦))
2826, 27anbi12d 624 . . . . . . . 8 (𝑥 = 𝑦 → ((𝑥N ∧ 1𝑜 <N 𝑥) ↔ (𝑦N ∧ 1𝑜 <N 𝑦)))
29 indpi.2 . . . . . . . 8 (𝑥 = 𝑦 → (𝜑𝜒))
3028, 29imbi12d 335 . . . . . . 7 (𝑥 = 𝑦 → (((𝑥N ∧ 1𝑜 <N 𝑥) → 𝜑) ↔ ((𝑦N ∧ 1𝑜 <N 𝑦) → 𝜒)))
31 pinn 9957 . . . . . . . . . . . . . . 15 (𝑥N𝑥 ∈ ω)
32 eleq1 2832 . . . . . . . . . . . . . . . 16 (𝑥 = suc 𝑦 → (𝑥 ∈ ω ↔ suc 𝑦 ∈ ω))
33 peano2b 7283 . . . . . . . . . . . . . . . 16 (𝑦 ∈ ω ↔ suc 𝑦 ∈ ω)
3432, 33syl6bbr 280 . . . . . . . . . . . . . . 15 (𝑥 = suc 𝑦 → (𝑥 ∈ ω ↔ 𝑦 ∈ ω))
3531, 34syl5ib 235 . . . . . . . . . . . . . 14 (𝑥 = suc 𝑦 → (𝑥N𝑦 ∈ ω))
3635adantrd 485 . . . . . . . . . . . . 13 (𝑥 = suc 𝑦 → ((𝑥N ∧ 1𝑜 <N 𝑥) → 𝑦 ∈ ω))
37 ltpiord 9966 . . . . . . . . . . . . . . . 16 ((1𝑜N𝑥N) → (1𝑜 <N 𝑥 ↔ 1𝑜𝑥))
381, 37mpan 681 . . . . . . . . . . . . . . 15 (𝑥N → (1𝑜 <N 𝑥 ↔ 1𝑜𝑥))
3938biimpa 468 . . . . . . . . . . . . . 14 ((𝑥N ∧ 1𝑜 <N 𝑥) → 1𝑜𝑥)
40 eleq2 2833 . . . . . . . . . . . . . . 15 (𝑥 = suc 𝑦 → (1𝑜𝑥 ↔ 1𝑜 ∈ suc 𝑦))
41 elsuci 5976 . . . . . . . . . . . . . . . 16 (1𝑜 ∈ suc 𝑦 → (1𝑜𝑦 ∨ 1𝑜 = 𝑦))
42 ne0i 4087 . . . . . . . . . . . . . . . . 17 (1𝑜𝑦𝑦 ≠ ∅)
43 0lt1o 7793 . . . . . . . . . . . . . . . . . . 19 ∅ ∈ 1𝑜
44 eleq2 2833 . . . . . . . . . . . . . . . . . . 19 (1𝑜 = 𝑦 → (∅ ∈ 1𝑜 ↔ ∅ ∈ 𝑦))
4543, 44mpbii 224 . . . . . . . . . . . . . . . . . 18 (1𝑜 = 𝑦 → ∅ ∈ 𝑦)
4645ne0d 4088 . . . . . . . . . . . . . . . . 17 (1𝑜 = 𝑦𝑦 ≠ ∅)
4742, 46jaoi 883 . . . . . . . . . . . . . . . 16 ((1𝑜𝑦 ∨ 1𝑜 = 𝑦) → 𝑦 ≠ ∅)
4841, 47syl 17 . . . . . . . . . . . . . . 15 (1𝑜 ∈ suc 𝑦𝑦 ≠ ∅)
4940, 48syl6bi 244 . . . . . . . . . . . . . 14 (𝑥 = suc 𝑦 → (1𝑜𝑥𝑦 ≠ ∅))
5039, 49syl5 34 . . . . . . . . . . . . 13 (𝑥 = suc 𝑦 → ((𝑥N ∧ 1𝑜 <N 𝑥) → 𝑦 ≠ ∅))
5136, 50jcad 508 . . . . . . . . . . . 12 (𝑥 = suc 𝑦 → ((𝑥N ∧ 1𝑜 <N 𝑥) → (𝑦 ∈ ω ∧ 𝑦 ≠ ∅)))
52 elni 9955 . . . . . . . . . . . 12 (𝑦N ↔ (𝑦 ∈ ω ∧ 𝑦 ≠ ∅))
5351, 52syl6ibr 243 . . . . . . . . . . 11 (𝑥 = suc 𝑦 → ((𝑥N ∧ 1𝑜 <N 𝑥) → 𝑦N))
54 simpr 477 . . . . . . . . . . . 12 ((𝑥N ∧ 1𝑜 <N 𝑥) → 1𝑜 <N 𝑥)
55 breq2 4815 . . . . . . . . . . . 12 (𝑥 = suc 𝑦 → (1𝑜 <N 𝑥 ↔ 1𝑜 <N suc 𝑦))
5654, 55syl5ib 235 . . . . . . . . . . 11 (𝑥 = suc 𝑦 → ((𝑥N ∧ 1𝑜 <N 𝑥) → 1𝑜 <N suc 𝑦))
5753, 56jcad 508 . . . . . . . . . 10 (𝑥 = suc 𝑦 → ((𝑥N ∧ 1𝑜 <N 𝑥) → (𝑦N ∧ 1𝑜 <N suc 𝑦)))
58 addclpi 9971 . . . . . . . . . . . . . . 15 ((𝑦N ∧ 1𝑜N) → (𝑦 +N 1𝑜) ∈ N)
591, 58mpan2 682 . . . . . . . . . . . . . 14 (𝑦N → (𝑦 +N 1𝑜) ∈ N)
60 addpiord 9963 . . . . . . . . . . . . . . . . . . 19 ((𝑦N ∧ 1𝑜N) → (𝑦 +N 1𝑜) = (𝑦 +𝑜 1𝑜))
611, 60mpan2 682 . . . . . . . . . . . . . . . . . 18 (𝑦N → (𝑦 +N 1𝑜) = (𝑦 +𝑜 1𝑜))
62 pion 9958 . . . . . . . . . . . . . . . . . . 19 (𝑦N𝑦 ∈ On)
63 oa1suc 7820 . . . . . . . . . . . . . . . . . . 19 (𝑦 ∈ On → (𝑦 +𝑜 1𝑜) = suc 𝑦)
6462, 63syl 17 . . . . . . . . . . . . . . . . . 18 (𝑦N → (𝑦 +𝑜 1𝑜) = suc 𝑦)
6561, 64eqtrd 2799 . . . . . . . . . . . . . . . . 17 (𝑦N → (𝑦 +N 1𝑜) = suc 𝑦)
6665eqeq2d 2775 . . . . . . . . . . . . . . . 16 (𝑦N → (𝑥 = (𝑦 +N 1𝑜) ↔ 𝑥 = suc 𝑦))
6766biimparc 471 . . . . . . . . . . . . . . 15 ((𝑥 = suc 𝑦𝑦N) → 𝑥 = (𝑦 +N 1𝑜))
6867eleq1d 2829 . . . . . . . . . . . . . 14 ((𝑥 = suc 𝑦𝑦N) → (𝑥N ↔ (𝑦 +N 1𝑜) ∈ N))
6959, 68syl5ibr 237 . . . . . . . . . . . . 13 ((𝑥 = suc 𝑦𝑦N) → (𝑦N𝑥N))
7069ex 401 . . . . . . . . . . . 12 (𝑥 = suc 𝑦 → (𝑦N → (𝑦N𝑥N)))
7170pm2.43d 53 . . . . . . . . . . 11 (𝑥 = suc 𝑦 → (𝑦N𝑥N))
7255biimprd 239 . . . . . . . . . . 11 (𝑥 = suc 𝑦 → (1𝑜 <N suc 𝑦 → 1𝑜 <N 𝑥))
7371, 72anim12d 602 . . . . . . . . . 10 (𝑥 = suc 𝑦 → ((𝑦N ∧ 1𝑜 <N suc 𝑦) → (𝑥N ∧ 1𝑜 <N 𝑥)))
7457, 73impbid 203 . . . . . . . . 9 (𝑥 = suc 𝑦 → ((𝑥N ∧ 1𝑜 <N 𝑥) ↔ (𝑦N ∧ 1𝑜 <N suc 𝑦)))
7574imbi1d 332 . . . . . . . 8 (𝑥 = suc 𝑦 → (((𝑥N ∧ 1𝑜 <N 𝑥) → 𝜑) ↔ ((𝑦N ∧ 1𝑜 <N suc 𝑦) → 𝜑)))
76 indpi.3 . . . . . . . . . . . 12 (𝑥 = (𝑦 +N 1𝑜) → (𝜑𝜃))
7766, 76syl6bir 245 . . . . . . . . . . 11 (𝑦N → (𝑥 = suc 𝑦 → (𝜑𝜃)))
7877adantr 472 . . . . . . . . . 10 ((𝑦N ∧ 1𝑜 <N suc 𝑦) → (𝑥 = suc 𝑦 → (𝜑𝜃)))
7978com12 32 . . . . . . . . 9 (𝑥 = suc 𝑦 → ((𝑦N ∧ 1𝑜 <N suc 𝑦) → (𝜑𝜃)))
8079pm5.74d 264 . . . . . . . 8 (𝑥 = suc 𝑦 → (((𝑦N ∧ 1𝑜 <N suc 𝑦) → 𝜑) ↔ ((𝑦N ∧ 1𝑜 <N suc 𝑦) → 𝜃)))
8175, 80bitrd 270 . . . . . . 7 (𝑥 = suc 𝑦 → (((𝑥N ∧ 1𝑜 <N 𝑥) → 𝜑) ↔ ((𝑦N ∧ 1𝑜 <N suc 𝑦) → 𝜃)))
82 eleq1 2832 . . . . . . . . 9 (𝑥 = 𝐴 → (𝑥N𝐴N))
83 breq2 4815 . . . . . . . . 9 (𝑥 = 𝐴 → (1𝑜 <N 𝑥 ↔ 1𝑜 <N 𝐴))
8482, 83anbi12d 624 . . . . . . . 8 (𝑥 = 𝐴 → ((𝑥N ∧ 1𝑜 <N 𝑥) ↔ (𝐴N ∧ 1𝑜 <N 𝐴)))
8584, 4imbi12d 335 . . . . . . 7 (𝑥 = 𝐴 → (((𝑥N ∧ 1𝑜 <N 𝑥) → 𝜑) ↔ ((𝐴N ∧ 1𝑜 <N 𝐴) → 𝜏)))
8652a1i 12 . . . . . . 7 (1𝑜 ∈ ω → ((1𝑜N ∧ 1𝑜 <N 1𝑜) → 𝜓))
87 ltpiord 9966 . . . . . . . . . . . . . . 15 ((1𝑜N𝑦N) → (1𝑜 <N 𝑦 ↔ 1𝑜𝑦))
881, 87mpan 681 . . . . . . . . . . . . . 14 (𝑦N → (1𝑜 <N 𝑦 ↔ 1𝑜𝑦))
8988pm5.32i 570 . . . . . . . . . . . . 13 ((𝑦N ∧ 1𝑜 <N 𝑦) ↔ (𝑦N ∧ 1𝑜𝑦))
9089simplbi2 494 . . . . . . . . . . . 12 (𝑦N → (1𝑜𝑦 → (𝑦N ∧ 1𝑜 <N 𝑦)))
9190imim1d 82 . . . . . . . . . . 11 (𝑦N → (((𝑦N ∧ 1𝑜 <N 𝑦) → 𝜒) → (1𝑜𝑦𝜒)))
92 ltrelpi 9968 . . . . . . . . . . . . . . 15 <N ⊆ (N × N)
9392brel 5338 . . . . . . . . . . . . . 14 (1𝑜 <N suc 𝑦 → (1𝑜N ∧ suc 𝑦N))
94 ltpiord 9966 . . . . . . . . . . . . . 14 ((1𝑜N ∧ suc 𝑦N) → (1𝑜 <N suc 𝑦 ↔ 1𝑜 ∈ suc 𝑦))
9593, 94syl 17 . . . . . . . . . . . . 13 (1𝑜 <N suc 𝑦 → (1𝑜 <N suc 𝑦 ↔ 1𝑜 ∈ suc 𝑦))
9695ibi 258 . . . . . . . . . . . 12 (1𝑜 <N suc 𝑦 → 1𝑜 ∈ suc 𝑦)
972eqvinc 3484 . . . . . . . . . . . . . . 15 (1𝑜 = 𝑦 ↔ ∃𝑥(𝑥 = 1𝑜𝑥 = 𝑦))
9897, 29, 7gencl 3388 . . . . . . . . . . . . . 14 (1𝑜 = 𝑦𝜒)
99 jao 983 . . . . . . . . . . . . . 14 ((1𝑜𝑦𝜒) → ((1𝑜 = 𝑦𝜒) → ((1𝑜𝑦 ∨ 1𝑜 = 𝑦) → 𝜒)))
10098, 99mpi 20 . . . . . . . . . . . . 13 ((1𝑜𝑦𝜒) → ((1𝑜𝑦 ∨ 1𝑜 = 𝑦) → 𝜒))
10141, 100syl5 34 . . . . . . . . . . . 12 ((1𝑜𝑦𝜒) → (1𝑜 ∈ suc 𝑦𝜒))
10296, 101syl5 34 . . . . . . . . . . 11 ((1𝑜𝑦𝜒) → (1𝑜 <N suc 𝑦𝜒))
10391, 102syl6com 37 . . . . . . . . . 10 (((𝑦N ∧ 1𝑜 <N 𝑦) → 𝜒) → (𝑦N → (1𝑜 <N suc 𝑦𝜒)))
104103impd 398 . . . . . . . . 9 (((𝑦N ∧ 1𝑜 <N 𝑦) → 𝜒) → ((𝑦N ∧ 1𝑜 <N suc 𝑦) → 𝜒))
10516sseq1i 3791 . . . . . . . . . . 11 (1𝑜𝑦 ↔ suc ∅ ⊆ 𝑦)
106 0ex 4952 . . . . . . . . . . . 12 ∅ ∈ V
107 sucssel 6002 . . . . . . . . . . . 12 (∅ ∈ V → (suc ∅ ⊆ 𝑦 → ∅ ∈ 𝑦))
108106, 107ax-mp 5 . . . . . . . . . . 11 (suc ∅ ⊆ 𝑦 → ∅ ∈ 𝑦)
109105, 108sylbi 208 . . . . . . . . . 10 (1𝑜𝑦 → ∅ ∈ 𝑦)
110 elni2 9956 . . . . . . . . . . 11 (𝑦N ↔ (𝑦 ∈ ω ∧ ∅ ∈ 𝑦))
111 indpi.6 . . . . . . . . . . 11 (𝑦N → (𝜒𝜃))
112110, 111sylbir 226 . . . . . . . . . 10 ((𝑦 ∈ ω ∧ ∅ ∈ 𝑦) → (𝜒𝜃))
113109, 112sylan2 586 . . . . . . . . 9 ((𝑦 ∈ ω ∧ 1𝑜𝑦) → (𝜒𝜃))
114104, 113syl9r 78 . . . . . . . 8 ((𝑦 ∈ ω ∧ 1𝑜𝑦) → (((𝑦N ∧ 1𝑜 <N 𝑦) → 𝜒) → ((𝑦N ∧ 1𝑜 <N suc 𝑦) → 𝜃)))
115114adantlr 706 . . . . . . 7 (((𝑦 ∈ ω ∧ 1𝑜 ∈ ω) ∧ 1𝑜𝑦) → (((𝑦N ∧ 1𝑜 <N 𝑦) → 𝜒) → ((𝑦N ∧ 1𝑜 <N suc 𝑦) → 𝜃)))
11625, 30, 81, 85, 86, 115findsg 7295 . . . . . 6 (((𝐴 ∈ ω ∧ 1𝑜 ∈ ω) ∧ 1𝑜𝐴) → ((𝐴N ∧ 1𝑜 <N 𝐴) → 𝜏))
11721, 116mpanl2 692 . . . . 5 ((𝐴 ∈ ω ∧ 1𝑜𝐴) → ((𝐴N ∧ 1𝑜 <N 𝐴) → 𝜏))
11811, 20, 117syl2anc 579 . . . 4 (𝐴N → ((𝐴N ∧ 1𝑜 <N 𝐴) → 𝜏))
119118expd 404 . . 3 (𝐴N → (𝐴N → (1𝑜 <N 𝐴𝜏)))
120119pm2.43i 52 . 2 (𝐴N → (1𝑜 <N 𝐴𝜏))
121 nlt1pi 9985 . . . 4 ¬ 𝐴 <N 1𝑜
122 ltsopi 9967 . . . . . 6 <N Or N
123 sotric 5226 . . . . . 6 (( <N Or N ∧ (𝐴N ∧ 1𝑜N)) → (𝐴 <N 1𝑜 ↔ ¬ (𝐴 = 1𝑜 ∨ 1𝑜 <N 𝐴)))
124122, 123mpan 681 . . . . 5 ((𝐴N ∧ 1𝑜N) → (𝐴 <N 1𝑜 ↔ ¬ (𝐴 = 1𝑜 ∨ 1𝑜 <N 𝐴)))
1251, 124mpan2 682 . . . 4 (𝐴N → (𝐴 <N 1𝑜 ↔ ¬ (𝐴 = 1𝑜 ∨ 1𝑜 <N 𝐴)))
126121, 125mtbii 317 . . 3 (𝐴N → ¬ ¬ (𝐴 = 1𝑜 ∨ 1𝑜 <N 𝐴))
127126notnotrd 130 . 2 (𝐴N → (𝐴 = 1𝑜 ∨ 1𝑜 <N 𝐴))
12810, 120, 127mpjaod 886 1 (𝐴N𝜏)
Colors of variables: wff setvar class
Syntax hints:  ¬ wn 3  wi 4  wb 197  wa 384  wo 873   = wceq 1652  wcel 2155  wne 2937  Vcvv 3350  wss 3734  c0 4081   class class class wbr 4811   Or wor 5199  Ord word 5909  Oncon0 5910  suc csuc 5912  (class class class)co 6846  ωcom 7267  1𝑜c1o 7761   +𝑜 coa 7765  Ncnpi 9923   +N cpli 9924   <N clti 9926
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1890  ax-4 1904  ax-5 2005  ax-6 2070  ax-7 2105  ax-8 2157  ax-9 2164  ax-10 2183  ax-11 2198  ax-12 2211  ax-13 2352  ax-ext 2743  ax-sep 4943  ax-nul 4951  ax-pow 5003  ax-pr 5064  ax-un 7151
This theorem depends on definitions:  df-bi 198  df-an 385  df-or 874  df-3or 1108  df-3an 1109  df-tru 1656  df-ex 1875  df-nf 1879  df-sb 2063  df-mo 2565  df-eu 2582  df-clab 2752  df-cleq 2758  df-clel 2761  df-nfc 2896  df-ne 2938  df-ral 3060  df-rex 3061  df-reu 3062  df-rab 3064  df-v 3352  df-sbc 3599  df-csb 3694  df-dif 3737  df-un 3739  df-in 3741  df-ss 3748  df-pss 3750  df-nul 4082  df-if 4246  df-pw 4319  df-sn 4337  df-pr 4339  df-tp 4341  df-op 4343  df-uni 4597  df-iun 4680  df-br 4812  df-opab 4874  df-mpt 4891  df-tr 4914  df-id 5187  df-eprel 5192  df-po 5200  df-so 5201  df-fr 5238  df-we 5240  df-xp 5285  df-rel 5286  df-cnv 5287  df-co 5288  df-dm 5289  df-rn 5290  df-res 5291  df-ima 5292  df-pred 5867  df-ord 5913  df-on 5914  df-lim 5915  df-suc 5916  df-iota 6033  df-fun 6072  df-fn 6073  df-f 6074  df-f1 6075  df-fo 6076  df-f1o 6077  df-fv 6078  df-ov 6849  df-oprab 6850  df-mpt2 6851  df-om 7268  df-wrecs 7614  df-recs 7676  df-rdg 7714  df-1o 7768  df-oadd 7772  df-ni 9951  df-pli 9952  df-lti 9954
This theorem is referenced by:  prlem934  10112
  Copyright terms: Public domain W3C validator