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

Theorem fveqf1o 7041
Description: Given a bijection 𝐹, produce another bijection 𝐺 which additionally maps two specified points. (Contributed by Mario Carneiro, 30-May-2015.)
Hypothesis
Ref Expression
fveqf1o.1 𝐺 = (𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}))
Assertion
Ref Expression
fveqf1o ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (𝐺:𝐴1-1-onto𝐵 ∧ (𝐺𝐶) = 𝐷))

Proof of Theorem fveqf1o
StepHypRef Expression
1 simp1 1133 . . . 4 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → 𝐹:𝐴1-1-onto𝐵)
2 f1oi 6631 . . . . . . . 8 ( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})):(𝐴 ∖ {𝐶, (𝐹𝐷)})–1-1-onto→(𝐴 ∖ {𝐶, (𝐹𝐷)})
32a1i 11 . . . . . . 7 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})):(𝐴 ∖ {𝐶, (𝐹𝐷)})–1-1-onto→(𝐴 ∖ {𝐶, (𝐹𝐷)}))
4 simp2 1134 . . . . . . . 8 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → 𝐶𝐴)
5 f1ocnv 6606 . . . . . . . . . 10 (𝐹:𝐴1-1-onto𝐵𝐹:𝐵1-1-onto𝐴)
6 f1of 6594 . . . . . . . . . 10 (𝐹:𝐵1-1-onto𝐴𝐹:𝐵𝐴)
71, 5, 63syl 18 . . . . . . . . 9 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → 𝐹:𝐵𝐴)
8 simp3 1135 . . . . . . . . 9 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → 𝐷𝐵)
97, 8ffvelrnd 6833 . . . . . . . 8 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (𝐹𝐷) ∈ 𝐴)
10 f1oprswap 6637 . . . . . . . 8 ((𝐶𝐴 ∧ (𝐹𝐷) ∈ 𝐴) → {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}:{𝐶, (𝐹𝐷)}–1-1-onto→{𝐶, (𝐹𝐷)})
114, 9, 10syl2anc 587 . . . . . . 7 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}:{𝐶, (𝐹𝐷)}–1-1-onto→{𝐶, (𝐹𝐷)})
12 incom 4131 . . . . . . . . 9 ((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∩ {𝐶, (𝐹𝐷)}) = ({𝐶, (𝐹𝐷)} ∩ (𝐴 ∖ {𝐶, (𝐹𝐷)}))
13 disjdif 4382 . . . . . . . . 9 ({𝐶, (𝐹𝐷)} ∩ (𝐴 ∖ {𝐶, (𝐹𝐷)})) = ∅
1412, 13eqtri 2824 . . . . . . . 8 ((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∩ {𝐶, (𝐹𝐷)}) = ∅
1514a1i 11 . . . . . . 7 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∩ {𝐶, (𝐹𝐷)}) = ∅)
16 f1oun 6613 . . . . . . 7 (((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})):(𝐴 ∖ {𝐶, (𝐹𝐷)})–1-1-onto→(𝐴 ∖ {𝐶, (𝐹𝐷)}) ∧ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}:{𝐶, (𝐹𝐷)}–1-1-onto→{𝐶, (𝐹𝐷)}) ∧ (((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∩ {𝐶, (𝐹𝐷)}) = ∅ ∧ ((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∩ {𝐶, (𝐹𝐷)}) = ∅)) → (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)})–1-1-onto→((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)}))
173, 11, 15, 15, 16syl22anc 837 . . . . . 6 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)})–1-1-onto→((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)}))
18 uncom 4083 . . . . . . . 8 ((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)}) = ({𝐶, (𝐹𝐷)} ∪ (𝐴 ∖ {𝐶, (𝐹𝐷)}))
194, 9prssd 4718 . . . . . . . . 9 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → {𝐶, (𝐹𝐷)} ⊆ 𝐴)
20 undif 4391 . . . . . . . . 9 ({𝐶, (𝐹𝐷)} ⊆ 𝐴 ↔ ({𝐶, (𝐹𝐷)} ∪ (𝐴 ∖ {𝐶, (𝐹𝐷)})) = 𝐴)
2119, 20sylib 221 . . . . . . . 8 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ({𝐶, (𝐹𝐷)} ∪ (𝐴 ∖ {𝐶, (𝐹𝐷)})) = 𝐴)
2218, 21syl5eq 2848 . . . . . . 7 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)}) = 𝐴)
2322f1oeq2d 6590 . . . . . 6 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)})–1-1-onto→((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)}) ↔ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴1-1-onto→((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)})))
2417, 23mpbid 235 . . . . 5 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴1-1-onto→((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)}))
2522f1oeq3d 6591 . . . . 5 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴1-1-onto→((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)}) ↔ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴1-1-onto𝐴))
2624, 25mpbid 235 . . . 4 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴1-1-onto𝐴)
27 f1oco 6616 . . . 4 ((𝐹:𝐴1-1-onto𝐵 ∧ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴1-1-onto𝐴) → (𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})):𝐴1-1-onto𝐵)
281, 26, 27syl2anc 587 . . 3 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})):𝐴1-1-onto𝐵)
29 fveqf1o.1 . . . 4 𝐺 = (𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}))
30 f1oeq1 6583 . . . 4 (𝐺 = (𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})) → (𝐺:𝐴1-1-onto𝐵 ↔ (𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})):𝐴1-1-onto𝐵))
3129, 30ax-mp 5 . . 3 (𝐺:𝐴1-1-onto𝐵 ↔ (𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})):𝐴1-1-onto𝐵)
3228, 31sylibr 237 . 2 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → 𝐺:𝐴1-1-onto𝐵)
3329fveq1i 6650 . . . 4 (𝐺𝐶) = ((𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}))‘𝐶)
34 f1of 6594 . . . . . 6 ((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴1-1-onto𝐴 → (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴𝐴)
3526, 34syl 17 . . . . 5 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴𝐴)
36 fvco3 6741 . . . . 5 (((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴𝐴𝐶𝐴) → ((𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}))‘𝐶) = (𝐹‘((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})‘𝐶)))
3735, 4, 36syl2anc 587 . . . 4 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ((𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}))‘𝐶) = (𝐹‘((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})‘𝐶)))
3833, 37syl5eq 2848 . . 3 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (𝐺𝐶) = (𝐹‘((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})‘𝐶)))
39 fnresi 6452 . . . . . . . 8 ( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) Fn (𝐴 ∖ {𝐶, (𝐹𝐷)})
4039a1i 11 . . . . . . 7 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) Fn (𝐴 ∖ {𝐶, (𝐹𝐷)}))
41 f1ofn 6595 . . . . . . . 8 ({⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}:{𝐶, (𝐹𝐷)}–1-1-onto→{𝐶, (𝐹𝐷)} → {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩} Fn {𝐶, (𝐹𝐷)})
4211, 41syl 17 . . . . . . 7 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩} Fn {𝐶, (𝐹𝐷)})
43 prid1g 4659 . . . . . . . 8 (𝐶𝐴𝐶 ∈ {𝐶, (𝐹𝐷)})
444, 43syl 17 . . . . . . 7 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → 𝐶 ∈ {𝐶, (𝐹𝐷)})
45 fvun2 6734 . . . . . . 7 ((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) Fn (𝐴 ∖ {𝐶, (𝐹𝐷)}) ∧ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩} Fn {𝐶, (𝐹𝐷)} ∧ (((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∩ {𝐶, (𝐹𝐷)}) = ∅ ∧ 𝐶 ∈ {𝐶, (𝐹𝐷)})) → ((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})‘𝐶) = ({⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}‘𝐶))
4640, 42, 15, 44, 45syl112anc 1371 . . . . . 6 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})‘𝐶) = ({⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}‘𝐶))
47 f1ofun 6596 . . . . . . . 8 ({⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}:{𝐶, (𝐹𝐷)}–1-1-onto→{𝐶, (𝐹𝐷)} → Fun {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})
4811, 47syl 17 . . . . . . 7 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → Fun {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})
49 opex 5324 . . . . . . . 8 𝐶, (𝐹𝐷)⟩ ∈ V
5049prid1 4661 . . . . . . 7 𝐶, (𝐹𝐷)⟩ ∈ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}
51 funopfv 6696 . . . . . . 7 (Fun {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩} → (⟨𝐶, (𝐹𝐷)⟩ ∈ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩} → ({⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}‘𝐶) = (𝐹𝐷)))
5248, 50, 51mpisyl 21 . . . . . 6 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ({⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}‘𝐶) = (𝐹𝐷))
5346, 52eqtrd 2836 . . . . 5 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})‘𝐶) = (𝐹𝐷))
5453fveq2d 6653 . . . 4 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (𝐹‘((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})‘𝐶)) = (𝐹‘(𝐹𝐷)))
55 f1ocnvfv2 7016 . . . . 5 ((𝐹:𝐴1-1-onto𝐵𝐷𝐵) → (𝐹‘(𝐹𝐷)) = 𝐷)
561, 8, 55syl2anc 587 . . . 4 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (𝐹‘(𝐹𝐷)) = 𝐷)
5754, 56eqtrd 2836 . . 3 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (𝐹‘((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})‘𝐶)) = 𝐷)
5838, 57eqtrd 2836 . 2 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (𝐺𝐶) = 𝐷)
5932, 58jca 515 1 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (𝐺:𝐴1-1-onto𝐵 ∧ (𝐺𝐶) = 𝐷))
Colors of variables: wff setvar class
Syntax hints:  wi 4  wb 209  wa 399  w3a 1084   = wceq 1538  wcel 2112  cdif 3881  cun 3882  cin 3883  wss 3884  c0 4246  {cpr 4530  cop 4534   I cid 5427  ccnv 5522  cres 5525  ccom 5527  Fun wfun 6322   Fn wfn 6323  wf 6324  1-1-ontowf1o 6327  cfv 6328
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 1911  ax-6 1970  ax-7 2015  ax-8 2114  ax-9 2122  ax-10 2143  ax-11 2159  ax-12 2176  ax-ext 2773  ax-sep 5170  ax-nul 5177  ax-pow 5234  ax-pr 5298
This theorem depends on definitions:  df-bi 210  df-an 400  df-or 845  df-3an 1086  df-tru 1541  df-ex 1782  df-nf 1786  df-sb 2070  df-mo 2601  df-eu 2632  df-clab 2780  df-cleq 2794  df-clel 2873  df-nfc 2941  df-ne 2991  df-ral 3114  df-rex 3115  df-rab 3118  df-v 3446  df-sbc 3724  df-dif 3887  df-un 3889  df-in 3891  df-ss 3901  df-nul 4247  df-if 4429  df-sn 4529  df-pr 4531  df-op 4535  df-uni 4804  df-br 5034  df-opab 5096  df-id 5428  df-xp 5529  df-rel 5530  df-cnv 5531  df-co 5532  df-dm 5533  df-rn 5534  df-res 5535  df-ima 5536  df-iota 6287  df-fun 6330  df-fn 6331  df-f 6332  df-f1 6333  df-fo 6334  df-f1o 6335  df-fv 6336
This theorem is referenced by:  infxpenc2  9437
  Copyright terms: Public domain W3C validator