// ) | B // ) | // O )| S // ) | // ) | // ) | A // Tangent(Circle(O, R), Segment(A, B)), Intersection(OS, AB) -> Perpendicular(Segment(A,B), Segment(O, S)) // private static List<EdgeAggregator> InstantiateTheorem(Tangent tangent, Intersection inter, GroundedClause original) { List<EdgeAggregator> newGrounded = new List<EdgeAggregator>(); CircleSegmentIntersection tanInter = tangent.intersection as CircleSegmentIntersection; // Does this tangent segment apply to this intersection? if (!inter.HasSegment(tanInter.segment)) return newGrounded; // Get the radius--if it exists Segment radius = null; Segment garbage = null; tanInter.GetRadii(out radius, out garbage); if (radius == null) return newGrounded; // Does this radius apply to this intersection? if (!inter.HasSubSegment(radius)) return newGrounded; Strengthened newPerp = new Strengthened(inter, new Perpendicular(inter)); // For hypergraph List<GroundedClause> antecedent = new List<GroundedClause>(); antecedent.Add(original); antecedent.Add(inter); newGrounded.Add(new EdgeAggregator(antecedent, newPerp, annotation)); return newGrounded; }