Users' Mathboxes Mathbox for Stefan O'Rear < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  MPE Home  >  Th. List  >   Mathboxes  >  hbtlem4 Structured version   Visualization version   GIF version

Theorem hbtlem4 41439
Description: The leading ideal function goes to increasing sequences. (Contributed by Stefan O'Rear, 1-Apr-2015.)
Hypotheses
Ref Expression
hbtlem.p 𝑃 = (Poly1𝑅)
hbtlem.u 𝑈 = (LIdeal‘𝑃)
hbtlem.s 𝑆 = (ldgIdlSeq‘𝑅)
hbtlem4.r (𝜑𝑅 ∈ Ring)
hbtlem4.i (𝜑𝐼𝑈)
hbtlem4.x (𝜑𝑋 ∈ ℕ0)
hbtlem4.y (𝜑𝑌 ∈ ℕ0)
hbtlem4.xy (𝜑𝑋𝑌)
Assertion
Ref Expression
hbtlem4 (𝜑 → ((𝑆𝐼)‘𝑋) ⊆ ((𝑆𝐼)‘𝑌))

Proof of Theorem hbtlem4
Dummy variables 𝑎 𝑐 𝑏 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 hbtlem4.r . . . . . . . . . 10 (𝜑𝑅 ∈ Ring)
21ad2antrr 724 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑅 ∈ Ring)
3 hbtlem.p . . . . . . . . . 10 𝑃 = (Poly1𝑅)
43ply1ring 21619 . . . . . . . . 9 (𝑅 ∈ Ring → 𝑃 ∈ Ring)
52, 4syl 17 . . . . . . . 8 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑃 ∈ Ring)
6 hbtlem4.i . . . . . . . . 9 (𝜑𝐼𝑈)
76ad2antrr 724 . . . . . . . 8 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝐼𝑈)
8 eqid 2736 . . . . . . . . . 10 (mulGrp‘𝑃) = (mulGrp‘𝑃)
9 eqid 2736 . . . . . . . . . 10 (Base‘𝑃) = (Base‘𝑃)
108, 9mgpbas 19902 . . . . . . . . 9 (Base‘𝑃) = (Base‘(mulGrp‘𝑃))
11 eqid 2736 . . . . . . . . 9 (.g‘(mulGrp‘𝑃)) = (.g‘(mulGrp‘𝑃))
128ringmgp 19970 . . . . . . . . . 10 (𝑃 ∈ Ring → (mulGrp‘𝑃) ∈ Mnd)
135, 12syl 17 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (mulGrp‘𝑃) ∈ Mnd)
14 hbtlem4.x . . . . . . . . . . 11 (𝜑𝑋 ∈ ℕ0)
1514ad2antrr 724 . . . . . . . . . 10 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑋 ∈ ℕ0)
16 hbtlem4.y . . . . . . . . . . 11 (𝜑𝑌 ∈ ℕ0)
1716ad2antrr 724 . . . . . . . . . 10 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑌 ∈ ℕ0)
18 hbtlem4.xy . . . . . . . . . . 11 (𝜑𝑋𝑌)
1918ad2antrr 724 . . . . . . . . . 10 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑋𝑌)
20 nn0sub2 12564 . . . . . . . . . 10 ((𝑋 ∈ ℕ0𝑌 ∈ ℕ0𝑋𝑌) → (𝑌𝑋) ∈ ℕ0)
2115, 17, 19, 20syl3anc 1371 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (𝑌𝑋) ∈ ℕ0)
22 eqid 2736 . . . . . . . . . . 11 (var1𝑅) = (var1𝑅)
2322, 3, 9vr1cl 21588 . . . . . . . . . 10 (𝑅 ∈ Ring → (var1𝑅) ∈ (Base‘𝑃))
242, 23syl 17 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (var1𝑅) ∈ (Base‘𝑃))
2510, 11, 13, 21, 24mulgnn0cld 18897 . . . . . . . 8 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → ((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅)) ∈ (Base‘𝑃))
26 simplr 767 . . . . . . . 8 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑐𝐼)
27 hbtlem.u . . . . . . . . 9 𝑈 = (LIdeal‘𝑃)
28 eqid 2736 . . . . . . . . 9 (.r𝑃) = (.r𝑃)
2927, 9, 28lidlmcl 20687 . . . . . . . 8 (((𝑃 ∈ Ring ∧ 𝐼𝑈) ∧ (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅)) ∈ (Base‘𝑃) ∧ 𝑐𝐼)) → (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) ∈ 𝐼)
305, 7, 25, 26, 29syl22anc 837 . . . . . . 7 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) ∈ 𝐼)
31 eqid 2736 . . . . . . . . 9 ( deg1𝑅) = ( deg1𝑅)
329, 27lidlss 20680 . . . . . . . . . . 11 (𝐼𝑈𝐼 ⊆ (Base‘𝑃))
337, 32syl 17 . . . . . . . . . 10 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝐼 ⊆ (Base‘𝑃))
3433, 26sseldd 3945 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑐 ∈ (Base‘𝑃))
3531, 3, 22, 8, 11deg1pwle 25484 . . . . . . . . . 10 ((𝑅 ∈ Ring ∧ (𝑌𝑋) ∈ ℕ0) → (( deg1𝑅)‘((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))) ≤ (𝑌𝑋))
362, 21, 35syl2anc 584 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (( deg1𝑅)‘((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))) ≤ (𝑌𝑋))
37 simpr 485 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (( deg1𝑅)‘𝑐) ≤ 𝑋)
383, 31, 2, 9, 28, 25, 34, 21, 15, 36, 37deg1mulle2 25474 . . . . . . . 8 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (( deg1𝑅)‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐)) ≤ ((𝑌𝑋) + 𝑋))
3917nn0cnd 12475 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑌 ∈ ℂ)
4015nn0cnd 12475 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑋 ∈ ℂ)
4139, 40npcand 11516 . . . . . . . 8 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → ((𝑌𝑋) + 𝑋) = 𝑌)
4238, 41breqtrd 5131 . . . . . . 7 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (( deg1𝑅)‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐)) ≤ 𝑌)
43 eqid 2736 . . . . . . . . 9 (0g𝑅) = (0g𝑅)
4443, 3, 22, 8, 11, 9, 28, 2, 34, 21, 15coe1pwmulfv 21651 . . . . . . . 8 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → ((coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐))‘((𝑌𝑋) + 𝑋)) = ((coe1𝑐)‘𝑋))
4541fveq2d 6846 . . . . . . . 8 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → ((coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐))‘((𝑌𝑋) + 𝑋)) = ((coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐))‘𝑌))
4644, 45eqtr3d 2778 . . . . . . 7 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → ((coe1𝑐)‘𝑋) = ((coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐))‘𝑌))
47 fveq2 6842 . . . . . . . . . 10 (𝑏 = (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) → (( deg1𝑅)‘𝑏) = (( deg1𝑅)‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐)))
4847breq1d 5115 . . . . . . . . 9 (𝑏 = (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) → ((( deg1𝑅)‘𝑏) ≤ 𝑌 ↔ (( deg1𝑅)‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐)) ≤ 𝑌))
49 fveq2 6842 . . . . . . . . . . 11 (𝑏 = (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) → (coe1𝑏) = (coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐)))
5049fveq1d 6844 . . . . . . . . . 10 (𝑏 = (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) → ((coe1𝑏)‘𝑌) = ((coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐))‘𝑌))
5150eqeq2d 2747 . . . . . . . . 9 (𝑏 = (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) → (((coe1𝑐)‘𝑋) = ((coe1𝑏)‘𝑌) ↔ ((coe1𝑐)‘𝑋) = ((coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐))‘𝑌)))
5248, 51anbi12d 631 . . . . . . . 8 (𝑏 = (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) → (((( deg1𝑅)‘𝑏) ≤ 𝑌 ∧ ((coe1𝑐)‘𝑋) = ((coe1𝑏)‘𝑌)) ↔ ((( deg1𝑅)‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐)) ≤ 𝑌 ∧ ((coe1𝑐)‘𝑋) = ((coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐))‘𝑌))))
5352rspcev 3581 . . . . . . 7 (((((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) ∈ 𝐼 ∧ ((( deg1𝑅)‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐)) ≤ 𝑌 ∧ ((coe1𝑐)‘𝑋) = ((coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐))‘𝑌))) → ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌 ∧ ((coe1𝑐)‘𝑋) = ((coe1𝑏)‘𝑌)))
5430, 42, 46, 53syl12anc 835 . . . . . 6 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌 ∧ ((coe1𝑐)‘𝑋) = ((coe1𝑏)‘𝑌)))
55 eqeq1 2740 . . . . . . . 8 (𝑎 = ((coe1𝑐)‘𝑋) → (𝑎 = ((coe1𝑏)‘𝑌) ↔ ((coe1𝑐)‘𝑋) = ((coe1𝑏)‘𝑌)))
5655anbi2d 629 . . . . . . 7 (𝑎 = ((coe1𝑐)‘𝑋) → (((( deg1𝑅)‘𝑏) ≤ 𝑌𝑎 = ((coe1𝑏)‘𝑌)) ↔ ((( deg1𝑅)‘𝑏) ≤ 𝑌 ∧ ((coe1𝑐)‘𝑋) = ((coe1𝑏)‘𝑌))))
5756rexbidv 3175 . . . . . 6 (𝑎 = ((coe1𝑐)‘𝑋) → (∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌𝑎 = ((coe1𝑏)‘𝑌)) ↔ ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌 ∧ ((coe1𝑐)‘𝑋) = ((coe1𝑏)‘𝑌))))
5854, 57syl5ibrcom 246 . . . . 5 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (𝑎 = ((coe1𝑐)‘𝑋) → ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌𝑎 = ((coe1𝑏)‘𝑌))))
5958expimpd 454 . . . 4 ((𝜑𝑐𝐼) → (((( deg1𝑅)‘𝑐) ≤ 𝑋𝑎 = ((coe1𝑐)‘𝑋)) → ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌𝑎 = ((coe1𝑏)‘𝑌))))
6059rexlimdva 3152 . . 3 (𝜑 → (∃𝑐𝐼 ((( deg1𝑅)‘𝑐) ≤ 𝑋𝑎 = ((coe1𝑐)‘𝑋)) → ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌𝑎 = ((coe1𝑏)‘𝑌))))
6160ss2abdv 4020 . 2 (𝜑 → {𝑎 ∣ ∃𝑐𝐼 ((( deg1𝑅)‘𝑐) ≤ 𝑋𝑎 = ((coe1𝑐)‘𝑋))} ⊆ {𝑎 ∣ ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌𝑎 = ((coe1𝑏)‘𝑌))})
62 hbtlem.s . . . 4 𝑆 = (ldgIdlSeq‘𝑅)
633, 27, 62, 31hbtlem1 41436 . . 3 ((𝑅 ∈ Ring ∧ 𝐼𝑈𝑋 ∈ ℕ0) → ((𝑆𝐼)‘𝑋) = {𝑎 ∣ ∃𝑐𝐼 ((( deg1𝑅)‘𝑐) ≤ 𝑋𝑎 = ((coe1𝑐)‘𝑋))})
641, 6, 14, 63syl3anc 1371 . 2 (𝜑 → ((𝑆𝐼)‘𝑋) = {𝑎 ∣ ∃𝑐𝐼 ((( deg1𝑅)‘𝑐) ≤ 𝑋𝑎 = ((coe1𝑐)‘𝑋))})
653, 27, 62, 31hbtlem1 41436 . . 3 ((𝑅 ∈ Ring ∧ 𝐼𝑈𝑌 ∈ ℕ0) → ((𝑆𝐼)‘𝑌) = {𝑎 ∣ ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌𝑎 = ((coe1𝑏)‘𝑌))})
661, 6, 16, 65syl3anc 1371 . 2 (𝜑 → ((𝑆𝐼)‘𝑌) = {𝑎 ∣ ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌𝑎 = ((coe1𝑏)‘𝑌))})
6761, 64, 663sstr4d 3991 1 (𝜑 → ((𝑆𝐼)‘𝑋) ⊆ ((𝑆𝐼)‘𝑌))
Colors of variables: wff setvar class
Syntax hints:  wi 4  wa 396   = wceq 1541  wcel 2106  {cab 2713  wrex 3073  wss 3910   class class class wbr 5105  cfv 6496  (class class class)co 7357   + caddc 11054  cle 11190  cmin 11385  0cn0 12413  Basecbs 17083  .rcmulr 17134  0gc0g 17321  Mndcmnd 18556  .gcmg 18872  mulGrpcmgp 19896  Ringcrg 19964  LIdealclidl 20631  var1cv1 21547  Poly1cpl1 21548  coe1cco1 21549   deg1 cdg1 25416  ldgIdlSeqcldgis 41434
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1797  ax-4 1811  ax-5 1913  ax-6 1971  ax-7 2011  ax-8 2108  ax-9 2116  ax-10 2137  ax-11 2154  ax-12 2171  ax-ext 2707  ax-rep 5242  ax-sep 5256  ax-nul 5263  ax-pow 5320  ax-pr 5384  ax-un 7672  ax-cnex 11107  ax-resscn 11108  ax-1cn 11109  ax-icn 11110  ax-addcl 11111  ax-addrcl 11112  ax-mulcl 11113  ax-mulrcl 11114  ax-mulcom 11115  ax-addass 11116  ax-mulass 11117  ax-distr 11118  ax-i2m1 11119  ax-1ne0 11120  ax-1rid 11121  ax-rnegex 11122  ax-rrecex 11123  ax-cnre 11124  ax-pre-lttri 11125  ax-pre-lttrn 11126  ax-pre-ltadd 11127  ax-pre-mulgt0 11128  ax-pre-sup 11129  ax-addf 11130  ax-mulf 11131
This theorem depends on definitions:  df-bi 206  df-an 397  df-or 846  df-3or 1088  df-3an 1089  df-tru 1544  df-fal 1554  df-ex 1782  df-nf 1786  df-sb 2068  df-mo 2538  df-eu 2567  df-clab 2714  df-cleq 2728  df-clel 2814  df-nfc 2889  df-ne 2944  df-nel 3050  df-ral 3065  df-rex 3074  df-rmo 3353  df-reu 3354  df-rab 3408  df-v 3447  df-sbc 3740  df-csb 3856  df-dif 3913  df-un 3915  df-in 3917  df-ss 3927  df-pss 3929  df-nul 4283  df-if 4487  df-pw 4562  df-sn 4587  df-pr 4589  df-tp 4591  df-op 4593  df-uni 4866  df-int 4908  df-iun 4956  df-iin 4957  df-br 5106  df-opab 5168  df-mpt 5189  df-tr 5223  df-id 5531  df-eprel 5537  df-po 5545  df-so 5546  df-fr 5588  df-se 5589  df-we 5590  df-xp 5639  df-rel 5640  df-cnv 5641  df-co 5642  df-dm 5643  df-rn 5644  df-res 5645  df-ima 5646  df-pred 6253  df-ord 6320  df-on 6321  df-lim 6322  df-suc 6323  df-iota 6448  df-fun 6498  df-fn 6499  df-f 6500  df-f1 6501  df-fo 6502  df-f1o 6503  df-fv 6504  df-isom 6505  df-riota 7313  df-ov 7360  df-oprab 7361  df-mpo 7362  df-of 7617  df-ofr 7618  df-om 7803  df-1st 7921  df-2nd 7922  df-supp 8093  df-frecs 8212  df-wrecs 8243  df-recs 8317  df-rdg 8356  df-1o 8412  df-er 8648  df-map 8767  df-pm 8768  df-ixp 8836  df-en 8884  df-dom 8885  df-sdom 8886  df-fin 8887  df-fsupp 9306  df-sup 9378  df-oi 9446  df-card 9875  df-pnf 11191  df-mnf 11192  df-xr 11193  df-ltxr 11194  df-le 11195  df-sub 11387  df-neg 11388  df-nn 12154  df-2 12216  df-3 12217  df-4 12218  df-5 12219  df-6 12220  df-7 12221  df-8 12222  df-9 12223  df-n0 12414  df-z 12500  df-dec 12619  df-uz 12764  df-fz 13425  df-fzo 13568  df-seq 13907  df-hash 14231  df-struct 17019  df-sets 17036  df-slot 17054  df-ndx 17066  df-base 17084  df-ress 17113  df-plusg 17146  df-mulr 17147  df-starv 17148  df-sca 17149  df-vsca 17150  df-ip 17151  df-tset 17152  df-ple 17153  df-ds 17155  df-unif 17156  df-hom 17157  df-cco 17158  df-0g 17323  df-gsum 17324  df-prds 17329  df-pws 17331  df-mre 17466  df-mrc 17467  df-acs 17469  df-mgm 18497  df-sgrp 18546  df-mnd 18557  df-mhm 18601  df-submnd 18602  df-grp 18751  df-minusg 18752  df-sbg 18753  df-mulg 18873  df-subg 18925  df-ghm 19006  df-cntz 19097  df-cmn 19564  df-abl 19565  df-mgp 19897  df-ur 19914  df-ring 19966  df-cring 19967  df-subrg 20220  df-lmod 20324  df-lss 20393  df-sra 20633  df-rgmod 20634  df-lidl 20635  df-cnfld 20797  df-psr 21311  df-mvr 21312  df-mpl 21313  df-opsr 21315  df-psr1 21551  df-vr1 21552  df-ply1 21553  df-coe1 21554  df-mdeg 25417  df-deg1 25418  df-ldgis 41435
This theorem is referenced by:  hbt  41443
  Copyright terms: Public domain W3C validator