geolog-zeta-fork/architecture.svg
2026-02-26 11:50:51 +01:00

771 lines
62 KiB
XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 12.2.1 (0)
-->
<!-- Title: GeologArchitecture Pages: 1 -->
<svg width="2545pt" height="1858pt"
viewBox="0.00 0.00 2545.00 1857.98" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1853.98)">
<title>GeologArchitecture</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-1853.98 2541,-1853.98 2541,4 -4,4"/>
<text text-anchor="middle" x="1268.5" y="-1823.18" font-family="Helvetica,sans-Serif" font-size="24.00">Geolog Architecture</text>
<g id="clust1" class="cluster">
<title>cluster_ui</title>
<path fill="#e3f2fd" stroke="black" d="M700,-1630.98C700,-1630.98 943,-1630.98 943,-1630.98 949,-1630.98 955,-1636.98 955,-1642.98 955,-1642.98 955,-1793.48 955,-1793.48 955,-1799.48 949,-1805.48 943,-1805.48 943,-1805.48 700,-1805.48 700,-1805.48 694,-1805.48 688,-1799.48 688,-1793.48 688,-1793.48 688,-1642.98 688,-1642.98 688,-1636.98 694,-1630.98 700,-1630.98"/>
<text text-anchor="middle" x="821.5" y="-1778.68" font-family="Helvetica,sans-Serif" font-size="24.00">User Interface</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_parsing</title>
<path fill="#e8f5e9" stroke="black" d="M978,-523.73C978,-523.73 1218,-523.73 1218,-523.73 1224,-523.73 1230,-529.73 1230,-535.73 1230,-535.73 1230,-938.1 1230,-938.1 1230,-944.1 1224,-950.1 1218,-950.1 1218,-950.1 978,-950.1 978,-950.1 972,-950.1 966,-944.1 966,-938.1 966,-938.1 966,-535.73 966,-535.73 966,-529.73 972,-523.73 978,-523.73"/>
<text text-anchor="middle" x="1098" y="-923.3" font-family="Helvetica,sans-Serif" font-size="24.00">Parsing Layer</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_elaboration</title>
<path fill="#fff3e0" stroke="black" d="M2177,-96.3C2177,-96.3 2517,-96.3 2517,-96.3 2523,-96.3 2529,-102.3 2529,-108.3 2529,-108.3 2529,-615.35 2529,-615.35 2529,-621.35 2523,-627.35 2517,-627.35 2517,-627.35 2177,-627.35 2177,-627.35 2171,-627.35 2165,-621.35 2165,-615.35 2165,-615.35 2165,-108.3 2165,-108.3 2165,-102.3 2171,-96.3 2177,-96.3"/>
<text text-anchor="middle" x="2347" y="-600.55" font-family="Helvetica,sans-Serif" font-size="24.00">Elaboration Layer</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_core</title>
<path fill="#fce4ec" stroke="black" d="M70,-87.68C70,-87.68 362,-87.68 362,-87.68 368,-87.68 374,-93.68 374,-99.68 374,-99.68 374,-459.23 374,-459.23 374,-465.23 368,-471.23 362,-471.23 362,-471.23 70,-471.23 70,-471.23 64,-471.23 58,-465.23 58,-459.23 58,-459.23 58,-99.68 58,-99.68 58,-93.68 64,-87.68 70,-87.68"/>
<text text-anchor="middle" x="216" y="-444.43" font-family="Helvetica,sans-Serif" font-size="24.00">Core Layer</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_storage</title>
<path fill="#e1f5fe" stroke="black" d="M1210,-8C1210,-8 2145,-8 2145,-8 2151,-8 2157,-14 2157,-20 2157,-20 2157,-310.73 2157,-310.73 2157,-316.73 2151,-322.73 2145,-322.73 2145,-322.73 1210,-322.73 1210,-322.73 1204,-322.73 1198,-316.73 1198,-310.73 1198,-310.73 1198,-20 1198,-20 1198,-14 1204,-8 1210,-8"/>
<text text-anchor="middle" x="1677.5" y="-295.93" font-family="Helvetica,sans-Serif" font-size="24.00">Storage Layer</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_query</title>
<path fill="#f3e5f5" stroke="black" d="M579,-775.6C579,-775.6 897,-775.6 897,-775.6 903,-775.6 909,-781.6 909,-787.6 909,-787.6 909,-1225.48 909,-1225.48 909,-1231.48 903,-1237.48 897,-1237.48 897,-1237.48 579,-1237.48 579,-1237.48 573,-1237.48 567,-1231.48 567,-1225.48 567,-1225.48 567,-787.6 567,-787.6 567,-781.6 573,-775.6 579,-775.6"/>
<text text-anchor="middle" x="738" y="-1210.68" font-family="Helvetica,sans-Serif" font-size="24.00">Query &amp; Compilation Layer</text>
</g>
<g id="clust7" class="cluster">
<title>cluster_solver</title>
<path fill="#e0f2f1" stroke="black" d="M32,-1133.85C32,-1133.85 176,-1133.85 176,-1133.85 182,-1133.85 188,-1139.85 188,-1145.85 188,-1145.85 188,-1566.48 188,-1566.48 188,-1572.48 182,-1578.48 176,-1578.48 176,-1578.48 32,-1578.48 32,-1578.48 26,-1578.48 20,-1572.48 20,-1566.48 20,-1566.48 20,-1145.85 20,-1145.85 20,-1139.85 26,-1133.85 32,-1133.85"/>
<text text-anchor="middle" x="104" y="-1551.68" font-family="Helvetica,sans-Serif" font-size="24.00">Solver Layer</text>
</g>
<g id="clust8" class="cluster">
<title>cluster_tensor</title>
<path fill="#fff8e1" stroke="black" d="M302,-523.73C302,-523.73 547,-523.73 547,-523.73 553,-523.73 559,-529.73 559,-535.73 559,-535.73 559,-1060.73 559,-1060.73 559,-1066.73 553,-1072.73 547,-1072.73 547,-1072.73 302,-1072.73 302,-1072.73 296,-1072.73 290,-1066.73 290,-1060.73 290,-1060.73 290,-535.73 290,-535.73 290,-529.73 296,-523.73 302,-523.73"/>
<text text-anchor="middle" x="424.5" y="-1045.93" font-family="Helvetica,sans-Serif" font-size="24.00">Tensor Algebra Layer</text>
</g>
<g id="clust9" class="cluster">
<title>cluster_deps</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M394,-87.5C394,-87.5 1178,-87.5 1178,-87.5 1184,-87.5 1190,-93.5 1190,-99.5 1190,-99.5 1190,-188.1 1190,-188.1 1190,-194.1 1184,-200.1 1178,-200.1 1178,-200.1 394,-200.1 394,-200.1 388,-200.1 382,-194.1 382,-188.1 382,-188.1 382,-99.5 382,-99.5 382,-93.5 388,-87.5 394,-87.5"/>
<text text-anchor="middle" x="786" y="-173.3" font-family="Helvetica,sans-Serif" font-size="24.00">Key Dependencies</text>
</g>
<g id="clust10" class="cluster">
<title>cluster_legend</title>
<path fill="none" stroke="black" d="M999,-1486.73C999,-1486.73 1117,-1486.73 1117,-1486.73 1123,-1486.73 1129,-1492.73 1129,-1498.73 1129,-1498.73 1129,-1790.23 1129,-1790.23 1129,-1796.23 1123,-1802.23 1117,-1802.23 1117,-1802.23 999,-1802.23 999,-1802.23 993,-1802.23 987,-1796.23 987,-1790.23 987,-1790.23 987,-1498.73 987,-1498.73 987,-1492.73 993,-1486.73 999,-1486.73"/>
<text text-anchor="middle" x="1058" y="-1775.43" font-family="Helvetica,sans-Serif" font-size="24.00">Legend</text>
</g>
<!-- cli -->
<g id="node1" class="node">
<title>cli</title>
<path fill="#bbdefb" stroke="black" d="M801.62,-1760.98C801.62,-1760.98 708.38,-1760.98 708.38,-1760.98 702.38,-1760.98 696.38,-1754.98 696.38,-1748.98 696.38,-1748.98 696.38,-1730.48 696.38,-1730.48 696.38,-1724.48 702.38,-1718.48 708.38,-1718.48 708.38,-1718.48 801.62,-1718.48 801.62,-1718.48 807.62,-1718.48 813.62,-1724.48 813.62,-1730.48 813.62,-1730.48 813.62,-1748.98 813.62,-1748.98 813.62,-1754.98 807.62,-1760.98 801.62,-1760.98"/>
<text text-anchor="middle" x="755" y="-1743.68" font-family="Helvetica,sans-Serif" font-size="14.00">CLI</text>
<text text-anchor="middle" x="755" y="-1726.43" font-family="Helvetica,sans-Serif" font-size="14.00">(bin/geolog.rs)</text>
</g>
<!-- repl -->
<g id="node2" class="node">
<title>repl</title>
<path fill="#bbdefb" stroke="black" d="M808.38,-1681.48C808.38,-1681.48 761.62,-1681.48 761.62,-1681.48 755.62,-1681.48 749.62,-1675.48 749.62,-1669.48 749.62,-1669.48 749.62,-1650.98 749.62,-1650.98 749.62,-1644.98 755.62,-1638.98 761.62,-1638.98 761.62,-1638.98 808.38,-1638.98 808.38,-1638.98 814.38,-1638.98 820.38,-1644.98 820.38,-1650.98 820.38,-1650.98 820.38,-1669.48 820.38,-1669.48 820.38,-1675.48 814.38,-1681.48 808.38,-1681.48"/>
<text text-anchor="middle" x="785" y="-1664.18" font-family="Helvetica,sans-Serif" font-size="14.00">REPL</text>
<text text-anchor="middle" x="785" y="-1646.93" font-family="Helvetica,sans-Serif" font-size="14.00">(repl.rs)</text>
</g>
<!-- cli&#45;&gt;repl -->
<g id="edge1" class="edge">
<title>cli&#45;&gt;repl</title>
<path fill="none" stroke="black" d="M762.88,-1718.37C765.96,-1710.42 769.55,-1701.13 772.94,-1692.38"/>
<polygon fill="black" stroke="black" points="776.17,-1693.73 776.52,-1683.14 769.65,-1691.2 776.17,-1693.73"/>
</g>
<!-- lexer -->
<g id="node4" class="node">
<title>lexer</title>
<path fill="#c8e6c9" stroke="black" d="M1070.38,-905.6C1070.38,-905.6 1017.62,-905.6 1017.62,-905.6 1011.62,-905.6 1005.62,-899.6 1005.62,-893.6 1005.62,-893.6 1005.62,-875.1 1005.62,-875.1 1005.62,-869.1 1011.62,-863.1 1017.62,-863.1 1017.62,-863.1 1070.38,-863.1 1070.38,-863.1 1076.38,-863.1 1082.38,-869.1 1082.38,-875.1 1082.38,-875.1 1082.38,-893.6 1082.38,-893.6 1082.38,-899.6 1076.38,-905.6 1070.38,-905.6"/>
<text text-anchor="middle" x="1044" y="-888.3" font-family="Helvetica,sans-Serif" font-size="14.00">Lexer</text>
<text text-anchor="middle" x="1044" y="-871.05" font-family="Helvetica,sans-Serif" font-size="14.00">(lexer.rs)</text>
</g>
<!-- repl&#45;&gt;lexer -->
<g id="edge3" class="edge">
<title>repl&#45;&gt;lexer</title>
<path fill="none" stroke="black" d="M820.63,-1646.74C869.94,-1626.9 953,-1583.18 953,-1513.73 953,-1513.73 953,-1513.73 953,-1005.98 953,-989.54 958.45,-973.92 966.69,-959.71"/>
<polygon fill="black" stroke="black" points="969.57,-961.69 971.99,-951.38 963.67,-957.94 969.57,-961.69"/>
</g>
<!-- query_compile -->
<g id="node27" class="node">
<title>query_compile</title>
<path fill="#e1bee7" stroke="black" d="M856.75,-1184.35C856.75,-1184.35 737.25,-1184.35 737.25,-1184.35 731.25,-1184.35 725.25,-1178.35 725.25,-1172.35 725.25,-1172.35 725.25,-1153.85 725.25,-1153.85 725.25,-1147.85 731.25,-1141.85 737.25,-1141.85 737.25,-1141.85 856.75,-1141.85 856.75,-1141.85 862.75,-1141.85 868.75,-1147.85 868.75,-1153.85 868.75,-1153.85 868.75,-1172.35 868.75,-1172.35 868.75,-1178.35 862.75,-1184.35 856.75,-1184.35"/>
<text text-anchor="middle" x="797" y="-1167.05" font-family="Helvetica,sans-Serif" font-size="14.00">Query Compiler</text>
<text text-anchor="middle" x="797" y="-1149.8" font-family="Helvetica,sans-Serif" font-size="14.00">(query/compile.rs)</text>
</g>
<!-- repl&#45;&gt;query_compile -->
<g id="edge32" class="edge">
<title>repl&#45;&gt;query_compile</title>
<path fill="none" stroke="black" d="M786.39,-1638.52C788.16,-1610.31 791,-1558.23 791,-1513.73 791,-1513.73 791,-1513.73 791,-1335.48 791,-1286.74 793.45,-1230.26 795.22,-1195.87"/>
<polygon fill="black" stroke="black" points="798.7,-1196.35 795.73,-1186.18 791.71,-1195.98 798.7,-1196.35"/>
<text text-anchor="middle" x="816.88" y="-1428.55" font-family="Helvetica,sans-Serif" font-size="14.00">queries</text>
</g>
<!-- query_chase -->
<g id="node29" class="node">
<title>query_chase</title>
<path fill="#ce93d8" stroke="black" stroke-width="2" d="M694.75,-1192.98C694.75,-1192.98 587.25,-1192.98 587.25,-1192.98 581.25,-1192.98 575.25,-1186.98 575.25,-1180.98 575.25,-1180.98 575.25,-1145.23 575.25,-1145.23 575.25,-1139.23 581.25,-1133.23 587.25,-1133.23 587.25,-1133.23 694.75,-1133.23 694.75,-1133.23 700.75,-1133.23 706.75,-1139.23 706.75,-1145.23 706.75,-1145.23 706.75,-1180.98 706.75,-1180.98 706.75,-1186.98 700.75,-1192.98 694.75,-1192.98"/>
<text text-anchor="middle" x="641" y="-1175.68" font-family="Helvetica,sans-Serif" font-size="14.00">Chase Algorithm</text>
<text text-anchor="middle" x="641" y="-1158.43" font-family="Helvetica,sans-Serif" font-size="14.00">(query/chase.rs)</text>
<text text-anchor="middle" x="641" y="-1141.18" font-family="Helvetica,sans-Serif" font-size="14.00">Fixpoint + CC</text>
</g>
<!-- repl&#45;&gt;query_chase -->
<g id="edge37" class="edge">
<title>repl&#45;&gt;query_chase</title>
<path fill="none" stroke="black" d="M754.69,-1638.68C721.52,-1613.48 673,-1567.44 673,-1513.73 673,-1513.73 673,-1513.73 673,-1335.48 673,-1289.93 661.94,-1238.71 652.83,-1204.23"/>
<polygon fill="black" stroke="black" points="656.23,-1203.4 650.23,-1194.67 649.47,-1205.24 656.23,-1203.4"/>
<text text-anchor="middle" x="695.5" y="-1428.55" font-family="Helvetica,sans-Serif" font-size="14.00">:chase</text>
</g>
<!-- solver -->
<g id="node32" class="node">
<title>solver</title>
<path fill="#b2dfdb" stroke="black" d="M167.5,-1533.98C167.5,-1533.98 40.5,-1533.98 40.5,-1533.98 34.5,-1533.98 28.5,-1527.98 28.5,-1521.98 28.5,-1521.98 28.5,-1503.48 28.5,-1503.48 28.5,-1497.48 34.5,-1491.48 40.5,-1491.48 40.5,-1491.48 167.5,-1491.48 167.5,-1491.48 173.5,-1491.48 179.5,-1497.48 179.5,-1503.48 179.5,-1503.48 179.5,-1521.98 179.5,-1521.98 179.5,-1527.98 173.5,-1533.98 167.5,-1533.98"/>
<text text-anchor="middle" x="104" y="-1516.68" font-family="Helvetica,sans-Serif" font-size="14.00">Model Enumeration</text>
<text text-anchor="middle" x="104" y="-1499.43" font-family="Helvetica,sans-Serif" font-size="14.00">(solver/mod.rs)</text>
</g>
<!-- repl&#45;&gt;solver -->
<g id="edge41" class="edge">
<title>repl&#45;&gt;solver</title>
<path fill="none" stroke="black" d="M749.35,-1651.61C645.62,-1629.45 341.82,-1564.54 191,-1532.32"/>
<polygon fill="black" stroke="black" points="191.96,-1528.94 181.45,-1530.28 190.5,-1535.79 191.96,-1528.94"/>
<text text-anchor="middle" x="624.86" y="-1607.68" font-family="Helvetica,sans-Serif" font-size="14.00">:solve</text>
<text text-anchor="middle" x="624.86" y="-1590.43" font-family="Helvetica,sans-Serif" font-size="14.00">:query</text>
</g>
<!-- batch -->
<g id="node3" class="node">
<title>batch</title>
<path fill="#bbdefb" stroke="black" d="M934.5,-1760.98C934.5,-1760.98 843.5,-1760.98 843.5,-1760.98 837.5,-1760.98 831.5,-1754.98 831.5,-1748.98 831.5,-1748.98 831.5,-1730.48 831.5,-1730.48 831.5,-1724.48 837.5,-1718.48 843.5,-1718.48 843.5,-1718.48 934.5,-1718.48 934.5,-1718.48 940.5,-1718.48 946.5,-1724.48 946.5,-1730.48 946.5,-1730.48 946.5,-1748.98 946.5,-1748.98 946.5,-1754.98 940.5,-1760.98 934.5,-1760.98"/>
<text text-anchor="middle" x="889" y="-1743.68" font-family="Helvetica,sans-Serif" font-size="14.00">Batch Loading</text>
<text text-anchor="middle" x="889" y="-1726.43" font-family="Helvetica,sans-Serif" font-size="14.00">(.geolog files)</text>
</g>
<!-- batch&#45;&gt;repl -->
<g id="edge2" class="edge">
<title>batch&#45;&gt;repl</title>
<path fill="none" stroke="black" d="M861.4,-1718.16C849.3,-1709.14 834.91,-1698.42 821.9,-1688.73"/>
<polygon fill="black" stroke="black" points="824.05,-1685.96 813.94,-1682.79 819.87,-1691.58 824.05,-1685.96"/>
</g>
<!-- parser -->
<g id="node5" class="node">
<title>parser</title>
<path fill="#c8e6c9" stroke="black" d="M1076,-826.1C1076,-826.1 1012,-826.1 1012,-826.1 1006,-826.1 1000,-820.1 1000,-814.1 1000,-814.1 1000,-795.6 1000,-795.6 1000,-789.6 1006,-783.6 1012,-783.6 1012,-783.6 1076,-783.6 1076,-783.6 1082,-783.6 1088,-789.6 1088,-795.6 1088,-795.6 1088,-814.1 1088,-814.1 1088,-820.1 1082,-826.1 1076,-826.1"/>
<text text-anchor="middle" x="1044" y="-808.8" font-family="Helvetica,sans-Serif" font-size="14.00">Parser</text>
<text text-anchor="middle" x="1044" y="-791.55" font-family="Helvetica,sans-Serif" font-size="14.00">(parser.rs)</text>
</g>
<!-- lexer&#45;&gt;parser -->
<g id="edge4" class="edge">
<title>lexer&#45;&gt;parser</title>
<path fill="none" stroke="black" d="M1044,-862.99C1044,-855.22 1044,-846.17 1044,-837.59"/>
<polygon fill="black" stroke="black" points="1047.5,-837.86 1044,-827.86 1040.5,-837.86 1047.5,-837.86"/>
</g>
<!-- chumsky -->
<g id="node41" class="node">
<title>chumsky</title>
<ellipse fill="#e0e0e0" stroke="black" cx="855" cy="-125.55" rx="114.73" ry="30.05"/>
<text text-anchor="middle" x="855" y="-129.5" font-family="Helvetica,sans-Serif" font-size="14.00">chumsky</text>
<text text-anchor="middle" x="855" y="-112.25" font-family="Helvetica,sans-Serif" font-size="14.00">(parser combinators)</text>
</g>
<!-- lexer&#45;&gt;chumsky -->
<g id="edge54" class="edge">
<title>lexer&#45;&gt;chumsky</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M1082.75,-876.93C1142.42,-865.93 1250,-841.2 1250,-805.85 1250,-805.85 1250,-805.85 1250,-642.98 1250,-589.31 1262.21,-567.39 1231,-523.73 1125.1,-375.57 968.14,-484.5 869,-331.73 836.89,-282.24 840.39,-211.16 846.92,-166.98"/>
<polygon fill="black" stroke="black" points="850.34,-167.73 848.48,-157.31 843.43,-166.62 850.34,-167.73"/>
</g>
<!-- ast -->
<g id="node6" class="node">
<title>ast</title>
<path fill="#c8e6c9" stroke="black" d="M1140.75,-713.1C1140.75,-713.1 1099.25,-713.1 1099.25,-713.1 1093.25,-713.1 1087.25,-707.1 1087.25,-701.1 1087.25,-701.1 1087.25,-682.6 1087.25,-682.6 1087.25,-676.6 1093.25,-670.6 1099.25,-670.6 1099.25,-670.6 1140.75,-670.6 1140.75,-670.6 1146.75,-670.6 1152.75,-676.6 1152.75,-682.6 1152.75,-682.6 1152.75,-701.1 1152.75,-701.1 1152.75,-707.1 1146.75,-713.1 1140.75,-713.1"/>
<text text-anchor="middle" x="1120" y="-695.8" font-family="Helvetica,sans-Serif" font-size="14.00">AST</text>
<text text-anchor="middle" x="1120" y="-678.55" font-family="Helvetica,sans-Serif" font-size="14.00">(ast.rs)</text>
</g>
<!-- parser&#45;&gt;ast -->
<g id="edge5" class="edge">
<title>parser&#45;&gt;ast</title>
<path fill="none" stroke="black" d="M1058.12,-783.24C1069.74,-766.26 1086.38,-741.96 1099.48,-722.83"/>
<polygon fill="black" stroke="black" points="1102.34,-724.84 1105.1,-714.61 1096.57,-720.88 1102.34,-724.84"/>
</g>
<!-- parser&#45;&gt;chumsky -->
<g id="edge55" class="edge">
<title>parser&#45;&gt;chumsky</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M1034.64,-783.37C1006.25,-721.65 921.63,-540.65 898,-523.73 874.24,-506.71 853.05,-535 833,-513.73 743.01,-418.29 802.74,-243.85 836.42,-165.95"/>
<polygon fill="black" stroke="black" points="839.54,-167.56 840.37,-157 833.13,-164.74 839.54,-167.56"/>
</g>
<!-- error -->
<g id="node7" class="node">
<title>error</title>
<path fill="#c8e6c9" stroke="black" d="M1083.88,-591.48C1083.88,-591.48 986.12,-591.48 986.12,-591.48 980.12,-591.48 974.12,-585.48 974.12,-579.48 974.12,-579.48 974.12,-543.73 974.12,-543.73 974.12,-537.73 980.12,-531.73 986.12,-531.73 986.12,-531.73 1083.88,-531.73 1083.88,-531.73 1089.88,-531.73 1095.88,-537.73 1095.88,-543.73 1095.88,-543.73 1095.88,-579.48 1095.88,-579.48 1095.88,-585.48 1089.88,-591.48 1083.88,-591.48"/>
<text text-anchor="middle" x="1035" y="-574.18" font-family="Helvetica,sans-Serif" font-size="14.00">Error Reporting</text>
<text text-anchor="middle" x="1035" y="-556.93" font-family="Helvetica,sans-Serif" font-size="14.00">(error.rs)</text>
<text text-anchor="middle" x="1035" y="-539.68" font-family="Helvetica,sans-Serif" font-size="14.00">ariadne</text>
</g>
<!-- ast&#45;&gt;error -->
<g id="edge6" class="edge">
<title>ast&#45;&gt;error</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1090.43,-670.14C1084.3,-664.91 1078.27,-658.96 1073.5,-652.6 1062.21,-637.55 1053.48,-618.67 1047.22,-602.11"/>
<polygon fill="black" stroke="black" points="1050.63,-601.27 1043.96,-593.04 1044.04,-603.63 1050.63,-601.27"/>
<text text-anchor="middle" x="1093.75" y="-639.3" font-family="Helvetica,sans-Serif" font-size="14.00">errors</text>
</g>
<!-- pretty -->
<g id="node8" class="node">
<title>pretty</title>
<path fill="#c8e6c9" stroke="black" d="M1209.75,-582.85C1209.75,-582.85 1126.25,-582.85 1126.25,-582.85 1120.25,-582.85 1114.25,-576.85 1114.25,-570.85 1114.25,-570.85 1114.25,-552.35 1114.25,-552.35 1114.25,-546.35 1120.25,-540.35 1126.25,-540.35 1126.25,-540.35 1209.75,-540.35 1209.75,-540.35 1215.75,-540.35 1221.75,-546.35 1221.75,-552.35 1221.75,-552.35 1221.75,-570.85 1221.75,-570.85 1221.75,-576.85 1215.75,-582.85 1209.75,-582.85"/>
<text text-anchor="middle" x="1168" y="-565.55" font-family="Helvetica,sans-Serif" font-size="14.00">Pretty Printer</text>
<text text-anchor="middle" x="1168" y="-548.3" font-family="Helvetica,sans-Serif" font-size="14.00">(pretty.rs)</text>
</g>
<!-- ast&#45;&gt;pretty -->
<g id="edge7" class="edge">
<title>ast&#45;&gt;pretty</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1117.96,-670.13C1117.55,-659.51 1118.08,-646.5 1121.5,-635.35 1126.2,-620.05 1135.07,-604.86 1143.81,-592.34"/>
<polygon fill="black" stroke="black" points="1146.42,-594.7 1149.51,-584.56 1140.78,-590.56 1146.42,-594.7"/>
<text text-anchor="middle" x="1153.75" y="-639.3" font-family="Helvetica,sans-Serif" font-size="14.00">roundtrip</text>
</g>
<!-- elab_theory -->
<g id="node9" class="node">
<title>elab_theory</title>
<path fill="#ffe0b2" stroke="black" d="M2318.5,-582.85C2318.5,-582.85 2185.5,-582.85 2185.5,-582.85 2179.5,-582.85 2173.5,-576.85 2173.5,-570.85 2173.5,-570.85 2173.5,-552.35 2173.5,-552.35 2173.5,-546.35 2179.5,-540.35 2185.5,-540.35 2185.5,-540.35 2318.5,-540.35 2318.5,-540.35 2324.5,-540.35 2330.5,-546.35 2330.5,-552.35 2330.5,-552.35 2330.5,-570.85 2330.5,-570.85 2330.5,-576.85 2324.5,-582.85 2318.5,-582.85"/>
<text text-anchor="middle" x="2252" y="-565.55" font-family="Helvetica,sans-Serif" font-size="14.00">Theory Elaboration</text>
<text text-anchor="middle" x="2252" y="-548.3" font-family="Helvetica,sans-Serif" font-size="14.00">(elaborate/theory.rs)</text>
</g>
<!-- ast&#45;&gt;elab_theory -->
<g id="edge8" class="edge">
<title>ast&#45;&gt;elab_theory</title>
<path fill="none" stroke="black" d="M1153,-671.96C1163.58,-665.84 1175.31,-658.99 1186,-652.6 1198.55,-645.11 1200.08,-639.83 1214,-635.35 1389.19,-579.03 1942.93,-566.28 2161.76,-563.42"/>
<polygon fill="black" stroke="black" points="2161.71,-566.92 2171.67,-563.3 2161.62,-559.92 2161.71,-566.92"/>
</g>
<!-- elab_instance -->
<g id="node10" class="node">
<title>elab_instance</title>
<path fill="#ffe0b2" stroke="black" d="M2509.38,-582.85C2509.38,-582.85 2360.62,-582.85 2360.62,-582.85 2354.62,-582.85 2348.62,-576.85 2348.62,-570.85 2348.62,-570.85 2348.62,-552.35 2348.62,-552.35 2348.62,-546.35 2354.62,-540.35 2360.62,-540.35 2360.62,-540.35 2509.38,-540.35 2509.38,-540.35 2515.38,-540.35 2521.38,-546.35 2521.38,-552.35 2521.38,-552.35 2521.38,-570.85 2521.38,-570.85 2521.38,-576.85 2515.38,-582.85 2509.38,-582.85"/>
<text text-anchor="middle" x="2435" y="-565.55" font-family="Helvetica,sans-Serif" font-size="14.00">Instance Elaboration</text>
<text text-anchor="middle" x="2435" y="-548.3" font-family="Helvetica,sans-Serif" font-size="14.00">(elaborate/instance.rs)</text>
</g>
<!-- ast&#45;&gt;elab_instance -->
<g id="edge9" class="edge">
<title>ast&#45;&gt;elab_instance</title>
<path fill="none" stroke="black" d="M1153.1,-690.2C1336.6,-686.41 2224.75,-666.2 2340,-627.35 2363.35,-619.48 2386.28,-604.14 2403.76,-590.37"/>
<polygon fill="black" stroke="black" points="2405.65,-593.34 2411.2,-584.31 2401.24,-587.91 2405.65,-593.34"/>
</g>
<!-- elab_env -->
<g id="node11" class="node">
<title>elab_env</title>
<path fill="#ffe0b2" stroke="black" d="M2400.5,-409.48C2400.5,-409.48 2285.5,-409.48 2285.5,-409.48 2279.5,-409.48 2273.5,-403.48 2273.5,-397.48 2273.5,-397.48 2273.5,-378.98 2273.5,-378.98 2273.5,-372.98 2279.5,-366.98 2285.5,-366.98 2285.5,-366.98 2400.5,-366.98 2400.5,-366.98 2406.5,-366.98 2412.5,-372.98 2412.5,-378.98 2412.5,-378.98 2412.5,-397.48 2412.5,-397.48 2412.5,-403.48 2406.5,-409.48 2400.5,-409.48"/>
<text text-anchor="middle" x="2343" y="-392.18" font-family="Helvetica,sans-Serif" font-size="14.00">Environment</text>
<text text-anchor="middle" x="2343" y="-374.93" font-family="Helvetica,sans-Serif" font-size="14.00">(elaborate/env.rs)</text>
</g>
<!-- elab_theory&#45;&gt;elab_env -->
<g id="edge10" class="edge">
<title>elab_theory&#45;&gt;elab_env</title>
<path fill="none" stroke="black" d="M2262.98,-539.93C2278.83,-510.08 2308.24,-454.69 2326.65,-420.02"/>
<polygon fill="black" stroke="black" points="2329.68,-421.78 2331.27,-411.31 2323.49,-418.5 2329.68,-421.78"/>
</g>
<!-- core -->
<g id="node14" class="node">
<title>core</title>
<path fill="#f8bbd9" stroke="black" d="M353.5,-426.73C353.5,-426.73 232.5,-426.73 232.5,-426.73 226.5,-426.73 220.5,-420.73 220.5,-414.73 220.5,-414.73 220.5,-361.73 220.5,-361.73 220.5,-355.73 226.5,-349.73 232.5,-349.73 232.5,-349.73 353.5,-349.73 353.5,-349.73 359.5,-349.73 365.5,-355.73 365.5,-361.73 365.5,-361.73 365.5,-414.73 365.5,-414.73 365.5,-420.73 359.5,-426.73 353.5,-426.73"/>
<text text-anchor="middle" x="293" y="-409.43" font-family="Helvetica,sans-Serif" font-size="14.00">Core IR</text>
<text text-anchor="middle" x="293" y="-392.18" font-family="Helvetica,sans-Serif" font-size="14.00">(core.rs)</text>
<text text-anchor="middle" x="293" y="-374.93" font-family="Helvetica,sans-Serif" font-size="14.00">Signature, Term,</text>
<text text-anchor="middle" x="293" y="-357.68" font-family="Helvetica,sans-Serif" font-size="14.00">Formula, Structure</text>
</g>
<!-- elab_theory&#45;&gt;core -->
<g id="edge14" class="edge">
<title>elab_theory&#45;&gt;core</title>
<path fill="none" stroke="black" d="M2173.13,-555.7C2048.55,-547.8 1798.65,-531.37 1587,-513.73 1130.07,-475.65 583.43,-419.6 377.23,-398.09"/>
<polygon fill="black" stroke="black" points="377.72,-394.62 367.41,-397.06 376.99,-401.58 377.72,-394.62"/>
</g>
<!-- elab_instance&#45;&gt;elab_env -->
<g id="edge11" class="edge">
<title>elab_instance&#45;&gt;elab_env</title>
<path fill="none" stroke="black" d="M2423.9,-539.93C2407.88,-510.08 2378.14,-454.69 2359.53,-420.02"/>
<polygon fill="black" stroke="black" points="2362.67,-418.46 2354.85,-411.31 2356.5,-421.77 2362.67,-418.46"/>
</g>
<!-- elab_instance&#45;&gt;core -->
<g id="edge15" class="edge">
<title>elab_instance&#45;&gt;core</title>
<path fill="none" stroke="black" d="M2389.97,-539.89C2374.45,-533.63 2356.76,-527.44 2340,-523.73 1956.21,-438.74 712.3,-400.32 376.95,-391.34"/>
<polygon fill="black" stroke="black" points="377.48,-387.86 367.39,-391.09 377.29,-394.85 377.48,-387.86"/>
</g>
<!-- elab_types -->
<g id="node12" class="node">
<title>elab_types</title>
<path fill="#ffe0b2" stroke="black" d="M2407.25,-278.23C2407.25,-278.23 2278.75,-278.23 2278.75,-278.23 2272.75,-278.23 2266.75,-272.23 2266.75,-266.23 2266.75,-266.23 2266.75,-247.73 2266.75,-247.73 2266.75,-241.73 2272.75,-235.73 2278.75,-235.73 2278.75,-235.73 2407.25,-235.73 2407.25,-235.73 2413.25,-235.73 2419.25,-241.73 2419.25,-247.73 2419.25,-247.73 2419.25,-266.23 2419.25,-266.23 2419.25,-272.23 2413.25,-278.23 2407.25,-278.23"/>
<text text-anchor="middle" x="2343" y="-260.93" font-family="Helvetica,sans-Serif" font-size="14.00">Type Evaluation</text>
<text text-anchor="middle" x="2343" y="-243.68" font-family="Helvetica,sans-Serif" font-size="14.00">(elaborate/types.rs)</text>
</g>
<!-- elab_env&#45;&gt;elab_types -->
<g id="edge12" class="edge">
<title>elab_env&#45;&gt;elab_types</title>
<path fill="none" stroke="black" d="M2343,-366.75C2343,-346.05 2343,-313.76 2343,-289.74"/>
<polygon fill="black" stroke="black" points="2346.5,-289.88 2343,-279.88 2339.5,-289.88 2346.5,-289.88"/>
</g>
<!-- elab_error -->
<g id="node13" class="node">
<title>elab_error</title>
<path fill="#ffe0b2" stroke="black" d="M2403.88,-146.8C2403.88,-146.8 2282.12,-146.8 2282.12,-146.8 2276.12,-146.8 2270.12,-140.8 2270.12,-134.8 2270.12,-134.8 2270.12,-116.3 2270.12,-116.3 2270.12,-110.3 2276.12,-104.3 2282.12,-104.3 2282.12,-104.3 2403.88,-104.3 2403.88,-104.3 2409.88,-104.3 2415.88,-110.3 2415.88,-116.3 2415.88,-116.3 2415.88,-134.8 2415.88,-134.8 2415.88,-140.8 2409.88,-146.8 2403.88,-146.8"/>
<text text-anchor="middle" x="2343" y="-129.5" font-family="Helvetica,sans-Serif" font-size="14.00">Type Errors</text>
<text text-anchor="middle" x="2343" y="-112.25" font-family="Helvetica,sans-Serif" font-size="14.00">(elaborate/error.rs)</text>
</g>
<!-- elab_types&#45;&gt;elab_error -->
<g id="edge13" class="edge">
<title>elab_types&#45;&gt;elab_error</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M2343,-235.47C2343,-214.74 2343,-182.41 2343,-158.35"/>
<polygon fill="black" stroke="black" points="2346.5,-158.48 2343,-148.48 2339.5,-158.48 2346.5,-158.48"/>
</g>
<!-- id -->
<g id="node15" class="node">
<title>id</title>
<path fill="#f8bbd9" stroke="black" d="M179.75,-286.85C179.75,-286.85 78.25,-286.85 78.25,-286.85 72.25,-286.85 66.25,-280.85 66.25,-274.85 66.25,-274.85 66.25,-239.1 66.25,-239.1 66.25,-233.1 72.25,-227.1 78.25,-227.1 78.25,-227.1 179.75,-227.1 179.75,-227.1 185.75,-227.1 191.75,-233.1 191.75,-239.1 191.75,-239.1 191.75,-274.85 191.75,-274.85 191.75,-280.85 185.75,-286.85 179.75,-286.85"/>
<text text-anchor="middle" x="129" y="-269.55" font-family="Helvetica,sans-Serif" font-size="14.00">Identity System</text>
<text text-anchor="middle" x="129" y="-252.3" font-family="Helvetica,sans-Serif" font-size="14.00">(id.rs)</text>
<text text-anchor="middle" x="129" y="-235.05" font-family="Helvetica,sans-Serif" font-size="14.00">Luid, Slid</text>
</g>
<!-- core&#45;&gt;id -->
<g id="edge16" class="edge">
<title>core&#45;&gt;id</title>
<path fill="none" stroke="black" d="M236.75,-349.41C224.75,-340.9 212.3,-331.71 201,-322.73 190.1,-314.06 178.72,-304.23 168.31,-294.89"/>
<polygon fill="black" stroke="black" points="170.71,-292.33 160.95,-288.21 166,-297.52 170.71,-292.33"/>
</g>
<!-- cc -->
<g id="node18" class="node">
<title>cc</title>
<path fill="#f8bbd9" stroke="black" d="M354.12,-286.85C354.12,-286.85 221.88,-286.85 221.88,-286.85 215.88,-286.85 209.88,-280.85 209.88,-274.85 209.88,-274.85 209.88,-239.1 209.88,-239.1 209.88,-233.1 215.88,-227.1 221.88,-227.1 221.88,-227.1 354.12,-227.1 354.12,-227.1 360.12,-227.1 366.12,-233.1 366.12,-239.1 366.12,-239.1 366.12,-274.85 366.12,-274.85 366.12,-280.85 360.12,-286.85 354.12,-286.85"/>
<text text-anchor="middle" x="288" y="-269.55" font-family="Helvetica,sans-Serif" font-size="14.00">Congruence Closure</text>
<text text-anchor="middle" x="288" y="-252.3" font-family="Helvetica,sans-Serif" font-size="14.00">(cc.rs)</text>
<text text-anchor="middle" x="288" y="-235.05" font-family="Helvetica,sans-Serif" font-size="14.00">Union&#45;Find</text>
</g>
<!-- core&#45;&gt;cc -->
<g id="edge19" class="edge">
<title>core&#45;&gt;cc</title>
<path fill="none" stroke="black" d="M291.54,-349.5C290.92,-333.55 290.2,-314.94 289.57,-298.68"/>
<polygon fill="black" stroke="black" points="293.08,-298.7 289.19,-288.84 286.08,-298.97 293.08,-298.7"/>
</g>
<!-- store -->
<g id="node19" class="node">
<title>store</title>
<path fill="#b3e5fc" stroke="black" d="M1319.12,-278.23C1319.12,-278.23 1228.88,-278.23 1228.88,-278.23 1222.88,-278.23 1216.88,-272.23 1216.88,-266.23 1216.88,-266.23 1216.88,-247.73 1216.88,-247.73 1216.88,-241.73 1222.88,-235.73 1228.88,-235.73 1228.88,-235.73 1319.12,-235.73 1319.12,-235.73 1325.12,-235.73 1331.12,-241.73 1331.12,-247.73 1331.12,-247.73 1331.12,-266.23 1331.12,-266.23 1331.12,-272.23 1325.12,-278.23 1319.12,-278.23"/>
<text text-anchor="middle" x="1274" y="-260.93" font-family="Helvetica,sans-Serif" font-size="14.00">Store</text>
<text text-anchor="middle" x="1274" y="-243.68" font-family="Helvetica,sans-Serif" font-size="14.00">(store/mod.rs)</text>
</g>
<!-- core&#45;&gt;store -->
<g id="edge20" class="edge">
<title>core&#45;&gt;store</title>
<path fill="none" stroke="black" d="M365.93,-377.62C543.07,-354.28 995.45,-294.68 1186.62,-269.49"/>
<polygon fill="black" stroke="black" points="1187.04,-272.97 1196.5,-268.19 1186.13,-266.03 1187.04,-272.97"/>
</g>
<!-- universe -->
<g id="node16" class="node">
<title>universe</title>
<path fill="#f8bbd9" stroke="black" d="M174.75,-155.43C174.75,-155.43 79.25,-155.43 79.25,-155.43 73.25,-155.43 67.25,-149.43 67.25,-143.43 67.25,-143.43 67.25,-107.68 67.25,-107.68 67.25,-101.68 73.25,-95.68 79.25,-95.68 79.25,-95.68 174.75,-95.68 174.75,-95.68 180.75,-95.68 186.75,-101.68 186.75,-107.68 186.75,-107.68 186.75,-143.43 186.75,-143.43 186.75,-149.43 180.75,-155.43 174.75,-155.43"/>
<text text-anchor="middle" x="127" y="-138.13" font-family="Helvetica,sans-Serif" font-size="14.00">Universe</text>
<text text-anchor="middle" x="127" y="-120.88" font-family="Helvetica,sans-Serif" font-size="14.00">(universe.rs)</text>
<text text-anchor="middle" x="127" y="-103.63" font-family="Helvetica,sans-Serif" font-size="14.00">UUID &lt;&#45;&gt; Luid</text>
</g>
<!-- id&#45;&gt;universe -->
<g id="edge17" class="edge">
<title>id&#45;&gt;universe</title>
<path fill="none" stroke="black" d="M128.55,-226.61C128.28,-209.07 127.93,-186.53 127.63,-167.29"/>
<polygon fill="black" stroke="black" points="131.13,-167.26 127.48,-157.32 124.13,-167.37 131.13,-167.26"/>
</g>
<!-- naming -->
<g id="node17" class="node">
<title>naming</title>
<path fill="#f8bbd9" stroke="black" d="M317,-155.43C317,-155.43 217,-155.43 217,-155.43 211,-155.43 205,-149.43 205,-143.43 205,-143.43 205,-107.68 205,-107.68 205,-101.68 211,-95.68 217,-95.68 217,-95.68 317,-95.68 317,-95.68 323,-95.68 329,-101.68 329,-107.68 329,-107.68 329,-143.43 329,-143.43 329,-149.43 323,-155.43 317,-155.43"/>
<text text-anchor="middle" x="267" y="-138.13" font-family="Helvetica,sans-Serif" font-size="14.00">Naming</text>
<text text-anchor="middle" x="267" y="-120.88" font-family="Helvetica,sans-Serif" font-size="14.00">(naming.rs)</text>
<text text-anchor="middle" x="267" y="-103.63" font-family="Helvetica,sans-Serif" font-size="14.00">Name &lt;&#45;&gt; Luid</text>
</g>
<!-- id&#45;&gt;naming -->
<g id="edge18" class="edge">
<title>id&#45;&gt;naming</title>
<path fill="none" stroke="black" d="M165.43,-226.81C175.52,-218.4 186.35,-209.08 196,-200.1 208.13,-188.82 220.86,-175.99 232.13,-164.24"/>
<polygon fill="black" stroke="black" points="234.65,-166.66 239.01,-157 229.58,-161.84 234.65,-166.66"/>
</g>
<!-- unionfind -->
<g id="node44" class="node">
<title>unionfind</title>
<ellipse fill="#e0e0e0" stroke="black" cx="624" cy="-125.55" rx="98.03" ry="18"/>
<text text-anchor="middle" x="624" y="-120.88" font-family="Helvetica,sans-Serif" font-size="14.00">egglog&#45;union&#45;find</text>
</g>
<!-- cc&#45;&gt;unionfind -->
<g id="edge58" class="edge">
<title>cc&#45;&gt;unionfind</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M366.38,-244.14C411.71,-235.52 469.09,-221.54 517,-200.1 545.55,-187.33 574.58,-166.8 595.19,-150.67"/>
<polygon fill="black" stroke="black" points="597.22,-153.53 602.85,-144.55 592.85,-148.06 597.22,-153.53"/>
</g>
<!-- store_schema -->
<g id="node20" class="node">
<title>store_schema</title>
<path fill="#b3e5fc" stroke="black" d="M1663.75,-146.8C1663.75,-146.8 1550.25,-146.8 1550.25,-146.8 1544.25,-146.8 1538.25,-140.8 1538.25,-134.8 1538.25,-134.8 1538.25,-116.3 1538.25,-116.3 1538.25,-110.3 1544.25,-104.3 1550.25,-104.3 1550.25,-104.3 1663.75,-104.3 1663.75,-104.3 1669.75,-104.3 1675.75,-110.3 1675.75,-116.3 1675.75,-116.3 1675.75,-134.8 1675.75,-134.8 1675.75,-140.8 1669.75,-146.8 1663.75,-146.8"/>
<text text-anchor="middle" x="1607" y="-129.5" font-family="Helvetica,sans-Serif" font-size="14.00">Schema Cache</text>
<text text-anchor="middle" x="1607" y="-112.25" font-family="Helvetica,sans-Serif" font-size="14.00">(store/schema.rs)</text>
</g>
<!-- store&#45;&gt;store_schema -->
<g id="edge21" class="edge">
<title>store&#45;&gt;store_schema</title>
<path fill="none" stroke="black" d="M1331.45,-252.2C1385.21,-246.69 1466.38,-233.17 1529,-200.1 1549.83,-189.1 1569.13,-171 1583.32,-155.51"/>
<polygon fill="black" stroke="black" points="1585.64,-158.17 1589.65,-148.37 1580.4,-153.53 1585.64,-158.17"/>
</g>
<!-- store_append -->
<g id="node21" class="node">
<title>store_append</title>
<path fill="#b3e5fc" stroke="black" d="M1832.5,-146.8C1832.5,-146.8 1705.5,-146.8 1705.5,-146.8 1699.5,-146.8 1693.5,-140.8 1693.5,-134.8 1693.5,-134.8 1693.5,-116.3 1693.5,-116.3 1693.5,-110.3 1699.5,-104.3 1705.5,-104.3 1705.5,-104.3 1832.5,-104.3 1832.5,-104.3 1838.5,-104.3 1844.5,-110.3 1844.5,-116.3 1844.5,-116.3 1844.5,-134.8 1844.5,-134.8 1844.5,-140.8 1838.5,-146.8 1832.5,-146.8"/>
<text text-anchor="middle" x="1769" y="-129.5" font-family="Helvetica,sans-Serif" font-size="14.00">Append Operations</text>
<text text-anchor="middle" x="1769" y="-112.25" font-family="Helvetica,sans-Serif" font-size="14.00">(store/append.rs)</text>
</g>
<!-- store&#45;&gt;store_append -->
<g id="edge22" class="edge">
<title>store&#45;&gt;store_append</title>
<path fill="none" stroke="black" d="M1331.38,-252.27C1429.08,-245.27 1623.15,-228.26 1685,-200.1 1707.84,-189.71 1729.05,-171.02 1744.45,-155.09"/>
<polygon fill="black" stroke="black" points="1746.65,-157.86 1750.92,-148.17 1741.53,-153.08 1746.65,-157.86"/>
</g>
<!-- store_theory -->
<g id="node22" class="node">
<title>store_theory</title>
<path fill="#b3e5fc" stroke="black" d="M1977.12,-146.8C1977.12,-146.8 1874.88,-146.8 1874.88,-146.8 1868.88,-146.8 1862.88,-140.8 1862.88,-134.8 1862.88,-134.8 1862.88,-116.3 1862.88,-116.3 1862.88,-110.3 1868.88,-104.3 1874.88,-104.3 1874.88,-104.3 1977.12,-104.3 1977.12,-104.3 1983.12,-104.3 1989.12,-110.3 1989.12,-116.3 1989.12,-116.3 1989.12,-134.8 1989.12,-134.8 1989.12,-140.8 1983.12,-146.8 1977.12,-146.8"/>
<text text-anchor="middle" x="1926" y="-129.5" font-family="Helvetica,sans-Serif" font-size="14.00">Theory CRUD</text>
<text text-anchor="middle" x="1926" y="-112.25" font-family="Helvetica,sans-Serif" font-size="14.00">(store/theory.rs)</text>
</g>
<!-- store&#45;&gt;store_theory -->
<g id="edge23" class="edge">
<title>store&#45;&gt;store_theory</title>
<path fill="none" stroke="black" d="M1331.54,-255.4C1459.31,-253.32 1762.62,-243.8 1854,-200.1 1874.62,-190.24 1892.61,-171.88 1905.45,-155.97"/>
<polygon fill="black" stroke="black" points="1908.13,-158.22 1911.47,-148.16 1902.59,-153.94 1908.13,-158.22"/>
</g>
<!-- store_instance -->
<g id="node23" class="node">
<title>store_instance</title>
<path fill="#b3e5fc" stroke="black" d="M2137,-146.8C2137,-146.8 2019,-146.8 2019,-146.8 2013,-146.8 2007,-140.8 2007,-134.8 2007,-134.8 2007,-116.3 2007,-116.3 2007,-110.3 2013,-104.3 2019,-104.3 2019,-104.3 2137,-104.3 2137,-104.3 2143,-104.3 2149,-110.3 2149,-116.3 2149,-116.3 2149,-134.8 2149,-134.8 2149,-140.8 2143,-146.8 2137,-146.8"/>
<text text-anchor="middle" x="2078" y="-129.5" font-family="Helvetica,sans-Serif" font-size="14.00">Instance CRUD</text>
<text text-anchor="middle" x="2078" y="-112.25" font-family="Helvetica,sans-Serif" font-size="14.00">(store/instance.rs)</text>
</g>
<!-- store&#45;&gt;store_instance -->
<g id="edge24" class="edge">
<title>store&#45;&gt;store_instance</title>
<path fill="none" stroke="black" d="M1331.62,-256.34C1481.24,-256.53 1878.71,-251.98 1998,-200.1 2020.34,-190.39 2040.49,-171.77 2054.98,-155.7"/>
<polygon fill="black" stroke="black" points="2057.53,-158.09 2061.43,-148.24 2052.24,-153.51 2057.53,-158.09"/>
</g>
<!-- store_commit -->
<g id="node24" class="node">
<title>store_commit</title>
<path fill="#b3e5fc" stroke="black" d="M1329.62,-146.8C1329.62,-146.8 1218.38,-146.8 1218.38,-146.8 1212.38,-146.8 1206.38,-140.8 1206.38,-134.8 1206.38,-134.8 1206.38,-116.3 1206.38,-116.3 1206.38,-110.3 1212.38,-104.3 1218.38,-104.3 1218.38,-104.3 1329.62,-104.3 1329.62,-104.3 1335.62,-104.3 1341.62,-110.3 1341.62,-116.3 1341.62,-116.3 1341.62,-134.8 1341.62,-134.8 1341.62,-140.8 1335.62,-146.8 1329.62,-146.8"/>
<text text-anchor="middle" x="1274" y="-129.5" font-family="Helvetica,sans-Serif" font-size="14.00">Version Control</text>
<text text-anchor="middle" x="1274" y="-112.25" font-family="Helvetica,sans-Serif" font-size="14.00">(store/commit.rs)</text>
</g>
<!-- store&#45;&gt;store_commit -->
<g id="edge25" class="edge">
<title>store&#45;&gt;store_commit</title>
<path fill="none" stroke="black" d="M1274,-235.47C1274,-214.74 1274,-182.41 1274,-158.35"/>
<polygon fill="black" stroke="black" points="1277.5,-158.48 1274,-148.48 1270.5,-158.48 1277.5,-158.48"/>
</g>
<!-- store_materialize -->
<g id="node25" class="node">
<title>store_materialize</title>
<path fill="#b3e5fc" stroke="black" d="M1508,-146.8C1508,-146.8 1372,-146.8 1372,-146.8 1366,-146.8 1360,-140.8 1360,-134.8 1360,-134.8 1360,-116.3 1360,-116.3 1360,-110.3 1366,-104.3 1372,-104.3 1372,-104.3 1508,-104.3 1508,-104.3 1514,-104.3 1520,-110.3 1520,-116.3 1520,-116.3 1520,-134.8 1520,-134.8 1520,-140.8 1514,-146.8 1508,-146.8"/>
<text text-anchor="middle" x="1440" y="-129.5" font-family="Helvetica,sans-Serif" font-size="14.00">Materialized Views</text>
<text text-anchor="middle" x="1440" y="-112.25" font-family="Helvetica,sans-Serif" font-size="14.00">(store/materialize.rs)</text>
</g>
<!-- store&#45;&gt;store_materialize -->
<g id="edge26" class="edge">
<title>store&#45;&gt;store_materialize</title>
<path fill="none" stroke="black" d="M1303.2,-235.44C1317.73,-225.06 1335.46,-212.14 1351,-200.1 1369.85,-185.5 1390.4,-168.58 1407,-154.66"/>
<polygon fill="black" stroke="black" points="1409.23,-157.36 1414.62,-148.24 1404.72,-152 1409.23,-157.36"/>
</g>
<!-- rkyv -->
<g id="node42" class="node">
<title>rkyv</title>
<ellipse fill="#e0e0e0" stroke="black" cx="1085" cy="-125.55" rx="97.23" ry="30.05"/>
<text text-anchor="middle" x="1085" y="-129.5" font-family="Helvetica,sans-Serif" font-size="14.00">rkyv</text>
<text text-anchor="middle" x="1085" y="-112.25" font-family="Helvetica,sans-Serif" font-size="14.00">(zero&#45;copy serde)</text>
</g>
<!-- store&#45;&gt;rkyv -->
<g id="edge56" class="edge">
<title>store&#45;&gt;rkyv</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M1244.05,-235.47C1214.34,-215.12 1168.31,-183.6 1133.4,-159.69"/>
<polygon fill="black" stroke="black" points="1135.8,-157.1 1125.57,-154.34 1131.85,-162.87 1135.8,-157.1"/>
</g>
<!-- geologmeta -->
<g id="node26" class="node">
<title>geologmeta</title>
<path fill="#81d4fa" stroke="black" stroke-width="2" d="M1830.62,-58.5C1830.62,-58.5 1707.38,-58.5 1707.38,-58.5 1701.38,-58.5 1695.38,-52.5 1695.38,-46.5 1695.38,-46.5 1695.38,-28 1695.38,-28 1695.38,-22 1701.38,-16 1707.38,-16 1707.38,-16 1830.62,-16 1830.62,-16 1836.62,-16 1842.62,-22 1842.62,-28 1842.62,-28 1842.62,-46.5 1842.62,-46.5 1842.62,-52.5 1836.62,-58.5 1830.62,-58.5"/>
<text text-anchor="middle" x="1769" y="-41.2" font-family="Helvetica,sans-Serif" font-size="14.00">GeologMeta</text>
<text text-anchor="middle" x="1769" y="-23.95" font-family="Helvetica,sans-Serif" font-size="14.00">(Homoiconic Store)</text>
</g>
<!-- store_append&#45;&gt;geologmeta -->
<g id="edge27" class="edge">
<title>store_append&#45;&gt;geologmeta</title>
<path fill="none" stroke="black" d="M1769,-104.1C1769,-93.96 1769,-81.49 1769,-70.14"/>
<polygon fill="black" stroke="black" points="1772.5,-70.37 1769,-60.37 1765.5,-70.37 1772.5,-70.37"/>
</g>
<!-- store_theory&#45;&gt;geologmeta -->
<g id="edge28" class="edge">
<title>store_theory&#45;&gt;geologmeta</title>
<path fill="none" stroke="black" d="M1888.39,-103.88C1866.82,-92.02 1839.53,-77.02 1816.49,-64.35"/>
<polygon fill="black" stroke="black" points="1818.35,-61.38 1807.9,-59.63 1814.97,-67.52 1818.35,-61.38"/>
</g>
<!-- store_instance&#45;&gt;geologmeta -->
<g id="edge29" class="edge">
<title>store_instance&#45;&gt;geologmeta</title>
<path fill="none" stroke="black" d="M2038.01,-103.92C2025.44,-98.01 2011.35,-91.97 1998,-87.5 1951.44,-71.92 1897.85,-60.09 1854.23,-51.92"/>
<polygon fill="black" stroke="black" points="1855.04,-48.51 1844.57,-50.15 1853.77,-55.4 1855.04,-48.51"/>
</g>
<!-- store_commit&#45;&gt;geologmeta -->
<g id="edge30" class="edge">
<title>store_commit&#45;&gt;geologmeta</title>
<path fill="none" stroke="black" d="M1310.61,-103.88C1323.08,-97.68 1337.32,-91.48 1351,-87.5 1463.03,-54.93 1597.91,-43.83 1683.56,-40.09"/>
<polygon fill="black" stroke="black" points="1683.69,-43.59 1693.54,-39.68 1683.4,-36.59 1683.69,-43.59"/>
</g>
<!-- store_materialize&#45;&gt;geologmeta -->
<g id="edge31" class="edge">
<title>store_materialize&#45;&gt;geologmeta</title>
<path fill="none" stroke="black" d="M1484.66,-103.99C1498.65,-98.09 1514.28,-92.03 1529,-87.5 1579.52,-71.96 1637.53,-59.9 1683.87,-51.61"/>
<polygon fill="black" stroke="black" points="1684.35,-55.08 1693.59,-49.9 1683.14,-48.18 1684.35,-55.08"/>
</g>
<!-- query_relalg -->
<g id="node28" class="node">
<title>query_relalg</title>
<path fill="#e1bee7" stroke="black" d="M868.38,-1036.85C868.38,-1036.85 725.62,-1036.85 725.62,-1036.85 719.62,-1036.85 713.62,-1030.85 713.62,-1024.85 713.62,-1024.85 713.62,-989.1 713.62,-989.1 713.62,-983.1 719.62,-977.1 725.62,-977.1 725.62,-977.1 868.38,-977.1 868.38,-977.1 874.38,-977.1 880.38,-983.1 880.38,-989.1 880.38,-989.1 880.38,-1024.85 880.38,-1024.85 880.38,-1030.85 874.38,-1036.85 868.38,-1036.85"/>
<text text-anchor="middle" x="797" y="-1019.55" font-family="Helvetica,sans-Serif" font-size="14.00">Relational Algebra IR</text>
<text text-anchor="middle" x="797" y="-1002.3" font-family="Helvetica,sans-Serif" font-size="14.00">(query/to_relalg.rs)</text>
<text text-anchor="middle" x="797" y="-985.05" font-family="Helvetica,sans-Serif" font-size="14.00">(query/from_relalg.rs)</text>
</g>
<!-- query_compile&#45;&gt;query_relalg -->
<g id="edge33" class="edge">
<title>query_compile&#45;&gt;query_relalg</title>
<path fill="none" stroke="black" d="M797,-1141.64C797,-1118 797,-1078.53 797,-1048.59"/>
<polygon fill="black" stroke="black" points="800.5,-1048.75 797,-1038.75 793.5,-1048.75 800.5,-1048.75"/>
</g>
<!-- query_optimize -->
<g id="node31" class="node">
<title>query_optimize</title>
<path fill="#e1bee7" stroke="black" d="M866.38,-905.6C866.38,-905.6 741.62,-905.6 741.62,-905.6 735.62,-905.6 729.62,-899.6 729.62,-893.6 729.62,-893.6 729.62,-875.1 729.62,-875.1 729.62,-869.1 735.62,-863.1 741.62,-863.1 741.62,-863.1 866.38,-863.1 866.38,-863.1 872.38,-863.1 878.38,-869.1 878.38,-875.1 878.38,-875.1 878.38,-893.6 878.38,-893.6 878.38,-899.6 872.38,-905.6 866.38,-905.6"/>
<text text-anchor="middle" x="804" y="-888.3" font-family="Helvetica,sans-Serif" font-size="14.00">Optimizer</text>
<text text-anchor="middle" x="804" y="-871.05" font-family="Helvetica,sans-Serif" font-size="14.00">(query/optimize.rs)</text>
</g>
<!-- query_relalg&#45;&gt;query_optimize -->
<g id="edge34" class="edge">
<title>query_relalg&#45;&gt;query_optimize</title>
<path fill="none" stroke="black" d="M798.69,-976.78C799.74,-958.82 801.07,-935.79 802.14,-917.34"/>
<polygon fill="black" stroke="black" points="805.63,-917.67 802.72,-907.49 798.64,-917.27 805.63,-917.67"/>
</g>
<!-- query_chase&#45;&gt;cc -->
<g id="edge38" class="edge">
<title>query_chase&#45;&gt;cc</title>
<path fill="none" stroke="black" d="M623.43,-1132.84C607.01,-1102.65 585,-1053.67 585,-1007.98 585,-1007.98 585,-1007.98 585,-803.85 585,-678.97 641.47,-620.88 563,-523.73 519.57,-469.97 482.17,-490.57 414,-479.23 402.92,-477.39 219.78,-479.33 212,-471.23 174.58,-432.3 193.69,-400.53 212,-349.73 219.28,-329.53 233.14,-310.63 247.06,-295.3"/>
<polygon fill="black" stroke="black" points="249.39,-297.93 253.72,-288.26 244.31,-293.12 249.39,-297.93"/>
<text text-anchor="middle" x="626.03" y="-752.3" font-family="Helvetica,sans-Serif" font-size="14.00">equality</text>
<text text-anchor="middle" x="626.03" y="-735.05" font-family="Helvetica,sans-Serif" font-size="14.00">saturation</text>
</g>
<!-- query_chase&#45;&gt;store -->
<g id="edge39" class="edge">
<title>query_chase&#45;&gt;store</title>
<path fill="none" stroke="black" d="M707.21,-1136.48C710.18,-1135.38 713.12,-1134.29 716,-1133.23 792.46,-1105.15 832.89,-1131.78 889,-1072.73 909.66,-1050.99 908,-1037.97 908,-1007.98 908,-1007.98 908,-1007.98 908,-642.98 908,-464.66 1116.8,-336.07 1218.98,-283.82"/>
<polygon fill="black" stroke="black" points="1220.42,-287.02 1227.77,-279.39 1217.26,-280.77 1220.42,-287.02"/>
</g>
<!-- tensor_check -->
<g id="node40" class="node">
<title>tensor_check</title>
<path fill="#ffecb3" stroke="black" d="M428.88,-1028.23C428.88,-1028.23 319.12,-1028.23 319.12,-1028.23 313.12,-1028.23 307.12,-1022.23 307.12,-1016.23 307.12,-1016.23 307.12,-997.73 307.12,-997.73 307.12,-991.73 313.12,-985.73 319.12,-985.73 319.12,-985.73 428.88,-985.73 428.88,-985.73 434.88,-985.73 440.88,-991.73 440.88,-997.73 440.88,-997.73 440.88,-1016.23 440.88,-1016.23 440.88,-1022.23 434.88,-1028.23 428.88,-1028.23"/>
<text text-anchor="middle" x="374" y="-1010.93" font-family="Helvetica,sans-Serif" font-size="14.00">Axiom Checker</text>
<text text-anchor="middle" x="374" y="-993.68" font-family="Helvetica,sans-Serif" font-size="14.00">(tensor/check.rs)</text>
</g>
<!-- query_chase&#45;&gt;tensor_check -->
<g id="edge40" class="edge">
<title>query_chase&#45;&gt;tensor_check</title>
<path fill="none" stroke="black" d="M574.9,-1143.47C553.16,-1136.1 529.31,-1126.63 508.75,-1115.23 469.29,-1093.34 429.51,-1059.98 403.52,-1036.28"/>
<polygon fill="black" stroke="black" points="406.08,-1033.89 396.36,-1029.68 401.33,-1039.03 406.08,-1033.89"/>
<text text-anchor="middle" x="539.88" y="-1101.93" font-family="Helvetica,sans-Serif" font-size="14.00">axiom</text>
<text text-anchor="middle" x="539.88" y="-1084.68" font-family="Helvetica,sans-Serif" font-size="14.00">checking</text>
</g>
<!-- query_backend -->
<g id="node30" class="node">
<title>query_backend</title>
<path fill="#e1bee7" stroke="black" d="M868,-826.1C868,-826.1 744,-826.1 744,-826.1 738,-826.1 732,-820.1 732,-814.1 732,-814.1 732,-795.6 732,-795.6 732,-789.6 738,-783.6 744,-783.6 744,-783.6 868,-783.6 868,-783.6 874,-783.6 880,-789.6 880,-795.6 880,-795.6 880,-814.1 880,-814.1 880,-820.1 874,-826.1 868,-826.1"/>
<text text-anchor="middle" x="806" y="-808.8" font-family="Helvetica,sans-Serif" font-size="14.00">Query Backend</text>
<text text-anchor="middle" x="806" y="-791.55" font-family="Helvetica,sans-Serif" font-size="14.00">(query/backend.rs)</text>
</g>
<!-- query_backend&#45;&gt;store -->
<g id="edge36" class="edge">
<title>query_backend&#45;&gt;store</title>
<path fill="none" stroke="black" d="M801.28,-783.3C790.8,-731.96 771.65,-596.98 840,-523.73 856.06,-506.52 874.69,-529.68 892,-513.73 954.09,-456.52 881.67,-388.75 943,-330.73 980.17,-295.56 1119.64,-274.6 1205.23,-264.77"/>
<polygon fill="black" stroke="black" points="1205.37,-268.28 1214.92,-263.68 1204.59,-261.32 1205.37,-268.28"/>
<text text-anchor="middle" x="867" y="-556.93" font-family="Helvetica,sans-Serif" font-size="14.00">execute</text>
</g>
<!-- query_optimize&#45;&gt;query_backend -->
<g id="edge35" class="edge">
<title>query_optimize&#45;&gt;query_backend</title>
<path fill="none" stroke="black" d="M804.53,-862.99C804.73,-855.22 804.96,-846.17 805.18,-837.59"/>
<polygon fill="black" stroke="black" points="808.67,-837.95 805.43,-827.86 801.68,-837.77 808.67,-837.95"/>
</g>
<!-- solver&#45;&gt;store -->
<g id="edge48" class="edge">
<title>solver&#45;&gt;store</title>
<path fill="none" stroke="black" d="M179.65,-1505.49C224.24,-1497.2 272,-1478.07 272,-1434.23 272,-1434.23 272,-1434.23 272,-642.98 272,-589.62 247.54,-560.72 286,-523.73 296.28,-513.84 400.04,-516.66 414,-513.73 655.84,-463.02 701.16,-397.74 939,-330.73 1030.16,-305.04 1137.44,-283.18 1205.57,-270.31"/>
<polygon fill="black" stroke="black" points="1205.91,-273.81 1215.09,-268.53 1204.61,-266.93 1205.91,-273.81"/>
</g>
<!-- solver_tree -->
<g id="node33" class="node">
<title>solver_tree</title>
<path fill="#b2dfdb" stroke="black" d="M151,-1454.48C151,-1454.48 57,-1454.48 57,-1454.48 51,-1454.48 45,-1448.48 45,-1442.48 45,-1442.48 45,-1423.98 45,-1423.98 45,-1417.98 51,-1411.98 57,-1411.98 57,-1411.98 151,-1411.98 151,-1411.98 157,-1411.98 163,-1417.98 163,-1423.98 163,-1423.98 163,-1442.48 163,-1442.48 163,-1448.48 157,-1454.48 151,-1454.48"/>
<text text-anchor="middle" x="104" y="-1437.18" font-family="Helvetica,sans-Serif" font-size="14.00">Search Tree</text>
<text text-anchor="middle" x="104" y="-1419.93" font-family="Helvetica,sans-Serif" font-size="14.00">(solver/tree.rs)</text>
</g>
<!-- solver&#45;&gt;solver_tree -->
<g id="edge42" class="edge">
<title>solver&#45;&gt;solver_tree</title>
<path fill="none" stroke="black" d="M104,-1491.37C104,-1483.6 104,-1474.54 104,-1465.96"/>
<polygon fill="black" stroke="black" points="107.5,-1466.24 104,-1456.24 100.5,-1466.24 107.5,-1466.24"/>
</g>
<!-- solver_tactics -->
<g id="node34" class="node">
<title>solver_tactics</title>
<path fill="#80cbc4" stroke="black" stroke-width="2" d="M160,-1374.98C160,-1374.98 48,-1374.98 48,-1374.98 42,-1374.98 36,-1368.98 36,-1362.98 36,-1362.98 36,-1309.98 36,-1309.98 36,-1303.98 42,-1297.98 48,-1297.98 48,-1297.98 160,-1297.98 160,-1297.98 166,-1297.98 172,-1303.98 172,-1309.98 172,-1309.98 172,-1362.98 172,-1362.98 172,-1368.98 166,-1374.98 160,-1374.98"/>
<text text-anchor="middle" x="104" y="-1357.68" font-family="Helvetica,sans-Serif" font-size="14.00">Tactics</text>
<text text-anchor="middle" x="104" y="-1340.43" font-family="Helvetica,sans-Serif" font-size="14.00">(solver/tactics.rs)</text>
<text text-anchor="middle" x="104" y="-1323.18" font-family="Helvetica,sans-Serif" font-size="14.00">Check, Forward,</text>
<text text-anchor="middle" x="104" y="-1305.93" font-family="Helvetica,sans-Serif" font-size="14.00">Propagate, Auto</text>
</g>
<!-- solver_tree&#45;&gt;solver_tactics -->
<g id="edge43" class="edge">
<title>solver_tree&#45;&gt;solver_tactics</title>
<path fill="none" stroke="black" d="M104,-1411.67C104,-1404.17 104,-1395.33 104,-1386.42"/>
<polygon fill="black" stroke="black" points="107.5,-1386.7 104,-1376.7 100.5,-1386.7 107.5,-1386.7"/>
</g>
<!-- solver_tactics&#45;&gt;cc -->
<g id="edge46" class="edge">
<title>solver_tactics&#45;&gt;cc</title>
<path fill="none" stroke="black" d="M63.84,-1297.61C47.84,-1280.59 30.53,-1259.41 19,-1237.48 3.33,-1207.66 0,-1197.79 0,-1164.1 0,-1164.1 0,-1164.1 0,-387.23 0,-293.41 117.57,-365.65 201,-322.73 216.24,-314.89 231.63,-304.44 245.15,-294.23"/>
<polygon fill="black" stroke="black" points="247.23,-297.05 252.99,-288.16 242.94,-291.52 247.23,-297.05"/>
<text text-anchor="middle" x="35.25" y="-808.8" font-family="Helvetica,sans-Serif" font-size="14.00">propagate</text>
<text text-anchor="middle" x="35.25" y="-791.55" font-family="Helvetica,sans-Serif" font-size="14.00">equations</text>
</g>
<!-- solver_tactics&#45;&gt;query_chase -->
<g id="edge45" class="edge">
<title>solver_tactics&#45;&gt;query_chase</title>
<path fill="none" stroke="black" d="M172.28,-1313.69C272.55,-1281.69 459.06,-1222.17 564.05,-1188.66"/>
<polygon fill="black" stroke="black" points="564.97,-1192.04 573.44,-1185.67 562.85,-1185.37 564.97,-1192.04"/>
<text text-anchor="middle" x="402.12" y="-1266.68" font-family="Helvetica,sans-Serif" font-size="14.00">forward</text>
<text text-anchor="middle" x="402.12" y="-1249.43" font-family="Helvetica,sans-Serif" font-size="14.00">chaining</text>
</g>
<!-- solver_types -->
<g id="node35" class="node">
<title>solver_types</title>
<path fill="#b2dfdb" stroke="black" d="M145.62,-1184.35C145.62,-1184.35 40.38,-1184.35 40.38,-1184.35 34.38,-1184.35 28.38,-1178.35 28.38,-1172.35 28.38,-1172.35 28.38,-1153.85 28.38,-1153.85 28.38,-1147.85 34.38,-1141.85 40.38,-1141.85 40.38,-1141.85 145.62,-1141.85 145.62,-1141.85 151.62,-1141.85 157.62,-1147.85 157.62,-1153.85 157.62,-1153.85 157.62,-1172.35 157.62,-1172.35 157.62,-1178.35 151.62,-1184.35 145.62,-1184.35"/>
<text text-anchor="middle" x="93" y="-1167.05" font-family="Helvetica,sans-Serif" font-size="14.00">Solver Types</text>
<text text-anchor="middle" x="93" y="-1149.8" font-family="Helvetica,sans-Serif" font-size="14.00">(solver/types.rs)</text>
</g>
<!-- solver_tactics&#45;&gt;solver_types -->
<g id="edge44" class="edge">
<title>solver_tactics&#45;&gt;solver_types</title>
<path fill="none" stroke="black" d="M101.59,-1297.87C99.63,-1267.35 96.9,-1224.8 95.04,-1195.95"/>
<polygon fill="black" stroke="black" points="98.54,-1195.76 94.41,-1186 91.55,-1196.21 98.54,-1195.76"/>
</g>
<!-- solver_tactics&#45;&gt;tensor_check -->
<g id="edge47" class="edge">
<title>solver_tactics&#45;&gt;tensor_check</title>
<path fill="none" stroke="black" d="M135.24,-1297.59C189.65,-1231.58 300.72,-1096.87 349.78,-1037.36"/>
<polygon fill="black" stroke="black" points="352.48,-1039.59 356.14,-1029.64 347.08,-1035.13 352.48,-1039.59"/>
<text text-anchor="middle" x="295" y="-1167.05" font-family="Helvetica,sans-Serif" font-size="14.00">check</text>
<text text-anchor="middle" x="295" y="-1149.8" font-family="Helvetica,sans-Serif" font-size="14.00">axioms</text>
</g>
<!-- tensor_expr -->
<g id="node36" class="node">
<title>tensor_expr</title>
<path fill="#ffecb3" stroke="black" d="M436.38,-826.1C436.38,-826.1 311.62,-826.1 311.62,-826.1 305.62,-826.1 299.62,-820.1 299.62,-814.1 299.62,-814.1 299.62,-795.6 299.62,-795.6 299.62,-789.6 305.62,-783.6 311.62,-783.6 311.62,-783.6 436.38,-783.6 436.38,-783.6 442.38,-783.6 448.38,-789.6 448.38,-795.6 448.38,-795.6 448.38,-814.1 448.38,-814.1 448.38,-820.1 442.38,-826.1 436.38,-826.1"/>
<text text-anchor="middle" x="374" y="-808.8" font-family="Helvetica,sans-Serif" font-size="14.00">Tensor Expressions</text>
<text text-anchor="middle" x="374" y="-791.55" font-family="Helvetica,sans-Serif" font-size="14.00">(tensor/expr.rs)</text>
</g>
<!-- tensor_builder -->
<g id="node38" class="node">
<title>tensor_builder</title>
<path fill="#ffecb3" stroke="black" d="M433.88,-713.1C433.88,-713.1 312.12,-713.1 312.12,-713.1 306.12,-713.1 300.12,-707.1 300.12,-701.1 300.12,-701.1 300.12,-682.6 300.12,-682.6 300.12,-676.6 306.12,-670.6 312.12,-670.6 312.12,-670.6 433.88,-670.6 433.88,-670.6 439.88,-670.6 445.88,-676.6 445.88,-682.6 445.88,-682.6 445.88,-701.1 445.88,-701.1 445.88,-707.1 439.88,-713.1 433.88,-713.1"/>
<text text-anchor="middle" x="373" y="-695.8" font-family="Helvetica,sans-Serif" font-size="14.00">Expression Builder</text>
<text text-anchor="middle" x="373" y="-678.55" font-family="Helvetica,sans-Serif" font-size="14.00">(tensor/builder.rs)</text>
</g>
<!-- tensor_expr&#45;&gt;tensor_builder -->
<g id="edge50" class="edge">
<title>tensor_expr&#45;&gt;tensor_builder</title>
<path fill="none" stroke="black" d="M373.81,-783.24C373.67,-766.8 373.46,-743.51 373.29,-724.69"/>
<polygon fill="black" stroke="black" points="376.79,-724.84 373.2,-714.88 369.79,-724.91 376.79,-724.84"/>
</g>
<!-- tensor_sparse -->
<g id="node37" class="node">
<title>tensor_sparse</title>
<path fill="#ffe082" stroke="black" stroke-width="2" d="M427.88,-591.48C427.88,-591.48 312.12,-591.48 312.12,-591.48 306.12,-591.48 300.12,-585.48 300.12,-579.48 300.12,-579.48 300.12,-543.73 300.12,-543.73 300.12,-537.73 306.12,-531.73 312.12,-531.73 312.12,-531.73 427.88,-531.73 427.88,-531.73 433.88,-531.73 439.88,-537.73 439.88,-543.73 439.88,-543.73 439.88,-579.48 439.88,-579.48 439.88,-585.48 433.88,-591.48 427.88,-591.48"/>
<text text-anchor="middle" x="370" y="-574.18" font-family="Helvetica,sans-Serif" font-size="14.00">Sparse Storage</text>
<text text-anchor="middle" x="370" y="-556.93" font-family="Helvetica,sans-Serif" font-size="14.00">(tensor/sparse.rs)</text>
<text text-anchor="middle" x="370" y="-539.68" font-family="Helvetica,sans-Serif" font-size="14.00">RoaringBitmap</text>
</g>
<!-- tensor_sparse&#45;&gt;core -->
<g id="edge53" class="edge">
<title>tensor_sparse&#45;&gt;core</title>
<path fill="none" stroke="black" d="M356.94,-531.53C345.39,-505.82 328.3,-467.8 314.7,-437.52"/>
<polygon fill="black" stroke="black" points="317.96,-436.24 310.67,-428.55 311.57,-439.1 317.96,-436.24"/>
<text text-anchor="middle" x="378.75" y="-500.43" font-family="Helvetica,sans-Serif" font-size="14.00">read</text>
<text text-anchor="middle" x="378.75" y="-483.18" font-family="Helvetica,sans-Serif" font-size="14.00">structure</text>
</g>
<!-- roaring -->
<g id="node43" class="node">
<title>roaring</title>
<ellipse fill="#e0e0e0" stroke="black" cx="449" cy="-125.55" rx="58.51" ry="30.05"/>
<text text-anchor="middle" x="449" y="-129.5" font-family="Helvetica,sans-Serif" font-size="14.00">roaring</text>
<text text-anchor="middle" x="449" y="-112.25" font-family="Helvetica,sans-Serif" font-size="14.00">(bitmaps)</text>
</g>
<!-- tensor_sparse&#45;&gt;roaring -->
<g id="edge57" class="edge">
<title>tensor_sparse&#45;&gt;roaring</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M299.81,-550.68C216.06,-537.24 83.58,-510.33 54,-471.23 -11.45,-384.7 -19.47,-306.95 54,-227.1 102.92,-173.94 312.73,-231.08 378,-200.1 395.66,-191.72 411.27,-176.94 423.32,-162.81"/>
<polygon fill="black" stroke="black" points="425.8,-165.31 429.39,-155.34 420.37,-160.89 425.8,-165.31"/>
</g>
<!-- tensor_builder&#45;&gt;tensor_sparse -->
<g id="edge51" class="edge">
<title>tensor_builder&#45;&gt;tensor_sparse</title>
<path fill="none" stroke="black" d="M372.52,-670.25C372.09,-652.16 371.47,-625.32 370.94,-602.97"/>
<polygon fill="black" stroke="black" points="374.45,-603.19 370.72,-593.27 367.45,-603.35 374.45,-603.19"/>
</g>
<!-- tensor_compile -->
<g id="node39" class="node">
<title>tensor_compile</title>
<path fill="#ffecb3" stroke="black" d="M435.62,-905.6C435.62,-905.6 312.38,-905.6 312.38,-905.6 306.38,-905.6 300.38,-899.6 300.38,-893.6 300.38,-893.6 300.38,-875.1 300.38,-875.1 300.38,-869.1 306.38,-863.1 312.38,-863.1 312.38,-863.1 435.62,-863.1 435.62,-863.1 441.62,-863.1 447.62,-869.1 447.62,-875.1 447.62,-875.1 447.62,-893.6 447.62,-893.6 447.62,-899.6 441.62,-905.6 435.62,-905.6"/>
<text text-anchor="middle" x="374" y="-888.3" font-family="Helvetica,sans-Serif" font-size="14.00">Formula Compiler</text>
<text text-anchor="middle" x="374" y="-871.05" font-family="Helvetica,sans-Serif" font-size="14.00">(tensor/compile.rs)</text>
</g>
<!-- tensor_compile&#45;&gt;tensor_expr -->
<g id="edge49" class="edge">
<title>tensor_compile&#45;&gt;tensor_expr</title>
<path fill="none" stroke="black" d="M374,-862.99C374,-855.22 374,-846.17 374,-837.59"/>
<polygon fill="black" stroke="black" points="377.5,-837.86 374,-827.86 370.5,-837.86 377.5,-837.86"/>
</g>
<!-- tensor_check&#45;&gt;tensor_compile -->
<g id="edge52" class="edge">
<title>tensor_check&#45;&gt;tensor_compile</title>
<path fill="none" stroke="black" d="M374,-985.24C374,-966.49 374,-938.59 374,-917.04"/>
<polygon fill="black" stroke="black" points="377.5,-917.33 374,-907.33 370.5,-917.33 377.5,-917.33"/>
</g>
<!-- legend_data -->
<g id="node45" class="node">
<title>legend_data</title>
<path fill="#f0f0f0" stroke="none" d="M1088.12,-1757.73C1088.12,-1757.73 1027.88,-1757.73 1027.88,-1757.73 1021.88,-1757.73 1015.88,-1751.73 1015.88,-1745.73 1015.88,-1745.73 1015.88,-1733.73 1015.88,-1733.73 1015.88,-1727.73 1021.88,-1721.73 1027.88,-1721.73 1027.88,-1721.73 1088.12,-1721.73 1088.12,-1721.73 1094.12,-1721.73 1100.12,-1727.73 1100.12,-1733.73 1100.12,-1733.73 1100.12,-1745.73 1100.12,-1745.73 1100.12,-1751.73 1094.12,-1757.73 1088.12,-1757.73"/>
<text text-anchor="middle" x="1058" y="-1735.05" font-family="Helvetica,sans-Serif" font-size="14.00">Data Flow</text>
</g>
<!-- legend_dep -->
<g id="node46" class="node">
<title>legend_dep</title>
<path fill="#f0f0f0" stroke="none" d="M1097.5,-1678.23C1097.5,-1678.23 1018.5,-1678.23 1018.5,-1678.23 1012.5,-1678.23 1006.5,-1672.23 1006.5,-1666.23 1006.5,-1666.23 1006.5,-1654.23 1006.5,-1654.23 1006.5,-1648.23 1012.5,-1642.23 1018.5,-1642.23 1018.5,-1642.23 1097.5,-1642.23 1097.5,-1642.23 1103.5,-1642.23 1109.5,-1648.23 1109.5,-1654.23 1109.5,-1654.23 1109.5,-1666.23 1109.5,-1666.23 1109.5,-1672.23 1103.5,-1678.23 1097.5,-1678.23"/>
<text text-anchor="middle" x="1058" y="-1655.55" font-family="Helvetica,sans-Serif" font-size="14.00">Dependency</text>
</g>
<!-- legend_data&#45;&gt;legend_dep -->
<!-- legend_key -->
<g id="node47" class="node">
<title>legend_key</title>
<path fill="#80cbc4" stroke="black" stroke-width="2" d="M1108.75,-1530.73C1108.75,-1530.73 1007.25,-1530.73 1007.25,-1530.73 1001.25,-1530.73 995.25,-1524.73 995.25,-1518.73 995.25,-1518.73 995.25,-1506.73 995.25,-1506.73 995.25,-1500.73 1001.25,-1494.73 1007.25,-1494.73 1007.25,-1494.73 1108.75,-1494.73 1108.75,-1494.73 1114.75,-1494.73 1120.75,-1500.73 1120.75,-1506.73 1120.75,-1506.73 1120.75,-1518.73 1120.75,-1518.73 1120.75,-1524.73 1114.75,-1530.73 1108.75,-1530.73"/>
<text text-anchor="middle" x="1058" y="-1508.05" font-family="Helvetica,sans-Serif" font-size="14.00">Key Component</text>
</g>
<!-- legend_dep&#45;&gt;legend_key -->
</g>
</svg>