---
title: "FindGeometricConjectures"
language: "en"
type: "Symbol"
summary: "FindGeometricConjectures[scene] finds conjectures that appear to hold for the GeometricScene object scene and adds these conjectures to the scene object. FindGeometricConjectures[{scene1, scene2, ...}] finds conjectures that appear to hold for all instances scenei of a geometric scene and returns a combined scene with the conjectures added. FindGeometricConjectures[scenes, patt] adds only conjectures that match the pattern patt. FindGeometricConjectures[scenes, patt, n] adds only up to n conjectures."
keywords: 
- geometric conjecture
canonical_url: "https://reference.wolfram.com/language/ref/FindGeometricConjectures.html"
source: "Wolfram Language Documentation"
related_guides: 
  - 
    title: "Plane Geometry"
    link: "https://reference.wolfram.com/language/guide/PlaneGeometry.en.md"
  - 
    title: "Synthetic Geometry"
    link: "https://reference.wolfram.com/language/guide/SyntheticGeometry.en.md"
  - 
    title: "Geometric Computation"
    link: "https://reference.wolfram.com/language/guide/GeometricComputation.en.md"
  - 
    title: "Solvers over Regions"
    link: "https://reference.wolfram.com/language/guide/GeometricSolvers.en.md"
related_functions: 
  - 
    title: "RandomInstance"
    link: "https://reference.wolfram.com/language/ref/RandomInstance.en.md"
  - 
    title: "GeometricScene"
    link: "https://reference.wolfram.com/language/ref/GeometricScene.en.md"
  - 
    title: "GeometricAssertion"
    link: "https://reference.wolfram.com/language/ref/GeometricAssertion.en.md"
  - 
    title: "Reduce"
    link: "https://reference.wolfram.com/language/ref/Reduce.en.md"
  - 
    title: "FindEquationalProof"
    link: "https://reference.wolfram.com/language/ref/FindEquationalProof.en.md"
related_tutorials: 
  - 
    title: "Synthetic Geometry"
    link: "https://reference.wolfram.com/language/tutorial/SyntheticGeometry.en.md"
---
[EXPERIMENTAL]

# FindGeometricConjectures

FindGeometricConjectures[scene] finds conjectures that appear to hold for the GeometricScene object scene and adds these conjectures to the scene object.

FindGeometricConjectures[{scene1, scene2, …}] finds conjectures that appear to hold for all instances scenei of a geometric scene and returns a combined scene with the conjectures added.

FindGeometricConjectures[scenes, patt] adds only conjectures that match the pattern patt.

FindGeometricConjectures[scenes, patt, n] adds only up to n conjectures.

## Details and Options

* If ``scene`` is a ``GeometricScene`` object with one or more instances, then ``FindGeometricConjectures`` returns a ``GeometricScene`` with added conclusions that are conjectured to hold for each instance of the scene.

* The conclusions of a ``GeometricScene`` object can be obtained from ``GeometricScene[…]["Conclusions"]``.

* If no scene instances are given, ``RandomInstance`` is used to generate instances from which to gather conjectures.

* ``FindGeometricConjectures[{scene1, scene2, …}]`` is equivalent to ``FindGeometricConjectures[GeometricScene[{scene1, scene2, …}]]``.

* Possible values of ``patt`` include ``GeometricAssertion[_, "Perpendicular"]``, ``_ == Midpoint[{_, _}]``, ``…``.

* The ``scenei`` must have the same list of points, quantities and hypotheses, but may represent different instances of the same scene.

* The following options can be given:

[`Method`](https://reference.wolfram.com/language/ref/Method.en.md)	[`Automatic`](https://reference.wolfram.com/language/ref/Automatic.en.md)	method to use

* Random seeds may be given using ``Method -> {"RandomInstance", RandomSeeding -> seed}``.

## Examples (5)

### Basic Examples (1)

Represent a scene with a circumscribed triangle with the diameter as an edge:

```wl
In[1]:= RandomInstance[GeometricScene[{a, b, c, o}, {Triangle[{a, b, c}], CircleThrough[{a, b, c}, o], o == Midpoint[{a, c}]}]]

Out[1]=
GeometricScene[{{a -> {1.4305253895316499, 3.067736334828689}, 
   b -> {-3.1025813969730245, 3.7295272003897817}, c -> {-3.66574764734203, -0.1280240702491874}, 
   o -> {-1.11761112890519, 1.4698561322897508}}, 
  {C["GeometricQuantity"][C["Unspecified"]["radius", 
      "{{C[\"GeometricPoint\"][a], C[\"GeometricPoint\"][b], C[\"GeometricPoint\"][c]}, {1, 2, 0}}"]\
] -> 3.0076936313480007}}, {Triangle[{a, b, c}], CircleThrough[{a, b, c}, o], 
  o == Midpoint[{a, c}]}, {}]
```

Find conjectures that appear to hold for the scene:

```wl
In[2]:= FindGeometricConjectures[%]

Out[2]=
GeometricScene[{{a -> {1.4305253895316499, 3.067736334828689}, 
   b -> {-3.1025813969730245, 3.7295272003897817}, c -> {-3.66574764734203, -0.1280240702491874}, 
   o -> {-1.11761112890519, 1.4698561322897508}}, 
  {C["GeometricQuantity"][C["Unspe ...  
      "{{C[\"GeometricPoint\"][a], C[\"GeometricPoint\"][b], C[\"GeometricPoint\"][c]}, {1, 2, 0}}"]\
] -> 3.0076936313480007}}, {Triangle[{a, b, c}], CircleThrough[{a, b, c}, o], 
  o == Midpoint[{a, c}]}, {PlanarAngle[{a, b, c}] == 90*Degree}]
```

Discover Thales's theorem:

```wl
In[3]:= FindGeometricConjectures[%, PlanarAngle[{__}] == 90°]["Conclusions"]

Out[3]= {Inactive[PlanarAngle][{a, b, c}] == 90 °}
```

### Scope (2)

Find two instances of a scene with two sets of collinear points:

```wl
In[1]:= RandomInstance[GeometricScene[{a, b, c, d, e, f, x, y, z}, {Line[{{a, b, c}}], Line[{d, e, f}], Line[{a, x, e}], Line[{b, x, d}], Line[{a, y, f}], Line[{c, y, d}], Line[{b, z, f}], Line[{c, z, e}], Style[InfiniteLine[{x, z}], Red]}], 2, RandomSeeding -> 1]

Out[1]=
{GeometricScene[{{a -> {3.3978465813297087, -10.36150510417867}, 
   b -> {-2.2238636756687415, -8.988501287288305}, c -> {-6.92921346106794, -7.839302392330297}, 
   d -> {5.0333258153111835, 1.9604888367247082}, e -> {0.9379744247677756, 6.411313 ... 9828075399239168, -4.611510943036213}}, 
  {}}, {Line[{{a, b, c}}], Line[{d, e, f}], Line[{a, x, e}], Line[{b, x, d}], Line[{a, y, f}], 
  Line[{c, y, d}], Line[{b, z, f}], Line[{c, z, e}], Style[InfiniteLine[{x, z}], 
   RGBColor[1, 0, 0]]}, {}]}
```

Discover Pappus's hexagon theorem by searching for conjectures satisfied by both instances:

```wl
In[2]:= FindGeometricConjectures[%]["Conclusions"]

Out[2]= {Inactive[GeometricAssertion][{z, y, x}, "Collinear"], Inactive[PlanarAngle][{c, y, f}] == Inactive[PlanarAngle][{d, y, a}], Inactive[PlanarAngle][{b, z, e}] == Inactive[PlanarAngle][{f, z, c}], Inactive[PlanarAngle][{b, x, e}] == Inactive[PlanarAngle][{d, x, a}]}
```

---

Represent a scene with a pentagram where some angles are known:

```wl
In[1]:= RandomInstance[GeometricScene[{a, b, c, d, e, f, g, h, i, j}, {Line[{a, b, c, d}], Line[{d, e, f, g}], Line[{g, h, b, i}], Line[{i, c, e, j}], Line[{j, f, h, a}], PlanarAngle[{b, c, e}, "Counterclockwise"] == 100°, PlanarAngle[{f, h, b}, "Counterclockwise"] == 110°, PlanarAngle[{h, a, b}, "Counterclockwise"] == 35°}], RandomSeeding -> 1234]

Out[1]=
GeometricScene[{{a -> {-8.068821671106983, -0.6894914107748263}, 
   b -> {-1.878804120368458, 0.9184060359145161}, c -> {1.9051635402252574, 1.9013178323684423}, 
   d -> {10.6093861345504, 4.16229713527108}, e -> {3.5629207132697216, -1.726030728 ...  Line[{g, h, b, i}], Line[{i, c, e, j}], Line[{j, f, h, a}], 
  PlanarAngle[{b, c, e}, "Counterclockwise"] == 100*Degree, 
  PlanarAngle[{f, h, b}, "Counterclockwise"] == 110*Degree, 
  PlanarAngle[{h, a, b}, "Counterclockwise"] == 35*Degree}, {}]
```

Solve for missing angles:

```wl
In[2]:=
FindGeometricConjectures[%, PlanarAngle[{__}] == _ ? NumericQ][
	"Conclusions"]

Out[2]= {Inactive[PlanarAngle][{f, j, e}] == 45 °, Inactive[PlanarAngle][{b, i, c}] == 25 °}
```

Only return one missing angle:

```wl
In[3]:=
FindGeometricConjectures[%%, PlanarAngle[{__}] == _ ? NumericQ, 1][
	"Conclusions"]

Out[3]= {Inactive[PlanarAngle][{f, j, e}] == 45 °}
```

### Applications (2)

Iteratively take circumcenters:

```wl
In[1]:= RandomInstance[GeometricScene[{a, b, c, o, oa, ob, oc, k}, {o == TriangleCenter[{a, b, c}, "Circumcenter"], oa == TriangleCenter[{o, b, c}, "Circumcenter"], ob == TriangleCenter[{a, o, c}, "Circumcenter"], oc == TriangleCenter[{a, b, o}, "Circumcenter"], Line[{a, k, oa}], Line[{b, k, ob}], Line[{c, oc}]}], RandomSeeding -> 17]

Out[1]=
GeometricScene[{{a -> {-0.15215527166430298, -3.6122037657904373}, 
   b -> {-4.707002146239533, 3.1480435540513616}, c -> {4.158147342176919, 2.999413512835222}, 
   k -> {-0.17193115286984678, 0.7181727089902079}, o -> {-0.30586154049192477, 1.19 ... ngleCenter[{a, b, c}, "Circumcenter"], oa == TriangleCenter[{o, b, c}, "Circumcenter"], 
  ob == TriangleCenter[{a, o, c}, "Circumcenter"], oc == TriangleCenter[{a, b, o}, "Circumcenter"], 
  Line[{a, k, oa}], Line[{b, k, ob}], Line[{c, oc}]}, {}]
```

Discover Kosnita's theorem:

```wl
In[2]:= FindGeometricConjectures[%]["Conclusions"]

Out[2]= {Inactive[GeometricAssertion][{oc, k, c}, "Collinear"], Inactive[PlanarAngle][{b, k, a}] == Inactive[PlanarAngle][{ob, k, oa}], Inactive[PlanarAngle][{b, c, o}] == Inactive[PlanarAngle][{c, b, o}], Inactive[PlanarAngle][{a, c, o}] == Inactive[Plana ... arAngle][{b, a, o}], EuclideanDistance[o, a] == EuclideanDistance[b, o] == EuclideanDistance[o, c], Inactive[Area][Polygon[{a, b, c}]] == Inactive[Area][Polygon[{a, b, o}]] + Inactive[Area][Polygon[{a, o, c}]] + Inactive[Area][Polygon[{o, b, c}]]}
```

---

Describe a scene with two squares and a quadrilateral formed by taking midpoints:

```wl
In[1]:= RandomInstance[GeometricScene[{a, b, c, d, bb, cc, dd, q, r, s, t}, {GeometricAssertion[{Polygon[{a, b, c, d}], Polygon[{a, bb, cc, dd}]}, "Regular", "Counterclockwise"], q == Midpoint[{bb, d}], r == Midpoint[{a, c}], s == Midpoint[{b, dd}], t == Midpoint[{a, cc}], Style[Polygon[{q, r, s, t}], Opacity[0.4], Red]}], RandomSeeding -> 1]

Out[1]=
GeometricScene[{{a -> {-2.74904252759296, 0.16353074082065616}, 
   b -> {-0.07300936153741817, -0.965181969441688}, 
   bb -> {-1.7338525027166778, -3.236962925296686}, c -> {1.05570334865533, 1.7108511966030437}, 
   cc -> {1.6666411633310672, -2 ... {a, b, c, d}], Polygon[{a, bb, cc, dd}]}, 
   "Regular", "Counterclockwise"], q == Midpoint[{bb, d}], r == Midpoint[{a, c}], 
  s == Midpoint[{b, dd}], t == Midpoint[{a, cc}], Style[Polygon[{q, r, s, t}], Opacity[0.4], 
   RGBColor[1, 0, 0]]}, {}]
```

Discover the Finsler–Hadwiger theorem:

```wl
In[2]:= FindGeometricConjectures[%, GeometricAssertion[_, "Regular"]]["Conclusions"]

Out[2]= {Inactive[GeometricAssertion][Polygon[{q, r, s, t}], "Regular"]}
```

## See Also

* [`RandomInstance`](https://reference.wolfram.com/language/ref/RandomInstance.en.md)
* [`GeometricScene`](https://reference.wolfram.com/language/ref/GeometricScene.en.md)
* [`GeometricAssertion`](https://reference.wolfram.com/language/ref/GeometricAssertion.en.md)
* [`Reduce`](https://reference.wolfram.com/language/ref/Reduce.en.md)
* [`FindEquationalProof`](https://reference.wolfram.com/language/ref/FindEquationalProof.en.md)

## Tech Notes

* [Synthetic Geometry](https://reference.wolfram.com/language/tutorial/SyntheticGeometry.en.md)

## Related Guides

* [Plane Geometry](https://reference.wolfram.com/language/guide/PlaneGeometry.en.md)
* [Synthetic Geometry](https://reference.wolfram.com/language/guide/SyntheticGeometry.en.md)
* [Geometric Computation](https://reference.wolfram.com/language/guide/GeometricComputation.en.md)
* [Solvers over Regions](https://reference.wolfram.com/language/guide/GeometricSolvers.en.md)

## History

* [Introduced in 2019 (12.0)](https://reference.wolfram.com/language/guide/SummaryOfNewFeaturesIn120.en.md)