Done properly...
1 Function(f,s0,s0)
Axiom
2 Function(g,s01,s01)
Axiom
3 1 @ s01
Axiom
4 ~1 @ s0
Axiom
More correctly, we have:
5 ALL(h):ALL(dom):ALL(cod):[Function(h,dom,cod) => ALL(x):[Undefined(h,dom,cod,x) <=> ~x @ dom]]
Axiom
6 ALL(dom):ALL(cod):[Function(f,dom,cod) => ALL(x):[Undefined(f,dom,cod,x) <=> ~x @ dom]]
U Spec, 5
7 ALL(cod):[Function(f,s0,cod) => ALL(x):[Undefined(f,s0,cod,x) <=> ~x @ s0]]
U Spec, 6
8 Function(f,s0,s0) => ALL(x):[Undefined(f,s0,s0,x) <=> ~x @ s0]
U Spec, 7
9 ALL(x):[Undefined(f,s0,s0,x) <=> ~x @ s0]
Detach, 8, 1
10 Undefined(f,s0,s0,1) <=> ~1 @ s0
U Spec, 9
11 [Undefined(f,s0,s0,1) => ~1 @ s0]
& [~1 @ s0 => Undefined(f,s0,s0,1)]
Iff-And, 10
12 Undefined(f,s0,s0,1) => ~1 @ s0
Split, 11
13 ~1 @ s0 => Undefined(f,s0,s0,1)
Split, 11
14 Undefined(f,s0,s0,1)
Detach, 13, 4
15 ALL(dom):ALL(cod):[Function(g,dom,cod) => ALL(x):[Undefined(g,dom,cod,x) <=> ~x @ dom]]
U Spec, 5
16 ALL(cod):[Function(g,s01,cod) => ALL(x):[Undefined(g,s01,cod,x) <=> ~x @ s01]]
U Spec, 15
17 Function(g,s01,s01) => ALL(x):[Undefined(g,s01,s01,x) <=> ~x @ s01]
U Spec, 16
18 ALL(x):[Undefined(g,s01,s01,x) <=> ~x @ s01]
Detach, 17, 2
19 Undefined(g,s01,s01,1) <=> ~1 @ s01
U Spec, 18
20 [Undefined(g,s01,s01,1) => ~1 @ s01]
& [~1 @ s01 => Undefined(g,s01,s01,1)]
Iff-And, 19
21 Undefined(g,s01,s01,1) => ~1 @ s01
Split, 20
22 ~1 @ s01 => Undefined(g,s01,s01,1)
Split, 20
23 ~~1 @ s01 => ~Undefined(g,s01,s01,1)
Contra, 21
24 1 @ s01 => ~Undefined(g,s01,s01,1)
Rem DNeg, 23
25 ~Undefined(g,s01,s01,1)
Detach, 24, 3
26 f=g
Premise
27 Undefined(g,s0,s0,1)
Substitute, 26, 14
28 ~Undefined(g,s01,s01,1) & Undefined(g,s0,s0,1)
Join, 25, 27
29 f=g => ~Undefined(g,s01,s01,1) & Undefined(g,s0,s0,1)
Conclusion, 26
Oh, dear... The wheels just fell off, Jan Burse! On the last line, too. Those pesky domain and codomain arguments.
Nice try, though. If it's any consolation, you are getting pretty good at DC Proof!