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

Theorem orbsta 19387
Description: The Orbit-Stabilizer theorem. The mapping 𝐹 is a bijection from the cosets of the stabilizer subgroup of 𝐴 to the orbit of 𝐴. (Contributed by Mario Carneiro, 15-Jan-2015.)
Hypotheses
Ref Expression
gasta.1 𝑋 = (Base‘𝐺)
gasta.2 𝐻 = {𝑢𝑋 ∣ (𝑢 𝐴) = 𝐴}
orbsta.r = (𝐺 ~QG 𝐻)
orbsta.f 𝐹 = ran (𝑘𝑋 ↦ ⟨[𝑘] , (𝑘 𝐴)⟩)
orbsta.o 𝑂 = {⟨𝑥, 𝑦⟩ ∣ ({𝑥, 𝑦} ⊆ 𝑌 ∧ ∃𝑔𝑋 (𝑔 𝑥) = 𝑦)}
Assertion
Ref Expression
orbsta (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → 𝐹:(𝑋 / )–1-1-onto→[𝐴]𝑂)
Distinct variable groups:   𝑔,𝑘,𝑥,𝑦,   𝑢,𝑔, ,𝑘,𝑥,𝑦   𝑥,𝐻,𝑦   𝐴,𝑔,𝑘,𝑢,𝑥,𝑦   𝑔,𝐺,𝑘,𝑢,𝑥,𝑦   𝑔,𝑋,𝑘,𝑢,𝑥,𝑦   𝑘,𝑂   𝑔,𝑌,𝑘,𝑥,𝑦
Allowed substitution hints:   (𝑢)   𝐹(𝑥, 𝑦, 𝑢, 𝑔, 𝑘)   𝐻(𝑢, 𝑔, 𝑘)   𝑂(𝑥, 𝑦, 𝑢, 𝑔)   𝑌(𝑢)

Proof of Theorem orbsta
Dummy variables 𝑎 𝑏 𝑤 𝑧 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 gasta.1 . . . . 5 𝑋 = (Base‘𝐺)
2 gasta.2 . . . . 5 𝐻 = {𝑢𝑋 ∣ (𝑢 𝐴) = 𝐴}
3 orbsta.r . . . . 5 = (𝐺 ~QG 𝐻)
4 orbsta.f . . . . 5 𝐹 = ran (𝑘𝑋 ↦ ⟨[𝑘] , (𝑘 𝐴)⟩)
51, 2, 3, 4orbstafun 19385 . . . 4 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → Fun 𝐹)
6 simpr 489 . . . . . . . 8 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → 𝐴𝑌)
76adantr 485 . . . . . . 7 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑘𝑋) → 𝐴𝑌)
81gaf 19369 . . . . . . . . . 10 ( ∈ (𝐺 GrpAct 𝑌) → :(𝑋 × 𝑌)⟶𝑌)
98adantr 485 . . . . . . . . 9 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → :(𝑋 × 𝑌)⟶𝑌)
109adantr 485 . . . . . . . 8 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑘𝑋) → :(𝑋 × 𝑌)⟶𝑌)
11 simpr 489 . . . . . . . 8 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑘𝑋) → 𝑘𝑋)
1210, 11, 7fovcdmd 7582 . . . . . . 7 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑘𝑋) → (𝑘 𝐴) ∈ 𝑌)
13 eqid 2763 . . . . . . . 8 (𝑘 𝐴) = (𝑘 𝐴)
14 oveq1 7417 . . . . . . . . . 10 ( = 𝑘 → ( 𝐴) = (𝑘 𝐴))
1514eqeq1d 2765 . . . . . . . . 9 ( = 𝑘 → (( 𝐴) = (𝑘 𝐴) ↔ (𝑘 𝐴) = (𝑘 𝐴)))
1615rspcev 3581 . . . . . . . 8 ((𝑘𝑋 ∧ (𝑘 𝐴) = (𝑘 𝐴)) → ∃𝑋 ( 𝐴) = (𝑘 𝐴))
1711, 13, 16sylancl 597 . . . . . . 7 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑘𝑋) → ∃𝑋 ( 𝐴) = (𝑘 𝐴))
18 orbsta.o . . . . . . . 8 𝑂 = {⟨𝑥, 𝑦⟩ ∣ ({𝑥, 𝑦} ⊆ 𝑌 ∧ ∃𝑔𝑋 (𝑔 𝑥) = 𝑦)}
1918gaorb 19381 . . . . . . 7 (𝐴𝑂(𝑘 𝐴) ↔ (𝐴𝑌 ∧ (𝑘 𝐴) ∈ 𝑌 ∧ ∃𝑋 ( 𝐴) = (𝑘 𝐴)))
207, 12, 17, 19syl3anbrc 1362 . . . . . 6 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑘𝑋) → 𝐴𝑂(𝑘 𝐴))
21 ovex 7443 . . . . . . 7 (𝑘 𝐴) ∈ V
22 elecg 8735 . . . . . . 7 (((𝑘 𝐴) ∈ V ∧ 𝐴𝑌) → ((𝑘 𝐴) ∈ [𝐴]𝑂𝐴𝑂(𝑘 𝐴)))
2321, 7, 22sylancr 598 . . . . . 6 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑘𝑋) → ((𝑘 𝐴) ∈ [𝐴]𝑂𝐴𝑂(𝑘 𝐴)))
2420, 23mpbird 260 . . . . 5 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑘𝑋) → (𝑘 𝐴) ∈ [𝐴]𝑂)
251, 2gastacl 19383 . . . . . 6 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → 𝐻 ∈ (SubGrp‘𝐺))
261, 3eqger 19250 . . . . . 6 (𝐻 ∈ (SubGrp‘𝐺) → Er 𝑋)
2725, 26syl 18 . . . . 5 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → Er 𝑋)
281fvexi 6895 . . . . . 6 𝑋 ∈ V
2928a1i 11 . . . . 5 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → 𝑋 ∈ V)
304, 24, 27, 29qliftf 8799 . . . 4 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → (Fun 𝐹𝐹:(𝑋 / )⟶[𝐴]𝑂))
315, 30mpbid 235 . . 3 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → 𝐹:(𝑋 / )⟶[𝐴]𝑂)
32 eqid 2763 . . . . 5 (𝑋 / ) = (𝑋 / )
33 fveqeq2 6890 . . . . . . 7 ([𝑧] = 𝑎 → ((𝐹‘[𝑧] ) = (𝐹𝑏) ↔ (𝐹𝑎) = (𝐹𝑏)))
34 eqeq1 2767 . . . . . . 7 ([𝑧] = 𝑎 → ([𝑧] = 𝑏𝑎 = 𝑏))
3533, 34imbi12d 347 . . . . . 6 ([𝑧] = 𝑎 → (((𝐹‘[𝑧] ) = (𝐹𝑏) → [𝑧] = 𝑏) ↔ ((𝐹𝑎) = (𝐹𝑏) → 𝑎 = 𝑏)))
3635ralbidv 3188 . . . . 5 ([𝑧] = 𝑎 → (∀𝑏 ∈ (𝑋 / )((𝐹‘[𝑧] ) = (𝐹𝑏) → [𝑧] = 𝑏) ↔ ∀𝑏 ∈ (𝑋 / )((𝐹𝑎) = (𝐹𝑏) → 𝑎 = 𝑏)))
37 fveq2 6881 . . . . . . . . 9 ([𝑤] = 𝑏 → (𝐹‘[𝑤] ) = (𝐹𝑏))
3837eqeq2d 2774 . . . . . . . 8 ([𝑤] = 𝑏 → ((𝐹‘[𝑧] ) = (𝐹‘[𝑤] ) ↔ (𝐹‘[𝑧] ) = (𝐹𝑏)))
39 eqeq2 2775 . . . . . . . 8 ([𝑤] = 𝑏 → ([𝑧] = [𝑤] ↔ [𝑧] = 𝑏))
4038, 39imbi12d 347 . . . . . . 7 ([𝑤] = 𝑏 → (((𝐹‘[𝑧] ) = (𝐹‘[𝑤] ) → [𝑧] = [𝑤] ) ↔ ((𝐹‘[𝑧] ) = (𝐹𝑏) → [𝑧] = 𝑏)))
411, 2, 3, 4orbstaval 19386 . . . . . . . . . . . 12 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑧𝑋) → (𝐹‘[𝑧] ) = (𝑧 𝐴))
4241adantrr 729 . . . . . . . . . . 11 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → (𝐹‘[𝑧] ) = (𝑧 𝐴))
431, 2, 3, 4orbstaval 19386 . . . . . . . . . . . 12 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑤𝑋) → (𝐹‘[𝑤] ) = (𝑤 𝐴))
4443adantrl 728 . . . . . . . . . . 11 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → (𝐹‘[𝑤] ) = (𝑤 𝐴))
4542, 44eqeq12d 2779 . . . . . . . . . 10 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → ((𝐹‘[𝑧] ) = (𝐹‘[𝑤] ) ↔ (𝑧 𝐴) = (𝑤 𝐴)))
461, 2, 3gastacos 19384 . . . . . . . . . 10 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → (𝑧 𝑤 ↔ (𝑧 𝐴) = (𝑤 𝐴)))
4727adantr 485 . . . . . . . . . . 11 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → Er 𝑋)
48 simprl 782 . . . . . . . . . . 11 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → 𝑧𝑋)
4947, 48erth 8745 . . . . . . . . . 10 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → (𝑧 𝑤 ↔ [𝑧] = [𝑤] ))
5045, 46, 493bitr2d 310 . . . . . . . . 9 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → ((𝐹‘[𝑧] ) = (𝐹‘[𝑤] ) ↔ [𝑧] = [𝑤] ))
5150biimpd 232 . . . . . . . 8 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ (𝑧𝑋𝑤𝑋)) → ((𝐹‘[𝑧] ) = (𝐹‘[𝑤] ) → [𝑧] = [𝑤] ))
5251anassrs 472 . . . . . . 7 (((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑧𝑋) ∧ 𝑤𝑋) → ((𝐹‘[𝑧] ) = (𝐹‘[𝑤] ) → [𝑧] = [𝑤] ))
5332, 40, 52ectocld 8776 . . . . . 6 (((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑧𝑋) ∧ 𝑏 ∈ (𝑋 / )) → ((𝐹‘[𝑧] ) = (𝐹𝑏) → [𝑧] = 𝑏))
5453ralrimiva 3157 . . . . 5 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑧𝑋) → ∀𝑏 ∈ (𝑋 / )((𝐹‘[𝑧] ) = (𝐹𝑏) → [𝑧] = 𝑏))
5532, 36, 54ectocld 8776 . . . 4 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑎 ∈ (𝑋 / )) → ∀𝑏 ∈ (𝑋 / )((𝐹𝑎) = (𝐹𝑏) → 𝑎 = 𝑏))
5655ralrimiva 3157 . . 3 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → ∀𝑎 ∈ (𝑋 / )∀𝑏 ∈ (𝑋 / )((𝐹𝑎) = (𝐹𝑏) → 𝑎 = 𝑏))
57 dff13 7252 . . 3 (𝐹:(𝑋 / )–1-1→[𝐴]𝑂 ↔ (𝐹:(𝑋 / )⟶[𝐴]𝑂 ∧ ∀𝑎 ∈ (𝑋 / )∀𝑏 ∈ (𝑋 / )((𝐹𝑎) = (𝐹𝑏) → 𝑎 = 𝑏)))
5831, 56, 57sylanbrc 594 . 2 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → 𝐹:(𝑋 / )–1-1→[𝐴]𝑂)
59 vex 3459 . . . . . . . . 9 ∈ V
60 elecg 8735 . . . . . . . . 9 (( ∈ V ∧ 𝐴𝑌) → ( ∈ [𝐴]𝑂𝐴𝑂))
6159, 6, 60sylancr 598 . . . . . . . 8 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → ( ∈ [𝐴]𝑂𝐴𝑂))
6218gaorb 19381 . . . . . . . 8 (𝐴𝑂 ↔ (𝐴𝑌𝑌 ∧ ∃𝑤𝑋 (𝑤 𝐴) = ))
6361, 62bitrdi 290 . . . . . . 7 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → ( ∈ [𝐴]𝑂 ↔ (𝐴𝑌𝑌 ∧ ∃𝑤𝑋 (𝑤 𝐴) = )))
6463biimpa 481 . . . . . 6 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ ∈ [𝐴]𝑂) → (𝐴𝑌𝑌 ∧ ∃𝑤𝑋 (𝑤 𝐴) = ))
6564simp3d 1162 . . . . 5 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ ∈ [𝐴]𝑂) → ∃𝑤𝑋 (𝑤 𝐴) = )
663ovexi 7444 . . . . . . . . . 10 ∈ V
6766ecelqsi 8763 . . . . . . . . 9 (𝑤𝑋 → [𝑤] ∈ (𝑋 / ))
6843eqcomd 2769 . . . . . . . . 9 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑤𝑋) → (𝑤 𝐴) = (𝐹‘[𝑤] ))
69 fveq2 6881 . . . . . . . . . 10 (𝑧 = [𝑤] → (𝐹𝑧) = (𝐹‘[𝑤] ))
7069rspceeqv 3604 . . . . . . . . 9 (([𝑤] ∈ (𝑋 / ) ∧ (𝑤 𝐴) = (𝐹‘[𝑤] )) → ∃𝑧 ∈ (𝑋 / )(𝑤 𝐴) = (𝐹𝑧))
7167, 68, 70syl2an2 698 . . . . . . . 8 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑤𝑋) → ∃𝑧 ∈ (𝑋 / )(𝑤 𝐴) = (𝐹𝑧))
72 eqeq1 2767 . . . . . . . . 9 ((𝑤 𝐴) = → ((𝑤 𝐴) = (𝐹𝑧) ↔ = (𝐹𝑧)))
7372rexbidv 3189 . . . . . . . 8 ((𝑤 𝐴) = → (∃𝑧 ∈ (𝑋 / )(𝑤 𝐴) = (𝐹𝑧) ↔ ∃𝑧 ∈ (𝑋 / ) = (𝐹𝑧)))
7471, 73syl5ibcom 248 . . . . . . 7 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ 𝑤𝑋) → ((𝑤 𝐴) = → ∃𝑧 ∈ (𝑋 / ) = (𝐹𝑧)))
7574rexlimdva 3166 . . . . . 6 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → (∃𝑤𝑋 (𝑤 𝐴) = → ∃𝑧 ∈ (𝑋 / ) = (𝐹𝑧)))
7675imp 411 . . . . 5 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ ∃𝑤𝑋 (𝑤 𝐴) = ) → ∃𝑧 ∈ (𝑋 / ) = (𝐹𝑧))
7765, 76syldan 602 . . . 4 ((( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) ∧ ∈ [𝐴]𝑂) → ∃𝑧 ∈ (𝑋 / ) = (𝐹𝑧))
7877ralrimiva 3157 . . 3 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → ∀ ∈ [ 𝐴]𝑂𝑧 ∈ (𝑋 / ) = (𝐹𝑧))
79 dffo3 7097 . . 3 (𝐹:(𝑋 / )–onto→[𝐴]𝑂 ↔ (𝐹:(𝑋 / )⟶[𝐴]𝑂 ∧ ∀ ∈ [ 𝐴]𝑂𝑧 ∈ (𝑋 / ) = (𝐹𝑧)))
8031, 78, 79sylanbrc 594 . 2 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → 𝐹:(𝑋 / )–onto→[𝐴]𝑂)
81 df-f1o 6543 . 2 (𝐹:(𝑋 / )–1-1-onto→[𝐴]𝑂 ↔ (𝐹:(𝑋 / )–1-1→[𝐴]𝑂𝐹:(𝑋 / )–onto→[𝐴]𝑂))
8258, 80, 81sylanbrc 594 1 (( ∈ (𝐺 GrpAct 𝑌) ∧ 𝐴𝑌) → 𝐹:(𝑋 / )–1-1-onto→[𝐴]𝑂)
Colors of variables:    wff setvar class
This proof depends on syntax axioms:  wi 4  wb 209  wa 400  w3a 1103   = wceq 1570  wcel 2143  wral 3079  wrex 3089  {crab 3416  Vcvv 3455  wss 3905  {cpr 4591  cop 4595   class class class wbr 5109  {copab 5173  cmpt 5192   × cxp 5659  ran crn 5662  Fun wfun 6530  wf 6532  1-1wf1 6533  ontowfo 6534  1-1-ontowf1o 6535  cfv 6536  (class class class)co 7410   Er wer 8687  [cec 8688   / cqs 8689  Basecbs 17273  SubGrpcsubg 19190   ~QG cqg 19192   GrpAct cga 19363
This proof depends on axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1825  ax-4 1839  ax-5 1940  ax-6 1997  ax-7 2038  ax-8 2145  ax-9 2153  ax-10 2176  ax-11 2192  ax-12 2213  ax-ext 2735  ax-sep 5257  ax-nul 5269  ax-pow 5336  ax-pr 5404  ax-un 7732  ax-cnex 11160  ax-resscn 11161  ax-1cn 11162  ax-icn 11163  ax-addcl 11164  ax-addrcl 11165  ax-mulcl 11166  ax-mulrcl 11167  ax-mulcom 11168  ax-addass 11169  ax-mulass 11170  ax-distr 11171  ax-i2m1 11172  ax-1ne0 11173  ax-1rid 11174  ax-rnegex 11175  ax-rrecex 11176  ax-cnre 11177  ax-pre-lttri 11178  ax-pre-lttrn 11179  ax-pre-ltadd 11180  ax-pre-mulgt0 11181
This proof depends on definitions:  df-bi 210  df-an 401  df-or 861  df-3or 1104  df-3an 1105  df-tru 1573  df-fal 1583  df-ex 1810  df-nf 1814  df-sb 2097  df-mo 2567  df-eu 2597  df-clab 2742  df-cleq 2755  df-clel 2838  df-nfc 2912  df-ne 2959  df-nel 3065  df-ral 3080  df-rex 3090  df-rmo 3369  df-reu 3370  df-rab 3417  df-v 3457  df-sbc 3745  df-csb 3854  df-dif 3908  df-un 3910  df-in 3912  df-ss 3922  df-pss 3925  df-nul 4287  df-if 4488  df-pw 4564  df-sn 4590  df-pr 4592  df-op 4596  df-uni 4873  df-iun 4958  df-br 5110  df-opab 5174  df-mpt 5193  df-tr 5219  df-id 5556  df-eprel 5561  df-po 5569  df-so 5570  df-fr 5614  df-we 5616  df-xp 5667  df-rel 5668  df-cnv 5669  df-co 5670  df-dm 5671  df-rn 5672  df-res 5673  df-ima 5674  df-pred 6302  df-ord 6363  df-on 6364  df-lim 6365  df-suc 6366  df-iota 6492  df-fun 6538  df-fn 6539  df-f 6540  df-f1 6541  df-fo 6542  df-f1o 6543  df-fv 6544  df-riota 7367  df-ov 7413  df-oprab 7414  df-mpo 7415  df-om 7859  df-1st 7982  df-2nd 7983  df-frecs 8274  df-wrecs 8305  df-recs 8354  df-rdg 8393  df-er 8690  df-ec 8692  df-qs 8696  df-map 8822  df-en 8940  df-dom 8941  df-sdom 8942  df-pnf 11249  df-mnf 11250  df-xr 11251  df-ltxr 11252  df-le 11253  df-sub 11447  df-neg 11448  df-nn 12238  df-2 12307  df-sets 17228  df-slot 17246  df-ndx 17258  df-base 17274  df-ress 17295  df-plusg 17327  df-0g 17498  df-mgm 18702  df-sgrp 18781  df-mnd 18797  df-grp 19007  df-minusg 19008  df-subg 19193  df-eqg 19195  df-ga 19364
This theorem is used by:  orbsta2  19388
  Copyright terms: Public domain W3C validator