ILE Home Intuitionistic Logic Explorer < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  ILE Home  >  Th. List  >  znleval GIF version

Theorem znleval 14141
Description: The ordering of the ℤ/n structure. (Contributed by Mario Carneiro, 15-Jun-2015.) (Revised by AV, 13-Jun-2019.)
Hypotheses
Ref Expression
znle2.y 𝑌 = (ℤ/nℤ‘𝑁)
znle2.f 𝐹 = ((ℤRHom‘𝑌) ↾ 𝑊)
znle2.w 𝑊 = if(𝑁 = 0, ℤ, (0..^𝑁))
znle2.l = (le‘𝑌)
znleval.x 𝑋 = (Base‘𝑌)
Assertion
Ref Expression
znleval (𝑁 ∈ ℕ0 → (𝐴 𝐵 ↔ (𝐴𝑋𝐵𝑋 ∧ (𝐹𝐴) ≤ (𝐹𝐵))))

Proof of Theorem znleval
Dummy variable 𝑥 is distinct from all other variables.
StepHypRef Expression
1 znle2.y . . . . . . 7 𝑌 = (ℤ/nℤ‘𝑁)
2 znle2.f . . . . . . 7 𝐹 = ((ℤRHom‘𝑌) ↾ 𝑊)
3 znle2.w . . . . . . 7 𝑊 = if(𝑁 = 0, ℤ, (0..^𝑁))
4 znle2.l . . . . . . 7 = (le‘𝑌)
51, 2, 3, 4znle2 14140 . . . . . 6 (𝑁 ∈ ℕ0 = ((𝐹 ∘ ≤ ) ∘ 𝐹))
6 relco 5164 . . . . . . . 8 Rel ((𝐹 ∘ ≤ ) ∘ 𝐹)
7 relssdmrn 5186 . . . . . . . 8 (Rel ((𝐹 ∘ ≤ ) ∘ 𝐹) → ((𝐹 ∘ ≤ ) ∘ 𝐹) ⊆ (dom ((𝐹 ∘ ≤ ) ∘ 𝐹) × ran ((𝐹 ∘ ≤ ) ∘ 𝐹)))
86, 7ax-mp 5 . . . . . . 7 ((𝐹 ∘ ≤ ) ∘ 𝐹) ⊆ (dom ((𝐹 ∘ ≤ ) ∘ 𝐹) × ran ((𝐹 ∘ ≤ ) ∘ 𝐹))
9 dmcoss 4931 . . . . . . . . 9 dom ((𝐹 ∘ ≤ ) ∘ 𝐹) ⊆ dom 𝐹
10 df-rn 4670 . . . . . . . . . 10 ran 𝐹 = dom 𝐹
11 znleval.x . . . . . . . . . . . 12 𝑋 = (Base‘𝑌)
121, 11, 2, 3znf1o 14139 . . . . . . . . . . 11 (𝑁 ∈ ℕ0𝐹:𝑊1-1-onto𝑋)
13 f1ofo 5507 . . . . . . . . . . 11 (𝐹:𝑊1-1-onto𝑋𝐹:𝑊onto𝑋)
14 forn 5479 . . . . . . . . . . 11 (𝐹:𝑊onto𝑋 → ran 𝐹 = 𝑋)
1512, 13, 143syl 17 . . . . . . . . . 10 (𝑁 ∈ ℕ0 → ran 𝐹 = 𝑋)
1610, 15eqtr3id 2240 . . . . . . . . 9 (𝑁 ∈ ℕ0 → dom 𝐹 = 𝑋)
179, 16sseqtrid 3229 . . . . . . . 8 (𝑁 ∈ ℕ0 → dom ((𝐹 ∘ ≤ ) ∘ 𝐹) ⊆ 𝑋)
18 rncoss 4932 . . . . . . . . 9 ran ((𝐹 ∘ ≤ ) ∘ 𝐹) ⊆ ran (𝐹 ∘ ≤ )
19 rncoss 4932 . . . . . . . . . 10 ran (𝐹 ∘ ≤ ) ⊆ ran 𝐹
2019, 15sseqtrid 3229 . . . . . . . . 9 (𝑁 ∈ ℕ0 → ran (𝐹 ∘ ≤ ) ⊆ 𝑋)
2118, 20sstrid 3190 . . . . . . . 8 (𝑁 ∈ ℕ0 → ran ((𝐹 ∘ ≤ ) ∘ 𝐹) ⊆ 𝑋)
22 xpss12 4766 . . . . . . . 8 ((dom ((𝐹 ∘ ≤ ) ∘ 𝐹) ⊆ 𝑋 ∧ ran ((𝐹 ∘ ≤ ) ∘ 𝐹) ⊆ 𝑋) → (dom ((𝐹 ∘ ≤ ) ∘ 𝐹) × ran ((𝐹 ∘ ≤ ) ∘ 𝐹)) ⊆ (𝑋 × 𝑋))
2317, 21, 22syl2anc 411 . . . . . . 7 (𝑁 ∈ ℕ0 → (dom ((𝐹 ∘ ≤ ) ∘ 𝐹) × ran ((𝐹 ∘ ≤ ) ∘ 𝐹)) ⊆ (𝑋 × 𝑋))
248, 23sstrid 3190 . . . . . 6 (𝑁 ∈ ℕ0 → ((𝐹 ∘ ≤ ) ∘ 𝐹) ⊆ (𝑋 × 𝑋))
255, 24eqsstrd 3215 . . . . 5 (𝑁 ∈ ℕ0 ⊆ (𝑋 × 𝑋))
2625ssbrd 4072 . . . 4 (𝑁 ∈ ℕ0 → (𝐴 𝐵𝐴(𝑋 × 𝑋)𝐵))
27 brxp 4690 . . . 4 (𝐴(𝑋 × 𝑋)𝐵 ↔ (𝐴𝑋𝐵𝑋))
2826, 27imbitrdi 161 . . 3 (𝑁 ∈ ℕ0 → (𝐴 𝐵 → (𝐴𝑋𝐵𝑋)))
2928pm4.71rd 394 . 2 (𝑁 ∈ ℕ0 → (𝐴 𝐵 ↔ ((𝐴𝑋𝐵𝑋) ∧ 𝐴 𝐵)))
305adantr 276 . . . . . 6 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → = ((𝐹 ∘ ≤ ) ∘ 𝐹))
3130breqd 4040 . . . . 5 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → (𝐴 𝐵𝐴((𝐹 ∘ ≤ ) ∘ 𝐹)𝐵))
32 brcog 4829 . . . . . . 7 ((𝐴𝑋𝐵𝑋) → (𝐴((𝐹 ∘ ≤ ) ∘ 𝐹)𝐵 ↔ ∃𝑥(𝐴𝐹𝑥𝑥(𝐹 ∘ ≤ )𝐵)))
3332adantl 277 . . . . . 6 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → (𝐴((𝐹 ∘ ≤ ) ∘ 𝐹)𝐵 ↔ ∃𝑥(𝐴𝐹𝑥𝑥(𝐹 ∘ ≤ )𝐵)))
34 eqcom 2195 . . . . . . . . 9 (𝑥 = (𝐹𝐴) ↔ (𝐹𝐴) = 𝑥)
3512adantr 276 . . . . . . . . . . 11 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → 𝐹:𝑊1-1-onto𝑋)
36 f1ocnv 5513 . . . . . . . . . . 11 (𝐹:𝑊1-1-onto𝑋𝐹:𝑋1-1-onto𝑊)
37 f1ofn 5501 . . . . . . . . . . 11 (𝐹:𝑋1-1-onto𝑊𝐹 Fn 𝑋)
3835, 36, 373syl 17 . . . . . . . . . 10 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → 𝐹 Fn 𝑋)
39 simprl 529 . . . . . . . . . 10 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → 𝐴𝑋)
40 fnbrfvb 5597 . . . . . . . . . 10 ((𝐹 Fn 𝑋𝐴𝑋) → ((𝐹𝐴) = 𝑥𝐴𝐹𝑥))
4138, 39, 40syl2anc 411 . . . . . . . . 9 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → ((𝐹𝐴) = 𝑥𝐴𝐹𝑥))
4234, 41bitr2id 193 . . . . . . . 8 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → (𝐴𝐹𝑥𝑥 = (𝐹𝐴)))
4342anbi1d 465 . . . . . . 7 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → ((𝐴𝐹𝑥𝑥(𝐹 ∘ ≤ )𝐵) ↔ (𝑥 = (𝐹𝐴) ∧ 𝑥(𝐹 ∘ ≤ )𝐵)))
4443exbidv 1836 . . . . . 6 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → (∃𝑥(𝐴𝐹𝑥𝑥(𝐹 ∘ ≤ )𝐵) ↔ ∃𝑥(𝑥 = (𝐹𝐴) ∧ 𝑥(𝐹 ∘ ≤ )𝐵)))
4533, 44bitrd 188 . . . . 5 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → (𝐴((𝐹 ∘ ≤ ) ∘ 𝐹)𝐵 ↔ ∃𝑥(𝑥 = (𝐹𝐴) ∧ 𝑥(𝐹 ∘ ≤ )𝐵)))
461zncrng 14133 . . . . . . . . . . . 12 (𝑁 ∈ ℕ0𝑌 ∈ CRing)
47 eqid 2193 . . . . . . . . . . . . 13 (ℤRHom‘𝑌) = (ℤRHom‘𝑌)
4847zrhex 14109 . . . . . . . . . . . 12 (𝑌 ∈ CRing → (ℤRHom‘𝑌) ∈ V)
49 resexg 4982 . . . . . . . . . . . 12 ((ℤRHom‘𝑌) ∈ V → ((ℤRHom‘𝑌) ↾ 𝑊) ∈ V)
5046, 48, 493syl 17 . . . . . . . . . . 11 (𝑁 ∈ ℕ0 → ((ℤRHom‘𝑌) ↾ 𝑊) ∈ V)
512, 50eqeltrid 2280 . . . . . . . . . 10 (𝑁 ∈ ℕ0𝐹 ∈ V)
52 cnvexg 5203 . . . . . . . . . 10 (𝐹 ∈ V → 𝐹 ∈ V)
5351, 52syl 14 . . . . . . . . 9 (𝑁 ∈ ℕ0𝐹 ∈ V)
5453adantr 276 . . . . . . . 8 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → 𝐹 ∈ V)
55 fvexg 5573 . . . . . . . 8 ((𝐹 ∈ V ∧ 𝐴𝑋) → (𝐹𝐴) ∈ V)
5654, 39, 55syl2anc 411 . . . . . . 7 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → (𝐹𝐴) ∈ V)
57 breq1 4032 . . . . . . . 8 (𝑥 = (𝐹𝐴) → (𝑥(𝐹 ∘ ≤ )𝐵 ↔ (𝐹𝐴)(𝐹 ∘ ≤ )𝐵))
5857ceqsexgv 2889 . . . . . . 7 ((𝐹𝐴) ∈ V → (∃𝑥(𝑥 = (𝐹𝐴) ∧ 𝑥(𝐹 ∘ ≤ )𝐵) ↔ (𝐹𝐴)(𝐹 ∘ ≤ )𝐵))
5956, 58syl 14 . . . . . 6 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → (∃𝑥(𝑥 = (𝐹𝐴) ∧ 𝑥(𝐹 ∘ ≤ )𝐵) ↔ (𝐹𝐴)(𝐹 ∘ ≤ )𝐵))
60 simprr 531 . . . . . . . 8 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → 𝐵𝑋)
61 brcog 4829 . . . . . . . 8 (((𝐹𝐴) ∈ V ∧ 𝐵𝑋) → ((𝐹𝐴)(𝐹 ∘ ≤ )𝐵 ↔ ∃𝑥((𝐹𝐴) ≤ 𝑥𝑥𝐹𝐵)))
6256, 60, 61syl2anc 411 . . . . . . 7 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → ((𝐹𝐴)(𝐹 ∘ ≤ )𝐵 ↔ ∃𝑥((𝐹𝐴) ≤ 𝑥𝑥𝐹𝐵)))
63 eqcom 2195 . . . . . . . . . . . 12 (𝑥 = (𝐹𝐵) ↔ (𝐹𝐵) = 𝑥)
64 fnbrfvb 5597 . . . . . . . . . . . . 13 ((𝐹 Fn 𝑋𝐵𝑋) → ((𝐹𝐵) = 𝑥𝐵𝐹𝑥))
6538, 60, 64syl2anc 411 . . . . . . . . . . . 12 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → ((𝐹𝐵) = 𝑥𝐵𝐹𝑥))
6663, 65bitrid 192 . . . . . . . . . . 11 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → (𝑥 = (𝐹𝐵) ↔ 𝐵𝐹𝑥))
67 vex 2763 . . . . . . . . . . . 12 𝑥 ∈ V
68 brcnvg 4843 . . . . . . . . . . . 12 ((𝐵𝑋𝑥 ∈ V) → (𝐵𝐹𝑥𝑥𝐹𝐵))
6960, 67, 68sylancl 413 . . . . . . . . . . 11 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → (𝐵𝐹𝑥𝑥𝐹𝐵))
7066, 69bitrd 188 . . . . . . . . . 10 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → (𝑥 = (𝐹𝐵) ↔ 𝑥𝐹𝐵))
7170anbi1d 465 . . . . . . . . 9 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → ((𝑥 = (𝐹𝐵) ∧ (𝐹𝐴) ≤ 𝑥) ↔ (𝑥𝐹𝐵 ∧ (𝐹𝐴) ≤ 𝑥)))
7271biancomd 271 . . . . . . . 8 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → ((𝑥 = (𝐹𝐵) ∧ (𝐹𝐴) ≤ 𝑥) ↔ ((𝐹𝐴) ≤ 𝑥𝑥𝐹𝐵)))
7372exbidv 1836 . . . . . . 7 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → (∃𝑥(𝑥 = (𝐹𝐵) ∧ (𝐹𝐴) ≤ 𝑥) ↔ ∃𝑥((𝐹𝐴) ≤ 𝑥𝑥𝐹𝐵)))
74 fvexg 5573 . . . . . . . . 9 ((𝐹 ∈ V ∧ 𝐵𝑋) → (𝐹𝐵) ∈ V)
7554, 60, 74syl2anc 411 . . . . . . . 8 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → (𝐹𝐵) ∈ V)
76 breq2 4033 . . . . . . . . 9 (𝑥 = (𝐹𝐵) → ((𝐹𝐴) ≤ 𝑥 ↔ (𝐹𝐴) ≤ (𝐹𝐵)))
7776ceqsexgv 2889 . . . . . . . 8 ((𝐹𝐵) ∈ V → (∃𝑥(𝑥 = (𝐹𝐵) ∧ (𝐹𝐴) ≤ 𝑥) ↔ (𝐹𝐴) ≤ (𝐹𝐵)))
7875, 77syl 14 . . . . . . 7 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → (∃𝑥(𝑥 = (𝐹𝐵) ∧ (𝐹𝐴) ≤ 𝑥) ↔ (𝐹𝐴) ≤ (𝐹𝐵)))
7962, 73, 783bitr2d 216 . . . . . 6 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → ((𝐹𝐴)(𝐹 ∘ ≤ )𝐵 ↔ (𝐹𝐴) ≤ (𝐹𝐵)))
8059, 79bitrd 188 . . . . 5 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → (∃𝑥(𝑥 = (𝐹𝐴) ∧ 𝑥(𝐹 ∘ ≤ )𝐵) ↔ (𝐹𝐴) ≤ (𝐹𝐵)))
8131, 45, 803bitrd 214 . . . 4 ((𝑁 ∈ ℕ0 ∧ (𝐴𝑋𝐵𝑋)) → (𝐴 𝐵 ↔ (𝐹𝐴) ≤ (𝐹𝐵)))
8281pm5.32da 452 . . 3 (𝑁 ∈ ℕ0 → (((𝐴𝑋𝐵𝑋) ∧ 𝐴 𝐵) ↔ ((𝐴𝑋𝐵𝑋) ∧ (𝐹𝐴) ≤ (𝐹𝐵))))
83 df-3an 982 . . 3 ((𝐴𝑋𝐵𝑋 ∧ (𝐹𝐴) ≤ (𝐹𝐵)) ↔ ((𝐴𝑋𝐵𝑋) ∧ (𝐹𝐴) ≤ (𝐹𝐵)))
8482, 83bitr4di 198 . 2 (𝑁 ∈ ℕ0 → (((𝐴𝑋𝐵𝑋) ∧ 𝐴 𝐵) ↔ (𝐴𝑋𝐵𝑋 ∧ (𝐹𝐴) ≤ (𝐹𝐵))))
8529, 84bitrd 188 1 (𝑁 ∈ ℕ0 → (𝐴 𝐵 ↔ (𝐴𝑋𝐵𝑋 ∧ (𝐹𝐴) ≤ (𝐹𝐵))))
Colors of variables: wff set class
Syntax hints:  wi 4  wa 104  wb 105  w3a 980   = wceq 1364  wex 1503  wcel 2164  Vcvv 2760  wss 3153  ifcif 3557   class class class wbr 4029   × cxp 4657  ccnv 4658  dom cdm 4659  ran crn 4660  cres 4661  ccom 4663  Rel wrel 4664   Fn wfn 5249  ontowfo 5252  1-1-ontowf1o 5253  cfv 5254  (class class class)co 5918  0cc0 7872  cle 8055  0cn0 9240  cz 9317  ..^cfzo 10208  Basecbs 12618  lecple 12702  CRingccrg 13493  ℤRHomczrh 14099  ℤ/nczn 14101
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-ia1 106  ax-ia2 107  ax-ia3 108  ax-in1 615  ax-in2 616  ax-io 710  ax-5 1458  ax-7 1459  ax-gen 1460  ax-ie1 1504  ax-ie2 1505  ax-8 1515  ax-10 1516  ax-11 1517  ax-i12 1518  ax-bndl 1520  ax-4 1521  ax-17 1537  ax-i9 1541  ax-ial 1545  ax-i5r 1546  ax-13 2166  ax-14 2167  ax-ext 2175  ax-coll 4144  ax-sep 4147  ax-nul 4155  ax-pow 4203  ax-pr 4238  ax-un 4464  ax-setind 4569  ax-iinf 4620  ax-cnex 7963  ax-resscn 7964  ax-1cn 7965  ax-1re 7966  ax-icn 7967  ax-addcl 7968  ax-addrcl 7969  ax-mulcl 7970  ax-mulrcl 7971  ax-addcom 7972  ax-mulcom 7973  ax-addass 7974  ax-mulass 7975  ax-distr 7976  ax-i2m1 7977  ax-0lt1 7978  ax-1rid 7979  ax-0id 7980  ax-rnegex 7981  ax-precex 7982  ax-cnre 7983  ax-pre-ltirr 7984  ax-pre-ltwlin 7985  ax-pre-lttrn 7986  ax-pre-apti 7987  ax-pre-ltadd 7988  ax-pre-mulgt0 7989  ax-pre-mulext 7990  ax-arch 7991  ax-addf 7994  ax-mulf 7995
This theorem depends on definitions:  df-bi 117  df-dc 836  df-3or 981  df-3an 982  df-tru 1367  df-fal 1370  df-nf 1472  df-sb 1774  df-eu 2045  df-mo 2046  df-clab 2180  df-cleq 2186  df-clel 2189  df-nfc 2325  df-ne 2365  df-nel 2460  df-ral 2477  df-rex 2478  df-reu 2479  df-rmo 2480  df-rab 2481  df-v 2762  df-sbc 2986  df-csb 3081  df-dif 3155  df-un 3157  df-in 3159  df-ss 3166  df-nul 3447  df-if 3558  df-pw 3603  df-sn 3624  df-pr 3625  df-tp 3626  df-op 3627  df-uni 3836  df-int 3871  df-iun 3914  df-br 4030  df-opab 4091  df-mpt 4092  df-tr 4128  df-id 4324  df-po 4327  df-iso 4328  df-iord 4397  df-on 4399  df-ilim 4400  df-suc 4402  df-iom 4623  df-xp 4665  df-rel 4666  df-cnv 4667  df-co 4668  df-dm 4669  df-rn 4670  df-res 4671  df-ima 4672  df-iota 5215  df-fun 5256  df-fn 5257  df-f 5258  df-f1 5259  df-fo 5260  df-f1o 5261  df-fv 5262  df-riota 5873  df-ov 5921  df-oprab 5922  df-mpo 5923  df-1st 6193  df-2nd 6194  df-tpos 6298  df-recs 6358  df-frec 6444  df-er 6587  df-ec 6589  df-qs 6593  df-map 6704  df-pnf 8056  df-mnf 8057  df-xr 8058  df-ltxr 8059  df-le 8060  df-sub 8192  df-neg 8193  df-reap 8594  df-ap 8601  df-div 8692  df-inn 8983  df-2 9041  df-3 9042  df-4 9043  df-5 9044  df-6 9045  df-7 9046  df-8 9047  df-9 9048  df-n0 9241  df-z 9318  df-dec 9449  df-uz 9593  df-q 9685  df-rp 9720  df-fz 10075  df-fzo 10209  df-fl 10339  df-mod 10394  df-seqfrec 10519  df-cj 10986  df-dvds 11931  df-struct 12620  df-ndx 12621  df-slot 12622  df-base 12624  df-sets 12625  df-iress 12626  df-plusg 12708  df-mulr 12709  df-starv 12710  df-sca 12711  df-vsca 12712  df-ip 12713  df-ple 12715  df-0g 12869  df-iimas 12885  df-qus 12886  df-mgm 12939  df-sgrp 12985  df-mnd 12998  df-mhm 13031  df-grp 13075  df-minusg 13076  df-sbg 13077  df-mulg 13190  df-subg 13240  df-nsg 13241  df-eqg 13242  df-ghm 13311  df-cmn 13356  df-abl 13357  df-mgp 13417  df-rng 13429  df-ur 13456  df-srg 13460  df-ring 13494  df-cring 13495  df-oppr 13564  df-dvdsr 13585  df-rhm 13648  df-subrg 13715  df-lmod 13785  df-lssm 13849  df-lsp 13883  df-sra 13931  df-rgmod 13932  df-lidl 13965  df-rsp 13966  df-2idl 13996  df-icnfld 14048  df-zring 14079  df-zrh 14102  df-zn 14104
This theorem is referenced by:  znleval2  14142
  Copyright terms: Public domain W3C validator