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

Theorem fveqf1o 7058
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 1132 . . . 4 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → 𝐹:𝐴1-1-onto𝐵)
2 f1oi 6652 . . . . . . . 8 ( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})):(𝐴 ∖ {𝐶, (𝐹𝐷)})–1-1-onto→(𝐴 ∖ {𝐶, (𝐹𝐷)})
32a1i 11 . . . . . . 7 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})):(𝐴 ∖ {𝐶, (𝐹𝐷)})–1-1-onto→(𝐴 ∖ {𝐶, (𝐹𝐷)}))
4 simp2 1133 . . . . . . . 8 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → 𝐶𝐴)
5 f1ocnv 6627 . . . . . . . . . 10 (𝐹:𝐴1-1-onto𝐵𝐹:𝐵1-1-onto𝐴)
6 f1of 6615 . . . . . . . . . 10 (𝐹:𝐵1-1-onto𝐴𝐹:𝐵𝐴)
71, 5, 63syl 18 . . . . . . . . 9 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → 𝐹:𝐵𝐴)
8 simp3 1134 . . . . . . . . 9 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → 𝐷𝐵)
97, 8ffvelrnd 6852 . . . . . . . 8 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (𝐹𝐷) ∈ 𝐴)
10 f1oprswap 6658 . . . . . . . 8 ((𝐶𝐴 ∧ (𝐹𝐷) ∈ 𝐴) → {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}:{𝐶, (𝐹𝐷)}–1-1-onto→{𝐶, (𝐹𝐷)})
114, 9, 10syl2anc 586 . . . . . . 7 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}:{𝐶, (𝐹𝐷)}–1-1-onto→{𝐶, (𝐹𝐷)})
12 incom 4178 . . . . . . . . 9 ((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∩ {𝐶, (𝐹𝐷)}) = ({𝐶, (𝐹𝐷)} ∩ (𝐴 ∖ {𝐶, (𝐹𝐷)}))
13 disjdif 4421 . . . . . . . . 9 ({𝐶, (𝐹𝐷)} ∩ (𝐴 ∖ {𝐶, (𝐹𝐷)})) = ∅
1412, 13eqtri 2844 . . . . . . . 8 ((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∩ {𝐶, (𝐹𝐷)}) = ∅
1514a1i 11 . . . . . . 7 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∩ {𝐶, (𝐹𝐷)}) = ∅)
16 f1oun 6634 . . . . . . 7 (((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})):(𝐴 ∖ {𝐶, (𝐹𝐷)})–1-1-onto→(𝐴 ∖ {𝐶, (𝐹𝐷)}) ∧ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}:{𝐶, (𝐹𝐷)}–1-1-onto→{𝐶, (𝐹𝐷)}) ∧ (((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∩ {𝐶, (𝐹𝐷)}) = ∅ ∧ ((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∩ {𝐶, (𝐹𝐷)}) = ∅)) → (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)})–1-1-onto→((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)}))
173, 11, 15, 15, 16syl22anc 836 . . . . . 6 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)})–1-1-onto→((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)}))
18 uncom 4129 . . . . . . . 8 ((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)}) = ({𝐶, (𝐹𝐷)} ∪ (𝐴 ∖ {𝐶, (𝐹𝐷)}))
194, 9prssd 4755 . . . . . . . . 9 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → {𝐶, (𝐹𝐷)} ⊆ 𝐴)
20 undif 4430 . . . . . . . . 9 ({𝐶, (𝐹𝐷)} ⊆ 𝐴 ↔ ({𝐶, (𝐹𝐷)} ∪ (𝐴 ∖ {𝐶, (𝐹𝐷)})) = 𝐴)
2119, 20sylib 220 . . . . . . . 8 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ({𝐶, (𝐹𝐷)} ∪ (𝐴 ∖ {𝐶, (𝐹𝐷)})) = 𝐴)
2218, 21syl5eq 2868 . . . . . . 7 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)}) = 𝐴)
2322f1oeq2d 6611 . . . . . 6 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)})–1-1-onto→((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)}) ↔ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴1-1-onto→((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)})))
2417, 23mpbid 234 . . . . 5 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴1-1-onto→((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)}))
2522f1oeq3d 6612 . . . . 5 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴1-1-onto→((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∪ {𝐶, (𝐹𝐷)}) ↔ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴1-1-onto𝐴))
2624, 25mpbid 234 . . . 4 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴1-1-onto𝐴)
27 f1oco 6637 . . . 4 ((𝐹:𝐴1-1-onto𝐵 ∧ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴1-1-onto𝐴) → (𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})):𝐴1-1-onto𝐵)
281, 26, 27syl2anc 586 . . 3 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})):𝐴1-1-onto𝐵)
29 fveqf1o.1 . . . 4 𝐺 = (𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}))
30 f1oeq1 6604 . . . 4 (𝐺 = (𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})) → (𝐺:𝐴1-1-onto𝐵 ↔ (𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})):𝐴1-1-onto𝐵))
3129, 30ax-mp 5 . . 3 (𝐺:𝐴1-1-onto𝐵 ↔ (𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})):𝐴1-1-onto𝐵)
3228, 31sylibr 236 . 2 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → 𝐺:𝐴1-1-onto𝐵)
3329fveq1i 6671 . . . 4 (𝐺𝐶) = ((𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}))‘𝐶)
34 f1of 6615 . . . . . 6 ((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴1-1-onto𝐴 → (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴𝐴)
3526, 34syl 17 . . . . 5 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴𝐴)
36 fvco3 6760 . . . . 5 (((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}):𝐴𝐴𝐶𝐴) → ((𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}))‘𝐶) = (𝐹‘((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})‘𝐶)))
3735, 4, 36syl2anc 586 . . . 4 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ((𝐹 ∘ (( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}))‘𝐶) = (𝐹‘((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})‘𝐶)))
3833, 37syl5eq 2868 . . 3 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (𝐺𝐶) = (𝐹‘((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})‘𝐶)))
39 fnresi 6476 . . . . . . . 8 ( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) Fn (𝐴 ∖ {𝐶, (𝐹𝐷)})
4039a1i 11 . . . . . . 7 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) Fn (𝐴 ∖ {𝐶, (𝐹𝐷)}))
41 f1ofn 6616 . . . . . . . 8 ({⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}:{𝐶, (𝐹𝐷)}–1-1-onto→{𝐶, (𝐹𝐷)} → {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩} Fn {𝐶, (𝐹𝐷)})
4211, 41syl 17 . . . . . . 7 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩} Fn {𝐶, (𝐹𝐷)})
43 prid1g 4696 . . . . . . . 8 (𝐶𝐴𝐶 ∈ {𝐶, (𝐹𝐷)})
444, 43syl 17 . . . . . . 7 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → 𝐶 ∈ {𝐶, (𝐹𝐷)})
45 fvun2 6755 . . . . . . 7 ((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) Fn (𝐴 ∖ {𝐶, (𝐹𝐷)}) ∧ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩} Fn {𝐶, (𝐹𝐷)} ∧ (((𝐴 ∖ {𝐶, (𝐹𝐷)}) ∩ {𝐶, (𝐹𝐷)}) = ∅ ∧ 𝐶 ∈ {𝐶, (𝐹𝐷)})) → ((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})‘𝐶) = ({⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}‘𝐶))
4640, 42, 15, 44, 45syl112anc 1370 . . . . . 6 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})‘𝐶) = ({⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}‘𝐶))
47 f1ofun 6617 . . . . . . . 8 ({⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}:{𝐶, (𝐹𝐷)}–1-1-onto→{𝐶, (𝐹𝐷)} → Fun {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})
4811, 47syl 17 . . . . . . 7 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → Fun {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})
49 opex 5356 . . . . . . . 8 𝐶, (𝐹𝐷)⟩ ∈ V
5049prid1 4698 . . . . . . 7 𝐶, (𝐹𝐷)⟩ ∈ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}
51 funopfv 6717 . . . . . . 7 (Fun {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩} → (⟨𝐶, (𝐹𝐷)⟩ ∈ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩} → ({⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}‘𝐶) = (𝐹𝐷)))
5248, 50, 51mpisyl 21 . . . . . 6 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ({⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩}‘𝐶) = (𝐹𝐷))
5346, 52eqtrd 2856 . . . . 5 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → ((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})‘𝐶) = (𝐹𝐷))
5453fveq2d 6674 . . . 4 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (𝐹‘((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})‘𝐶)) = (𝐹‘(𝐹𝐷)))
55 f1ocnvfv2 7034 . . . . 5 ((𝐹:𝐴1-1-onto𝐵𝐷𝐵) → (𝐹‘(𝐹𝐷)) = 𝐷)
561, 8, 55syl2anc 586 . . . 4 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (𝐹‘(𝐹𝐷)) = 𝐷)
5754, 56eqtrd 2856 . . 3 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (𝐹‘((( I ↾ (𝐴 ∖ {𝐶, (𝐹𝐷)})) ∪ {⟨𝐶, (𝐹𝐷)⟩, ⟨(𝐹𝐷), 𝐶⟩})‘𝐶)) = 𝐷)
5838, 57eqtrd 2856 . 2 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (𝐺𝐶) = 𝐷)
5932, 58jca 514 1 ((𝐹:𝐴1-1-onto𝐵𝐶𝐴𝐷𝐵) → (𝐺:𝐴1-1-onto𝐵 ∧ (𝐺𝐶) = 𝐷))
Colors of variables: wff setvar class
Syntax hints:  wi 4  wb 208  wa 398  w3a 1083   = wceq 1537  wcel 2114  cdif 3933  cun 3934  cin 3935  wss 3936  c0 4291  {cpr 4569  cop 4573   I cid 5459  ccnv 5554  cres 5557  ccom 5559  Fun wfun 6349   Fn wfn 6350  wf 6351  1-1-ontowf1o 6354  cfv 6355
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1796  ax-4 1810  ax-5 1911  ax-6 1970  ax-7 2015  ax-8 2116  ax-9 2124  ax-10 2145  ax-11 2161  ax-12 2177  ax-ext 2793  ax-sep 5203  ax-nul 5210  ax-pow 5266  ax-pr 5330
This theorem depends on definitions:  df-bi 209  df-an 399  df-or 844  df-3an 1085  df-tru 1540  df-ex 1781  df-nf 1785  df-sb 2070  df-mo 2622  df-eu 2654  df-clab 2800  df-cleq 2814  df-clel 2893  df-nfc 2963  df-ne 3017  df-ral 3143  df-rex 3144  df-rab 3147  df-v 3496  df-sbc 3773  df-dif 3939  df-un 3941  df-in 3943  df-ss 3952  df-nul 4292  df-if 4468  df-sn 4568  df-pr 4570  df-op 4574  df-uni 4839  df-br 5067  df-opab 5129  df-id 5460  df-xp 5561  df-rel 5562  df-cnv 5563  df-co 5564  df-dm 5565  df-rn 5566  df-res 5567  df-ima 5568  df-iota 6314  df-fun 6357  df-fn 6358  df-f 6359  df-f1 6360  df-fo 6361  df-f1o 6362  df-fv 6363
This theorem is referenced by:  infxpenc2  9448
  Copyright terms: Public domain W3C validator