The ProofKnot and RefuteKnot these have methods that implement the update of the proof numbers appropriate for the particular point of view.
class ProofKnot: virtual public Knot
{
protected: // only used as a base class
ProofKnot(PNType proof_pn,
PNType refute_pn,
Knot *parent,
ValueType valMax=0,
ValueType valMin=0)
:Knot(proof_pn,refute_pn,parent,valMax,valMin){;}
public:
Knot *addGoMoveChildMaybe(const Point &point, PNType proof_pn,
PNType refute_pn);
BOOL updateParent();
void setChildVirtuallyGone(Knot *child);
Knot * selectChild();
const char * description() const {return "ProofKnot";}
};
The updateParent method simply looks at all the children's PN numbers and does the PN style update of its own. The selectCHild selects the most proving child for the PN search method.