Compare commits

...
10 Commits
38 changed files with 5189 additions and 1944 deletions

No files matched your search

+26 -4
View File
@@ -2,14 +2,36 @@ This was (mostly) me being bored in a Monday evening and in an attempt to formal
## Graphs ## Graphs
The dependency graph covers the six milestones and every edge runs from a dependency to the result that uses it while the node colour encodes the status proved or stated or planned or blocked: The dependency graphs are drawn in greyscale and split by milestone. Every edge runs from a dependency to the result that uses it. A box is a result named after a paper statement, an ellipse is a supporting result, and a dashed box labelled with a milestone is a result defined in another diagram. The overview gives the shape of the whole development:
![Theorem dependency graph](graphs/dependency.svg) <p align="center"><img src="graphs/dependency-overview.svg" alt="Theorem dependency by milestone"></p>
The details are then one diagram per milestone:
### M1, binding and reduction
<p align="center"><img src="graphs/dependency-M1.svg" alt="M1 dependencies"></p>
### M2, metatheory and checks
<p align="center"><img src="graphs/dependency-M2.svg" alt="M2 dependencies"></p>
### M3, subsystem
<p align="center"><img src="graphs/dependency-M3.svg" alt="M3 dependencies"></p>
### M4, parallel reduction
<p align="center"><img src="graphs/dependency-M4.svg" alt="M4 dependencies"></p>
### M5, metaterms and the named calculus
<p align="center"><img src="graphs/dependency-M5.svg" alt="M5 dependencies"></p>
The rule sketch gives the transition system generated by the rules B and Gc and R: The rule sketch gives the transition system generated by the rules B and Gc and R:
![Reduction rules](graphs/rules.svg) <p align="center"><img src="graphs/rules.svg" alt="Reduction rules"></p>
The reduction graph gives the bounded reduct set of the term that applies the duplicating identity to a variable with every edge labelled by its rule and with the normal form marked: The reduction graph gives the bounded reduct set of the term that applies the duplicating identity to a variable with every edge labelled by its rule and with the normal form marked:
![Reduction graph of the duplicating identity](graphs/reduction.svg) <p align="center"><img src="graphs/reduction.svg" alt="Reduction graph of the duplicating identity"></p>
+71
View File
@@ -0,0 +1,71 @@
digraph deps {
rankdir=LR;
bgcolor="transparent";
splines=polyline;
concentrate=true;
nodesep=0.2;
ranksep=0.9;
node [fontname=Inter, fontsize=9];
edge [fontname=Inter, fontsize=8, color="#8f9780", fontcolor="#c9d1bb", arrowsize=0.6, penwidth=0.8];
graph [fontname=Inter, fontsize=12, labelloc=t, fontcolor="#c9d1bb", label=<<B>Theorem dependencies M1, 33 results</B>>];
close_rec_fvar [label="close_rec_fvar", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="close_rec_fvar theory/Binding.v proved"];
close_rec_fvs [label="close_rec_fvs", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="close_rec_fvs theory/Binding.v proved"];
close_rec_notin [label="close_rec_notin", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="close_rec_notin theory/Binding.v proved"];
fvs_lift [label="fvs_lift", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="fvs_lift theory/Binding.v proved"];
lift_0_lc [label="lift_0_lc", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="lift_0_lc theory/Binding.v proved"];
lift_lc [label="lift_lc", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="lift_lc theory/Binding.v proved"];
open_close [label="open_close", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="open_close theory/Binding.v proved"];
open_rec_bvar [label="open_rec_bvar", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="open_rec_bvar theory/Binding.v proved"];
open_rec_bvar_neq [label="open_rec_bvar_neq", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="open_rec_bvar_neq theory/Binding.v proved"];
open_rec_fvs [label="open_rec_fvs", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="open_rec_fvs theory/Binding.v proved"];
open_rec_occurs_false [label="open_rec_occurs_false", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="open_rec_occurs_false theory/Binding.v proved"];
subst_fvar_other [label="subst_fvar_other", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subst_fvar_other theory/Binding.v proved"];
subst_fvar_self [label="subst_fvar_self", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subst_fvar_self theory/Binding.v proved"];
subst_fvs [label="subst_fvs", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subst_fvs theory/Binding.v proved"];
at_ctx_comp [label="at_ctx_comp", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="at_ctx_comp theory/Reduction.v proved"];
has_red_f [label="has_red_f", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="has_red_f theory/Reduction.v proved"];
has_red_spec [label="has_red_spec", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="has_red_spec theory/Reduction.v proved"];
nf_dec [label="nf_dec", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="nf_dec theory/Reduction.v proved"];
nf_iff_steps_nil [label="nf_iff_steps_nil", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="nf_iff_steps_nil theory/Reduction.v proved"];
normal_form_iff_nf [label="normal_form_iff_nf", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="normal_form_iff_nf theory/Reduction.v proved"];
plug_comp [label="plug_comp", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="plug_comp theory/Reduction.v proved"];
positions_at [label="positions_at", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="positions_at theory/Reduction.v proved"];
positions_comp [label="positions_comp", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="positions_comp theory/Reduction.v proved"];
positions_hole [label="positions_hole", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="positions_hole theory/Reduction.v proved"];
red1_dec [label="red1_dec", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="red1_dec theory/Reduction.v proved"];
root_steps_complete [label="root_steps_complete", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="root_steps_complete theory/Reduction.v proved"];
root_steps_in_steps [label="root_steps_in_steps", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="root_steps_in_steps theory/Reduction.v proved"];
root_steps_sound [label="root_steps_sound", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="root_steps_sound theory/Reduction.v proved"];
steps_complete [label="steps_complete", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="steps_complete theory/Reduction.v proved"];
steps_sound [label="steps_sound", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="steps_sound theory/Reduction.v proved"];
steps_sound_red1 [label="steps_sound_red1", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="steps_sound_red1 theory/Reduction.v proved"];
zdecs_complete [label="zdecs_complete", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="zdecs_complete theory/Reduction.v proved"];
zdecs_sound [label="zdecs_sound", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="zdecs_sound theory/Reduction.v proved"];
lift_lc -> lift_0_lc;
fvs_lift -> open_rec_fvs;
open_rec_bvar -> open_rec_fvs;
open_rec_bvar_neq -> open_rec_fvs;
open_rec_bvar -> open_close;
lift_0_lc -> subst_fvar_self;
close_rec_fvs -> subst_fvs;
open_rec_fvs -> subst_fvs;
zdecs_sound -> root_steps_sound;
zdecs_complete -> root_steps_complete;
positions_at -> steps_sound;
root_steps_sound -> steps_sound;
steps_sound -> steps_sound_red1;
positions_hole -> root_steps_in_steps;
at_ctx_comp -> steps_complete;
plug_comp -> steps_complete;
positions_comp -> steps_complete;
root_steps_complete -> steps_complete;
root_steps_in_steps -> steps_complete;
has_red_f -> has_red_spec;
steps_complete -> has_red_spec;
steps_sound -> has_red_spec;
has_red_spec -> red1_dec;
steps_complete -> nf_iff_steps_nil;
steps_sound_red1 -> nf_iff_steps_nil;
nf_iff_steps_nil -> normal_form_iff_nf;
nf_iff_steps_nil -> nf_dec;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

+472
View File
@@ -0,0 +1,472 @@
<?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 2.42.4 (0)
-->
<!-- Title: deps Pages: 1 -->
<svg width="1019pt" height="715pt"
viewBox="0.00 0.00 1018.89 715.00" 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 711)">
<title>deps</title>
<text text-anchor="start" x="375.95" y="-694.4" font-family="Inter" font-weight="bold" font-size="12.00" fill="#c9d1bb">Theorem dependencies M1, 33 results</text>
<!-- close_rec_fvar -->
<g id="node1" class="node">
<title>close_rec_fvar</title>
<g id="a_node1"><a xlink:title="close_rec_fvar theory/Binding.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="67.55" cy="-18" rx="46.38" ry="18"/>
<text text-anchor="middle" x="67.55" y="-15.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">close_rec_fvar</text>
</a>
</g>
</g>
<!-- close_rec_fvs -->
<g id="node2" class="node">
<title>close_rec_fvs</title>
<g id="a_node2"><a xlink:title="close_rec_fvs theory/Binding.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="263.61" cy="-168" rx="43.1" ry="18"/>
<text text-anchor="middle" x="263.61" y="-165.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">close_rec_fvs</text>
</a>
</g>
</g>
<!-- subst_fvs -->
<g id="node14" class="node">
<title>subst_fvs</title>
<g id="a_node14"><a xlink:title="subst_fvs theory/Binding.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="442.35" cy="-143" rx="34.13" ry="18"/>
<text text-anchor="middle" x="442.35" y="-140.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subst_fvs</text>
</a>
</g>
</g>
<!-- close_rec_fvs&#45;&gt;subst_fvs -->
<g id="edge7" class="edge">
<title>close_rec_fvs&#45;&gt;subst_fvs</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M304.71,-162.33C334.28,-158.14 374.26,-152.49 403.32,-148.38"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="403.71,-150.45 409.35,-147.53 403.12,-146.29 403.71,-150.45"/>
</g>
<!-- close_rec_notin -->
<g id="node3" class="node">
<title>close_rec_notin</title>
<g id="a_node3"><a xlink:title="close_rec_notin theory/Binding.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="67.55" cy="-218" rx="49.8" ry="18"/>
<text text-anchor="middle" x="67.55" y="-215.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">close_rec_notin</text>
</a>
</g>
</g>
<!-- fvs_lift -->
<g id="node4" class="node">
<title>fvs_lift</title>
<g id="a_node4"><a xlink:title="fvs_lift theory/Binding.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="67.55" cy="-168" rx="27" ry="18"/>
<text text-anchor="middle" x="67.55" y="-165.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">fvs_lift</text>
</a>
</g>
</g>
<!-- open_rec_fvs -->
<g id="node10" class="node">
<title>open_rec_fvs</title>
<g id="a_node10"><a xlink:title="open_rec_fvs theory/Binding.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="263.61" cy="-118" rx="43.1" ry="18"/>
<text text-anchor="middle" x="263.61" y="-115.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">open_rec_fvs</text>
</a>
</g>
</g>
<!-- fvs_lift&#45;&gt;open_rec_fvs -->
<g id="edge2" class="edge">
<title>fvs_lift&#45;&gt;open_rec_fvs</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M93.13,-161.67C125.07,-153.44 181.37,-138.93 220.26,-128.91"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="221.06,-130.87 226.35,-127.34 220.01,-126.81 221.06,-130.87"/>
</g>
<!-- lift_0_lc -->
<g id="node5" class="node">
<title>lift_0_lc</title>
<g id="a_node5"><a xlink:title="lift_0_lc theory/Binding.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="263.61" cy="-268" rx="28.74" ry="18"/>
<text text-anchor="middle" x="263.61" y="-265.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">lift_0_lc</text>
</a>
</g>
</g>
<!-- subst_fvar_self -->
<g id="node13" class="node">
<title>subst_fvar_self</title>
<g id="a_node13"><a xlink:title="subst_fvar_self theory/Binding.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="442.35" cy="-268" rx="47.84" ry="18"/>
<text text-anchor="middle" x="442.35" y="-265.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subst_fvar_self</text>
</a>
</g>
</g>
<!-- lift_0_lc&#45;&gt;subst_fvar_self -->
<g id="edge6" class="edge">
<title>lift_0_lc&#45;&gt;subst_fvar_self</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M292.61,-268C318.16,-268 356.61,-268 388.01,-268"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="388.19,-270.1 394.19,-268 388.19,-265.9 388.19,-270.1"/>
</g>
<!-- lift_lc -->
<g id="node6" class="node">
<title>lift_lc</title>
<g id="a_node6"><a xlink:title="lift_lc theory/Binding.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="67.55" cy="-268" rx="27" ry="18"/>
<text text-anchor="middle" x="67.55" y="-265.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">lift_lc</text>
</a>
</g>
</g>
<!-- lift_lc&#45;&gt;lift_0_lc -->
<g id="edge1" class="edge">
<title>lift_lc&#45;&gt;lift_0_lc</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M94.72,-268C129.24,-268 190.08,-268 228.27,-268"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="228.66,-270.1 234.66,-268 228.66,-265.9 228.66,-270.1"/>
</g>
<!-- open_close -->
<g id="node7" class="node">
<title>open_close</title>
<g id="a_node7"><a xlink:title="open_close theory/Binding.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="263.61" cy="-68" rx="38.21" ry="18"/>
<text text-anchor="middle" x="263.61" y="-65.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">open_close</text>
</a>
</g>
</g>
<!-- open_rec_bvar -->
<g id="node8" class="node">
<title>open_rec_bvar</title>
<g id="a_node8"><a xlink:title="open_rec_bvar theory/Binding.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="67.55" cy="-68" rx="47.84" ry="18"/>
<text text-anchor="middle" x="67.55" y="-65.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">open_rec_bvar</text>
</a>
</g>
</g>
<!-- open_rec_bvar&#45;&gt;open_close -->
<g id="edge5" class="edge">
<title>open_rec_bvar&#45;&gt;open_close</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M115.53,-68C147.18,-68 188.62,-68 219.44,-68"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="219.46,-70.1 225.46,-68 219.46,-65.9 219.46,-70.1"/>
</g>
<!-- open_rec_bvar&#45;&gt;open_rec_fvs -->
<g id="edge3" class="edge">
<title>open_rec_bvar&#45;&gt;open_rec_fvs</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M107.82,-78.12C140.45,-86.53 186.79,-98.47 220.25,-107.09"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="220.01,-109.19 226.35,-108.66 221.06,-105.13 220.01,-109.19"/>
</g>
<!-- open_rec_bvar_neq -->
<g id="node9" class="node">
<title>open_rec_bvar_neq</title>
<g id="a_node9"><a xlink:title="open_rec_bvar_neq theory/Binding.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="67.55" cy="-118" rx="60.09" ry="18"/>
<text text-anchor="middle" x="67.55" y="-115.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">open_rec_bvar_neq</text>
</a>
</g>
</g>
<!-- open_rec_bvar_neq&#45;&gt;open_rec_fvs -->
<g id="edge4" class="edge">
<title>open_rec_bvar_neq&#45;&gt;open_rec_fvs</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M127.83,-118C155.48,-118 187.99,-118 214.14,-118"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="214.31,-120.1 220.31,-118 214.31,-115.9 214.31,-120.1"/>
</g>
<!-- open_rec_fvs&#45;&gt;subst_fvs -->
<g id="edge8" class="edge">
<title>open_rec_fvs&#45;&gt;subst_fvs</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M304.71,-123.67C334.28,-127.86 374.26,-133.51 403.32,-137.62"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="403.12,-139.71 409.35,-138.47 403.71,-135.55 403.12,-139.71"/>
</g>
<!-- open_rec_occurs_false -->
<g id="node11" class="node">
<title>open_rec_occurs_false</title>
<g id="a_node11"><a xlink:title="open_rec_occurs_false theory/Binding.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="67.55" cy="-318" rx="67.6" ry="18"/>
<text text-anchor="middle" x="67.55" y="-315.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">open_rec_occurs_false</text>
</a>
</g>
</g>
<!-- subst_fvar_other -->
<g id="node12" class="node">
<title>subst_fvar_other</title>
<g id="a_node12"><a xlink:title="subst_fvar_other theory/Binding.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="67.55" cy="-368" rx="53.23" ry="18"/>
<text text-anchor="middle" x="67.55" y="-365.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subst_fvar_other</text>
</a>
</g>
</g>
<!-- at_ctx_comp -->
<g id="node15" class="node">
<title>at_ctx_comp</title>
<g id="a_node15"><a xlink:title="at_ctx_comp theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="263.61" cy="-618" rx="42.95" ry="18"/>
<text text-anchor="middle" x="263.61" y="-615.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">at_ctx_comp</text>
</a>
</g>
</g>
<!-- steps_complete -->
<g id="node29" class="node">
<title>steps_complete</title>
<g id="a_node29"><a xlink:title="steps_complete theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="442.35" cy="-518" rx="50.46" ry="18"/>
<text text-anchor="middle" x="442.35" y="-515.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">steps_complete</text>
</a>
</g>
</g>
<!-- at_ctx_comp&#45;&gt;steps_complete -->
<g id="edge15" class="edge">
<title>at_ctx_comp&#45;&gt;steps_complete</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M295.13,-605.79C311,-599.45 327.12,-593 327.12,-593 327.12,-593 392.12,-543 392.12,-543 392.12,-543 398.81,-539.6 407.26,-535.31"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="408.31,-537.13 412.71,-532.54 406.41,-533.39 408.31,-537.13"/>
</g>
<!-- has_red_f -->
<g id="node16" class="node">
<title>has_red_f</title>
<g id="a_node16"><a xlink:title="has_red_f theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="442.35" cy="-568" rx="34.13" ry="18"/>
<text text-anchor="middle" x="442.35" y="-565.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">has_red_f</text>
</a>
</g>
</g>
<!-- has_red_spec -->
<g id="node17" class="node">
<title>has_red_spec</title>
<g id="a_node17"><a xlink:title="has_red_spec theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="614.16" cy="-518" rx="44.41" ry="18"/>
<text text-anchor="middle" x="614.16" y="-515.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">has_red_spec</text>
</a>
</g>
</g>
<!-- has_red_f&#45;&gt;has_red_spec -->
<g id="edge20" class="edge">
<title>has_red_f&#45;&gt;has_red_spec</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M472.54,-559.4C499.83,-551.37 540.87,-539.28 571.58,-530.24"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="572.42,-532.18 577.58,-528.48 571.23,-528.16 572.42,-532.18"/>
</g>
<!-- red1_dec -->
<g id="node25" class="node">
<title>red1_dec</title>
<g id="a_node25"><a xlink:title="red1_dec theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="783.08" cy="-518" rx="34.13" ry="18"/>
<text text-anchor="middle" x="783.08" y="-515.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">red1_dec</text>
</a>
</g>
</g>
<!-- has_red_spec&#45;&gt;red1_dec -->
<g id="edge23" class="edge">
<title>has_red_spec&#45;&gt;red1_dec</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M659.01,-518C684.93,-518 717.47,-518 742.58,-518"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="742.8,-520.1 748.8,-518 742.8,-515.9 742.8,-520.1"/>
</g>
<!-- nf_dec -->
<g id="node18" class="node">
<title>nf_dec</title>
<g id="a_node18"><a xlink:title="nf_dec theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="953.16" cy="-475" rx="27.27" ry="18"/>
<text text-anchor="middle" x="953.16" y="-472.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">nf_dec</text>
</a>
</g>
</g>
<!-- nf_iff_steps_nil -->
<g id="node19" class="node">
<title>nf_iff_steps_nil</title>
<g id="a_node19"><a xlink:title="nf_iff_steps_nil theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="783.08" cy="-450" rx="47.19" ry="18"/>
<text text-anchor="middle" x="783.08" y="-447.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">nf_iff_steps_nil</text>
</a>
</g>
</g>
<!-- nf_iff_steps_nil&#45;&gt;nf_dec -->
<g id="edge27" class="edge">
<title>nf_iff_steps_nil&#45;&gt;nf_dec</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M827.36,-456.44C856.36,-460.75 893.89,-466.33 920.2,-470.25"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="920.05,-472.35 926.29,-471.15 920.67,-468.19 920.05,-472.35"/>
</g>
<!-- normal_form_iff_nf -->
<g id="node20" class="node">
<title>normal_form_iff_nf</title>
<g id="a_node20"><a xlink:title="normal_form_iff_nf theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="953.16" cy="-425" rx="57.97" ry="18"/>
<text text-anchor="middle" x="953.16" y="-422.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">normal_form_iff_nf</text>
</a>
</g>
</g>
<!-- nf_iff_steps_nil&#45;&gt;normal_form_iff_nf -->
<g id="edge26" class="edge">
<title>nf_iff_steps_nil&#45;&gt;normal_form_iff_nf</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M827.36,-443.56C847.81,-440.52 872.51,-436.85 894.52,-433.57"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="895.02,-435.62 900.65,-432.66 894.4,-431.47 895.02,-435.62"/>
</g>
<!-- plug_comp -->
<g id="node21" class="node">
<title>plug_comp</title>
<g id="a_node21"><a xlink:title="plug_comp theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="263.61" cy="-568" rx="38.87" ry="18"/>
<text text-anchor="middle" x="263.61" y="-565.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">plug_comp</text>
</a>
</g>
</g>
<!-- plug_comp&#45;&gt;steps_complete -->
<g id="edge16" class="edge">
<title>plug_comp&#45;&gt;steps_complete</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M297.02,-558.83C324.87,-550.95 365.29,-539.52 396.28,-530.75"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="397.15,-532.69 402.35,-529.03 396,-528.65 397.15,-532.69"/>
</g>
<!-- positions_at -->
<g id="node22" class="node">
<title>positions_at</title>
<g id="a_node22"><a xlink:title="positions_at theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="263.61" cy="-368" rx="40.33" ry="18"/>
<text text-anchor="middle" x="263.61" y="-365.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">positions_at</text>
</a>
</g>
</g>
<!-- steps_sound -->
<g id="node30" class="node">
<title>steps_sound</title>
<g id="a_node30"><a xlink:title="steps_sound theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="442.35" cy="-421" rx="42.29" ry="18"/>
<text text-anchor="middle" x="442.35" y="-418.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">steps_sound</text>
</a>
</g>
</g>
<!-- positions_at&#45;&gt;steps_sound -->
<g id="edge11" class="edge">
<title>positions_at&#45;&gt;steps_sound</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M297.85,-377.97C327.19,-386.77 370.04,-399.62 401.27,-408.98"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="401,-411.09 407.35,-410.81 402.21,-407.07 401,-411.09"/>
</g>
<!-- positions_comp -->
<g id="node23" class="node">
<title>positions_comp</title>
<g id="a_node23"><a xlink:title="positions_comp theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="263.61" cy="-518" rx="49.8" ry="18"/>
<text text-anchor="middle" x="263.61" y="-515.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">positions_comp</text>
</a>
</g>
</g>
<!-- positions_comp&#45;&gt;steps_complete -->
<g id="edge17" class="edge">
<title>positions_comp&#45;&gt;steps_complete</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M313.37,-518C335.79,-518 362.49,-518 385.69,-518"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="385.82,-520.1 391.82,-518 385.82,-515.9 385.82,-520.1"/>
</g>
<!-- positions_hole -->
<g id="node24" class="node">
<title>positions_hole</title>
<g id="a_node24"><a xlink:title="positions_hole theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="67.55" cy="-668" rx="46.38" ry="18"/>
<text text-anchor="middle" x="67.55" y="-665.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">positions_hole</text>
</a>
</g>
</g>
<!-- root_steps_in_steps -->
<g id="node27" class="node">
<title>root_steps_in_steps</title>
<g id="a_node27"><a xlink:title="root_steps_in_steps theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="263.61" cy="-668" rx="60.09" ry="18"/>
<text text-anchor="middle" x="263.61" y="-665.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">root_steps_in_steps</text>
</a>
</g>
</g>
<!-- positions_hole&#45;&gt;root_steps_in_steps -->
<g id="edge14" class="edge">
<title>positions_hole&#45;&gt;root_steps_in_steps</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M114.05,-668C138.84,-668 169.94,-668 197.28,-668"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="197.41,-670.1 203.41,-668 197.41,-665.9 197.41,-670.1"/>
</g>
<!-- root_steps_complete -->
<g id="node26" class="node">
<title>root_steps_complete</title>
<g id="a_node26"><a xlink:title="root_steps_complete theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="263.61" cy="-468" rx="63.52" ry="18"/>
<text text-anchor="middle" x="263.61" y="-465.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">root_steps_complete</text>
</a>
</g>
</g>
<!-- root_steps_complete&#45;&gt;steps_complete -->
<g id="edge18" class="edge">
<title>root_steps_complete&#45;&gt;steps_complete</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M309.21,-480.62C335.92,-488.17 369.78,-497.75 396.53,-505.32"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="396.13,-507.39 402.47,-507 397.27,-503.35 396.13,-507.39"/>
</g>
<!-- root_steps_in_steps&#45;&gt;steps_complete -->
<g id="edge19" class="edge">
<title>root_steps_in_steps&#45;&gt;steps_complete</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M300.61,-653.6C314.5,-648.04 327.12,-643 327.12,-643 327.12,-643 392.12,-543 392.12,-543 392.12,-543 398.81,-539.6 407.26,-535.31"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="408.31,-537.13 412.71,-532.54 406.41,-533.39 408.31,-537.13"/>
</g>
<!-- root_steps_sound -->
<g id="node28" class="node">
<title>root_steps_sound</title>
<g id="a_node28"><a xlink:title="root_steps_sound theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="263.61" cy="-418" rx="54.7" ry="18"/>
<text text-anchor="middle" x="263.61" y="-415.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">root_steps_sound</text>
</a>
</g>
</g>
<!-- root_steps_sound&#45;&gt;steps_sound -->
<g id="edge12" class="edge">
<title>root_steps_sound&#45;&gt;steps_sound</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M318.6,-418.92C342.64,-419.32 370.7,-419.8 393.92,-420.2"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="393.99,-422.3 400.03,-420.3 394.06,-418.1 393.99,-422.3"/>
</g>
<!-- steps_complete&#45;&gt;has_red_spec -->
<g id="edge21" class="edge">
<title>steps_complete&#45;&gt;has_red_spec</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M492.92,-518C515.11,-518 541.22,-518 563.43,-518"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="563.58,-520.1 569.58,-518 563.58,-515.9 563.58,-520.1"/>
</g>
<!-- steps_complete&#45;&gt;nf_iff_steps_nil -->
<g id="edge24" class="edge">
<title>steps_complete&#45;&gt;nf_iff_steps_nil</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M485.56,-508.76C518.1,-501.64 557.58,-493 557.58,-493 557.58,-493 668.2,-471.81 734.14,-459.18"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="734.88,-461.18 740.38,-457.99 734.09,-457.05 734.88,-461.18"/>
</g>
<!-- steps_sound&#45;&gt;has_red_spec -->
<g id="edge22" class="edge">
<title>steps_sound&#45;&gt;has_red_spec</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M468.4,-435.31C498.66,-452.6 549.57,-481.68 582.24,-500.34"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="581.47,-502.32 587.72,-503.47 583.55,-498.67 581.47,-502.32"/>
</g>
<!-- steps_sound_red1 -->
<g id="node31" class="node">
<title>steps_sound_red1</title>
<g id="a_node31"><a xlink:title="steps_sound_red1 theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="614.16" cy="-431" rx="56.66" ry="18"/>
<text text-anchor="middle" x="614.16" y="-428.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">steps_sound_red1</text>
</a>
</g>
</g>
<!-- steps_sound&#45;&gt;steps_sound_red1 -->
<g id="edge13" class="edge">
<title>steps_sound&#45;&gt;steps_sound_red1</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M484.45,-423.42C504.73,-424.61 529.6,-426.08 552.05,-427.4"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="552.2,-429.51 558.31,-427.77 552.44,-425.32 552.2,-429.51"/>
</g>
<!-- steps_sound_red1&#45;&gt;nf_iff_steps_nil -->
<g id="edge25" class="edge">
<title>steps_sound_red1&#45;&gt;nf_iff_steps_nil</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M667.97,-437.01C688.23,-439.32 711.28,-441.94 731.33,-444.22"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="731.26,-446.33 737.46,-444.92 731.73,-442.16 731.26,-446.33"/>
</g>
<!-- zdecs_complete -->
<g id="node32" class="node">
<title>zdecs_complete</title>
<g id="a_node32"><a xlink:title="zdecs_complete theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="67.55" cy="-468" rx="51.27" ry="18"/>
<text text-anchor="middle" x="67.55" y="-465.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">zdecs_complete</text>
</a>
</g>
</g>
<!-- zdecs_complete&#45;&gt;root_steps_complete -->
<g id="edge10" class="edge">
<title>zdecs_complete&#45;&gt;root_steps_complete</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M119.03,-468C141.81,-468 169.07,-468 193.69,-468"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="193.88,-470.1 199.88,-468 193.88,-465.9 193.88,-470.1"/>
</g>
<!-- zdecs_sound -->
<g id="node33" class="node">
<title>zdecs_sound</title>
<g id="a_node33"><a xlink:title="zdecs_sound theory/Reduction.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="67.55" cy="-418" rx="42.95" ry="18"/>
<text text-anchor="middle" x="67.55" y="-415.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">zdecs_sound</text>
</a>
</g>
</g>
<!-- zdecs_sound&#45;&gt;root_steps_sound -->
<g id="edge9" class="edge">
<title>zdecs_sound&#45;&gt;root_steps_sound</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M110.66,-418C137.51,-418 172.72,-418 202.49,-418"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="202.76,-420.1 208.76,-418 202.76,-415.9 202.76,-420.1"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 23 KiB

+115
View File
@@ -0,0 +1,115 @@
digraph deps {
rankdir=LR;
bgcolor="transparent";
splines=polyline;
concentrate=true;
nodesep=0.2;
ranksep=0.9;
node [fontname=Inter, fontsize=9];
edge [fontname=Inter, fontsize=8, color="#8f9780", fontcolor="#c9d1bb", arrowsize=0.6, penwidth=0.8];
graph [fontname=Inter, fontsize=12, labelloc=t, fontcolor="#c9d1bb", label=<<B>Theorem dependencies M2, 53 results</B>>];
close_rec_notin [label="close_rec_notin\\n(M1)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="close_rec_notin theory/Binding.v proved"];
fvs_lift [label="fvs_lift\\n(M1)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="fvs_lift theory/Binding.v proved"];
has_red_spec [label="has_red_spec\\n(M1)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="has_red_spec theory/Reduction.v proved"];
open_rec_occurs_false [label="open_rec_occurs_false\\n(M1)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="open_rec_occurs_false theory/Binding.v proved"];
steps_complete [label="steps_complete\\n(M1)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="steps_complete theory/Reduction.v proved"];
steps_sound [label="steps_sound\\n(M1)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="steps_sound theory/Reduction.v proved"];
steps_sound_red1 [label="steps_sound_red1\\n(M1)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="steps_sound_red1 theory/Reduction.v proved"];
subst_fvar_other [label="subst_fvar_other\\n(M1)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="subst_fvar_other theory/Binding.v proved"];
subst_fvar_self [label="subst_fvar_self\\n(M1)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="subst_fvar_self theory/Binding.v proved"];
zdecs_sound [label="zdecs_sound\\n(M1)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="zdecs_sound theory/Reduction.v proved"];
Plus_to_Star [label="Plus_to_Star", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="Plus_to_Star theory/Closure.v proved"];
Star_red1_context [label="Star_red1_context", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="Star_red1_context theory/Closure.v proved"];
Star_trans [label="Star_trans", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="Star_trans theory/Closure.v proved"];
red1_star [label="red1_star", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="red1_star theory/Closure.v proved"];
star_one_trans [label="star_one_trans", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="star_one_trans theory/Closure.v proved"];
enumerate_check [label="enumerate_check", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="enumerate_check theory/Enumerate.v proved"];
enumerate_complete [label="enumerate_complete", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="enumerate_complete theory/Enumerate.v proved"];
enumerate_sound [label="enumerate_sound", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="enumerate_sound theory/Enumerate.v proved"];
in_comb [label="in_comb", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="in_comb theory/Enumerate.v proved"];
pow2_pos [label="pow2_pos", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="pow2_pos theory/Enumerate.v proved"];
size_all_terms [label="size_all_terms", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="size_all_terms theory/Enumerate.v proved"];
Plus_red1_context [label="Plus_red1_context", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="Plus_red1_context theory/Metatheory.v proved"];
Plus_step_trans [label="Plus_step_trans", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="Plus_step_trans theory/Metatheory.v proved"];
Plus_trans [label="Plus_trans", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="Plus_trans theory/Metatheory.v proved"];
full_comp_aux [label="full_comp_aux", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="full_comp_aux theory/Metatheory.v proved"];
fvs_zplug_lift [label="fvs_zplug_lift", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="fvs_zplug_lift theory/Metatheory.v proved"];
lemma_2_1_fv_preserved [label="lemma_2_1_fv_preserved", shape=box, style="rounded,filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="lemma_2_1_fv_preserved (section 2.1) theory/Metatheory.v proved"];
lemma_2_2_full_comp [label="lemma_2_2_full_comp", shape=box, style="rounded,filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="lemma_2_2_full_comp (section 2.2) theory/Metatheory.v proved"];
lemma_2_3_beta_sim [label="lemma_2_3_beta_sim", shape=box, style="rounded,filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="lemma_2_3_beta_sim (section 2.3) theory/Metatheory.v proved"];
occurs_count_false [label="occurs_count_false", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="occurs_count_false theory/Metatheory.v proved"];
occurs_count_pos [label="occurs_count_pos", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="occurs_count_pos theory/Metatheory.v proved"];
occurs_count_zero [label="occurs_count_zero", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="occurs_count_zero theory/Metatheory.v proved"];
occurs_count_zfill_plug [label="occurs_count_zfill_plug", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="occurs_count_zfill_plug theory/Metatheory.v proved"];
occurs_lift_self [label="occurs_lift_self", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="occurs_lift_self theory/Metatheory.v proved"];
open_rec_zplug_lift [label="open_rec_zplug_lift", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="open_rec_zplug_lift theory/Metatheory.v proved"];
plug_fv_mono [label="plug_fv_mono", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="plug_fv_mono theory/Metatheory.v proved"];
red1_root_fv [label="red1_root_fv", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="red1_root_fv theory/Metatheory.v proved"];
red1r_fv [label="red1r_fv", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="red1r_fv theory/Metatheory.v proved"];
zdecs_nonempty [label="zdecs_nonempty", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="zdecs_nonempty theory/Metatheory.v proved"];
check_all_true [label="check_all_true", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="check_all_true theory/Random.v proved"];
check_term_true [label="check_term_true", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="check_term_true theory/Random.v proved"];
gen_complete [label="gen_complete", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="gen_complete theory/Random.v proved"];
gen_fv_preserved [label="gen_fv_preserved", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="gen_fv_preserved theory/Random.v proved"];
gen_list_length [label="gen_list_length", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="gen_list_length theory/Random.v proved"];
gen_sound [label="gen_sound", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="gen_sound theory/Random.v proved"];
close_rec_app [label="close_rec_app", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="close_rec_app theory/Substitution.v proved"];
close_rec_esub [label="close_rec_esub", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="close_rec_esub theory/Substitution.v proved"];
close_rec_lam [label="close_rec_lam", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="close_rec_lam theory/Substitution.v proved"];
open_rec_app [label="open_rec_app", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="open_rec_app theory/Substitution.v proved"];
open_rec_esub [label="open_rec_esub", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="open_rec_esub theory/Substitution.v proved"];
open_rec_lam [label="open_rec_lam", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="open_rec_lam theory/Substitution.v proved"];
open_rec_lc [label="open_rec_lc", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="open_rec_lc theory/Substitution.v proved"];
open_rec_lc_atom [label="open_rec_lc_atom", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="open_rec_lc_atom theory/Substitution.v proved"];
subst_app [label="subst_app", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subst_app theory/Substitution.v proved"];
subst_esub [label="subst_esub", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subst_esub theory/Substitution.v proved"];
subst_lam [label="subst_lam", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subst_lam theory/Substitution.v proved"];
subst_lc_self [label="subst_lc_self", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subst_lc_self theory/Substitution.v proved"];
subst_notin [label="subst_notin", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subst_notin theory/Substitution.v proved"];
subst_other [label="subst_other", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subst_other theory/Substitution.v proved"];
corpus_complete [label="corpus_complete", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="corpus_complete theory/Tests.v proved"];
corpus_decides [label="corpus_decides", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="corpus_decides theory/Tests.v proved"];
corpus_fv_preserved [label="corpus_fv_preserved", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="corpus_fv_preserved theory/Tests.v proved"];
corpus_sound [label="corpus_sound", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="corpus_sound theory/Tests.v proved"];
in_comb -> size_all_terms;
pow2_pos -> size_all_terms;
check_all_true -> enumerate_check;
steps_sound -> enumerate_sound;
steps_complete -> enumerate_complete;
occurs_count_zero -> occurs_count_pos;
occurs_count_false -> occurs_count_zfill_plug;
occurs_lift_self -> occurs_count_zfill_plug;
occurs_lift_self -> open_rec_zplug_lift;
open_rec_occurs_false -> open_rec_zplug_lift;
occurs_count_zero -> full_comp_aux;
occurs_count_zfill_plug -> full_comp_aux;
open_rec_occurs_false -> full_comp_aux;
open_rec_zplug_lift -> full_comp_aux;
zdecs_nonempty -> full_comp_aux;
zdecs_sound -> full_comp_aux;
full_comp_aux -> lemma_2_2_full_comp;
fvs_lift -> fvs_zplug_lift;
fvs_zplug_lift -> red1_root_fv;
plug_fv_mono -> red1r_fv;
red1_root_fv -> red1r_fv;
red1r_fv -> lemma_2_1_fv_preserved;
Plus_red1_context -> lemma_2_3_beta_sim;
lemma_2_2_full_comp -> lemma_2_3_beta_sim;
has_red_spec -> check_term_true;
steps_sound_red1 -> check_term_true;
check_term_true -> check_all_true;
steps_sound -> gen_sound;
steps_complete -> gen_complete;
lemma_2_1_fv_preserved -> gen_fv_preserved;
steps_sound_red1 -> gen_fv_preserved;
close_rec_notin -> subst_notin;
open_rec_occurs_false -> subst_notin;
subst_fvar_self -> subst_lc_self;
subst_fvar_other -> subst_other;
open_rec_lc_atom -> open_rec_lc;
steps_sound -> corpus_sound;
steps_complete -> corpus_complete;
has_red_spec -> corpus_decides;
lemma_2_1_fv_preserved -> corpus_fv_preserved;
steps_sound_red1 -> corpus_fv_preserved;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 288 KiB

+826
View File
@@ -0,0 +1,826 @@
<?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 2.42.4 (0)
-->
<!-- Title: deps Pages: 1 -->
<svg width="1445pt" height="1800pt"
viewBox="0.00 0.00 1444.74 1800.00" 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 1796)">
<title>deps</title>
<text text-anchor="start" x="588.87" y="-1779.4" font-family="Inter" font-weight="bold" font-size="12.00" fill="#c9d1bb">Theorem dependencies M2, 53 results</text>
<!-- close_rec_notin -->
<g id="node1" class="node">
<title>close_rec_notin</title>
<g id="a_node1"><a xlink:title="close_rec_notin theory/Binding.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M119.5,-321C119.5,-321 27.5,-321 27.5,-321 21.5,-321 15.5,-315 15.5,-309 15.5,-309 15.5,-297 15.5,-297 15.5,-291 21.5,-285 27.5,-285 27.5,-285 119.5,-285 119.5,-285 125.5,-285 131.5,-291 131.5,-297 131.5,-297 131.5,-309 131.5,-309 131.5,-315 125.5,-321 119.5,-321"/>
<text text-anchor="middle" x="73.5" y="-300.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">close_rec_notin\n(M1)</text>
</a>
</g>
</g>
<!-- subst_notin -->
<g id="node58" class="node">
<title>subst_notin</title>
<g id="a_node58"><a xlink:title="subst_notin theory/Substitution.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="282.44" cy="-303" rx="39.67" ry="18"/>
<text text-anchor="middle" x="282.44" y="-300.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subst_notin</text>
</a>
</g>
</g>
<!-- close_rec_notin&#45;&gt;subst_notin -->
<g id="edge32" class="edge">
<title>close_rec_notin&#45;&gt;subst_notin</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M131.59,-303C164.68,-303 205.74,-303 236.51,-303"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="236.52,-305.1 242.52,-303 236.52,-300.9 236.52,-305.1"/>
</g>
<!-- fvs_lift -->
<g id="node2" class="node">
<title>fvs_lift</title>
<g id="a_node2"><a xlink:title="fvs_lift theory/Binding.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M99,-371C99,-371 48,-371 48,-371 42,-371 36,-365 36,-359 36,-359 36,-347 36,-347 36,-341 42,-335 48,-335 48,-335 99,-335 99,-335 105,-335 111,-341 111,-347 111,-347 111,-359 111,-359 111,-365 105,-371 99,-371"/>
<text text-anchor="middle" x="73.5" y="-350.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">fvs_lift\n(M1)</text>
</a>
</g>
</g>
<!-- fvs_zplug_lift -->
<g id="node26" class="node">
<title>fvs_zplug_lift</title>
<g id="a_node26"><a xlink:title="fvs_zplug_lift theory/Metatheory.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="282.44" cy="-353" rx="42.95" ry="18"/>
<text text-anchor="middle" x="282.44" y="-350.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">fvs_zplug_lift</text>
</a>
</g>
</g>
<!-- fvs_lift&#45;&gt;fvs_zplug_lift -->
<g id="edge18" class="edge">
<title>fvs_lift&#45;&gt;fvs_zplug_lift</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M111.02,-353C145.02,-353 195.93,-353 233.25,-353"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="233.59,-355.1 239.59,-353 233.59,-350.9 233.59,-355.1"/>
</g>
<!-- has_red_spec -->
<g id="node3" class="node">
<title>has_red_spec</title>
<g id="a_node3"><a xlink:title="has_red_spec theory/Reduction.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M884.03,-271C884.03,-271 801.03,-271 801.03,-271 795.03,-271 789.03,-265 789.03,-259 789.03,-259 789.03,-247 789.03,-247 789.03,-241 795.03,-235 801.03,-235 801.03,-235 884.03,-235 884.03,-235 890.03,-235 896.03,-241 896.03,-247 896.03,-247 896.03,-259 896.03,-259 896.03,-265 890.03,-271 884.03,-271"/>
<text text-anchor="middle" x="842.53" y="-250.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">has_red_spec\n(M1)</text>
</a>
</g>
</g>
<!-- check_term_true -->
<g id="node41" class="node">
<title>check_term_true</title>
<g id="a_node41"><a xlink:title="check_term_true theory/Random.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="1036.54" cy="-278" rx="53.89" ry="18"/>
<text text-anchor="middle" x="1036.54" y="-275.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">check_term_true</text>
</a>
</g>
</g>
<!-- has_red_spec&#45;&gt;check_term_true -->
<g id="edge25" class="edge">
<title>has_red_spec&#45;&gt;check_term_true</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M896.26,-259.86C922.26,-263.25 953.62,-267.33 980,-270.77"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="980.02,-272.89 986.24,-271.58 980.56,-268.72 980.02,-272.89"/>
</g>
<!-- corpus_decides -->
<g id="node61" class="node">
<title>corpus_decides</title>
<g id="a_node61"><a xlink:title="corpus_decides theory/Tests.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="1036.54" cy="-228" rx="49.8" ry="18"/>
<text text-anchor="middle" x="1036.54" y="-225.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">corpus_decides</text>
</a>
</g>
</g>
<!-- has_red_spec&#45;&gt;corpus_decides -->
<g id="edge39" class="edge">
<title>has_red_spec&#45;&gt;corpus_decides</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M896.26,-246.14C923.4,-242.6 956.38,-238.31 983.44,-234.78"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="983.79,-236.86 989.47,-234 983.25,-232.69 983.79,-236.86"/>
</g>
<!-- open_rec_occurs_false -->
<g id="node4" class="node">
<title>open_rec_occurs_false</title>
<g id="a_node4"><a xlink:title="open_rec_occurs_false theory/Binding.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M135,-271C135,-271 12,-271 12,-271 6,-271 0,-265 0,-259 0,-259 0,-247 0,-247 0,-241 6,-235 12,-235 12,-235 135,-235 135,-235 141,-235 147,-241 147,-247 147,-247 147,-259 147,-259 147,-265 141,-271 135,-271"/>
<text text-anchor="middle" x="73.5" y="-250.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">open_rec_occurs_false\n(M1)</text>
</a>
</g>
</g>
<!-- full_comp_aux -->
<g id="node25" class="node">
<title>full_comp_aux</title>
<g id="a_node25"><a xlink:title="full_comp_aux theory/Metatheory.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="474.45" cy="-143" rx="46.53" ry="18"/>
<text text-anchor="middle" x="474.45" y="-140.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">full_comp_aux</text>
</a>
</g>
</g>
<!-- open_rec_occurs_false&#45;&gt;full_comp_aux -->
<g id="edge13" class="edge">
<title>open_rec_occurs_false&#45;&gt;full_comp_aux</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M147.28,-250.39C229.76,-247.42 352.87,-243 352.87,-243 352.87,-243 413.53,-192.7 448.8,-163.44"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="450.53,-164.74 453.81,-159.29 447.85,-161.5 450.53,-164.74"/>
</g>
<!-- open_rec_zplug_lift -->
<g id="node35" class="node">
<title>open_rec_zplug_lift</title>
<g id="a_node35"><a xlink:title="open_rec_zplug_lift theory/Metatheory.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="282.44" cy="-218" rx="59.43" ry="18"/>
<text text-anchor="middle" x="282.44" y="-215.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">open_rec_zplug_lift</text>
</a>
</g>
</g>
<!-- open_rec_occurs_false&#45;&gt;open_rec_zplug_lift -->
<g id="edge10" class="edge">
<title>open_rec_occurs_false&#45;&gt;open_rec_zplug_lift</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M147.17,-240.71C172.4,-236.44 200.31,-231.72 224.13,-227.69"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="224.53,-229.76 230.09,-226.68 223.82,-225.61 224.53,-229.76"/>
</g>
<!-- open_rec_occurs_false&#45;&gt;subst_notin -->
<g id="edge33" class="edge">
<title>open_rec_occurs_false&#45;&gt;subst_notin</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M147.17,-270.56C178.67,-278.17 214.37,-286.8 241.04,-293.24"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="240.6,-295.29 246.93,-294.66 241.59,-291.21 240.6,-295.29"/>
</g>
<!-- steps_complete -->
<g id="node5" class="node">
<title>steps_complete</title>
<g id="a_node5"><a xlink:title="steps_complete theory/Reduction.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M120,-471C120,-471 27,-471 27,-471 21,-471 15,-465 15,-459 15,-459 15,-447 15,-447 15,-441 21,-435 27,-435 27,-435 120,-435 120,-435 126,-435 132,-441 132,-447 132,-447 132,-459 132,-459 132,-465 126,-471 120,-471"/>
<text text-anchor="middle" x="73.5" y="-450.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">steps_complete\n(M1)</text>
</a>
</g>
</g>
<!-- enumerate_complete -->
<g id="node17" class="node">
<title>enumerate_complete</title>
<g id="a_node17"><a xlink:title="enumerate_complete theory/Enumerate.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="282.44" cy="-503" rx="65.48" ry="18"/>
<text text-anchor="middle" x="282.44" y="-500.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">enumerate_complete</text>
</a>
</g>
</g>
<!-- steps_complete&#45;&gt;enumerate_complete -->
<g id="edge5" class="edge">
<title>steps_complete&#45;&gt;enumerate_complete</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M132.14,-466.93C161.73,-474.08 197.58,-482.74 226.74,-489.78"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="226.53,-491.89 232.85,-491.26 227.51,-487.81 226.53,-491.89"/>
</g>
<!-- gen_complete -->
<g id="node42" class="node">
<title>gen_complete</title>
<g id="a_node42"><a xlink:title="gen_complete theory/Random.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="282.44" cy="-453" rx="46.38" ry="18"/>
<text text-anchor="middle" x="282.44" y="-450.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">gen_complete</text>
</a>
</g>
</g>
<!-- steps_complete&#45;&gt;gen_complete -->
<g id="edge29" class="edge">
<title>steps_complete&#45;&gt;gen_complete</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M132.14,-453C162.85,-453 200.3,-453 230.01,-453"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="230.23,-455.1 236.23,-453 230.23,-450.9 230.23,-455.1"/>
</g>
<!-- corpus_complete -->
<g id="node60" class="node">
<title>corpus_complete</title>
<g id="a_node60"><a xlink:title="corpus_complete theory/Tests.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="282.44" cy="-403" rx="54.04" ry="18"/>
<text text-anchor="middle" x="282.44" y="-400.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">corpus_complete</text>
</a>
</g>
</g>
<!-- steps_complete&#45;&gt;corpus_complete -->
<g id="edge38" class="edge">
<title>steps_complete&#45;&gt;corpus_complete</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M132.14,-439.07C163.65,-431.46 202.26,-422.13 232.32,-414.87"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="232.87,-416.89 238.21,-413.44 231.89,-412.81 232.87,-416.89"/>
</g>
<!-- steps_sound -->
<g id="node6" class="node">
<title>steps_sound</title>
<g id="a_node6"><a xlink:title="steps_sound theory/Reduction.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M113,-621C113,-621 34,-621 34,-621 28,-621 22,-615 22,-609 22,-609 22,-597 22,-597 22,-591 28,-585 34,-585 34,-585 113,-585 113,-585 119,-585 125,-591 125,-597 125,-597 125,-609 125,-609 125,-615 119,-621 113,-621"/>
<text text-anchor="middle" x="73.5" y="-600.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">steps_sound\n(M1)</text>
</a>
</g>
</g>
<!-- enumerate_sound -->
<g id="node18" class="node">
<title>enumerate_sound</title>
<g id="a_node18"><a xlink:title="enumerate_sound theory/Enumerate.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="282.44" cy="-653" rx="56.66" ry="18"/>
<text text-anchor="middle" x="282.44" y="-650.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">enumerate_sound</text>
</a>
</g>
</g>
<!-- steps_sound&#45;&gt;enumerate_sound -->
<g id="edge4" class="edge">
<title>steps_sound&#45;&gt;enumerate_sound</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M125.12,-615.23C157.34,-623.02 198.9,-633.06 231.07,-640.83"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="230.63,-642.89 236.96,-642.25 231.62,-638.8 230.63,-642.89"/>
</g>
<!-- gen_sound -->
<g id="node45" class="node">
<title>gen_sound</title>
<g id="a_node45"><a xlink:title="gen_sound theory/Random.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="282.44" cy="-603" rx="38.21" ry="18"/>
<text text-anchor="middle" x="282.44" y="-600.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">gen_sound</text>
</a>
</g>
</g>
<!-- steps_sound&#45;&gt;gen_sound -->
<g id="edge28" class="edge">
<title>steps_sound&#45;&gt;gen_sound</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M125.12,-603C159.82,-603 205.35,-603 238.31,-603"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="238.32,-605.1 244.32,-603 238.32,-600.9 238.32,-605.1"/>
</g>
<!-- corpus_sound -->
<g id="node63" class="node">
<title>corpus_sound</title>
<g id="a_node63"><a xlink:title="corpus_sound theory/Tests.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="282.44" cy="-553" rx="46.38" ry="18"/>
<text text-anchor="middle" x="282.44" y="-550.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">corpus_sound</text>
</a>
</g>
</g>
<!-- steps_sound&#45;&gt;corpus_sound -->
<g id="edge37" class="edge">
<title>steps_sound&#45;&gt;corpus_sound</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M125.12,-590.77C159.25,-582.52 203.87,-571.74 236.7,-563.81"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="237.35,-565.81 242.69,-562.36 236.36,-561.73 237.35,-565.81"/>
</g>
<!-- steps_sound_red1 -->
<g id="node7" class="node">
<title>steps_sound_red1</title>
<g id="a_node7"><a xlink:title="steps_sound_red1 theory/Reduction.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M894.53,-346C894.53,-346 790.53,-346 790.53,-346 784.53,-346 778.53,-340 778.53,-334 778.53,-334 778.53,-322 778.53,-322 778.53,-316 784.53,-310 790.53,-310 790.53,-310 894.53,-310 894.53,-310 900.53,-310 906.53,-316 906.53,-322 906.53,-322 906.53,-334 906.53,-334 906.53,-340 900.53,-346 894.53,-346"/>
<text text-anchor="middle" x="842.53" y="-325.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">steps_sound_red1\n(M1)</text>
</a>
</g>
</g>
<!-- steps_sound_red1&#45;&gt;check_term_true -->
<g id="edge26" class="edge">
<title>steps_sound_red1&#45;&gt;check_term_true</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M906.67,-311.56C932.97,-304.71 963.01,-296.89 987.47,-290.52"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="988.29,-292.48 993.56,-288.93 987.23,-288.41 988.29,-292.48"/>
</g>
<!-- gen_fv_preserved -->
<g id="node43" class="node">
<title>gen_fv_preserved</title>
<g id="a_node43"><a xlink:title="gen_fv_preserved theory/Random.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="1036.54" cy="-378" rx="55.35" ry="18"/>
<text text-anchor="middle" x="1036.54" y="-375.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">gen_fv_preserved</text>
</a>
</g>
</g>
<!-- steps_sound_red1&#45;&gt;gen_fv_preserved -->
<g id="edge31" class="edge">
<title>steps_sound_red1&#45;&gt;gen_fv_preserved</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M906.67,-344.44C932.67,-351.21 962.32,-358.93 986.62,-365.26"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="986.35,-367.36 992.68,-366.84 987.41,-363.29 986.35,-367.36"/>
</g>
<!-- corpus_fv_preserved -->
<g id="node62" class="node">
<title>corpus_fv_preserved</title>
<g id="a_node62"><a xlink:title="corpus_fv_preserved theory/Tests.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="1036.54" cy="-328" rx="63.52" ry="18"/>
<text text-anchor="middle" x="1036.54" y="-325.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">corpus_fv_preserved</text>
</a>
</g>
</g>
<!-- steps_sound_red1&#45;&gt;corpus_fv_preserved -->
<g id="edge41" class="edge">
<title>steps_sound_red1&#45;&gt;corpus_fv_preserved</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M906.67,-328C925.99,-328 947.32,-328 966.98,-328"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="967.02,-330.1 973.02,-328 967.02,-325.9 967.02,-330.1"/>
</g>
<!-- subst_fvar_other -->
<g id="node8" class="node">
<title>subst_fvar_other</title>
<g id="a_node8"><a xlink:title="subst_fvar_other theory/Binding.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M122.5,-721C122.5,-721 24.5,-721 24.5,-721 18.5,-721 12.5,-715 12.5,-709 12.5,-709 12.5,-697 12.5,-697 12.5,-691 18.5,-685 24.5,-685 24.5,-685 122.5,-685 122.5,-685 128.5,-685 134.5,-691 134.5,-697 134.5,-697 134.5,-709 134.5,-709 134.5,-715 128.5,-721 122.5,-721"/>
<text text-anchor="middle" x="73.5" y="-700.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subst_fvar_other\n(M1)</text>
</a>
</g>
</g>
<!-- subst_other -->
<g id="node59" class="node">
<title>subst_other</title>
<g id="a_node59"><a xlink:title="subst_other theory/Substitution.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="282.44" cy="-703" rx="40.33" ry="18"/>
<text text-anchor="middle" x="282.44" y="-700.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subst_other</text>
</a>
</g>
</g>
<!-- subst_fvar_other&#45;&gt;subst_other -->
<g id="edge35" class="edge">
<title>subst_fvar_other&#45;&gt;subst_other</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M134.63,-703C166.83,-703 205.86,-703 235.58,-703"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="235.78,-705.1 241.78,-703 235.78,-700.9 235.78,-705.1"/>
</g>
<!-- subst_fvar_self -->
<g id="node9" class="node">
<title>subst_fvar_self</title>
<g id="a_node9"><a xlink:title="subst_fvar_self theory/Binding.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M118,-771C118,-771 29,-771 29,-771 23,-771 17,-765 17,-759 17,-759 17,-747 17,-747 17,-741 23,-735 29,-735 29,-735 118,-735 118,-735 124,-735 130,-741 130,-747 130,-747 130,-759 130,-759 130,-765 124,-771 118,-771"/>
<text text-anchor="middle" x="73.5" y="-750.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subst_fvar_self\n(M1)</text>
</a>
</g>
</g>
<!-- subst_lc_self -->
<g id="node57" class="node">
<title>subst_lc_self</title>
<g id="a_node57"><a xlink:title="subst_lc_self theory/Substitution.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="282.44" cy="-753" rx="42.29" ry="18"/>
<text text-anchor="middle" x="282.44" y="-750.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subst_lc_self</text>
</a>
</g>
</g>
<!-- subst_fvar_self&#45;&gt;subst_lc_self -->
<g id="edge34" class="edge">
<title>subst_fvar_self&#45;&gt;subst_lc_self</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M130.23,-753C162.66,-753 203.11,-753 234.01,-753"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="234.06,-755.1 240.06,-753 234.06,-750.9 234.06,-755.1"/>
</g>
<!-- zdecs_sound -->
<g id="node10" class="node">
<title>zdecs_sound</title>
<g id="a_node10"><a xlink:title="zdecs_sound theory/Reduction.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M322.44,-186C322.44,-186 242.44,-186 242.44,-186 236.44,-186 230.44,-180 230.44,-174 230.44,-174 230.44,-162 230.44,-162 230.44,-156 236.44,-150 242.44,-150 242.44,-150 322.44,-150 322.44,-150 328.44,-150 334.44,-156 334.44,-162 334.44,-162 334.44,-174 334.44,-174 334.44,-180 328.44,-186 322.44,-186"/>
<text text-anchor="middle" x="282.44" y="-165.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">zdecs_sound\n(M1)</text>
</a>
</g>
</g>
<!-- zdecs_sound&#45;&gt;full_comp_aux -->
<g id="edge16" class="edge">
<title>zdecs_sound&#45;&gt;full_comp_aux</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M334.61,-161.27C362.3,-157.62 396.36,-153.14 423.82,-149.53"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="424.25,-151.59 429.93,-148.73 423.7,-147.43 424.25,-151.59"/>
</g>
<!-- Plus_to_Star -->
<g id="node11" class="node">
<title>Plus_to_Star</title>
<g id="a_node11"><a xlink:title="Plus_to_Star theory/Closure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-803" rx="40.98" ry="18"/>
<text text-anchor="middle" x="73.5" y="-800.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Plus_to_Star</text>
</a>
</g>
</g>
<!-- Star_red1_context -->
<g id="node12" class="node">
<title>Star_red1_context</title>
<g id="a_node12"><a xlink:title="Star_red1_context theory/Closure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-853" rx="57.97" ry="18"/>
<text text-anchor="middle" x="73.5" y="-850.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Star_red1_context</text>
</a>
</g>
</g>
<!-- Star_trans -->
<g id="node13" class="node">
<title>Star_trans</title>
<g id="a_node13"><a xlink:title="Star_trans theory/Closure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-903" rx="36.25" ry="18"/>
<text text-anchor="middle" x="73.5" y="-900.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Star_trans</text>
</a>
</g>
</g>
<!-- red1_star -->
<g id="node14" class="node">
<title>red1_star</title>
<g id="a_node14"><a xlink:title="red1_star theory/Closure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-953" rx="34.13" ry="18"/>
<text text-anchor="middle" x="73.5" y="-950.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">red1_star</text>
</a>
</g>
</g>
<!-- star_one_trans -->
<g id="node15" class="node">
<title>star_one_trans</title>
<g id="a_node15"><a xlink:title="star_one_trans theory/Closure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-1003" rx="47.84" ry="18"/>
<text text-anchor="middle" x="73.5" y="-1000.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">star_one_trans</text>
</a>
</g>
</g>
<!-- enumerate_check -->
<g id="node16" class="node">
<title>enumerate_check</title>
<g id="a_node16"><a xlink:title="enumerate_check theory/Enumerate.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="1380.16" cy="-278" rx="56.66" ry="18"/>
<text text-anchor="middle" x="1380.16" y="-275.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">enumerate_check</text>
</a>
</g>
</g>
<!-- in_comb -->
<g id="node19" class="node">
<title>in_comb</title>
<g id="a_node19"><a xlink:title="in_comb theory/Enumerate.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-1103" rx="31.51" ry="18"/>
<text text-anchor="middle" x="73.5" y="-1100.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">in_comb</text>
</a>
</g>
</g>
<!-- size_all_terms -->
<g id="node21" class="node">
<title>size_all_terms</title>
<g id="a_node21"><a xlink:title="size_all_terms theory/Enumerate.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="282.44" cy="-1078" rx="45.07" ry="18"/>
<text text-anchor="middle" x="282.44" y="-1075.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">size_all_terms</text>
</a>
</g>
</g>
<!-- in_comb&#45;&gt;size_all_terms -->
<g id="edge1" class="edge">
<title>in_comb&#45;&gt;size_all_terms</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M105.03,-1099.31C138.65,-1095.25 193.17,-1088.66 232.7,-1083.89"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="233.21,-1085.94 238.92,-1083.14 232.71,-1081.77 233.21,-1085.94"/>
</g>
<!-- pow2_pos -->
<g id="node20" class="node">
<title>pow2_pos</title>
<g id="a_node20"><a xlink:title="pow2_pos theory/Enumerate.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-1053" rx="35.59" ry="18"/>
<text text-anchor="middle" x="73.5" y="-1050.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">pow2_pos</text>
</a>
</g>
</g>
<!-- pow2_pos&#45;&gt;size_all_terms -->
<g id="edge2" class="edge">
<title>pow2_pos&#45;&gt;size_all_terms</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M108.67,-1057.13C142.56,-1061.22 194.8,-1067.53 232.97,-1072.14"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="232.76,-1074.23 238.97,-1072.87 233.27,-1070.07 232.76,-1074.23"/>
</g>
<!-- Plus_red1_context -->
<g id="node22" class="node">
<title>Plus_red1_context</title>
<g id="a_node22"><a xlink:title="Plus_red1_context theory/Metatheory.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="654.03" cy="-93" rx="57.32" ry="18"/>
<text text-anchor="middle" x="654.03" y="-90.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Plus_red1_context</text>
</a>
</g>
</g>
<!-- lemma_2_3_beta_sim -->
<g id="node29" class="node">
<title>lemma_2_3_beta_sim</title>
<g id="a_node29"><a xlink:title="lemma_2_3_beta_sim (section 2.3) theory/Metatheory.v proved">
<path fill="transparent" stroke="#a9b492" d="M887.03,-136C887.03,-136 798.03,-136 798.03,-136 792.03,-136 786.03,-130 786.03,-124 786.03,-124 786.03,-112 786.03,-112 786.03,-106 792.03,-100 798.03,-100 798.03,-100 887.03,-100 887.03,-100 893.03,-100 899.03,-106 899.03,-112 899.03,-112 899.03,-124 899.03,-124 899.03,-130 893.03,-136 887.03,-136"/>
<text text-anchor="middle" x="842.53" y="-115.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">lemma_2_3_beta_sim</text>
</a>
</g>
</g>
<!-- Plus_red1_context&#45;&gt;lemma_2_3_beta_sim -->
<g id="edge23" class="edge">
<title>Plus_red1_context&#45;&gt;lemma_2_3_beta_sim</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M706.98,-99.96C729.54,-102.99 756.14,-106.55 779.71,-109.71"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="779.72,-111.83 785.95,-110.55 780.28,-107.67 779.72,-111.83"/>
</g>
<!-- Plus_step_trans -->
<g id="node23" class="node">
<title>Plus_step_trans</title>
<g id="a_node23"><a xlink:title="Plus_step_trans theory/Metatheory.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-1153" rx="49.8" ry="18"/>
<text text-anchor="middle" x="73.5" y="-1150.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Plus_step_trans</text>
</a>
</g>
</g>
<!-- Plus_trans -->
<g id="node24" class="node">
<title>Plus_trans</title>
<g id="a_node24"><a xlink:title="Plus_trans theory/Metatheory.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-1203" rx="35.59" ry="18"/>
<text text-anchor="middle" x="73.5" y="-1200.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Plus_trans</text>
</a>
</g>
</g>
<!-- lemma_2_2_full_comp -->
<g id="node28" class="node">
<title>lemma_2_2_full_comp</title>
<g id="a_node28"><a xlink:title="lemma_2_2_full_comp (section 2.2) theory/Metatheory.v proved">
<path fill="transparent" stroke="#a9b492" d="M700.03,-161C700.03,-161 608.03,-161 608.03,-161 602.03,-161 596.03,-155 596.03,-149 596.03,-149 596.03,-137 596.03,-137 596.03,-131 602.03,-125 608.03,-125 608.03,-125 700.03,-125 700.03,-125 706.03,-125 712.03,-131 712.03,-137 712.03,-137 712.03,-149 712.03,-149 712.03,-155 706.03,-161 700.03,-161"/>
<text text-anchor="middle" x="654.03" y="-140.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">lemma_2_2_full_comp</text>
</a>
</g>
</g>
<!-- full_comp_aux&#45;&gt;lemma_2_2_full_comp -->
<g id="edge17" class="edge">
<title>full_comp_aux&#45;&gt;lemma_2_2_full_comp</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M521.65,-143C542.41,-143 567.24,-143 589.7,-143"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="589.96,-145.1 595.96,-143 589.96,-140.9 589.96,-145.1"/>
</g>
<!-- red1_root_fv -->
<g id="node37" class="node">
<title>red1_root_fv</title>
<g id="a_node37"><a xlink:title="red1_root_fv theory/Metatheory.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="474.45" cy="-353" rx="42.29" ry="18"/>
<text text-anchor="middle" x="474.45" y="-350.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">red1_root_fv</text>
</a>
</g>
</g>
<!-- fvs_zplug_lift&#45;&gt;red1_root_fv -->
<g id="edge19" class="edge">
<title>fvs_zplug_lift&#45;&gt;red1_root_fv</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M325.61,-353C355.33,-353 395.18,-353 426.01,-353"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="426.05,-355.1 432.05,-353 426.05,-350.9 426.05,-355.1"/>
</g>
<!-- lemma_2_1_fv_preserved -->
<g id="node27" class="node">
<title>lemma_2_1_fv_preserved</title>
<g id="a_node27"><a xlink:title="lemma_2_1_fv_preserved (section 2.1) theory/Metatheory.v proved">
<path fill="transparent" stroke="#a9b492" d="M896.03,-396C896.03,-396 789.03,-396 789.03,-396 783.03,-396 777.03,-390 777.03,-384 777.03,-384 777.03,-372 777.03,-372 777.03,-366 783.03,-360 789.03,-360 789.03,-360 896.03,-360 896.03,-360 902.03,-360 908.03,-366 908.03,-372 908.03,-372 908.03,-384 908.03,-384 908.03,-390 902.03,-396 896.03,-396"/>
<text text-anchor="middle" x="842.53" y="-375.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">lemma_2_1_fv_preserved</text>
</a>
</g>
</g>
<!-- lemma_2_1_fv_preserved&#45;&gt;gen_fv_preserved -->
<g id="edge30" class="edge">
<title>lemma_2_1_fv_preserved&#45;&gt;gen_fv_preserved</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M908.27,-378C929.77,-378 953.63,-378 974.81,-378"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="975.01,-380.1 981.01,-378 975.01,-375.9 975.01,-380.1"/>
</g>
<!-- lemma_2_1_fv_preserved&#45;&gt;corpus_fv_preserved -->
<g id="edge40" class="edge">
<title>lemma_2_1_fv_preserved&#45;&gt;corpus_fv_preserved</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M908.27,-361.14C932.66,-354.79 960.06,-347.66 983.18,-341.64"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="983.99,-343.59 989.27,-340.05 982.94,-339.53 983.99,-343.59"/>
</g>
<!-- lemma_2_2_full_comp&#45;&gt;lemma_2_3_beta_sim -->
<g id="edge24" class="edge">
<title>lemma_2_2_full_comp&#45;&gt;lemma_2_3_beta_sim</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M712.26,-135.33C733.69,-132.46 758.13,-129.18 779.94,-126.26"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="780.35,-128.32 786.02,-125.44 779.79,-124.16 780.35,-128.32"/>
</g>
<!-- occurs_count_false -->
<g id="node30" class="node">
<title>occurs_count_false</title>
<g id="a_node30"><a xlink:title="occurs_count_false theory/Metatheory.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-118" rx="58.78" ry="18"/>
<text text-anchor="middle" x="73.5" y="-115.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">occurs_count_false</text>
</a>
</g>
</g>
<!-- occurs_count_zfill_plug -->
<g id="node33" class="node">
<title>occurs_count_zfill_plug</title>
<g id="a_node33"><a xlink:title="occurs_count_zfill_plug theory/Metatheory.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="282.44" cy="-118" rx="70.37" ry="18"/>
<text text-anchor="middle" x="282.44" y="-115.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">occurs_count_zfill_plug</text>
</a>
</g>
</g>
<!-- occurs_count_false&#45;&gt;occurs_count_zfill_plug -->
<g id="edge7" class="edge">
<title>occurs_count_false&#45;&gt;occurs_count_zfill_plug</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M132.42,-118C155.13,-118 181.49,-118 205.67,-118"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="205.77,-120.1 211.77,-118 205.77,-115.9 205.77,-120.1"/>
</g>
<!-- occurs_count_pos -->
<g id="node31" class="node">
<title>occurs_count_pos</title>
<g id="a_node31"><a xlink:title="occurs_count_pos theory/Metatheory.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="474.45" cy="-18" rx="56.66" ry="18"/>
<text text-anchor="middle" x="474.45" y="-15.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">occurs_count_pos</text>
</a>
</g>
</g>
<!-- occurs_count_zero -->
<g id="node32" class="node">
<title>occurs_count_zero</title>
<g id="a_node32"><a xlink:title="occurs_count_zero theory/Metatheory.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="282.44" cy="-18" rx="58.13" ry="18"/>
<text text-anchor="middle" x="282.44" y="-15.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">occurs_count_zero</text>
</a>
</g>
</g>
<!-- occurs_count_zero&#45;&gt;full_comp_aux -->
<g id="edge11" class="edge">
<title>occurs_count_zero&#45;&gt;full_comp_aux</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M321,-31.52C337.36,-37.41 352.87,-43 352.87,-43 352.87,-43 413.53,-93.3 448.8,-122.56"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="447.85,-124.5 453.81,-126.71 450.53,-121.26 447.85,-124.5"/>
</g>
<!-- occurs_count_zero&#45;&gt;occurs_count_pos -->
<g id="edge6" class="edge">
<title>occurs_count_zero&#45;&gt;occurs_count_pos</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M340.96,-18C363.32,-18 388.98,-18 411.73,-18"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="411.75,-20.1 417.75,-18 411.75,-15.9 411.75,-20.1"/>
</g>
<!-- occurs_count_zfill_plug&#45;&gt;full_comp_aux -->
<g id="edge12" class="edge">
<title>occurs_count_zfill_plug&#45;&gt;full_comp_aux</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M345.39,-126.15C370.85,-129.5 399.93,-133.33 423.93,-136.48"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="423.7,-138.57 429.92,-137.27 424.25,-134.41 423.7,-138.57"/>
</g>
<!-- occurs_lift_self -->
<g id="node34" class="node">
<title>occurs_lift_self</title>
<g id="a_node34"><a xlink:title="occurs_lift_self theory/Metatheory.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-185" rx="47.19" ry="18"/>
<text text-anchor="middle" x="73.5" y="-182.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">occurs_lift_self</text>
</a>
</g>
</g>
<!-- occurs_lift_self&#45;&gt;occurs_count_zfill_plug -->
<g id="edge8" class="edge">
<title>occurs_lift_self&#45;&gt;occurs_count_zfill_plug</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M110.07,-173.48C143.75,-162.58 194.6,-146.11 232.17,-133.95"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="233.02,-135.88 238.08,-132.04 231.73,-131.89 233.02,-135.88"/>
</g>
<!-- occurs_lift_self&#45;&gt;open_rec_zplug_lift -->
<g id="edge9" class="edge">
<title>occurs_lift_self&#45;&gt;open_rec_zplug_lift</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M117.38,-191.84C148.03,-196.73 189.63,-203.36 223.27,-208.72"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="223.19,-210.84 229.45,-209.71 223.86,-206.69 223.19,-210.84"/>
</g>
<!-- open_rec_zplug_lift&#45;&gt;full_comp_aux -->
<g id="edge14" class="edge">
<title>open_rec_zplug_lift&#45;&gt;full_comp_aux</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M321.41,-204.33C337.62,-198.49 352.87,-193 352.87,-193 352.87,-193 401.07,-173.02 436.52,-158.32"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="437.35,-160.24 442.09,-156.01 435.74,-156.36 437.35,-160.24"/>
</g>
<!-- plug_fv_mono -->
<g id="node36" class="node">
<title>plug_fv_mono</title>
<g id="a_node36"><a xlink:title="plug_fv_mono theory/Metatheory.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="474.45" cy="-403" rx="46.38" ry="18"/>
<text text-anchor="middle" x="474.45" y="-400.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">plug_fv_mono</text>
</a>
</g>
</g>
<!-- red1r_fv -->
<g id="node38" class="node">
<title>red1r_fv</title>
<g id="a_node38"><a xlink:title="red1r_fv theory/Metatheory.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="654.03" cy="-378" rx="31.35" ry="18"/>
<text text-anchor="middle" x="654.03" y="-375.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">red1r_fv</text>
</a>
</g>
</g>
<!-- plug_fv_mono&#45;&gt;red1r_fv -->
<g id="edge20" class="edge">
<title>plug_fv_mono&#45;&gt;red1r_fv</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M518.44,-396.95C548.69,-392.69 588.71,-387.06 617.23,-383.04"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="617.85,-385.07 623.5,-382.16 617.26,-380.92 617.85,-385.07"/>
</g>
<!-- red1_root_fv&#45;&gt;red1r_fv -->
<g id="edge21" class="edge">
<title>red1_root_fv&#45;&gt;red1r_fv</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M514.86,-358.55C545.58,-362.87 587.86,-368.82 617.53,-373"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="617.43,-375.11 623.67,-373.87 618.02,-370.95 617.43,-375.11"/>
</g>
<!-- red1r_fv&#45;&gt;lemma_2_1_fv_preserved -->
<g id="edge22" class="edge">
<title>red1r_fv&#45;&gt;lemma_2_1_fv_preserved</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M685.41,-378C708.44,-378 741.05,-378 770.52,-378"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="770.75,-380.1 776.75,-378 770.75,-375.9 770.75,-380.1"/>
</g>
<!-- zdecs_nonempty -->
<g id="node39" class="node">
<title>zdecs_nonempty</title>
<g id="a_node39"><a xlink:title="zdecs_nonempty theory/Metatheory.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="282.44" cy="-68" rx="53.89" ry="18"/>
<text text-anchor="middle" x="282.44" y="-65.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">zdecs_nonempty</text>
</a>
</g>
</g>
<!-- zdecs_nonempty&#45;&gt;full_comp_aux -->
<g id="edge15" class="edge">
<title>zdecs_nonempty&#45;&gt;full_comp_aux</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M319.78,-81.09C336.58,-87.13 352.87,-93 352.87,-93 352.87,-93 401.07,-112.98 436.52,-127.68"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="435.74,-129.64 442.09,-129.99 437.35,-125.76 435.74,-129.64"/>
</g>
<!-- check_all_true -->
<g id="node40" class="node">
<title>check_all_true</title>
<g id="a_node40"><a xlink:title="check_all_true theory/Random.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="1211.82" cy="-278" rx="46.53" ry="18"/>
<text text-anchor="middle" x="1211.82" y="-275.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">check_all_true</text>
</a>
</g>
</g>
<!-- check_all_true&#45;&gt;enumerate_check -->
<g id="edge3" class="edge">
<title>check_all_true&#45;&gt;enumerate_check</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M1258.71,-278C1276.76,-278 1297.76,-278 1317.13,-278"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="1317.35,-280.1 1323.35,-278 1317.35,-275.9 1317.35,-280.1"/>
</g>
<!-- check_term_true&#45;&gt;check_all_true -->
<g id="edge27" class="edge">
<title>check_term_true&#45;&gt;check_all_true</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M1090.47,-278C1112.21,-278 1137.31,-278 1158.94,-278"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="1158.95,-280.1 1164.95,-278 1158.95,-275.9 1158.95,-280.1"/>
</g>
<!-- gen_list_length -->
<g id="node44" class="node">
<title>gen_list_length</title>
<g id="a_node44"><a xlink:title="gen_list_length theory/Random.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-1253" rx="49.15" ry="18"/>
<text text-anchor="middle" x="73.5" y="-1250.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">gen_list_length</text>
</a>
</g>
</g>
<!-- close_rec_app -->
<g id="node46" class="node">
<title>close_rec_app</title>
<g id="a_node46"><a xlink:title="close_rec_app theory/Substitution.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-1303" rx="46.38" ry="18"/>
<text text-anchor="middle" x="73.5" y="-1300.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">close_rec_app</text>
</a>
</g>
</g>
<!-- close_rec_esub -->
<g id="node47" class="node">
<title>close_rec_esub</title>
<g id="a_node47"><a xlink:title="close_rec_esub theory/Substitution.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-1353" rx="48.49" ry="18"/>
<text text-anchor="middle" x="73.5" y="-1350.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">close_rec_esub</text>
</a>
</g>
</g>
<!-- close_rec_lam -->
<g id="node48" class="node">
<title>close_rec_lam</title>
<g id="a_node48"><a xlink:title="close_rec_lam theory/Substitution.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-1403" rx="45.72" ry="18"/>
<text text-anchor="middle" x="73.5" y="-1400.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">close_rec_lam</text>
</a>
</g>
</g>
<!-- open_rec_app -->
<g id="node49" class="node">
<title>open_rec_app</title>
<g id="a_node49"><a xlink:title="open_rec_app theory/Substitution.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-1453" rx="46.38" ry="18"/>
<text text-anchor="middle" x="73.5" y="-1450.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">open_rec_app</text>
</a>
</g>
</g>
<!-- open_rec_esub -->
<g id="node50" class="node">
<title>open_rec_esub</title>
<g id="a_node50"><a xlink:title="open_rec_esub theory/Substitution.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-1503" rx="48.49" ry="18"/>
<text text-anchor="middle" x="73.5" y="-1500.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">open_rec_esub</text>
</a>
</g>
</g>
<!-- open_rec_lam -->
<g id="node51" class="node">
<title>open_rec_lam</title>
<g id="a_node51"><a xlink:title="open_rec_lam theory/Substitution.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-1553" rx="45.72" ry="18"/>
<text text-anchor="middle" x="73.5" y="-1550.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">open_rec_lam</text>
</a>
</g>
</g>
<!-- open_rec_lc -->
<g id="node52" class="node">
<title>open_rec_lc</title>
<g id="a_node52"><a xlink:title="open_rec_lc theory/Substitution.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="282.44" cy="-1603" rx="40.33" ry="18"/>
<text text-anchor="middle" x="282.44" y="-1600.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">open_rec_lc</text>
</a>
</g>
</g>
<!-- open_rec_lc_atom -->
<g id="node53" class="node">
<title>open_rec_lc_atom</title>
<g id="a_node53"><a xlink:title="open_rec_lc_atom theory/Substitution.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-1603" rx="56.66" ry="18"/>
<text text-anchor="middle" x="73.5" y="-1600.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">open_rec_lc_atom</text>
</a>
</g>
</g>
<!-- open_rec_lc_atom&#45;&gt;open_rec_lc -->
<g id="edge36" class="edge">
<title>open_rec_lc_atom&#45;&gt;open_rec_lc</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M130.23,-1603C163.33,-1603 204.79,-1603 235.92,-1603"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="236.01,-1605.1 242.01,-1603 236.01,-1600.9 236.01,-1605.1"/>
</g>
<!-- subst_app -->
<g id="node54" class="node">
<title>subst_app</title>
<g id="a_node54"><a xlink:title="subst_app theory/Substitution.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-1653" rx="36.25" ry="18"/>
<text text-anchor="middle" x="73.5" y="-1650.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subst_app</text>
</a>
</g>
</g>
<!-- subst_esub -->
<g id="node55" class="node">
<title>subst_esub</title>
<g id="a_node55"><a xlink:title="subst_esub theory/Substitution.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-1703" rx="39.02" ry="18"/>
<text text-anchor="middle" x="73.5" y="-1700.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subst_esub</text>
</a>
</g>
</g>
<!-- subst_lam -->
<g id="node56" class="node">
<title>subst_lam</title>
<g id="a_node56"><a xlink:title="subst_lam theory/Substitution.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="73.5" cy="-1753" rx="35.59" ry="18"/>
<text text-anchor="middle" x="73.5" y="-1750.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subst_lam</text>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 43 KiB

+52
View File
@@ -0,0 +1,52 @@
digraph deps {
rankdir=LR;
bgcolor="transparent";
splines=polyline;
concentrate=true;
nodesep=0.2;
ranksep=0.9;
node [fontname=Inter, fontsize=9];
edge [fontname=Inter, fontsize=8, color="#8f9780", fontcolor="#c9d1bb", arrowsize=0.6, penwidth=0.8];
graph [fontname=Inter, fontsize=12, labelloc=t, fontcolor="#c9d1bb", label=<<B>Theorem dependencies M3, 16 results</B>>];
Plus_to_Star [label="Plus_to_Star\\n(M2)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="Plus_to_Star theory/Closure.v proved"];
occurs_count_zero [label="occurs_count_zero\\n(M2)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="occurs_count_zero theory/Metatheory.v proved"];
occurs_count_zfill_plug [label="occurs_count_zfill_plug\\n(M2)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="occurs_count_zfill_plug theory/Metatheory.v proved"];
open_rec_occurs_false [label="open_rec_occurs_false\\n(M1)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="open_rec_occurs_false theory/Binding.v proved"];
open_rec_zplug_lift [label="open_rec_zplug_lift\\n(M2)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="open_rec_zplug_lift theory/Metatheory.v proved"];
zdecs_nonempty [label="zdecs_nonempty\\n(M2)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="zdecs_nonempty theory/Metatheory.v proved"];
zdecs_sound [label="zdecs_sound\\n(M1)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="zdecs_sound theory/Reduction.v proved"];
R_Gc_disjoint [label="R_Gc_disjoint", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="R_Gc_disjoint theory/Subsystem.v proved"];
Star_red_sub_context [label="Star_red_sub_context", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="Star_red_sub_context theory/Subsystem.v proved"];
es_count_plug_mono [label="es_count_plug_mono", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="es_count_plug_mono theory/Subsystem.v proved"];
full_comp_aux_sub [label="full_comp_aux_sub", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="full_comp_aux_sub theory/Subsystem.v proved"];
occurs_zfill [label="occurs_zfill", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="occurs_zfill theory/Subsystem.v proved"];
plus_red_sub_full_comp [label="plus_red_sub_full_comp", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="plus_red_sub_full_comp theory/Subsystem.v proved"];
red_gc_measure [label="red_gc_measure", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="red_gc_measure theory/Subsystem.v proved"];
red_gc_terminates [label="red_gc_terminates", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="red_gc_terminates theory/Subsystem.v proved"];
red_gc_to_red_sub [label="red_gc_to_red_sub", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="red_gc_to_red_sub theory/Subsystem.v proved"];
red_sub_context [label="red_sub_context", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="red_sub_context theory/Subsystem.v proved"];
red_sub_gc [label="red_sub_gc", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="red_sub_gc theory/Subsystem.v proved"];
red_sub_r [label="red_sub_r", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="red_sub_r theory/Subsystem.v proved"];
red_sub_root_to_red1 [label="red_sub_root_to_red1", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="red_sub_root_to_red1 theory/Subsystem.v proved"];
red_sub_to_red1 [label="red_sub_to_red1", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="red_sub_to_red1 theory/Subsystem.v proved"];
star_red_sub_full_comp [label="star_red_sub_full_comp", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="star_red_sub_full_comp theory/Subsystem.v proved"];
zfill_occurs0 [label="zfill_occurs0", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="zfill_occurs0 theory/Subsystem.v proved"];
red_sub_root_to_red1 -> red_sub_to_red1;
occurs_zfill -> zfill_occurs0;
zfill_occurs0 -> R_Gc_disjoint;
red_sub_context -> Star_red_sub_context;
occurs_count_zero -> full_comp_aux_sub;
occurs_count_zfill_plug -> full_comp_aux_sub;
open_rec_occurs_false -> full_comp_aux_sub;
open_rec_zplug_lift -> full_comp_aux_sub;
red_sub_gc -> full_comp_aux_sub;
red_sub_r -> full_comp_aux_sub;
zdecs_nonempty -> full_comp_aux_sub;
zdecs_sound -> full_comp_aux_sub;
full_comp_aux_sub -> plus_red_sub_full_comp;
Plus_to_Star -> star_red_sub_full_comp;
plus_red_sub_full_comp -> star_red_sub_full_comp;
es_count_plug_mono -> red_gc_measure;
red_gc_measure -> red_gc_terminates;
red_sub_gc -> red_gc_to_red_sub;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

+328
View File
@@ -0,0 +1,328 @@
<?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 2.42.4 (0)
-->
<!-- Title: deps Pages: 1 -->
<svg width="772pt" height="615pt"
viewBox="0.00 0.00 771.85 615.00" 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 611)">
<title>deps</title>
<text text-anchor="start" x="252.42" y="-594.4" font-family="Inter" font-weight="bold" font-size="12.00" fill="#c9d1bb">Theorem dependencies M3, 16 results</text>
<!-- Plus_to_Star -->
<g id="node1" class="node">
<title>Plus_to_Star</title>
<g id="a_node1"><a xlink:title="Plus_to_Star theory/Closure.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M524.88,-261C524.88,-261 447.88,-261 447.88,-261 441.88,-261 435.88,-255 435.88,-249 435.88,-249 435.88,-237 435.88,-237 435.88,-231 441.88,-225 447.88,-225 447.88,-225 524.88,-225 524.88,-225 530.88,-225 536.88,-231 536.88,-237 536.88,-237 536.88,-249 536.88,-249 536.88,-255 530.88,-261 524.88,-261"/>
<text text-anchor="middle" x="486.38" y="-240.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Plus_to_Star\n(M2)</text>
</a>
</g>
</g>
<!-- star_red_sub_full_comp -->
<g id="node22" class="node">
<title>star_red_sub_full_comp</title>
<g id="a_node22"><a xlink:title="star_red_sub_full_comp theory/Subsystem.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="693.41" cy="-218" rx="70.37" ry="18"/>
<text text-anchor="middle" x="693.41" y="-215.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">star_red_sub_full_comp</text>
</a>
</g>
</g>
<!-- Plus_to_Star&#45;&gt;star_red_sub_full_comp -->
<g id="edge14" class="edge">
<title>Plus_to_Star&#45;&gt;star_red_sub_full_comp</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M537.01,-236.95C563.01,-233.78 595.27,-229.85 623.64,-226.39"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="623.93,-228.47 629.63,-225.66 623.42,-224.3 623.93,-228.47"/>
</g>
<!-- occurs_count_zero -->
<g id="node2" class="node">
<title>occurs_count_zero</title>
<g id="a_node2"><a xlink:title="occurs_count_zero theory/Metatheory.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M129.5,-386C129.5,-386 22.5,-386 22.5,-386 16.5,-386 10.5,-380 10.5,-374 10.5,-374 10.5,-362 10.5,-362 10.5,-356 16.5,-350 22.5,-350 22.5,-350 129.5,-350 129.5,-350 135.5,-350 141.5,-356 141.5,-362 141.5,-362 141.5,-374 141.5,-374 141.5,-380 135.5,-386 129.5,-386"/>
<text text-anchor="middle" x="76" y="-365.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">occurs_count_zero\n(M2)</text>
</a>
</g>
</g>
<!-- full_comp_aux_sub -->
<g id="node11" class="node">
<title>full_comp_aux_sub</title>
<g id="a_node11"><a xlink:title="full_comp_aux_sub theory/Subsystem.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="283.4" cy="-193" rx="58.78" ry="18"/>
<text text-anchor="middle" x="283.4" y="-190.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">full_comp_aux_sub</text>
</a>
</g>
</g>
<!-- occurs_count_zero&#45;&gt;full_comp_aux_sub -->
<g id="edge5" class="edge">
<title>occurs_count_zero&#45;&gt;full_comp_aux_sub</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M131.11,-349.96C142.94,-346.02 152,-343 152,-343 152,-343 226.9,-256.84 263.17,-215.12"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="264.83,-216.41 267.18,-210.5 261.66,-213.65 264.83,-216.41"/>
</g>
<!-- occurs_count_zfill_plug -->
<g id="node3" class="node">
<title>occurs_count_zfill_plug</title>
<g id="a_node3"><a xlink:title="occurs_count_zfill_plug theory/Metatheory.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M140,-336C140,-336 12,-336 12,-336 6,-336 0,-330 0,-324 0,-324 0,-312 0,-312 0,-306 6,-300 12,-300 12,-300 140,-300 140,-300 146,-300 152,-306 152,-312 152,-312 152,-324 152,-324 152,-330 146,-336 140,-336"/>
<text text-anchor="middle" x="76" y="-315.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">occurs_count_zfill_plug\n(M2)</text>
</a>
</g>
</g>
<!-- occurs_count_zfill_plug&#45;&gt;full_comp_aux_sub -->
<g id="edge6" class="edge">
<title>occurs_count_zfill_plug&#45;&gt;full_comp_aux_sub</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M131.11,-299.96C142.94,-296.02 152,-293 152,-293 152,-293 217.44,-242.81 255.6,-213.55"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="257.09,-215.06 260.57,-209.74 254.53,-211.72 257.09,-215.06"/>
</g>
<!-- open_rec_occurs_false -->
<g id="node4" class="node">
<title>open_rec_occurs_false</title>
<g id="a_node4"><a xlink:title="open_rec_occurs_false theory/Binding.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M137.5,-286C137.5,-286 14.5,-286 14.5,-286 8.5,-286 2.5,-280 2.5,-274 2.5,-274 2.5,-262 2.5,-262 2.5,-256 8.5,-250 14.5,-250 14.5,-250 137.5,-250 137.5,-250 143.5,-250 149.5,-256 149.5,-262 149.5,-262 149.5,-274 149.5,-274 149.5,-280 143.5,-286 137.5,-286"/>
<text text-anchor="middle" x="76" y="-265.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">open_rec_occurs_false\n(M1)</text>
</a>
</g>
</g>
<!-- open_rec_occurs_false&#45;&gt;full_comp_aux_sub -->
<g id="edge7" class="edge">
<title>open_rec_occurs_false&#45;&gt;full_comp_aux_sub</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M131.11,-249.96C142.94,-246.02 152,-243 152,-243 152,-243 202,-223.83 240.07,-209.23"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="241.22,-211.04 246.07,-206.93 239.72,-207.12 241.22,-211.04"/>
</g>
<!-- open_rec_zplug_lift -->
<g id="node5" class="node">
<title>open_rec_zplug_lift</title>
<g id="a_node5"><a xlink:title="open_rec_zplug_lift theory/Metatheory.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M130.5,-236C130.5,-236 21.5,-236 21.5,-236 15.5,-236 9.5,-230 9.5,-224 9.5,-224 9.5,-212 9.5,-212 9.5,-206 15.5,-200 21.5,-200 21.5,-200 130.5,-200 130.5,-200 136.5,-200 142.5,-206 142.5,-212 142.5,-212 142.5,-224 142.5,-224 142.5,-230 136.5,-236 130.5,-236"/>
<text text-anchor="middle" x="76" y="-215.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">open_rec_zplug_lift\n(M2)</text>
</a>
</g>
</g>
<!-- open_rec_zplug_lift&#45;&gt;full_comp_aux_sub -->
<g id="edge8" class="edge">
<title>open_rec_zplug_lift&#45;&gt;full_comp_aux_sub</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M142.55,-210.02C168.1,-206.91 197.18,-203.37 222.19,-200.33"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="222.75,-202.38 228.45,-199.57 222.24,-198.21 222.75,-202.38"/>
</g>
<!-- zdecs_nonempty -->
<g id="node6" class="node">
<title>zdecs_nonempty</title>
<g id="a_node6"><a xlink:title="zdecs_nonempty theory/Metatheory.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M125.5,-186C125.5,-186 26.5,-186 26.5,-186 20.5,-186 14.5,-180 14.5,-174 14.5,-174 14.5,-162 14.5,-162 14.5,-156 20.5,-150 26.5,-150 26.5,-150 125.5,-150 125.5,-150 131.5,-150 137.5,-156 137.5,-162 137.5,-162 137.5,-174 137.5,-174 137.5,-180 131.5,-186 125.5,-186"/>
<text text-anchor="middle" x="76" y="-165.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">zdecs_nonempty\n(M2)</text>
</a>
</g>
</g>
<!-- zdecs_nonempty&#45;&gt;full_comp_aux_sub -->
<g id="edge11" class="edge">
<title>zdecs_nonempty&#45;&gt;full_comp_aux_sub</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M137.51,-175.37C164.25,-178.62 195.6,-182.44 222.28,-185.68"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="222.04,-187.77 228.25,-186.41 222.55,-183.6 222.04,-187.77"/>
</g>
<!-- zdecs_sound -->
<g id="node7" class="node">
<title>zdecs_sound</title>
<g id="a_node7"><a xlink:title="zdecs_sound theory/Reduction.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M116,-136C116,-136 36,-136 36,-136 30,-136 24,-130 24,-124 24,-124 24,-112 24,-112 24,-106 30,-100 36,-100 36,-100 116,-100 116,-100 122,-100 128,-106 128,-112 128,-112 128,-124 128,-124 128,-130 122,-136 116,-136"/>
<text text-anchor="middle" x="76" y="-115.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">zdecs_sound\n(M1)</text>
</a>
</g>
</g>
<!-- zdecs_sound&#45;&gt;full_comp_aux_sub -->
<g id="edge12" class="edge">
<title>zdecs_sound&#45;&gt;full_comp_aux_sub</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M128.27,-135.09C141.45,-139.48 152,-143 152,-143 152,-143 202,-162.17 240.07,-176.77"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="239.72,-178.88 246.07,-179.07 241.22,-174.96 239.72,-178.88"/>
</g>
<!-- R_Gc_disjoint -->
<g id="node8" class="node">
<title>R_Gc_disjoint</title>
<g id="a_node8"><a xlink:title="R_Gc_disjoint theory/Subsystem.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="486.38" cy="-418" rx="43.76" ry="18"/>
<text text-anchor="middle" x="486.38" y="-415.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">R_Gc_disjoint</text>
</a>
</g>
</g>
<!-- Star_red_sub_context -->
<g id="node9" class="node">
<title>Star_red_sub_context</title>
<g id="a_node9"><a xlink:title="Star_red_sub_context theory/Subsystem.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="283.4" cy="-468" rx="66.29" ry="18"/>
<text text-anchor="middle" x="283.4" y="-465.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Star_red_sub_context</text>
</a>
</g>
</g>
<!-- es_count_plug_mono -->
<g id="node10" class="node">
<title>es_count_plug_mono</title>
<g id="a_node10"><a xlink:title="es_count_plug_mono theory/Subsystem.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="76" cy="-518" rx="64.83" ry="18"/>
<text text-anchor="middle" x="76" y="-515.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">es_count_plug_mono</text>
</a>
</g>
</g>
<!-- red_gc_measure -->
<g id="node14" class="node">
<title>red_gc_measure</title>
<g id="a_node14"><a xlink:title="red_gc_measure theory/Subsystem.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="283.4" cy="-518" rx="52.58" ry="18"/>
<text text-anchor="middle" x="283.4" y="-515.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">red_gc_measure</text>
</a>
</g>
</g>
<!-- es_count_plug_mono&#45;&gt;red_gc_measure -->
<g id="edge16" class="edge">
<title>es_count_plug_mono&#45;&gt;red_gc_measure</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M140.86,-518C167.57,-518 198.39,-518 224.44,-518"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="224.61,-520.1 230.61,-518 224.61,-515.9 224.61,-520.1"/>
</g>
<!-- plus_red_sub_full_comp -->
<g id="node13" class="node">
<title>plus_red_sub_full_comp</title>
<g id="a_node13"><a xlink:title="plus_red_sub_full_comp theory/Subsystem.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="486.38" cy="-193" rx="71.68" ry="18"/>
<text text-anchor="middle" x="486.38" y="-190.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">plus_red_sub_full_comp</text>
</a>
</g>
</g>
<!-- full_comp_aux_sub&#45;&gt;plus_red_sub_full_comp -->
<g id="edge13" class="edge">
<title>full_comp_aux_sub&#45;&gt;plus_red_sub_full_comp</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M342.53,-193C363.09,-193 386.54,-193 408.42,-193"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="408.54,-195.1 414.54,-193 408.54,-190.9 408.54,-195.1"/>
</g>
<!-- occurs_zfill -->
<g id="node12" class="node">
<title>occurs_zfill</title>
<g id="a_node12"><a xlink:title="occurs_zfill theory/Subsystem.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="76" cy="-418" rx="38.21" ry="18"/>
<text text-anchor="middle" x="76" y="-415.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">occurs_zfill</text>
</a>
</g>
</g>
<!-- zfill_occurs0 -->
<g id="node23" class="node">
<title>zfill_occurs0</title>
<g id="a_node23"><a xlink:title="zfill_occurs0 theory/Subsystem.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="283.4" cy="-418" rx="41.64" ry="18"/>
<text text-anchor="middle" x="283.4" y="-415.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">zfill_occurs0</text>
</a>
</g>
</g>
<!-- occurs_zfill&#45;&gt;zfill_occurs0 -->
<g id="edge2" class="edge">
<title>occurs_zfill&#45;&gt;zfill_occurs0</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M114.2,-418C148.18,-418 198.6,-418 235.37,-418"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="235.6,-420.1 241.6,-418 235.6,-415.9 235.6,-420.1"/>
</g>
<!-- plus_red_sub_full_comp&#45;&gt;star_red_sub_full_comp -->
<g id="edge15" class="edge">
<title>plus_red_sub_full_comp&#45;&gt;star_red_sub_full_comp</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M551.13,-200.77C574.01,-203.56 599.9,-206.72 623.22,-209.56"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="623.2,-211.68 629.41,-210.32 623.7,-207.51 623.2,-211.68"/>
</g>
<!-- red_gc_terminates -->
<g id="node15" class="node">
<title>red_gc_terminates</title>
<g id="a_node15"><a xlink:title="red_gc_terminates theory/Subsystem.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="486.38" cy="-518" rx="58.13" ry="18"/>
<text text-anchor="middle" x="486.38" y="-515.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">red_gc_terminates</text>
</a>
</g>
</g>
<!-- red_gc_measure&#45;&gt;red_gc_terminates -->
<g id="edge17" class="edge">
<title>red_gc_measure&#45;&gt;red_gc_terminates</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M336.15,-518C362.21,-518 394.04,-518 421.6,-518"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="421.78,-520.1 427.78,-518 421.78,-515.9 421.78,-520.1"/>
</g>
<!-- red_gc_to_red_sub -->
<g id="node16" class="node">
<title>red_gc_to_red_sub</title>
<g id="a_node16"><a xlink:title="red_gc_to_red_sub theory/Subsystem.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="283.4" cy="-18" rx="58.13" ry="18"/>
<text text-anchor="middle" x="283.4" y="-15.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">red_gc_to_red_sub</text>
</a>
</g>
</g>
<!-- red_sub_context -->
<g id="node17" class="node">
<title>red_sub_context</title>
<g id="a_node17"><a xlink:title="red_sub_context theory/Subsystem.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="76" cy="-468" rx="53.23" ry="18"/>
<text text-anchor="middle" x="76" y="-465.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">red_sub_context</text>
</a>
</g>
</g>
<!-- red_sub_context&#45;&gt;Star_red_sub_context -->
<g id="edge4" class="edge">
<title>red_sub_context&#45;&gt;Star_red_sub_context</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M129.36,-468C154.11,-468 184.05,-468 210.85,-468"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="210.88,-470.1 216.88,-468 210.88,-465.9 210.88,-470.1"/>
</g>
<!-- red_sub_gc -->
<g id="node18" class="node">
<title>red_sub_gc</title>
<g id="a_node18"><a xlink:title="red_sub_gc theory/Subsystem.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="76" cy="-18" rx="39.02" ry="18"/>
<text text-anchor="middle" x="76" y="-15.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">red_sub_gc</text>
</a>
</g>
</g>
<!-- red_sub_gc&#45;&gt;full_comp_aux_sub -->
<g id="edge9" class="edge">
<title>red_sub_gc&#45;&gt;full_comp_aux_sub</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M108.37,-28.46C128.92,-35.31 152,-43 152,-43 152,-43 226.9,-129.16 263.17,-170.88"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="261.66,-172.35 267.18,-175.5 264.83,-169.59 261.66,-172.35"/>
</g>
<!-- red_sub_gc&#45;&gt;red_gc_to_red_sub -->
<g id="edge18" class="edge">
<title>red_sub_gc&#45;&gt;red_gc_to_red_sub</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M115.63,-18C144.62,-18 184.95,-18 218.69,-18"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="218.91,-20.1 224.91,-18 218.91,-15.9 218.91,-20.1"/>
</g>
<!-- red_sub_r -->
<g id="node19" class="node">
<title>red_sub_r</title>
<g id="a_node19"><a xlink:title="red_sub_r theory/Subsystem.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="76" cy="-68" rx="35.44" ry="18"/>
<text text-anchor="middle" x="76" y="-65.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">red_sub_r</text>
</a>
</g>
</g>
<!-- red_sub_r&#45;&gt;full_comp_aux_sub -->
<g id="edge10" class="edge">
<title>red_sub_r&#45;&gt;full_comp_aux_sub</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M106.21,-77.74C127.27,-84.76 152,-93 152,-93 152,-93 217.44,-143.19 255.6,-172.45"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="254.53,-174.28 260.57,-176.26 257.09,-170.94 254.53,-174.28"/>
</g>
<!-- red_sub_root_to_red1 -->
<g id="node20" class="node">
<title>red_sub_root_to_red1</title>
<g id="a_node20"><a xlink:title="red_sub_root_to_red1 theory/Subsystem.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="76" cy="-568" rx="65.64" ry="18"/>
<text text-anchor="middle" x="76" y="-565.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">red_sub_root_to_red1</text>
</a>
</g>
</g>
<!-- red_sub_to_red1 -->
<g id="node21" class="node">
<title>red_sub_to_red1</title>
<g id="a_node21"><a xlink:title="red_sub_to_red1 theory/Subsystem.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="283.4" cy="-568" rx="53.23" ry="18"/>
<text text-anchor="middle" x="283.4" y="-565.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">red_sub_to_red1</text>
</a>
</g>
</g>
<!-- red_sub_root_to_red1&#45;&gt;red_sub_to_red1 -->
<g id="edge1" class="edge">
<title>red_sub_root_to_red1&#45;&gt;red_sub_to_red1</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M141.99,-568C168.32,-568 198.49,-568 224.1,-568"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="224.17,-570.1 230.17,-568 224.17,-565.9 224.17,-570.1"/>
</g>
<!-- zfill_occurs0&#45;&gt;R_Gc_disjoint -->
<g id="edge3" class="edge">
<title>zfill_occurs0&#45;&gt;R_Gc_disjoint</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M325.07,-418C357.14,-418 401.99,-418 436.1,-418"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="436.34,-420.1 442.34,-418 436.34,-415.9 436.34,-420.1"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

+19
View File
@@ -0,0 +1,19 @@
digraph deps {
rankdir=LR;
bgcolor="transparent";
splines=polyline;
concentrate=true;
nodesep=0.2;
ranksep=0.9;
node [fontname=Inter, fontsize=9];
edge [fontname=Inter, fontsize=8, color="#8f9780", fontcolor="#c9d1bb", arrowsize=0.6, penwidth=0.8];
graph [fontname=Inter, fontsize=12, labelloc=t, fontcolor="#c9d1bb", label=<<B>Theorem dependencies M4, 6 results</B>>];
par_context [label="par_context", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="par_context theory/Parallel.v proved"];
par_red1_iff [label="par_red1_iff", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="par_red1_iff theory/Parallel.v proved"];
par_reflexive [label="par_reflexive", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="par_reflexive theory/Parallel.v proved"];
par_to_red1_or_eq [label="par_to_red1_or_eq", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="par_to_red1_or_eq theory/Parallel.v proved"];
red1_in_par [label="red1_in_par", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="red1_in_par theory/Parallel.v proved"];
red1_or_eq_to_par [label="red1_or_eq_to_par", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="red1_or_eq_to_par theory/Parallel.v proved"];
par_red1_iff -> par_to_red1_or_eq;
par_red1_iff -> red1_or_eq_to_par;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

+79
View File
@@ -0,0 +1,79 @@
<?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 2.42.4 (0)
-->
<!-- Title: deps Pages: 1 -->
<svg width="275pt" height="215pt"
viewBox="0.00 0.00 275.00 215.00" 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 211)">
<title>deps</title>
<text text-anchor="start" x="8" y="-194.4" font-family="Inter" font-weight="bold" font-size="12.00" fill="#c9d1bb">Theorem dependencies M4, 6 results</text>
<!-- par_context -->
<g id="node1" class="node">
<title>par_context</title>
<g id="a_node1"><a xlink:title="par_context theory/Parallel.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="43.26" cy="-18" rx="40.98" ry="18"/>
<text text-anchor="middle" x="43.26" y="-15.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">par_context</text>
</a>
</g>
</g>
<!-- par_red1_iff -->
<g id="node2" class="node">
<title>par_red1_iff</title>
<g id="a_node2"><a xlink:title="par_red1_iff theory/Parallel.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="43.26" cy="-68" rx="40.33" ry="18"/>
<text text-anchor="middle" x="43.26" y="-65.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">par_red1_iff</text>
</a>
</g>
</g>
<!-- par_to_red1_or_eq -->
<g id="node4" class="node">
<title>par_to_red1_or_eq</title>
<g id="a_node4"><a xlink:title="par_to_red1_or_eq theory/Parallel.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="208.72" cy="-93" rx="57.97" ry="18"/>
<text text-anchor="middle" x="208.72" y="-90.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">par_to_red1_or_eq</text>
</a>
</g>
</g>
<!-- par_red1_iff&#45;&gt;par_to_red1_or_eq -->
<g id="edge1" class="edge">
<title>par_red1_iff&#45;&gt;par_to_red1_or_eq</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M81.77,-73.74C102.1,-76.85 127.66,-80.75 150.43,-84.24"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="150.21,-86.33 156.46,-85.16 150.85,-82.18 150.21,-86.33"/>
</g>
<!-- red1_or_eq_to_par -->
<g id="node6" class="node">
<title>red1_or_eq_to_par</title>
<g id="a_node6"><a xlink:title="red1_or_eq_to_par theory/Parallel.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="208.72" cy="-43" rx="57.97" ry="18"/>
<text text-anchor="middle" x="208.72" y="-40.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">red1_or_eq_to_par</text>
</a>
</g>
</g>
<!-- par_red1_iff&#45;&gt;red1_or_eq_to_par -->
<g id="edge2" class="edge">
<title>par_red1_iff&#45;&gt;red1_or_eq_to_par</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M81.77,-62.26C102.1,-59.15 127.66,-55.25 150.43,-51.76"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="150.85,-53.82 156.46,-50.84 150.21,-49.67 150.85,-53.82"/>
</g>
<!-- par_reflexive -->
<g id="node3" class="node">
<title>par_reflexive</title>
<g id="a_node3"><a xlink:title="par_reflexive theory/Parallel.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="43.26" cy="-118" rx="42.95" ry="18"/>
<text text-anchor="middle" x="43.26" y="-115.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">par_reflexive</text>
</a>
</g>
</g>
<!-- red1_in_par -->
<g id="node5" class="node">
<title>red1_in_par</title>
<g id="a_node5"><a xlink:title="red1_in_par theory/Parallel.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="43.26" cy="-168" rx="40.33" ry="18"/>
<text text-anchor="middle" x="43.26" y="-165.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">red1_in_par</text>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

+126
View File
@@ -0,0 +1,126 @@
digraph deps {
rankdir=LR;
bgcolor="transparent";
splines=polyline;
concentrate=true;
nodesep=0.2;
ranksep=0.9;
node [fontname=Inter, fontsize=9];
edge [fontname=Inter, fontsize=8, color="#8f9780", fontcolor="#c9d1bb", arrowsize=0.6, penwidth=0.8];
graph [fontname=Inter, fontsize=12, labelloc=t, fontcolor="#c9d1bb", label=<<B>Theorem dependencies M5, 69 results</B>>];
lemma_2_2_full_comp [label="lemma_2_2_full_comp\\n(M2)", shape=box, style="rounded,dashed,filled", fillcolor="transparent", color="#8f9780", penwidth=0.9, fontcolor="#c9d1bb", tooltip="lemma_2_2_full_comp (section 2.2) theory/Metatheory.v proved"];
Plus_mred_of_Plus_red1 [label="Plus_mred_of_Plus_red1", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="Plus_mred_of_Plus_red1 theory/Metaterm.v proved"];
mfvs_close_m [label="mfvs_close_m", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="mfvs_close_m theory/Metaterm.v proved"];
mfvs_lift_m [label="mfvs_lift_m", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="mfvs_lift_m theory/Metaterm.v proved"];
mfvs_open_m [label="mfvs_open_m", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="mfvs_open_m theory/Metaterm.v proved"];
mred_B_intro [label="mred_B_intro", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="mred_B_intro theory/Metaterm.v proved"];
mred_context [label="mred_context", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="mred_context theory/Metaterm.v proved"];
mred_full_comp_pure [label="mred_full_comp_pure", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="mred_full_comp_pure theory/Metaterm.v proved"];
mred_gc_intro [label="mred_gc_intro", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="mred_gc_intro theory/Metaterm.v proved"];
mred_of_red1 [label="mred_of_red1", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="mred_of_red1 theory/Metaterm.v proved"];
mred_plus_one [label="mred_plus_one", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="mred_plus_one theory/Metaterm.v proved"];
mred_r_intro [label="mred_r_intro", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="mred_r_intro theory/Metaterm.v proved"];
mred_term_context [label="mred_term_context", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="mred_term_context theory/Metaterm.v proved"];
of_trm_close [label="of_trm_close", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="of_trm_close theory/Metaterm.v proved"];
of_trm_fvs [label="of_trm_fvs", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="of_trm_fvs theory/Metaterm.v proved"];
of_trm_injective [label="of_trm_injective", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="of_trm_injective theory/Metaterm.v proved"];
of_trm_lift [label="of_trm_lift", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="of_trm_lift theory/Metaterm.v proved"];
of_trm_moccurs [label="of_trm_moccurs", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="of_trm_moccurs theory/Metaterm.v proved"];
of_trm_moccurs0 [label="of_trm_moccurs0", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="of_trm_moccurs0 theory/Metaterm.v proved"];
of_trm_open [label="of_trm_open", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="of_trm_open theory/Metaterm.v proved"];
of_trm_plug [label="of_trm_plug", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="of_trm_plug theory/Metaterm.v proved"];
PlusN_to_StarN [label="PlusN_to_StarN", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="PlusN_to_StarN theory/NamedEs.v proved"];
StarN_one_trans [label="StarN_one_trans", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="StarN_one_trans theory/NamedEs.v proved"];
StarN_subred_context [label="StarN_subred_context", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="StarN_subred_context theory/NamedEs.v proved"];
StarN_trans [label="StarN_trans", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="StarN_trans theory/NamedEs.v proved"];
nred_stable_source [label="nred_stable_source", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="nred_stable_source theory/NamedEs.v proved"];
nred_stable_target [label="nred_stable_target", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="nred_stable_target theory/NamedEs.v proved"];
subred_Es_l [label="subred_Es_l", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subred_Es_l theory/NamedEs.v proved"];
subred_Es_lr [label="subred_Es_lr", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subred_Es_lr theory/NamedEs.v proved"];
subred_Es_r [label="subred_Es_r", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subred_Es_r theory/NamedEs.v proved"];
subred_context [label="subred_context", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subred_context theory/NamedEs.v proved"];
subred_context_rule [label="subred_context_rule", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subred_context_rule theory/NamedEs.v proved"];
subred_intro [label="subred_intro", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subred_intro theory/NamedEs.v proved"];
subred_nred [label="subred_nred", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subred_nred theory/NamedEs.v proved"];
subred_of_Es_nred_Es [label="subred_of_Es_nred_Es", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subred_of_Es_nred_Es theory/NamedEs.v proved"];
A1_C_related [label="A1_C_related", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="A1_C_related theory/NamedMeasure.v proved"];
A1_Mx_differ [label="A1_Mx_differ", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="A1_Mx_differ theory/NamedMeasure.v proved"];
A1_not_invariant [label="A1_not_invariant", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="A1_not_invariant theory/NamedMeasure.v proved"];
A1_s_differ [label="A1_s_differ", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="A1_s_differ theory/NamedMeasure.v proved"];
Gc_special_nondecrease [label="Gc_special_nondecrease", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="Gc_special_nondecrease theory/NamedMeasure.v proved"];
Mx_fresh_fails [label="Mx_fresh_fails", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="Mx_fresh_fails theory/NamedMeasure.v proved"];
Mx_ge_0 [label="Mx_ge_0", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="Mx_ge_0 theory/NamedMeasure.v proved"];
current_sm_not_terminating [label="current_sm_not_terminating", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="current_sm_not_terminating theory/NamedMeasure.v proved"];
current_subred_not_terminating [label="current_subred_not_terminating", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="current_subred_not_terminating theory/NamedMeasure.v proved"];
head_has_pos [label="head_has_pos", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="head_has_pos theory/NamedMeasure.v proved"];
le_mul_of_one_le [label="le_mul_of_one_le", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="le_mul_of_one_le theory/NamedMeasure.v proved"];
nfv_annot_bound_example [label="nfv_annot_bound_example", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="nfv_annot_bound_example theory/NamedMeasure.v proved"];
nocc_le_Mx [label="nocc_le_Mx", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="nocc_le_Mx theory/NamedMeasure.v proved"];
nred_Gc_special [label="nred_Gc_special", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="nred_Gc_special theory/NamedMeasure.v proved"];
nred_R_selfloop [label="nred_R_selfloop", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="nred_R_selfloop theory/NamedMeasure.v proved"];
s_metavar_empty [label="s_metavar_empty", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="s_metavar_empty theory/NamedMeasure.v proved"];
subred_selfloop [label="subred_selfloop", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="subred_selfloop theory/NamedMeasure.v proved"];
Es_ctx_any [label="Es_ctx_any", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="Es_ctx_any theory/NamedMeta.v proved"];
Es_fv [label="Es_fv", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="Es_fv theory/NamedMeta.v proved"];
Es_fv_both [label="Es_fv_both", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="Es_fv_both theory/NamedMeta.v proved"];
Es_refl_any [label="Es_refl_any", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="Es_refl_any theory/NamedMeta.v proved"];
Es_sym_any [label="Es_sym_any", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="Es_sym_any theory/NamedMeta.v proved"];
Es_trans_any [label="Es_trans_any", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="Es_trans_any theory/NamedMeta.v proved"];
eqC_in_Es [label="eqC_in_Es", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="eqC_in_Es theory/NamedMeta.v proved"];
filter_neq_in [label="filter_neq_in", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="filter_neq_in theory/NamedMeta.v proved"];
in_filter_neq [label="in_filter_neq", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="in_filter_neq theory/NamedMeta.v proved"];
in_filter_neq_iff [label="in_filter_neq_iff", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="in_filter_neq_iff theory/NamedMeta.v proved"];
isubst_meta_in [label="isubst_meta_in", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="isubst_meta_in theory/NamedMeta.v proved"];
isubst_meta_notin [label="isubst_meta_notin", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="isubst_meta_notin theory/NamedMeta.v proved"];
nplug_esub_fv [label="nplug_esub_fv", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="nplug_esub_fv theory/NamedMeta.v proved"];
nplug_fv_mono [label="nplug_fv_mono", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="nplug_fv_mono theory/NamedMeta.v proved"];
nplug_fv_upper [label="nplug_fv_upper", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="nplug_fv_upper theory/NamedMeta.v proved"];
nred_R_intro [label="nred_R_intro", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="nred_R_intro theory/NamedMeta.v proved"];
nred_core_fv [label="nred_core_fv", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="nred_core_fv theory/NamedMeta.v proved"];
nred_fv [label="nred_fv", shape=ellipse, style="filled", fillcolor="transparent", color="#a9b492", penwidth=1.0, fontcolor="#c9d1bb", tooltip="nred_fv theory/NamedMeta.v proved"];
of_trm_lift -> of_trm_open;
mfvs_lift_m -> mfvs_open_m;
of_trm_plug -> mred_term_context;
of_trm_moccurs -> of_trm_moccurs0;
Plus_mred_of_Plus_red1 -> mred_full_comp_pure;
lemma_2_2_full_comp -> mred_full_comp_pure;
subred_intro -> subred_nred;
subred_intro -> subred_Es_l;
subred_intro -> subred_Es_r;
subred_Es_l -> subred_Es_lr;
subred_Es_r -> subred_Es_lr;
subred_intro -> subred_context;
subred_context -> subred_context_rule;
subred_nred -> subred_context_rule;
subred_intro -> subred_of_Es_nred_Es;
subred_intro -> nred_stable_source;
subred_intro -> nred_stable_target;
subred_context -> StarN_subred_context;
head_has_pos -> nocc_le_Mx;
le_mul_of_one_le -> nocc_le_Mx;
nfv_annot_bound_example -> Mx_fresh_fails;
A1_C_related -> A1_not_invariant;
A1_s_differ -> A1_not_invariant;
nred_R_selfloop -> current_sm_not_terminating;
nred_R_selfloop -> subred_selfloop;
subred_nred -> subred_selfloop;
subred_selfloop -> current_subred_not_terminating;
filter_neq_in -> nplug_fv_mono;
in_filter_neq -> nplug_fv_mono;
filter_neq_in -> nplug_fv_upper;
in_filter_neq -> nplug_fv_upper;
filter_neq_in -> nred_core_fv;
in_filter_neq -> nred_core_fv;
nplug_fv_mono -> nred_core_fv;
nplug_fv_upper -> nred_core_fv;
filter_neq_in -> nplug_esub_fv;
in_filter_neq -> nplug_esub_fv;
filter_neq_in -> nred_fv;
in_filter_neq -> nred_fv;
nplug_esub_fv -> nred_fv;
nplug_fv_mono -> nred_fv;
nplug_fv_upper -> nred_fv;
in_filter_neq_iff -> Es_fv_both;
nplug_fv_mono -> Es_fv_both;
Es_fv_both -> Es_fv;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 342 KiB

+913
View File
@@ -0,0 +1,913 @@
<?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 2.42.4 (0)
-->
<!-- Title: deps Pages: 1 -->
<svg width="854pt" height="2210pt"
viewBox="0.00 0.00 854.25 2210.00" 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 2206)">
<title>deps</title>
<text text-anchor="start" x="293.63" y="-2189.4" font-family="Inter" font-weight="bold" font-size="12.00" fill="#c9d1bb">Theorem dependencies M5, 69 results</text>
<!-- lemma_2_2_full_comp -->
<g id="node1" class="node">
<title>lemma_2_2_full_comp</title>
<g id="a_node1"><a xlink:title="lemma_2_2_full_comp (section 2.2) theory/Metatheory.v proved">
<path fill="transparent" stroke="#8f9780" stroke-width="0.9" stroke-dasharray="5,2" d="M140.67,-86C140.67,-86 18.67,-86 18.67,-86 12.67,-86 6.67,-80 6.67,-74 6.67,-74 6.67,-62 6.67,-62 6.67,-56 12.67,-50 18.67,-50 18.67,-50 140.67,-50 140.67,-50 146.67,-50 152.67,-56 152.67,-62 152.67,-62 152.67,-74 152.67,-74 152.67,-80 146.67,-86 140.67,-86"/>
<text text-anchor="middle" x="79.67" y="-65.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">lemma_2_2_full_comp\n(M2)</text>
</a>
</g>
</g>
<!-- mred_full_comp_pure -->
<g id="node8" class="node">
<title>mred_full_comp_pure</title>
<g id="a_node8"><a xlink:title="mred_full_comp_pure theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-43" rx="65.64" ry="18"/>
<text text-anchor="middle" x="291.32" y="-40.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">mred_full_comp_pure</text>
</a>
</g>
</g>
<!-- lemma_2_2_full_comp&#45;&gt;mred_full_comp_pure -->
<g id="edge6" class="edge">
<title>lemma_2_2_full_comp&#45;&gt;mred_full_comp_pure</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M152.82,-59.4C176.09,-56.62 201.75,-53.56 224.53,-50.85"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="224.86,-52.92 230.56,-50.13 224.36,-48.75 224.86,-52.92"/>
</g>
<!-- Plus_mred_of_Plus_red1 -->
<g id="node2" class="node">
<title>Plus_mred_of_Plus_red1</title>
<g id="a_node2"><a xlink:title="Plus_mred_of_Plus_red1 theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-18" rx="71.68" ry="18"/>
<text text-anchor="middle" x="79.67" y="-15.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Plus_mred_of_Plus_red1</text>
</a>
</g>
</g>
<!-- Plus_mred_of_Plus_red1&#45;&gt;mred_full_comp_pure -->
<g id="edge5" class="edge">
<title>Plus_mred_of_Plus_red1&#45;&gt;mred_full_comp_pure</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M144.71,-25.64C170.02,-28.65 199.08,-32.12 224.56,-35.16"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="224.4,-37.25 230.61,-35.88 224.9,-33.08 224.4,-37.25"/>
</g>
<!-- mfvs_close_m -->
<g id="node3" class="node">
<title>mfvs_close_m</title>
<g id="a_node3"><a xlink:title="mfvs_close_m theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-118" rx="45.72" ry="18"/>
<text text-anchor="middle" x="79.67" y="-115.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">mfvs_close_m</text>
</a>
</g>
</g>
<!-- mfvs_lift_m -->
<g id="node4" class="node">
<title>mfvs_lift_m</title>
<g id="a_node4"><a xlink:title="mfvs_lift_m theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-168" rx="39.02" ry="18"/>
<text text-anchor="middle" x="79.67" y="-165.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">mfvs_lift_m</text>
</a>
</g>
</g>
<!-- mfvs_open_m -->
<g id="node5" class="node">
<title>mfvs_open_m</title>
<g id="a_node5"><a xlink:title="mfvs_open_m theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-168" rx="45.72" ry="18"/>
<text text-anchor="middle" x="291.32" y="-165.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">mfvs_open_m</text>
</a>
</g>
</g>
<!-- mfvs_lift_m&#45;&gt;mfvs_open_m -->
<g id="edge2" class="edge">
<title>mfvs_lift_m&#45;&gt;mfvs_open_m</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M119.13,-168C152.87,-168 202.21,-168 239.26,-168"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="239.56,-170.1 245.56,-168 239.56,-165.9 239.56,-170.1"/>
</g>
<!-- mred_B_intro -->
<g id="node6" class="node">
<title>mred_B_intro</title>
<g id="a_node6"><a xlink:title="mred_B_intro theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-218" rx="44.41" ry="18"/>
<text text-anchor="middle" x="79.67" y="-215.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">mred_B_intro</text>
</a>
</g>
</g>
<!-- mred_context -->
<g id="node7" class="node">
<title>mred_context</title>
<g id="a_node7"><a xlink:title="mred_context theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-268" rx="46.38" ry="18"/>
<text text-anchor="middle" x="79.67" y="-265.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">mred_context</text>
</a>
</g>
</g>
<!-- mred_gc_intro -->
<g id="node9" class="node">
<title>mred_gc_intro</title>
<g id="a_node9"><a xlink:title="mred_gc_intro theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-318" rx="47.19" ry="18"/>
<text text-anchor="middle" x="79.67" y="-315.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">mred_gc_intro</text>
</a>
</g>
</g>
<!-- mred_of_red1 -->
<g id="node10" class="node">
<title>mred_of_red1</title>
<g id="a_node10"><a xlink:title="mred_of_red1 theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-368" rx="45.72" ry="18"/>
<text text-anchor="middle" x="79.67" y="-365.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">mred_of_red1</text>
</a>
</g>
</g>
<!-- mred_plus_one -->
<g id="node11" class="node">
<title>mred_plus_one</title>
<g id="a_node11"><a xlink:title="mred_plus_one theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-418" rx="49.15" ry="18"/>
<text text-anchor="middle" x="79.67" y="-415.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">mred_plus_one</text>
</a>
</g>
</g>
<!-- mred_r_intro -->
<g id="node12" class="node">
<title>mred_r_intro</title>
<g id="a_node12"><a xlink:title="mred_r_intro theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-468" rx="42.95" ry="18"/>
<text text-anchor="middle" x="79.67" y="-465.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">mred_r_intro</text>
</a>
</g>
</g>
<!-- mred_term_context -->
<g id="node13" class="node">
<title>mred_term_context</title>
<g id="a_node13"><a xlink:title="mred_term_context theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-518" rx="61.4" ry="18"/>
<text text-anchor="middle" x="291.32" y="-515.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">mred_term_context</text>
</a>
</g>
</g>
<!-- of_trm_close -->
<g id="node14" class="node">
<title>of_trm_close</title>
<g id="a_node14"><a xlink:title="of_trm_close theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-568" rx="42.29" ry="18"/>
<text text-anchor="middle" x="79.67" y="-565.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">of_trm_close</text>
</a>
</g>
</g>
<!-- of_trm_fvs -->
<g id="node15" class="node">
<title>of_trm_fvs</title>
<g id="a_node15"><a xlink:title="of_trm_fvs theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-618" rx="36.25" ry="18"/>
<text text-anchor="middle" x="79.67" y="-615.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">of_trm_fvs</text>
</a>
</g>
</g>
<!-- of_trm_injective -->
<g id="node16" class="node">
<title>of_trm_injective</title>
<g id="a_node16"><a xlink:title="of_trm_injective theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-668" rx="50.61" ry="18"/>
<text text-anchor="middle" x="79.67" y="-665.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">of_trm_injective</text>
</a>
</g>
</g>
<!-- of_trm_lift -->
<g id="node17" class="node">
<title>of_trm_lift</title>
<g id="a_node17"><a xlink:title="of_trm_lift theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-718" rx="35.59" ry="18"/>
<text text-anchor="middle" x="79.67" y="-715.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">of_trm_lift</text>
</a>
</g>
</g>
<!-- of_trm_open -->
<g id="node20" class="node">
<title>of_trm_open</title>
<g id="a_node20"><a xlink:title="of_trm_open theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-718" rx="42.29" ry="18"/>
<text text-anchor="middle" x="291.32" y="-715.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">of_trm_open</text>
</a>
</g>
</g>
<!-- of_trm_lift&#45;&gt;of_trm_open -->
<g id="edge1" class="edge">
<title>of_trm_lift&#45;&gt;of_trm_open</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M115.76,-718C150.62,-718 204.3,-718 242.92,-718"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="242.99,-720.1 248.99,-718 242.99,-715.9 242.99,-720.1"/>
</g>
<!-- of_trm_moccurs -->
<g id="node18" class="node">
<title>of_trm_moccurs</title>
<g id="a_node18"><a xlink:title="of_trm_moccurs theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-768" rx="51.27" ry="18"/>
<text text-anchor="middle" x="79.67" y="-765.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">of_trm_moccurs</text>
</a>
</g>
</g>
<!-- of_trm_moccurs0 -->
<g id="node19" class="node">
<title>of_trm_moccurs0</title>
<g id="a_node19"><a xlink:title="of_trm_moccurs0 theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-768" rx="54.7" ry="18"/>
<text text-anchor="middle" x="291.32" y="-765.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">of_trm_moccurs0</text>
</a>
</g>
</g>
<!-- of_trm_moccurs&#45;&gt;of_trm_moccurs0 -->
<g id="edge4" class="edge">
<title>of_trm_moccurs&#45;&gt;of_trm_moccurs0</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M131.16,-768C160.92,-768 198.75,-768 230.07,-768"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="230.24,-770.1 236.24,-768 230.24,-765.9 230.24,-770.1"/>
</g>
<!-- of_trm_plug -->
<g id="node21" class="node">
<title>of_trm_plug</title>
<g id="a_node21"><a xlink:title="of_trm_plug theory/Metaterm.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-518" rx="40.98" ry="18"/>
<text text-anchor="middle" x="79.67" y="-515.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">of_trm_plug</text>
</a>
</g>
</g>
<!-- of_trm_plug&#45;&gt;mred_term_context -->
<g id="edge3" class="edge">
<title>of_trm_plug&#45;&gt;mred_term_context</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M121.1,-518C150.11,-518 189.87,-518 223.55,-518"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="223.77,-520.1 229.77,-518 223.77,-515.9 223.77,-520.1"/>
</g>
<!-- PlusN_to_StarN -->
<g id="node22" class="node">
<title>PlusN_to_StarN</title>
<g id="a_node22"><a xlink:title="PlusN_to_StarN theory/NamedEs.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-831" rx="49.15" ry="18"/>
<text text-anchor="middle" x="79.67" y="-828.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">PlusN_to_StarN</text>
</a>
</g>
</g>
<!-- StarN_one_trans -->
<g id="node23" class="node">
<title>StarN_one_trans</title>
<g id="a_node23"><a xlink:title="StarN_one_trans theory/NamedEs.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-906" rx="52.58" ry="18"/>
<text text-anchor="middle" x="79.67" y="-903.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">StarN_one_trans</text>
</a>
</g>
</g>
<!-- StarN_subred_context -->
<g id="node24" class="node">
<title>StarN_subred_context</title>
<g id="a_node24"><a xlink:title="StarN_subred_context theory/NamedEs.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="507.59" cy="-1193" rx="67.6" ry="18"/>
<text text-anchor="middle" x="507.59" y="-1190.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">StarN_subred_context</text>
</a>
</g>
</g>
<!-- StarN_trans -->
<g id="node25" class="node">
<title>StarN_trans</title>
<g id="a_node25"><a xlink:title="StarN_trans theory/NamedEs.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-1081" rx="40.33" ry="18"/>
<text text-anchor="middle" x="79.67" y="-1078.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">StarN_trans</text>
</a>
</g>
</g>
<!-- nred_stable_source -->
<g id="node26" class="node">
<title>nred_stable_source</title>
<g id="a_node26"><a xlink:title="nred_stable_source theory/NamedEs.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-1018" rx="60.09" ry="18"/>
<text text-anchor="middle" x="291.32" y="-1015.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">nred_stable_source</text>
</a>
</g>
</g>
<!-- nred_stable_target -->
<g id="node27" class="node">
<title>nred_stable_target</title>
<g id="a_node27"><a xlink:title="nred_stable_target theory/NamedEs.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-968" rx="58.13" ry="18"/>
<text text-anchor="middle" x="291.32" y="-965.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">nred_stable_target</text>
</a>
</g>
</g>
<!-- subred_Es_l -->
<g id="node28" class="node">
<title>subred_Es_l</title>
<g id="a_node28"><a xlink:title="subred_Es_l theory/NamedEs.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-918" rx="40.33" ry="18"/>
<text text-anchor="middle" x="291.32" y="-915.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subred_Es_l</text>
</a>
</g>
</g>
<!-- subred_Es_lr -->
<g id="node29" class="node">
<title>subred_Es_lr</title>
<g id="a_node29"><a xlink:title="subred_Es_lr theory/NamedEs.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="507.59" cy="-893" rx="42.95" ry="18"/>
<text text-anchor="middle" x="507.59" y="-890.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subred_Es_lr</text>
</a>
</g>
</g>
<!-- subred_Es_l&#45;&gt;subred_Es_lr -->
<g id="edge10" class="edge">
<title>subred_Es_l&#45;&gt;subred_Es_lr</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M330.63,-913.53C366.85,-909.3 421.27,-902.95 459.99,-898.44"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="460.35,-900.51 466.06,-897.73 459.86,-896.34 460.35,-900.51"/>
</g>
<!-- subred_Es_r -->
<g id="node30" class="node">
<title>subred_Es_r</title>
<g id="a_node30"><a xlink:title="subred_Es_r theory/NamedEs.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-868" rx="40.98" ry="18"/>
<text text-anchor="middle" x="291.32" y="-865.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subred_Es_r</text>
</a>
</g>
</g>
<!-- subred_Es_r&#45;&gt;subred_Es_lr -->
<g id="edge11" class="edge">
<title>subred_Es_r&#45;&gt;subred_Es_lr</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M331.12,-872.53C367.41,-876.76 421.65,-883.09 460.21,-887.59"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="460.05,-889.68 466.25,-888.29 460.54,-885.51 460.05,-889.68"/>
</g>
<!-- subred_context -->
<g id="node31" class="node">
<title>subred_context</title>
<g id="a_node31"><a xlink:title="subred_context theory/NamedEs.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-1168" rx="50.46" ry="18"/>
<text text-anchor="middle" x="291.32" y="-1165.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subred_context</text>
</a>
</g>
</g>
<!-- subred_context&#45;&gt;StarN_subred_context -->
<g id="edge18" class="edge">
<title>subred_context&#45;&gt;StarN_subred_context</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M339.34,-1173.49C368.68,-1176.91 406.92,-1181.37 439.42,-1185.16"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="439.22,-1187.25 445.42,-1185.86 439.71,-1183.08 439.22,-1187.25"/>
</g>
<!-- subred_context_rule -->
<g id="node32" class="node">
<title>subred_context_rule</title>
<g id="a_node32"><a xlink:title="subred_context_rule theory/NamedEs.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="507.59" cy="-1143" rx="62.86" ry="18"/>
<text text-anchor="middle" x="507.59" y="-1140.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subred_context_rule</text>
</a>
</g>
</g>
<!-- subred_context&#45;&gt;subred_context_rule -->
<g id="edge13" class="edge">
<title>subred_context&#45;&gt;subred_context_rule</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M339.34,-1162.51C369.73,-1158.97 409.65,-1154.31 442.87,-1150.43"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="443.27,-1152.5 448.99,-1149.72 442.79,-1148.33 443.27,-1152.5"/>
</g>
<!-- subred_intro -->
<g id="node33" class="node">
<title>subred_intro</title>
<g id="a_node33"><a xlink:title="subred_intro theory/NamedEs.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-968" rx="42.95" ry="18"/>
<text text-anchor="middle" x="79.67" y="-965.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subred_intro</text>
</a>
</g>
</g>
<!-- subred_intro&#45;&gt;nred_stable_source -->
<g id="edge16" class="edge">
<title>subred_intro&#45;&gt;nred_stable_source</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M117.19,-976.71C150.49,-984.65 200.07,-996.48 237.65,-1005.44"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="237.25,-1007.5 243.57,-1006.85 238.22,-1003.42 237.25,-1007.5"/>
</g>
<!-- subred_intro&#45;&gt;nred_stable_target -->
<g id="edge17" class="edge">
<title>subred_intro&#45;&gt;nred_stable_target</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M122.6,-968C152.41,-968 192.99,-968 226.76,-968"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="226.99,-970.1 232.99,-968 226.99,-965.9 226.99,-970.1"/>
</g>
<!-- subred_intro&#45;&gt;subred_Es_l -->
<g id="edge8" class="edge">
<title>subred_intro&#45;&gt;subred_Es_l</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M117.19,-959.29C154.05,-950.5 210.87,-936.95 249.27,-927.79"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="249.92,-929.79 255.27,-926.36 248.94,-925.71 249.92,-929.79"/>
</g>
<!-- subred_intro&#45;&gt;subred_Es_r -->
<g id="edge9" class="edge">
<title>subred_intro&#45;&gt;subred_Es_r</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M109.08,-954.64C131.61,-944.04 159.35,-931 159.35,-931 159.35,-931 224.35,-893 224.35,-893 224.35,-893 238.69,-887.57 253.99,-881.77"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="254.79,-883.71 259.65,-879.62 253.3,-879.78 254.79,-883.71"/>
</g>
<!-- subred_intro&#45;&gt;subred_context -->
<g id="edge12" class="edge">
<title>subred_intro&#45;&gt;subred_context</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M95.84,-984.97C118.71,-1010.54 159.35,-1056 159.35,-1056 159.35,-1056 224.35,-1143 224.35,-1143 224.35,-1143 236.61,-1147.65 250.56,-1152.93"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="249.82,-1154.9 256.18,-1155.06 251.31,-1150.97 249.82,-1154.9"/>
</g>
<!-- subred_nred -->
<g id="node34" class="node">
<title>subred_nred</title>
<g id="a_node34"><a xlink:title="subred_nred theory/NamedEs.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-1118" rx="42.95" ry="18"/>
<text text-anchor="middle" x="291.32" y="-1115.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subred_nred</text>
</a>
</g>
</g>
<!-- subred_intro&#45;&gt;subred_nred -->
<g id="edge7" class="edge">
<title>subred_intro&#45;&gt;subred_nred</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M99.16,-984.09C137.97,-1017.85 224.35,-1093 224.35,-1093 224.35,-1093 238.02,-1098.18 252.91,-1103.82"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="252.53,-1105.92 258.88,-1106.09 254.01,-1102 252.53,-1105.92"/>
</g>
<!-- subred_of_Es_nred_Es -->
<g id="node35" class="node">
<title>subred_of_Es_nred_Es</title>
<g id="a_node35"><a xlink:title="subred_of_Es_nred_Es theory/NamedEs.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-818" rx="66.95" ry="18"/>
<text text-anchor="middle" x="291.32" y="-815.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subred_of_Es_nred_Es</text>
</a>
</g>
</g>
<!-- subred_intro&#45;&gt;subred_of_Es_nred_Es -->
<g id="edge15" class="edge">
<title>subred_intro&#45;&gt;subred_of_Es_nred_Es</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M109.08,-954.64C131.61,-944.04 159.35,-931 159.35,-931 159.35,-931 224.35,-843 224.35,-843 224.35,-843 234.02,-839.34 245.95,-834.82"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="246.7,-836.78 251.56,-832.69 245.21,-832.85 246.7,-836.78"/>
</g>
<!-- subred_nred&#45;&gt;subred_context_rule -->
<g id="edge14" class="edge">
<title>subred_nred&#45;&gt;subred_context_rule</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M332.62,-1122.7C363.68,-1126.33 407.21,-1131.4 442.96,-1135.58"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="442.87,-1137.68 449.08,-1136.29 443.36,-1133.51 442.87,-1137.68"/>
</g>
<!-- subred_selfloop -->
<g id="node52" class="node">
<title>subred_selfloop</title>
<g id="a_node52"><a xlink:title="subred_selfloop theory/NamedMeasure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="507.59" cy="-1093" rx="50.46" ry="18"/>
<text text-anchor="middle" x="507.59" y="-1090.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">subred_selfloop</text>
</a>
</g>
</g>
<!-- subred_nred&#45;&gt;subred_selfloop -->
<g id="edge26" class="edge">
<title>subred_nred&#45;&gt;subred_selfloop</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M332.62,-1113.3C366.66,-1109.33 415.68,-1103.61 453.01,-1099.25"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="453.65,-1101.29 459.37,-1098.51 453.17,-1097.12 453.65,-1101.29"/>
</g>
<!-- A1_C_related -->
<g id="node36" class="node">
<title>A1_C_related</title>
<g id="a_node36"><a xlink:title="A1_C_related theory/NamedMeasure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-1243" rx="43.1" ry="18"/>
<text text-anchor="middle" x="79.67" y="-1240.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">A1_C_related</text>
</a>
</g>
</g>
<!-- A1_not_invariant -->
<g id="node38" class="node">
<title>A1_not_invariant</title>
<g id="a_node38"><a xlink:title="A1_not_invariant theory/NamedMeasure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-1218" rx="53.23" ry="18"/>
<text text-anchor="middle" x="291.32" y="-1215.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">A1_not_invariant</text>
</a>
</g>
</g>
<!-- A1_C_related&#45;&gt;A1_not_invariant -->
<g id="edge22" class="edge">
<title>A1_C_related&#45;&gt;A1_not_invariant</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M121.59,-1238.12C153.92,-1234.27 199.37,-1228.85 234.95,-1224.6"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="235.31,-1226.67 241.02,-1223.88 234.81,-1222.5 235.31,-1226.67"/>
</g>
<!-- A1_Mx_differ -->
<g id="node37" class="node">
<title>A1_Mx_differ</title>
<g id="a_node37"><a xlink:title="A1_Mx_differ theory/NamedMeasure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-1293" rx="42.95" ry="18"/>
<text text-anchor="middle" x="79.67" y="-1290.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">A1_Mx_differ</text>
</a>
</g>
</g>
<!-- A1_s_differ -->
<g id="node39" class="node">
<title>A1_s_differ</title>
<g id="a_node39"><a xlink:title="A1_s_differ theory/NamedMeasure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-1193" rx="37.56" ry="18"/>
<text text-anchor="middle" x="79.67" y="-1190.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">A1_s_differ</text>
</a>
</g>
</g>
<!-- A1_s_differ&#45;&gt;A1_not_invariant -->
<g id="edge23" class="edge">
<title>A1_s_differ&#45;&gt;A1_not_invariant</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M116.24,-1197.24C148.6,-1201.1 196.89,-1206.86 234.41,-1211.33"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="234.6,-1213.47 240.81,-1212.1 235.1,-1209.3 234.6,-1213.47"/>
</g>
<!-- Gc_special_nondecrease -->
<g id="node40" class="node">
<title>Gc_special_nondecrease</title>
<g id="a_node40"><a xlink:title="Gc_special_nondecrease theory/NamedMeasure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-1343" rx="72.99" ry="18"/>
<text text-anchor="middle" x="79.67" y="-1340.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Gc_special_nondecrease</text>
</a>
</g>
</g>
<!-- Mx_fresh_fails -->
<g id="node41" class="node">
<title>Mx_fresh_fails</title>
<g id="a_node41"><a xlink:title="Mx_fresh_fails theory/NamedMeasure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-1393" rx="45.07" ry="18"/>
<text text-anchor="middle" x="291.32" y="-1390.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Mx_fresh_fails</text>
</a>
</g>
</g>
<!-- Mx_ge_0 -->
<g id="node42" class="node">
<title>Mx_ge_0</title>
<g id="a_node42"><a xlink:title="Mx_ge_0 theory/NamedMeasure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-1443" rx="32.16" ry="18"/>
<text text-anchor="middle" x="79.67" y="-1440.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Mx_ge_0</text>
</a>
</g>
</g>
<!-- current_sm_not_terminating -->
<g id="node43" class="node">
<title>current_sm_not_terminating</title>
<g id="a_node43"><a xlink:title="current_sm_not_terminating theory/NamedMeasure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="507.59" cy="-1043" rx="84.09" ry="18"/>
<text text-anchor="middle" x="507.59" y="-1040.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">current_sm_not_terminating</text>
</a>
</g>
</g>
<!-- current_subred_not_terminating -->
<g id="node44" class="node">
<title>current_subred_not_terminating</title>
<g id="a_node44"><a xlink:title="current_subred_not_terminating theory/NamedMeasure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="751.57" cy="-1093" rx="94.87" ry="18"/>
<text text-anchor="middle" x="751.57" y="-1090.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">current_subred_not_terminating</text>
</a>
</g>
</g>
<!-- head_has_pos -->
<g id="node45" class="node">
<title>head_has_pos</title>
<g id="a_node45"><a xlink:title="head_has_pos theory/NamedMeasure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-1543" rx="46.38" ry="18"/>
<text text-anchor="middle" x="79.67" y="-1540.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">head_has_pos</text>
</a>
</g>
</g>
<!-- nocc_le_Mx -->
<g id="node48" class="node">
<title>nocc_le_Mx</title>
<g id="a_node48"><a xlink:title="nocc_le_Mx theory/NamedMeasure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-1518" rx="39.02" ry="18"/>
<text text-anchor="middle" x="291.32" y="-1515.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">nocc_le_Mx</text>
</a>
</g>
</g>
<!-- head_has_pos&#45;&gt;nocc_le_Mx -->
<g id="edge19" class="edge">
<title>head_has_pos&#45;&gt;nocc_le_Mx</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M124.11,-1537.82C160.17,-1533.52 211.18,-1527.44 247.16,-1523.15"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="247.54,-1525.22 253.24,-1522.42 247.04,-1521.05 247.54,-1525.22"/>
</g>
<!-- le_mul_of_one_le -->
<g id="node46" class="node">
<title>le_mul_of_one_le</title>
<g id="a_node46"><a xlink:title="le_mul_of_one_le theory/NamedMeasure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-1493" rx="53.23" ry="18"/>
<text text-anchor="middle" x="79.67" y="-1490.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">le_mul_of_one_le</text>
</a>
</g>
</g>
<!-- le_mul_of_one_le&#45;&gt;nocc_le_Mx -->
<g id="edge20" class="edge">
<title>le_mul_of_one_le&#45;&gt;nocc_le_Mx</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M130.09,-1498.89C165.53,-1503.12 212.84,-1508.76 246.84,-1512.82"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="246.83,-1514.93 253.03,-1513.55 247.33,-1510.76 246.83,-1514.93"/>
</g>
<!-- nfv_annot_bound_example -->
<g id="node47" class="node">
<title>nfv_annot_bound_example</title>
<g id="a_node47"><a xlink:title="nfv_annot_bound_example theory/NamedMeasure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-1393" rx="79.85" ry="18"/>
<text text-anchor="middle" x="79.67" y="-1390.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">nfv_annot_bound_example</text>
</a>
</g>
</g>
<!-- nfv_annot_bound_example&#45;&gt;Mx_fresh_fails -->
<g id="edge21" class="edge">
<title>nfv_annot_bound_example&#45;&gt;Mx_fresh_fails</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M159.63,-1393C186.6,-1393 216,-1393 240.07,-1393"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="240.07,-1395.1 246.07,-1393 240.07,-1390.9 240.07,-1395.1"/>
</g>
<!-- nred_Gc_special -->
<g id="node49" class="node">
<title>nred_Gc_special</title>
<g id="a_node49"><a xlink:title="nred_Gc_special theory/NamedMeasure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-1593" rx="51.27" ry="18"/>
<text text-anchor="middle" x="79.67" y="-1590.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">nred_Gc_special</text>
</a>
</g>
</g>
<!-- nred_R_selfloop -->
<g id="node50" class="node">
<title>nred_R_selfloop</title>
<g id="a_node50"><a xlink:title="nred_R_selfloop theory/NamedMeasure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-1068" rx="50.46" ry="18"/>
<text text-anchor="middle" x="291.32" y="-1065.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">nred_R_selfloop</text>
</a>
</g>
</g>
<!-- nred_R_selfloop&#45;&gt;current_sm_not_terminating -->
<g id="edge24" class="edge">
<title>nred_R_selfloop&#45;&gt;current_sm_not_terminating</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M339.34,-1062.51C364.99,-1059.52 397.43,-1055.74 426.9,-1052.3"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="427.43,-1054.35 433.14,-1051.57 426.94,-1050.18 427.43,-1054.35"/>
</g>
<!-- nred_R_selfloop&#45;&gt;subred_selfloop -->
<g id="edge25" class="edge">
<title>nred_R_selfloop&#45;&gt;subred_selfloop</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M339.34,-1073.49C373.11,-1077.43 418.67,-1082.74 453.7,-1086.83"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="453.47,-1088.92 459.68,-1087.53 453.96,-1084.75 453.47,-1088.92"/>
</g>
<!-- s_metavar_empty -->
<g id="node51" class="node">
<title>s_metavar_empty</title>
<g id="a_node51"><a xlink:title="s_metavar_empty theory/NamedMeasure.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-1643" rx="56.01" ry="18"/>
<text text-anchor="middle" x="79.67" y="-1640.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">s_metavar_empty</text>
</a>
</g>
</g>
<!-- subred_selfloop&#45;&gt;current_subred_not_terminating -->
<g id="edge27" class="edge">
<title>subred_selfloop&#45;&gt;current_subred_not_terminating</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M557.85,-1093C584.53,-1093 618.51,-1093 650.47,-1093"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="650.84,-1095.1 656.84,-1093 650.84,-1090.9 650.84,-1095.1"/>
</g>
<!-- Es_ctx_any -->
<g id="node53" class="node">
<title>Es_ctx_any</title>
<g id="a_node53"><a xlink:title="Es_ctx_any theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-1693" rx="38.87" ry="18"/>
<text text-anchor="middle" x="79.67" y="-1690.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Es_ctx_any</text>
</a>
</g>
</g>
<!-- Es_fv -->
<g id="node54" class="node">
<title>Es_fv</title>
<g id="a_node54"><a xlink:title="Es_fv theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="751.57" cy="-1880" rx="27" ry="18"/>
<text text-anchor="middle" x="751.57" y="-1877.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Es_fv</text>
</a>
</g>
</g>
<!-- Es_fv_both -->
<g id="node55" class="node">
<title>Es_fv_both</title>
<g id="a_node55"><a xlink:title="Es_fv_both theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="507.59" cy="-1880" rx="37.56" ry="18"/>
<text text-anchor="middle" x="507.59" y="-1877.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Es_fv_both</text>
</a>
</g>
</g>
<!-- Es_fv_both&#45;&gt;Es_fv -->
<g id="edge45" class="edge">
<title>Es_fv_both&#45;&gt;Es_fv</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M545.34,-1880C592.44,-1880 673.35,-1880 718.22,-1880"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="718.3,-1882.1 724.3,-1880 718.3,-1877.9 718.3,-1882.1"/>
</g>
<!-- Es_refl_any -->
<g id="node56" class="node">
<title>Es_refl_any</title>
<g id="a_node56"><a xlink:title="Es_refl_any theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-1863" rx="39.02" ry="18"/>
<text text-anchor="middle" x="79.67" y="-1860.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Es_refl_any</text>
</a>
</g>
</g>
<!-- Es_sym_any -->
<g id="node57" class="node">
<title>Es_sym_any</title>
<g id="a_node57"><a xlink:title="Es_sym_any theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-1913" rx="40.98" ry="18"/>
<text text-anchor="middle" x="79.67" y="-1910.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Es_sym_any</text>
</a>
</g>
</g>
<!-- Es_trans_any -->
<g id="node58" class="node">
<title>Es_trans_any</title>
<g id="a_node58"><a xlink:title="Es_trans_any theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-1963" rx="43.76" ry="18"/>
<text text-anchor="middle" x="79.67" y="-1960.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">Es_trans_any</text>
</a>
</g>
</g>
<!-- eqC_in_Es -->
<g id="node59" class="node">
<title>eqC_in_Es</title>
<g id="a_node59"><a xlink:title="eqC_in_Es theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-2013" rx="35.59" ry="18"/>
<text text-anchor="middle" x="79.67" y="-2010.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">eqC_in_Es</text>
</a>
</g>
</g>
<!-- filter_neq_in -->
<g id="node60" class="node">
<title>filter_neq_in</title>
<g id="a_node60"><a xlink:title="filter_neq_in theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-1813" rx="41.64" ry="18"/>
<text text-anchor="middle" x="79.67" y="-1810.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">filter_neq_in</text>
</a>
</g>
</g>
<!-- nplug_esub_fv -->
<g id="node65" class="node">
<title>nplug_esub_fv</title>
<g id="a_node65"><a xlink:title="nplug_esub_fv theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-1693" rx="47.19" ry="18"/>
<text text-anchor="middle" x="291.32" y="-1690.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">nplug_esub_fv</text>
</a>
</g>
</g>
<!-- filter_neq_in&#45;&gt;nplug_esub_fv -->
<g id="edge36" class="edge">
<title>filter_neq_in&#45;&gt;nplug_esub_fv</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M105.57,-1798.76C128.62,-1785.58 159.35,-1768 159.35,-1768 159.35,-1768 224.35,-1718 224.35,-1718 224.35,-1718 237,-1713.2 251.23,-1707.81"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="252.08,-1709.74 256.95,-1705.65 250.59,-1705.81 252.08,-1709.74"/>
</g>
<!-- nplug_fv_mono -->
<g id="node66" class="node">
<title>nplug_fv_mono</title>
<g id="a_node66"><a xlink:title="nplug_fv_mono theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-1853" rx="49.8" ry="18"/>
<text text-anchor="middle" x="291.32" y="-1850.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">nplug_fv_mono</text>
</a>
</g>
</g>
<!-- filter_neq_in&#45;&gt;nplug_fv_mono -->
<g id="edge28" class="edge">
<title>filter_neq_in&#45;&gt;nplug_fv_mono</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M118.16,-1820.15C152.48,-1826.7 203.5,-1836.44 241.1,-1843.61"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="240.72,-1845.67 247.01,-1844.74 241.51,-1841.55 240.72,-1845.67"/>
</g>
<!-- nplug_fv_upper -->
<g id="node67" class="node">
<title>nplug_fv_upper</title>
<g id="a_node67"><a xlink:title="nplug_fv_upper theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-1743" rx="50.46" ry="18"/>
<text text-anchor="middle" x="291.32" y="-1740.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">nplug_fv_upper</text>
</a>
</g>
</g>
<!-- filter_neq_in&#45;&gt;nplug_fv_upper -->
<g id="edge30" class="edge">
<title>filter_neq_in&#45;&gt;nplug_fv_upper</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M112.97,-1802.22C149.21,-1790.12 208.12,-1770.45 248.01,-1757.13"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="248.73,-1759.1 253.75,-1755.21 247.4,-1755.12 248.73,-1759.1"/>
</g>
<!-- nred_core_fv -->
<g id="node69" class="node">
<title>nred_core_fv</title>
<g id="a_node69"><a xlink:title="nred_core_fv theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="507.59" cy="-1825" rx="42.95" ry="18"/>
<text text-anchor="middle" x="507.59" y="-1822.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">nred_core_fv</text>
</a>
</g>
</g>
<!-- filter_neq_in&#45;&gt;nred_core_fv -->
<g id="edge32" class="edge">
<title>filter_neq_in&#45;&gt;nred_core_fv</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M113.58,-1823.46C135.14,-1830.31 159.35,-1838 159.35,-1838 159.35,-1838 224.35,-1878 224.35,-1878 224.35,-1878 358.29,-1878 358.29,-1878 358.29,-1878 424.7,-1854.27 468.64,-1838.56"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="469.47,-1840.5 474.41,-1836.5 468.05,-1836.54 469.47,-1840.5"/>
</g>
<!-- nred_fv -->
<g id="node70" class="node">
<title>nred_fv</title>
<g id="a_node70"><a xlink:title="nred_fv theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="507.59" cy="-1743" rx="28.74" ry="18"/>
<text text-anchor="middle" x="507.59" y="-1740.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">nred_fv</text>
</a>
</g>
</g>
<!-- filter_neq_in&#45;&gt;nred_fv -->
<g id="edge38" class="edge">
<title>filter_neq_in&#45;&gt;nred_fv</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M118.98,-1806.79C195.14,-1794.45 358.29,-1768 358.29,-1768 358.29,-1768 429.7,-1755.96 473.41,-1748.59"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="473.82,-1750.65 479.39,-1747.59 473.12,-1746.51 473.82,-1750.65"/>
</g>
<!-- in_filter_neq -->
<g id="node61" class="node">
<title>in_filter_neq</title>
<g id="a_node61"><a xlink:title="in_filter_neq theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-1743" rx="41.64" ry="18"/>
<text text-anchor="middle" x="79.67" y="-1740.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">in_filter_neq</text>
</a>
</g>
</g>
<!-- in_filter_neq&#45;&gt;nplug_esub_fv -->
<g id="edge37" class="edge">
<title>in_filter_neq&#45;&gt;nplug_esub_fv</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M116.71,-1734.4C152.16,-1725.95 206.4,-1713.01 244.81,-1703.85"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="245.48,-1705.85 250.83,-1702.42 244.51,-1701.77 245.48,-1705.85"/>
</g>
<!-- in_filter_neq&#45;&gt;nplug_fv_mono -->
<g id="edge29" class="edge">
<title>in_filter_neq&#45;&gt;nplug_fv_mono</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M106.8,-1756.71C144.72,-1776.61 215.03,-1813.5 256.75,-1835.38"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="255.9,-1837.31 262.19,-1838.24 257.85,-1833.59 255.9,-1837.31"/>
</g>
<!-- in_filter_neq&#45;&gt;nplug_fv_upper -->
<g id="edge31" class="edge">
<title>in_filter_neq&#45;&gt;nplug_fv_upper</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M121.59,-1743C153.92,-1743 199.37,-1743 234.95,-1743"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="235.02,-1745.1 241.02,-1743 235.02,-1740.9 235.02,-1745.1"/>
</g>
<!-- in_filter_neq&#45;&gt;nred_core_fv -->
<g id="edge33" class="edge">
<title>in_filter_neq&#45;&gt;nred_core_fv</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M118.1,-1750.21C196.62,-1765.32 378.24,-1800.29 462.36,-1816.48"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="462.2,-1818.59 468.48,-1817.66 462.99,-1814.47 462.2,-1818.59"/>
</g>
<!-- in_filter_neq&#45;&gt;nred_fv -->
<g id="edge39" class="edge">
<title>in_filter_neq&#45;&gt;nred_fv</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M113.58,-1732.54C135.14,-1725.69 159.35,-1718 159.35,-1718 159.35,-1718 224.35,-1668 224.35,-1668 224.35,-1668 358.29,-1668 358.29,-1668 358.29,-1668 436.29,-1707.45 479.16,-1729.13"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="478.4,-1731.1 484.71,-1731.93 480.3,-1727.35 478.4,-1731.1"/>
</g>
<!-- in_filter_neq_iff -->
<g id="node62" class="node">
<title>in_filter_neq_iff</title>
<g id="a_node62"><a xlink:title="in_filter_neq_iff theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="291.32" cy="-1933" rx="49.15" ry="18"/>
<text text-anchor="middle" x="291.32" y="-1930.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">in_filter_neq_iff</text>
</a>
</g>
</g>
<!-- in_filter_neq_iff&#45;&gt;Es_fv_both -->
<g id="edge43" class="edge">
<title>in_filter_neq_iff&#45;&gt;Es_fv_both</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M332.37,-1923.09C371.12,-1913.51 429.45,-1899.08 467.78,-1889.6"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="468.43,-1891.6 473.75,-1888.12 467.42,-1887.53 468.43,-1891.6"/>
</g>
<!-- isubst_meta_in -->
<g id="node63" class="node">
<title>isubst_meta_in</title>
<g id="a_node63"><a xlink:title="isubst_meta_in theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-2063" rx="48.49" ry="18"/>
<text text-anchor="middle" x="79.67" y="-2060.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">isubst_meta_in</text>
</a>
</g>
</g>
<!-- isubst_meta_notin -->
<g id="node64" class="node">
<title>isubst_meta_notin</title>
<g id="a_node64"><a xlink:title="isubst_meta_notin theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-2113" rx="57.32" ry="18"/>
<text text-anchor="middle" x="79.67" y="-2110.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">isubst_meta_notin</text>
</a>
</g>
</g>
<!-- nplug_esub_fv&#45;&gt;nred_fv -->
<g id="edge40" class="edge">
<title>nplug_esub_fv&#45;&gt;nred_fv</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M332.12,-1702.29C373.13,-1711.86 436.28,-1726.59 474.3,-1735.47"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="473.86,-1737.52 480.18,-1736.84 474.81,-1733.43 473.86,-1737.52"/>
</g>
<!-- nplug_fv_mono&#45;&gt;Es_fv_both -->
<g id="edge44" class="edge">
<title>nplug_fv_mono&#45;&gt;Es_fv_both</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M338.55,-1858.83C376.11,-1863.56 428.64,-1870.18 464.92,-1874.75"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="464.83,-1876.85 471.04,-1875.52 465.35,-1872.69 464.83,-1876.85"/>
</g>
<!-- nplug_fv_mono&#45;&gt;nred_core_fv -->
<g id="edge34" class="edge">
<title>nplug_fv_mono&#45;&gt;nred_core_fv</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M338.29,-1846.99C374.32,-1842.28 424.24,-1835.76 460.35,-1831.04"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="460.79,-1833.1 466.47,-1830.24 460.25,-1828.94 460.79,-1833.1"/>
</g>
<!-- nplug_fv_mono&#45;&gt;nred_fv -->
<g id="edge41" class="edge">
<title>nplug_fv_mono&#45;&gt;nred_fv</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M323.76,-1839.18C340.75,-1831.71 358.29,-1824 358.29,-1824 358.29,-1824 437.1,-1780.95 479.82,-1757.62"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="481.08,-1759.32 485.34,-1754.61 479.07,-1755.64 481.08,-1759.32"/>
</g>
<!-- nplug_fv_upper&#45;&gt;nred_core_fv -->
<g id="edge35" class="edge">
<title>nplug_fv_upper&#45;&gt;nred_core_fv</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M326.27,-1755.99C365.3,-1770.93 429.15,-1795.36 469.46,-1810.79"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="468.88,-1812.82 475.23,-1813 470.38,-1808.9 468.88,-1812.82"/>
</g>
<!-- nplug_fv_upper&#45;&gt;nred_fv -->
<g id="edge42" class="edge">
<title>nplug_fv_upper&#45;&gt;nred_fv</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M341.75,-1743C381.65,-1743 436.79,-1743 472.07,-1743"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="472.42,-1745.1 478.42,-1743 472.42,-1740.9 472.42,-1745.1"/>
</g>
<!-- nred_R_intro -->
<g id="node68" class="node">
<title>nred_R_intro</title>
<g id="a_node68"><a xlink:title="nred_R_intro theory/NamedMeta.v proved">
<ellipse fill="transparent" stroke="#a9b492" cx="79.67" cy="-2163" rx="42.95" ry="18"/>
<text text-anchor="middle" x="79.67" y="-2160.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">nred_R_intro</text>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 45 KiB

+20
View File
@@ -0,0 +1,20 @@
digraph deps {
rankdir=LR;
bgcolor="transparent";
splines=polyline;
concentrate=true;
nodesep=0.2;
ranksep=0.9;
node [fontname=Inter, fontsize=9];
edge [fontname=Inter, fontsize=8, color="#8f9780", fontcolor="#c9d1bb", arrowsize=0.6, penwidth=0.8];
graph [fontname=Inter, fontsize=12, labelloc=t, fontcolor="#c9d1bb", label=<<B>Theorem dependency by milestone</B>>];
M1 [label="M1\\n33 results", shape=box, style="rounded,filled", fillcolor="transparent", color="#a9b492", fontcolor="#c9d1bb"];
M2 [label="M2\\n53 results", shape=box, style="rounded,filled", fillcolor="transparent", color="#a9b492", fontcolor="#c9d1bb"];
M3 [label="M3\\n16 results", shape=box, style="rounded,filled", fillcolor="transparent", color="#a9b492", fontcolor="#c9d1bb"];
M4 [label="M4\\n6 results", shape=box, style="rounded,filled", fillcolor="transparent", color="#a9b492", fontcolor="#c9d1bb"];
M5 [label="M5\\n69 results", shape=box, style="rounded,filled", fillcolor="transparent", color="#a9b492", fontcolor="#c9d1bb"];
M1 -> M2;
M1 -> M3;
M2 -> M3;
M2 -> M5;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

+67
View File
@@ -0,0 +1,67 @@
<?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 2.42.4 (0)
-->
<!-- Title: deps Pages: 1 -->
<svg width="390pt" height="145pt"
viewBox="0.00 0.00 390.00 145.00" 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 141)">
<title>deps</title>
<text text-anchor="start" x="72.5" y="-124.4" font-family="Inter" font-weight="bold" font-size="12.00" fill="#c9d1bb">Theorem dependency by milestone</text>
<!-- M1 -->
<g id="node1" class="node">
<title>M1</title>
<path fill="transparent" stroke="#a9b492" d="M72,-66C72,-66 12,-66 12,-66 6,-66 0,-60 0,-54 0,-54 0,-42 0,-42 0,-36 6,-30 12,-30 12,-30 72,-30 72,-30 78,-30 84,-36 84,-42 84,-42 84,-54 84,-54 84,-60 78,-66 72,-66"/>
<text text-anchor="middle" x="42" y="-45.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">M1\n33 results</text>
</g>
<!-- M2 -->
<g id="node2" class="node">
<title>M2</title>
<path fill="transparent" stroke="#a9b492" d="M221,-46C221,-46 161,-46 161,-46 155,-46 149,-40 149,-34 149,-34 149,-22 149,-22 149,-16 155,-10 161,-10 161,-10 221,-10 221,-10 227,-10 233,-16 233,-22 233,-22 233,-34 233,-34 233,-40 227,-46 221,-46"/>
<text text-anchor="middle" x="191" y="-25.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">M2\n53 results</text>
</g>
<!-- M1&#45;&gt;M2 -->
<g id="edge1" class="edge">
<title>M1&#45;&gt;M2</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M84.34,-42.38C102.5,-39.91 123.92,-36.99 142.71,-34.43"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="143.31,-36.47 148.97,-33.58 142.74,-32.31 143.31,-36.47"/>
</g>
<!-- M3 -->
<g id="node3" class="node">
<title>M3</title>
<path fill="transparent" stroke="#a9b492" d="M370,-86C370,-86 310,-86 310,-86 304,-86 298,-80 298,-74 298,-74 298,-62 298,-62 298,-56 304,-50 310,-50 310,-50 370,-50 370,-50 376,-50 382,-56 382,-62 382,-62 382,-74 382,-74 382,-80 376,-86 370,-86"/>
<text text-anchor="middle" x="340" y="-65.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">M3\n16 results</text>
</g>
<!-- M1&#45;&gt;M3 -->
<g id="edge2" class="edge">
<title>M1&#45;&gt;M3</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M84.16,-50.78C138.57,-54.46 234.23,-60.92 291.6,-64.8"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="291.59,-66.9 297.72,-65.21 291.87,-62.71 291.59,-66.9"/>
</g>
<!-- M2&#45;&gt;M3 -->
<g id="edge3" class="edge">
<title>M2&#45;&gt;M3</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M233.34,-39.25C251.5,-44.19 272.92,-50.02 291.71,-55.13"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="291.63,-57.29 297.97,-56.84 292.73,-53.23 291.63,-57.29"/>
</g>
<!-- M5 -->
<g id="node5" class="node">
<title>M5</title>
<path fill="transparent" stroke="#a9b492" d="M370,-36C370,-36 310,-36 310,-36 304,-36 298,-30 298,-24 298,-24 298,-12 298,-12 298,-6 304,0 310,0 310,0 370,0 370,0 376,0 382,-6 382,-12 382,-12 382,-24 382,-24 382,-30 376,-36 370,-36"/>
<text text-anchor="middle" x="340" y="-15.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">M5\n69 results</text>
</g>
<!-- M2&#45;&gt;M5 -->
<g id="edge4" class="edge">
<title>M2&#45;&gt;M5</title>
<path fill="none" stroke="#8f9780" stroke-width="0.8" d="M233.34,-25.19C251.5,-23.95 272.92,-22.5 291.71,-21.22"/>
<polygon fill="#8f9780" stroke="#8f9780" stroke-width="0.8" points="292.13,-23.29 297.97,-20.79 291.84,-19.1 292.13,-23.29"/>
</g>
<!-- M4 -->
<g id="node4" class="node">
<title>M4</title>
<path fill="transparent" stroke="#a9b492" d="M69,-116C69,-116 15,-116 15,-116 9,-116 3,-110 3,-104 3,-104 3,-92 3,-92 3,-86 9,-80 15,-80 15,-80 69,-80 69,-80 75,-80 81,-86 81,-92 81,-92 81,-104 81,-104 81,-110 75,-116 69,-116"/>
<text text-anchor="middle" x="42" y="-95.8" font-family="Inter" font-size="9.00" fill="#c9d1bb">M4\n6 results</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

-206
View File
@@ -1,206 +0,0 @@
digraph theorem_deps {
rankdir=LR;
bgcolor="white";
splines=spline;
nodesep=0.22;
ranksep=0.6;
node [fontname=Inter, fontsize=9, fontcolor="#222222"];
edge [fontname=Inter, fontsize=8, color="#9a9a9a", arrowsize=0.6, penwidth=0.8];
graph [fontname=Inter, fontsize=12, labelloc=t, label=<<B>Milner's Lambda-Calculus with Partial Substitutions - theorem dependency (M4)</B><BR/><FONT POINT-SIZE="9"><FONT COLOR="#38761d">proved</FONT> <FONT COLOR="#b45f06">stated</FONT> <FONT COLOR="#777777">planned</FONT> <FONT COLOR="#cc0000">blocked</FONT></FONT>>];
fvs_lift [label="fvs_lift", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="fvs_lift theory/Binding.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
lift_lc [label="lift_lc", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="lift_lc theory/Binding.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
lift_0_lc [label="lift_0_lc", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="lift_0_lc theory/Binding.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
open_rec_bvar [label="open_rec_bvar", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="open_rec_bvar theory/Binding.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
close_rec_fvar [label="close_rec_fvar", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="close_rec_fvar theory/Binding.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
open_rec_occurs_false [label="open_rec_occurs_false", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="open_rec_occurs_false theory/Binding.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
close_rec_notin [label="close_rec_notin", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="close_rec_notin theory/Binding.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
close_rec_fvs [label="close_rec_fvs", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="close_rec_fvs theory/Binding.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
open_rec_bvar_neq [label="open_rec_bvar_neq", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="open_rec_bvar_neq theory/Binding.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
open_rec_fvs [label="open_rec_fvs", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="open_rec_fvs theory/Binding.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
open_close [label="open_close", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="open_close theory/Binding.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
subst_fvar_self [label="subst_fvar_self", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="subst_fvar_self theory/Binding.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
subst_fvar_other [label="subst_fvar_other", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="subst_fvar_other theory/Binding.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
subst_fvs [label="subst_fvs", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="subst_fvs theory/Binding.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
Star_trans [label="Star_trans", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="Star_trans theory/Closure.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
red1_star [label="red1_star", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="red1_star theory/Closure.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
Plus_to_Star [label="Plus_to_Star", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="Plus_to_Star theory/Closure.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
Star_red1_context [label="Star_red1_context", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="Star_red1_context theory/Closure.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
star_one_trans [label="star_one_trans", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="star_one_trans theory/Closure.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
in_comb [label="in_comb", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="in_comb theory/Enumerate.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
pow2_pos [label="pow2_pos", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="pow2_pos theory/Enumerate.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
size_all_terms [label="size_all_terms", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="size_all_terms theory/Enumerate.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
enumerate_check [label="enumerate_check", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="enumerate_check theory/Enumerate.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
enumerate_sound [label="enumerate_sound", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="enumerate_sound theory/Enumerate.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
enumerate_complete [label="enumerate_complete", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="enumerate_complete theory/Enumerate.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
Plus_red1_context [label="Plus_red1_context", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="Plus_red1_context theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
occurs_count_zero [label="occurs_count_zero", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="occurs_count_zero theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
occurs_count_false [label="occurs_count_false", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="occurs_count_false theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
occurs_count_pos [label="occurs_count_pos", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="occurs_count_pos theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
occurs_lift_self [label="occurs_lift_self", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="occurs_lift_self theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
zdecs_nonempty [label="zdecs_nonempty", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="zdecs_nonempty theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
occurs_count_zfill_plug [label="occurs_count_zfill_plug", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="occurs_count_zfill_plug theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
open_rec_zplug_lift [label="open_rec_zplug_lift", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="open_rec_zplug_lift theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
full_comp_aux [label="full_comp_aux", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="full_comp_aux theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
lemma_2_2_full_comp [label="lemma_2_2_full_comp", color="#38761d", fillcolor="#d9ead3", style="rounded,filled", fontcolor="#222222", tooltip="lemma_2_2_full_comp (section 2.2) theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=box];
fvs_zplug_lift [label="fvs_zplug_lift", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="fvs_zplug_lift theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
plug_fv_mono [label="plug_fv_mono", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="plug_fv_mono theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
red1_root_fv [label="red1_root_fv", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="red1_root_fv theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
red1r_fv [label="red1r_fv", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="red1r_fv theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
lemma_2_1_fv_preserved [label="lemma_2_1_fv_preserved", color="#38761d", fillcolor="#d9ead3", style="rounded,filled", fontcolor="#222222", tooltip="lemma_2_1_fv_preserved (section 2.1) theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=box];
lemma_2_3_beta_sim [label="lemma_2_3_beta_sim", color="#38761d", fillcolor="#d9ead3", style="rounded,filled", fontcolor="#222222", tooltip="lemma_2_3_beta_sim (section 2.3) theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=box];
Plus_trans [label="Plus_trans", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="Plus_trans theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
Plus_step_trans [label="Plus_step_trans", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="Plus_step_trans theory/Metatheory.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
par_red1_iff [label="par_red1_iff", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="par_red1_iff theory/Parallel.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
red1_in_par [label="red1_in_par", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="red1_in_par theory/Parallel.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
par_context [label="par_context", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="par_context theory/Parallel.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
par_to_red1_or_eq [label="par_to_red1_or_eq", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="par_to_red1_or_eq theory/Parallel.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
red1_or_eq_to_par [label="red1_or_eq_to_par", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="red1_or_eq_to_par theory/Parallel.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
par_reflexive [label="par_reflexive", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="par_reflexive theory/Parallel.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
gen_list_length [label="gen_list_length", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="gen_list_length theory/Random.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
check_term_true [label="check_term_true", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="check_term_true theory/Random.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
check_all_true [label="check_all_true", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="check_all_true theory/Random.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
gen_sound [label="gen_sound", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="gen_sound theory/Random.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
gen_complete [label="gen_complete", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="gen_complete theory/Random.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
gen_fv_preserved [label="gen_fv_preserved", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="gen_fv_preserved theory/Random.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
zdecs_sound [label="zdecs_sound", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="zdecs_sound theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
zdecs_complete [label="zdecs_complete", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="zdecs_complete theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
positions_at [label="positions_at", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="positions_at theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
root_steps_sound [label="root_steps_sound", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="root_steps_sound theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
root_steps_complete [label="root_steps_complete", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="root_steps_complete theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
steps_sound [label="steps_sound", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="steps_sound theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
steps_sound_red1 [label="steps_sound_red1", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="steps_sound_red1 theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
positions_hole [label="positions_hole", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="positions_hole theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
root_steps_in_steps [label="root_steps_in_steps", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="root_steps_in_steps theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
plug_comp [label="plug_comp", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="plug_comp theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
positions_comp [label="positions_comp", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="positions_comp theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
at_ctx_comp [label="at_ctx_comp", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="at_ctx_comp theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
steps_complete [label="steps_complete", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="steps_complete theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
has_red_f [label="has_red_f", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="has_red_f theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
has_red_spec [label="has_red_spec", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="has_red_spec theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
red1_dec [label="red1_dec", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="red1_dec theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
nf_iff_steps_nil [label="nf_iff_steps_nil", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="nf_iff_steps_nil theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
normal_form_iff_nf [label="normal_form_iff_nf", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="normal_form_iff_nf theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
nf_dec [label="nf_dec", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="nf_dec theory/Reduction.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
open_rec_app [label="open_rec_app", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="open_rec_app theory/Substitution.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
open_rec_lam [label="open_rec_lam", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="open_rec_lam theory/Substitution.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
open_rec_esub [label="open_rec_esub", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="open_rec_esub theory/Substitution.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
close_rec_app [label="close_rec_app", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="close_rec_app theory/Substitution.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
close_rec_lam [label="close_rec_lam", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="close_rec_lam theory/Substitution.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
close_rec_esub [label="close_rec_esub", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="close_rec_esub theory/Substitution.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
subst_app [label="subst_app", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="subst_app theory/Substitution.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
subst_lam [label="subst_lam", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="subst_lam theory/Substitution.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
subst_esub [label="subst_esub", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="subst_esub theory/Substitution.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
subst_notin [label="subst_notin", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="subst_notin theory/Substitution.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
subst_lc_self [label="subst_lc_self", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="subst_lc_self theory/Substitution.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
subst_other [label="subst_other", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="subst_other theory/Substitution.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
open_rec_lc_atom [label="open_rec_lc_atom", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="open_rec_lc_atom theory/Substitution.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
open_rec_lc [label="open_rec_lc", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="open_rec_lc theory/Substitution.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
red_sub_root_to_red1 [label="red_sub_root_to_red1", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="red_sub_root_to_red1 theory/Subsystem.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
red_sub_to_red1 [label="red_sub_to_red1", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="red_sub_to_red1 theory/Subsystem.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
red_sub_context [label="red_sub_context", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="red_sub_context theory/Subsystem.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
red_sub_gc [label="red_sub_gc", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="red_sub_gc theory/Subsystem.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
red_sub_r [label="red_sub_r", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="red_sub_r theory/Subsystem.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
occurs_zfill [label="occurs_zfill", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="occurs_zfill theory/Subsystem.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
zfill_occurs0 [label="zfill_occurs0", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="zfill_occurs0 theory/Subsystem.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
R_Gc_disjoint [label="R_Gc_disjoint", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="R_Gc_disjoint theory/Subsystem.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
Star_red_sub_context [label="Star_red_sub_context", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="Star_red_sub_context theory/Subsystem.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
full_comp_aux_sub [label="full_comp_aux_sub", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="full_comp_aux_sub theory/Subsystem.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
plus_red_sub_full_comp [label="plus_red_sub_full_comp", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="plus_red_sub_full_comp theory/Subsystem.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
star_red_sub_full_comp [label="star_red_sub_full_comp", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="star_red_sub_full_comp theory/Subsystem.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
es_count_plug_mono [label="es_count_plug_mono", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="es_count_plug_mono theory/Subsystem.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
red_gc_measure [label="red_gc_measure", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="red_gc_measure theory/Subsystem.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
red_gc_terminates [label="red_gc_terminates", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="red_gc_terminates theory/Subsystem.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
red_gc_to_red_sub [label="red_gc_to_red_sub", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="red_gc_to_red_sub theory/Subsystem.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
corpus_sound [label="corpus_sound", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="corpus_sound theory/Tests.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
corpus_complete [label="corpus_complete", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="corpus_complete theory/Tests.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
corpus_decides [label="corpus_decides", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="corpus_decides theory/Tests.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
corpus_fv_preserved [label="corpus_fv_preserved", color="#38761d", fillcolor="#d9ead3", style="filled", fontcolor="#222222", tooltip="corpus_fv_preserved theory/Tests.v https://arxiv.org/html/2312.13270v1", shape=ellipse];
lift_lc -> lift_0_lc;
fvs_lift -> open_rec_fvs;
open_rec_bvar -> open_rec_fvs;
open_rec_bvar_neq -> open_rec_fvs;
open_rec_bvar -> open_close;
lift_0_lc -> subst_fvar_self;
close_rec_fvs -> subst_fvs;
open_rec_fvs -> subst_fvs;
in_comb -> size_all_terms;
pow2_pos -> size_all_terms;
check_all_true -> enumerate_check;
steps_sound -> enumerate_sound;
steps_complete -> enumerate_complete;
occurs_count_zero -> occurs_count_pos;
occurs_count_false -> occurs_count_zfill_plug;
occurs_lift_self -> occurs_count_zfill_plug;
occurs_lift_self -> open_rec_zplug_lift;
open_rec_occurs_false -> open_rec_zplug_lift;
occurs_count_zero -> full_comp_aux;
occurs_count_zfill_plug -> full_comp_aux;
open_rec_occurs_false -> full_comp_aux;
open_rec_zplug_lift -> full_comp_aux;
zdecs_nonempty -> full_comp_aux;
zdecs_sound -> full_comp_aux;
full_comp_aux -> lemma_2_2_full_comp;
fvs_lift -> fvs_zplug_lift;
fvs_zplug_lift -> red1_root_fv;
plug_fv_mono -> red1r_fv;
red1_root_fv -> red1r_fv;
red1r_fv -> lemma_2_1_fv_preserved;
Plus_red1_context -> lemma_2_3_beta_sim;
lemma_2_2_full_comp -> lemma_2_3_beta_sim;
par_red1_iff -> par_to_red1_or_eq;
par_red1_iff -> red1_or_eq_to_par;
has_red_spec -> check_term_true;
steps_sound_red1 -> check_term_true;
check_term_true -> check_all_true;
steps_sound -> gen_sound;
steps_complete -> gen_complete;
lemma_2_1_fv_preserved -> gen_fv_preserved;
steps_sound_red1 -> gen_fv_preserved;
zdecs_sound -> root_steps_sound;
zdecs_complete -> root_steps_complete;
positions_at -> steps_sound;
root_steps_sound -> steps_sound;
steps_sound -> steps_sound_red1;
positions_hole -> root_steps_in_steps;
at_ctx_comp -> steps_complete;
plug_comp -> steps_complete;
positions_comp -> steps_complete;
root_steps_complete -> steps_complete;
root_steps_in_steps -> steps_complete;
has_red_f -> has_red_spec;
steps_complete -> has_red_spec;
steps_sound -> has_red_spec;
has_red_spec -> red1_dec;
steps_complete -> nf_iff_steps_nil;
steps_sound_red1 -> nf_iff_steps_nil;
nf_iff_steps_nil -> normal_form_iff_nf;
nf_iff_steps_nil -> nf_dec;
close_rec_notin -> subst_notin;
open_rec_occurs_false -> subst_notin;
subst_fvar_self -> subst_lc_self;
subst_fvar_other -> subst_other;
open_rec_lc_atom -> open_rec_lc;
red_sub_root_to_red1 -> red_sub_to_red1;
occurs_zfill -> zfill_occurs0;
zfill_occurs0 -> R_Gc_disjoint;
red_sub_context -> Star_red_sub_context;
occurs_count_zero -> full_comp_aux_sub;
occurs_count_zfill_plug -> full_comp_aux_sub;
open_rec_occurs_false -> full_comp_aux_sub;
open_rec_zplug_lift -> full_comp_aux_sub;
red_sub_gc -> full_comp_aux_sub;
red_sub_r -> full_comp_aux_sub;
zdecs_nonempty -> full_comp_aux_sub;
zdecs_sound -> full_comp_aux_sub;
full_comp_aux_sub -> plus_red_sub_full_comp;
Plus_to_Star -> star_red_sub_full_comp;
plus_red_sub_full_comp -> star_red_sub_full_comp;
es_count_plug_mono -> red_gc_measure;
red_gc_measure -> red_gc_terminates;
red_sub_gc -> red_gc_to_red_sub;
steps_sound -> corpus_sound;
steps_complete -> corpus_complete;
has_red_spec -> corpus_decides;
lemma_2_1_fv_preserved -> corpus_fv_preserved;
steps_sound_red1 -> corpus_fv_preserved;
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 563 KiB

File diff suppressed because it is too large. Load diff

Before

Width:  |  Height:  |  Size: 80 KiB

+18 -3
View File
@@ -6,9 +6,24 @@
(source_tree ../theory)) (source_tree ../theory))
(targets (targets
theorems.json theorems.json
dependency.dot dependency-overview.dot
dependency.svg dependency-overview.svg
dependency.png dependency-overview.png
dependency-M1.dot
dependency-M1.svg
dependency-M1.png
dependency-M2.dot
dependency-M2.svg
dependency-M2.png
dependency-M3.dot
dependency-M3.svg
dependency-M3.png
dependency-M4.dot
dependency-M4.svg
dependency-M4.png
dependency-M5.dot
dependency-M5.svg
dependency-M5.png
rules.dot rules.dot
rules.svg rules.svg
rules.png rules.png
+69
View File
@@ -107,3 +107,72 @@ proved M4 infra par_reflexive theory/Parallel.v
proved M4 infra par_to_red1_or_eq theory/Parallel.v proved M4 infra par_to_red1_or_eq theory/Parallel.v
proved M4 infra red1_in_par theory/Parallel.v proved M4 infra red1_in_par theory/Parallel.v
proved M4 infra red1_or_eq_to_par theory/Parallel.v proved M4 infra red1_or_eq_to_par theory/Parallel.v
proved M5 infra A1_C_related theory/NamedMeasure.v
proved M5 infra A1_Mx_differ theory/NamedMeasure.v
proved M5 infra A1_not_invariant theory/NamedMeasure.v
proved M5 infra A1_s_differ theory/NamedMeasure.v
proved M5 infra Es_ctx_any theory/NamedMeta.v
proved M5 infra Es_fv theory/NamedMeta.v
proved M5 infra Es_fv_both theory/NamedMeta.v
proved M5 infra Es_refl_any theory/NamedMeta.v
proved M5 infra Es_sym_any theory/NamedMeta.v
proved M5 infra Es_trans_any theory/NamedMeta.v
proved M5 infra Gc_special_nondecrease theory/NamedMeasure.v
proved M5 infra Mx_fresh_fails theory/NamedMeasure.v
proved M5 infra Mx_ge_0 theory/NamedMeasure.v
proved M5 infra PlusN_to_StarN theory/NamedEs.v
proved M5 infra Plus_mred_of_Plus_red1 theory/Metaterm.v
proved M5 infra StarN_one_trans theory/NamedEs.v
proved M5 infra StarN_subred_context theory/NamedEs.v
proved M5 infra StarN_trans theory/NamedEs.v
proved M5 infra current_sm_not_terminating theory/NamedMeasure.v
proved M5 infra current_subred_not_terminating theory/NamedMeasure.v
proved M5 infra eqC_in_Es theory/NamedMeta.v
proved M5 infra filter_neq_in theory/NamedMeta.v
proved M5 infra head_has_pos theory/NamedMeasure.v
proved M5 infra in_filter_neq theory/NamedMeta.v
proved M5 infra in_filter_neq_iff theory/NamedMeta.v
proved M5 infra isubst_meta_in theory/NamedMeta.v
proved M5 infra isubst_meta_notin theory/NamedMeta.v
proved M5 infra le_mul_of_one_le theory/NamedMeasure.v
proved M5 infra mfvs_close_m theory/Metaterm.v
proved M5 infra mfvs_lift_m theory/Metaterm.v
proved M5 infra mfvs_open_m theory/Metaterm.v
proved M5 infra mred_B_intro theory/Metaterm.v
proved M5 infra mred_context theory/Metaterm.v
proved M5 infra mred_full_comp_pure theory/Metaterm.v
proved M5 infra mred_gc_intro theory/Metaterm.v
proved M5 infra mred_of_red1 theory/Metaterm.v
proved M5 infra mred_plus_one theory/Metaterm.v
proved M5 infra mred_r_intro theory/Metaterm.v
proved M5 infra mred_term_context theory/Metaterm.v
proved M5 infra nfv_annot_bound_example theory/NamedMeasure.v
proved M5 infra nocc_le_Mx theory/NamedMeasure.v
proved M5 infra nplug_esub_fv theory/NamedMeta.v
proved M5 infra nplug_fv_mono theory/NamedMeta.v
proved M5 infra nplug_fv_upper theory/NamedMeta.v
proved M5 infra nred_Gc_special theory/NamedMeasure.v
proved M5 infra nred_R_intro theory/NamedMeta.v
proved M5 infra nred_R_selfloop theory/NamedMeasure.v
proved M5 infra nred_core_fv theory/NamedMeta.v
proved M5 infra nred_fv theory/NamedMeta.v
proved M5 infra nred_stable_source theory/NamedEs.v
proved M5 infra nred_stable_target theory/NamedEs.v
proved M5 infra of_trm_close theory/Metaterm.v
proved M5 infra of_trm_fvs theory/Metaterm.v
proved M5 infra of_trm_injective theory/Metaterm.v
proved M5 infra of_trm_lift theory/Metaterm.v
proved M5 infra of_trm_moccurs theory/Metaterm.v
proved M5 infra of_trm_moccurs0 theory/Metaterm.v
proved M5 infra of_trm_open theory/Metaterm.v
proved M5 infra of_trm_plug theory/Metaterm.v
proved M5 infra s_metavar_empty theory/NamedMeasure.v
proved M5 infra subred_Es_l theory/NamedEs.v
proved M5 infra subred_Es_lr theory/NamedEs.v
proved M5 infra subred_Es_r theory/NamedEs.v
proved M5 infra subred_context theory/NamedEs.v
proved M5 infra subred_context_rule theory/NamedEs.v
proved M5 infra subred_intro theory/NamedEs.v
proved M5 infra subred_nred theory/NamedEs.v
proved M5 infra subred_of_Es_nred_Es theory/NamedEs.v
proved M5 infra subred_selfloop theory/NamedMeasure.v
+16 -16
View File
@@ -1,20 +1,20 @@
digraph reduction_dup { digraph reduction_dup {
rankdir=LR; rankdir=LR;
bgcolor="white"; bgcolor="transparent";
node [fontname=Inter, fontsize=10]; node [fontname=Inter, fontsize=10, fontcolor="#c9d1bb"];
edge [fontname=Inter, fontsize=9, color="#333333"]; edge [fontname=Inter, fontsize=9, color="#8f9780", fontcolor="#c9d1bb"];
graph [labelloc=t, fontcolor="#333333", label="(lambda x. x x) y reduction graph"]; graph [labelloc=t, fontcolor="#c9d1bb", label="(lambda x. x x) y reduction graph"];
n0 [label="(lambda x. x x) y", shape=box, style="filled", fillcolor="#f5f5f5", color="#333333", fontcolor="#333333"]; n0 [label="(lambda x. x x) y", shape=box, style="filled", fillcolor="transparent", color="#a9b492", fontcolor="#c9d1bb"];
n1 [label="(x x)[x/y]", shape=box, style="filled", fillcolor="#f5f5f5", color="#333333", fontcolor="#333333"]; n1 [label="(x x)[x/y]", shape=box, style="filled", fillcolor="transparent", color="#a9b492", fontcolor="#c9d1bb"];
n2 [label="(y x)[x/y]", shape=box, style="filled", fillcolor="#f5f5f5", color="#333333", fontcolor="#333333"]; n2 [label="(y x)[x/y]", shape=box, style="filled", fillcolor="transparent", color="#a9b492", fontcolor="#c9d1bb"];
n2b [label="(x y)[x/y]", shape=box, style="filled", fillcolor="#f5f5f5", color="#333333", fontcolor="#333333"]; n2b [label="(x y)[x/y]", shape=box, style="filled", fillcolor="transparent", color="#a9b492", fontcolor="#c9d1bb"];
n3 [label="(y y)[x/y]", shape=box, style="filled", fillcolor="#f5f5f5", color="#333333", fontcolor="#333333"]; n3 [label="(y y)[x/y]", shape=box, style="filled", fillcolor="transparent", color="#a9b492", fontcolor="#c9d1bb"];
nf [label="y y (normal form)", shape=doublecircle, style=filled, fillcolor="#d9ead3", color="#38761d", fontcolor="#333333"]; nf [label="y y (normal form)", shape=doublecircle, style=filled, fillcolor="#2a3a22", color="#8fb071", fontcolor="#c9d1bb"];
n0 -> n1 [label="B", color="#990000"]; n0 -> n1 [label="B", color="#dfe7cc"];
n1 -> n2 [label="R", color="#674ea7"]; n1 -> n2 [label="R", color="#a9b492"];
n1 -> n2b [label="R", color="#674ea7"]; n1 -> n2b [label="R", color="#a9b492"];
n2 -> n3 [label="R", color="#674ea7"]; n2 -> n3 [label="R", color="#a9b492"];
n2b -> n3 [label="R", color="#674ea7"]; n2b -> n3 [label="R", color="#a9b492"];
n3 -> nf [label="Gc", color="#38761d"]; n3 -> nf [label="Gc", color="#8fb071"];
{rank=same; n2; n2b;} {rank=same; n2; n2b;}
} }
Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 28 KiB

+35 -36
View File
@@ -4,90 +4,89 @@
<!-- Generated by graphviz version 2.42.4 (0) <!-- Generated by graphviz version 2.42.4 (0)
--> -->
<!-- Title: reduction_dup Pages: 1 --> <!-- Title: reduction_dup Pages: 1 -->
<svg width="580pt" height="154pt" <svg width="601pt" height="160pt"
viewBox="0.00 0.00 580.38 154.38" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> viewBox="0.00 0.00 601.26 160.26" 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 150.38)"> <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 156.26)">
<title>reduction_dup</title> <title>reduction_dup</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-150.38 576.38,-150.38 576.38,4 -4,4"/> <text text-anchor="middle" x="296.63" y="-137.06" font-family="Times,serif" font-size="14.00" fill="#c9d1bb">(lambda x. x x) y reduction graph</text>
<text text-anchor="middle" x="286.19" y="-131.18" font-family="Times,serif" font-size="14.00" fill="#333333">(lambda x. x x) y reduction graph</text>
<!-- n0 --> <!-- n0 -->
<g id="node1" class="node"> <g id="node1" class="node">
<title>n0</title> <title>n0</title>
<polygon fill="#f5f5f5" stroke="#333333" points="94,-79.69 0,-79.69 0,-43.69 94,-43.69 94,-79.69"/> <polygon fill="transparent" stroke="#a9b492" points="100,-82.63 0,-82.63 0,-46.63 100,-46.63 100,-82.63"/>
<text text-anchor="middle" x="47" y="-59.19" font-family="Inter" font-size="10.00" fill="#333333">(lambda x. x x) y</text> <text text-anchor="middle" x="50" y="-62.13" font-family="Inter" font-size="10.00" fill="#c9d1bb">(lambda x. x x) y</text>
</g> </g>
<!-- n1 --> <!-- n1 -->
<g id="node2" class="node"> <g id="node2" class="node">
<title>n1</title> <title>n1</title>
<polygon fill="#f5f5f5" stroke="#333333" points="196,-79.69 137,-79.69 137,-43.69 196,-43.69 196,-79.69"/> <polygon fill="transparent" stroke="#a9b492" points="205,-82.63 143,-82.63 143,-46.63 205,-46.63 205,-82.63"/>
<text text-anchor="middle" x="166.5" y="-59.19" font-family="Inter" font-size="10.00" fill="#333333">(x x)[x/y]</text> <text text-anchor="middle" x="174" y="-62.13" font-family="Inter" font-size="10.00" fill="#c9d1bb">(x x)[x/y]</text>
</g> </g>
<!-- n0&#45;&gt;n1 --> <!-- n0&#45;&gt;n1 -->
<g id="edge1" class="edge"> <g id="edge1" class="edge">
<title>n0&#45;&gt;n1</title> <title>n0&#45;&gt;n1</title>
<path fill="none" stroke="#990000" d="M94.1,-61.69C104.9,-61.69 116.3,-61.69 126.75,-61.69"/> <path fill="none" stroke="#dfe7cc" d="M100.27,-64.63C111.08,-64.63 122.41,-64.63 132.81,-64.63"/>
<polygon fill="#990000" stroke="#990000" points="126.81,-65.19 136.81,-61.69 126.81,-58.19 126.81,-65.19"/> <polygon fill="#dfe7cc" stroke="#dfe7cc" points="132.86,-68.13 142.86,-64.63 132.86,-61.13 132.86,-68.13"/>
<text text-anchor="middle" x="115.5" y="-64.49" font-family="Inter" font-size="9.00">B</text> <text text-anchor="middle" x="121.5" y="-67.43" font-family="Inter" font-size="9.00" fill="#c9d1bb">B</text>
</g> </g>
<!-- n2 --> <!-- n2 -->
<g id="node3" class="node"> <g id="node3" class="node">
<title>n2</title> <title>n2</title>
<polygon fill="#f5f5f5" stroke="#333333" points="298,-107.69 239,-107.69 239,-71.69 298,-71.69 298,-107.69"/> <polygon fill="transparent" stroke="#a9b492" points="310,-110.63 248,-110.63 248,-74.63 310,-74.63 310,-110.63"/>
<text text-anchor="middle" x="268.5" y="-87.19" font-family="Inter" font-size="10.00" fill="#333333">(y x)[x/y]</text> <text text-anchor="middle" x="279" y="-90.13" font-family="Inter" font-size="10.00" fill="#c9d1bb">(y x)[x/y]</text>
</g> </g>
<!-- n1&#45;&gt;n2 --> <!-- n1&#45;&gt;n2 -->
<g id="edge2" class="edge"> <g id="edge2" class="edge">
<title>n1&#45;&gt;n2</title> <title>n1&#45;&gt;n2</title>
<path fill="none" stroke="#674ea7" d="M196.16,-69.71C206.41,-72.58 218.13,-75.87 229.08,-78.93"/> <path fill="none" stroke="#a9b492" d="M205.07,-72.81C215.34,-75.6 227,-78.77 237.94,-81.74"/>
<polygon fill="#674ea7" stroke="#674ea7" points="228.27,-82.34 238.84,-81.66 230.15,-75.6 228.27,-82.34"/> <polygon fill="#a9b492" stroke="#a9b492" points="237.15,-85.15 247.72,-84.4 238.98,-78.4 237.15,-85.15"/>
<text text-anchor="middle" x="217.5" y="-78.49" font-family="Inter" font-size="9.00">R</text> <text text-anchor="middle" x="226.5" y="-81.43" font-family="Inter" font-size="9.00" fill="#c9d1bb">R</text>
</g> </g>
<!-- n2b --> <!-- n2b -->
<g id="node4" class="node"> <g id="node4" class="node">
<title>n2b</title> <title>n2b</title>
<polygon fill="#f5f5f5" stroke="#333333" points="298,-53.69 239,-53.69 239,-17.69 298,-17.69 298,-53.69"/> <polygon fill="transparent" stroke="#a9b492" points="310,-56.63 248,-56.63 248,-20.63 310,-20.63 310,-56.63"/>
<text text-anchor="middle" x="268.5" y="-33.19" font-family="Inter" font-size="10.00" fill="#333333">(x y)[x/y]</text> <text text-anchor="middle" x="279" y="-36.13" font-family="Inter" font-size="10.00" fill="#c9d1bb">(x y)[x/y]</text>
</g> </g>
<!-- n1&#45;&gt;n2b --> <!-- n1&#45;&gt;n2b -->
<g id="edge3" class="edge"> <g id="edge3" class="edge">
<title>n1&#45;&gt;n2b</title> <title>n1&#45;&gt;n2b</title>
<path fill="none" stroke="#674ea7" d="M196.16,-54.24C206.41,-51.57 218.13,-48.52 229.08,-45.68"/> <path fill="none" stroke="#a9b492" d="M205.07,-57.04C215.34,-54.45 227,-51.51 237.94,-48.75"/>
<polygon fill="#674ea7" stroke="#674ea7" points="230.04,-49.04 238.84,-43.14 228.28,-42.27 230.04,-49.04"/> <polygon fill="#a9b492" stroke="#a9b492" points="238.88,-52.12 247.72,-46.28 237.16,-45.33 238.88,-52.12"/>
<text text-anchor="middle" x="217.5" y="-51.49" font-family="Inter" font-size="9.00">R</text> <text text-anchor="middle" x="226.5" y="-54.43" font-family="Inter" font-size="9.00" fill="#c9d1bb">R</text>
</g> </g>
<!-- n3 --> <!-- n3 -->
<g id="node5" class="node"> <g id="node5" class="node">
<title>n3</title> <title>n3</title>
<polygon fill="#f5f5f5" stroke="#333333" points="400,-79.69 341,-79.69 341,-43.69 400,-43.69 400,-79.69"/> <polygon fill="transparent" stroke="#a9b492" points="415,-82.63 353,-82.63 353,-46.63 415,-46.63 415,-82.63"/>
<text text-anchor="middle" x="370.5" y="-59.19" font-family="Inter" font-size="10.00" fill="#333333">(y y)[x/y]</text> <text text-anchor="middle" x="384" y="-62.13" font-family="Inter" font-size="10.00" fill="#c9d1bb">(y y)[x/y]</text>
</g> </g>
<!-- n2&#45;&gt;n3 --> <!-- n2&#45;&gt;n3 -->
<g id="edge4" class="edge"> <g id="edge4" class="edge">
<title>n2&#45;&gt;n3</title> <title>n2&#45;&gt;n3</title>
<path fill="none" stroke="#674ea7" d="M298.16,-81.67C308.41,-78.79 320.13,-75.51 331.08,-72.45"/> <path fill="none" stroke="#a9b492" d="M310.07,-84.46C320.34,-81.67 332,-78.5 342.94,-75.52"/>
<polygon fill="#674ea7" stroke="#674ea7" points="332.15,-75.78 340.84,-69.71 330.27,-69.04 332.15,-75.78"/> <polygon fill="#a9b492" stroke="#a9b492" points="343.98,-78.87 352.72,-72.86 342.15,-72.11 343.98,-78.87"/>
<text text-anchor="middle" x="319.5" y="-78.49" font-family="Inter" font-size="9.00">R</text> <text text-anchor="middle" x="331.5" y="-81.43" font-family="Inter" font-size="9.00" fill="#c9d1bb">R</text>
</g> </g>
<!-- n2b&#45;&gt;n3 --> <!-- n2b&#45;&gt;n3 -->
<g id="edge5" class="edge"> <g id="edge5" class="edge">
<title>n2b&#45;&gt;n3</title> <title>n2b&#45;&gt;n3</title>
<path fill="none" stroke="#674ea7" d="M298.16,-43.14C308.41,-45.8 320.13,-48.85 331.08,-51.7"/> <path fill="none" stroke="#a9b492" d="M310.07,-46.22C320.34,-48.82 332,-51.76 342.94,-54.52"/>
<polygon fill="#674ea7" stroke="#674ea7" points="330.28,-55.11 340.84,-54.24 332.04,-48.33 330.28,-55.11"/> <polygon fill="#a9b492" stroke="#a9b492" points="342.16,-57.93 352.72,-56.99 343.88,-51.15 342.16,-57.93"/>
<text text-anchor="middle" x="319.5" y="-51.49" font-family="Inter" font-size="9.00">R</text> <text text-anchor="middle" x="331.5" y="-54.43" font-family="Inter" font-size="9.00" fill="#c9d1bb">R</text>
</g> </g>
<!-- nf --> <!-- nf -->
<g id="node6" class="node"> <g id="node6" class="node">
<title>nf</title> <title>nf</title>
<ellipse fill="#d9ead3" stroke="#38761d" cx="510.69" cy="-61.69" rx="57.87" ry="57.87"/> <ellipse fill="#2a3a22" stroke="#8fb071" cx="528.63" cy="-64.63" rx="60.76" ry="60.76"/>
<ellipse fill="none" stroke="#38761d" cx="510.69" cy="-61.69" rx="61.88" ry="61.88"/> <ellipse fill="none" stroke="#8fb071" cx="528.63" cy="-64.63" rx="64.76" ry="64.76"/>
<text text-anchor="middle" x="510.69" y="-59.19" font-family="Inter" font-size="10.00" fill="#333333">y y (normal form)</text> <text text-anchor="middle" x="528.63" y="-62.13" font-family="Inter" font-size="10.00" fill="#c9d1bb">y y (normal form)</text>
</g> </g>
<!-- n3&#45;&gt;nf --> <!-- n3&#45;&gt;nf -->
<g id="edge6" class="edge"> <g id="edge6" class="edge">
<title>n3&#45;&gt;nf</title> <title>n3&#45;&gt;nf</title>
<path fill="none" stroke="#38761d" d="M400.13,-61.69C411.41,-61.69 424.91,-61.69 438.51,-61.69"/> <path fill="none" stroke="#8fb071" d="M415.25,-64.63C426.59,-64.63 440.03,-64.63 453.6,-64.63"/>
<polygon fill="#38761d" stroke="#38761d" points="438.9,-65.19 448.9,-61.69 438.9,-58.19 438.9,-65.19"/> <polygon fill="#8fb071" stroke="#8fb071" points="453.97,-68.13 463.97,-64.63 453.97,-61.13 453.97,-68.13"/>
<text text-anchor="middle" x="424.5" y="-64.49" font-family="Inter" font-size="9.00">Gc</text> <text text-anchor="middle" x="439.5" y="-67.43" font-family="Inter" font-size="9.00" fill="#c9d1bb">Gc</text>
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

+13 -13
View File
@@ -1,19 +1,19 @@
digraph lambda_sub_cfg { digraph lambda_sub_cfg {
rankdir=TB; rankdir=TB;
bgcolor="white"; bgcolor="transparent";
node [fontname=Inter, fontsize=10]; node [fontname=Inter, fontsize=10, fontcolor="#c9d1bb"];
edge [fontname=Inter, fontsize=9, color="#333333"]; edge [fontname=Inter, fontsize=9, color="#8f9780", fontcolor="#c9d1bb"];
start [label="term", shape=oval, style=filled, fillcolor="#f3f3f3", color="#333333"]; start [label="term", shape=oval, style=filled, fillcolor="transparent", color="#a9b492"];
beta [label="(lambda x. t) u", shape=box, style="rounded,filled", fillcolor="#f5f5f5", color="#333333", fontcolor="#333333"]; beta [label="(lambda x. t) u", shape=box, style="rounded,filled", fillcolor="transparent", color="#a9b492", fontcolor="#c9d1bb"];
es [label="t[x/u]", shape=box, style="rounded,filled", fillcolor="#f5f5f5", color="#333333", fontcolor="#333333"]; es [label="t[x/u]", shape=box, style="rounded,filled", fillcolor="transparent", color="#a9b492", fontcolor="#c9d1bb"];
pure [label="pure term", shape=oval, style=filled, fillcolor="#f3f3f3", color="#333333"]; pure [label="pure term", shape=oval, style=filled, fillcolor="transparent", color="#a9b492"];
nf [label="normal form", shape=doublecircle, style=filled, fillcolor="#d9ead3", color="#38761d"]; nf [label="normal form", shape=doublecircle, style=filled, fillcolor="#2a3a22", color="#8fb071"];
start -> beta [label="App(Lam,_)"]; start -> beta [label="App(Lam,_)"];
start -> es [label="ESub"]; start -> es [label="ESub"];
start -> pure [label="BVar/FVar/Lam"]; start -> pure [label="BVar/FVar/Lam"];
beta -> es [label="B", color="#990000"]; beta -> es [label="B", color="#dfe7cc"];
es -> es [label="R (one occurrence)", color="#674ea7"]; es -> es [label="R (one occurrence)", color="#a9b492"];
es -> pure [label="Gc (x not in fv)", color="#38761d"]; es -> pure [label="Gc (x not in fv)", color="#8fb071"];
pure -> pure [label="B under context", color="#990000"]; pure -> pure [label="B under context", color="#dfe7cc"];
es -> nf [label="R/Gc normalisation", color="#674ea7"]; es -> nf [label="R/Gc normalisation", color="#a9b492"];
} }
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 44 KiB

+38 -39
View File
@@ -4,97 +4,96 @@
<!-- Generated by graphviz version 2.42.4 (0) <!-- Generated by graphviz version 2.42.4 (0)
--> -->
<!-- Title: lambda_sub_cfg Pages: 1 --> <!-- Title: lambda_sub_cfg Pages: 1 -->
<svg width="322pt" height="349pt" <svg width="338pt" height="353pt"
viewBox="0.00 0.00 321.65 349.12" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> viewBox="0.00 0.00 337.59 352.65" 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 345.12)"> <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 348.65)">
<title>lambda_sub_cfg</title> <title>lambda_sub_cfg</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-345.12 317.65,-345.12 317.65,4 -4,4"/>
<!-- start --> <!-- start -->
<g id="node1" class="node"> <g id="node1" class="node">
<title>start</title> <title>start</title>
<ellipse fill="#f3f3f3" stroke="#333333" cx="152.56" cy="-323.12" rx="27" ry="18"/> <ellipse fill="transparent" stroke="#a9b492" cx="161.33" cy="-326.65" rx="27" ry="18"/>
<text text-anchor="middle" x="152.56" y="-320.62" font-family="Inter" font-size="10.00">term</text> <text text-anchor="middle" x="161.33" y="-324.15" font-family="Inter" font-size="10.00" fill="#c9d1bb">term</text>
</g> </g>
<!-- beta --> <!-- beta -->
<g id="node2" class="node"> <g id="node2" class="node">
<title>beta</title> <title>beta</title>
<path fill="#f5f5f5" stroke="#333333" d="M104.56,-259.12C104.56,-259.12 44.56,-259.12 44.56,-259.12 38.56,-259.12 32.56,-253.12 32.56,-247.12 32.56,-247.12 32.56,-235.12 32.56,-235.12 32.56,-229.12 38.56,-223.12 44.56,-223.12 44.56,-223.12 104.56,-223.12 104.56,-223.12 110.56,-223.12 116.56,-229.12 116.56,-235.12 116.56,-235.12 116.56,-247.12 116.56,-247.12 116.56,-253.12 110.56,-259.12 104.56,-259.12"/> <path fill="transparent" stroke="#a9b492" d="M112.83,-262.65C112.83,-262.65 47.83,-262.65 47.83,-262.65 41.83,-262.65 35.83,-256.65 35.83,-250.65 35.83,-250.65 35.83,-238.65 35.83,-238.65 35.83,-232.65 41.83,-226.65 47.83,-226.65 47.83,-226.65 112.83,-226.65 112.83,-226.65 118.83,-226.65 124.83,-232.65 124.83,-238.65 124.83,-238.65 124.83,-250.65 124.83,-250.65 124.83,-256.65 118.83,-262.65 112.83,-262.65"/>
<text text-anchor="middle" x="74.56" y="-238.62" font-family="Inter" font-size="10.00" fill="#333333">(lambda x. t) u</text> <text text-anchor="middle" x="80.33" y="-242.15" font-family="Inter" font-size="10.00" fill="#c9d1bb">(lambda x. t) u</text>
</g> </g>
<!-- start&#45;&gt;beta --> <!-- start&#45;&gt;beta -->
<g id="edge1" class="edge"> <g id="edge1" class="edge">
<title>start&#45;&gt;beta</title> <title>start&#45;&gt;beta</title>
<path fill="none" stroke="#333333" d="M129.2,-313.7C116.24,-307.98 100.74,-299.23 90.56,-287.12 86.22,-281.96 83.02,-275.53 80.68,-269.16"/> <path fill="none" stroke="#8f9780" d="M137.21,-318.33C122.89,-312.84 105.43,-303.95 94.33,-290.65 90.06,-285.54 87.09,-279.13 85.03,-272.77"/>
<polygon fill="#333333" stroke="#333333" points="83.96,-267.92 77.66,-259.4 77.27,-269.99 83.96,-267.92"/> <polygon fill="#8f9780" stroke="#8f9780" points="88.39,-271.78 82.47,-263 81.62,-273.56 88.39,-271.78"/>
<text text-anchor="middle" x="114.56" y="-279.92" font-family="Inter" font-size="9.00">App(Lam,_)</text> <text text-anchor="middle" x="120.83" y="-283.45" font-family="Inter" font-size="9.00" fill="#c9d1bb">App(Lam,_)</text>
</g> </g>
<!-- es --> <!-- es -->
<g id="node3" class="node"> <g id="node3" class="node">
<title>es</title> <title>es</title>
<path fill="#f5f5f5" stroke="#333333" d="M89.56,-177.12C89.56,-177.12 59.56,-177.12 59.56,-177.12 53.56,-177.12 47.56,-171.12 47.56,-165.12 47.56,-165.12 47.56,-153.12 47.56,-153.12 47.56,-147.12 53.56,-141.12 59.56,-141.12 59.56,-141.12 89.56,-141.12 89.56,-141.12 95.56,-141.12 101.56,-147.12 101.56,-153.12 101.56,-153.12 101.56,-165.12 101.56,-165.12 101.56,-171.12 95.56,-177.12 89.56,-177.12"/> <path fill="transparent" stroke="#a9b492" d="M95.33,-180.65C95.33,-180.65 65.33,-180.65 65.33,-180.65 59.33,-180.65 53.33,-174.65 53.33,-168.65 53.33,-168.65 53.33,-156.65 53.33,-156.65 53.33,-150.65 59.33,-144.65 65.33,-144.65 65.33,-144.65 95.33,-144.65 95.33,-144.65 101.33,-144.65 107.33,-150.65 107.33,-156.65 107.33,-156.65 107.33,-168.65 107.33,-168.65 107.33,-174.65 101.33,-180.65 95.33,-180.65"/>
<text text-anchor="middle" x="74.56" y="-156.62" font-family="Inter" font-size="10.00" fill="#333333">t[x/u]</text> <text text-anchor="middle" x="80.33" y="-160.15" font-family="Inter" font-size="10.00" fill="#c9d1bb">t[x/u]</text>
</g> </g>
<!-- start&#45;&gt;es --> <!-- start&#45;&gt;es -->
<g id="edge2" class="edge"> <g id="edge2" class="edge">
<title>start&#45;&gt;es</title> <title>start&#45;&gt;es</title>
<path fill="none" stroke="#333333" d="M150.08,-304.88C146.66,-284.48 139.29,-249.92 125.56,-223.12 118.49,-209.31 108.05,-195.72 98.46,-184.71"/> <path fill="none" stroke="#8f9780" d="M158.79,-308.73C155.23,-288.34 147.55,-253.48 133.33,-226.65 126,-212.83 115.25,-199.32 105.35,-188.37"/>
<polygon fill="#333333" stroke="#333333" points="100.97,-182.27 91.68,-177.18 95.77,-186.96 100.97,-182.27"/> <polygon fill="#8f9780" stroke="#8f9780" points="107.73,-185.8 98.34,-180.88 102.62,-190.58 107.73,-185.8"/>
<text text-anchor="middle" x="149.56" y="-238.92" font-family="Inter" font-size="9.00">ESub</text> <text text-anchor="middle" x="159.83" y="-242.45" font-family="Inter" font-size="9.00" fill="#c9d1bb">ESub</text>
</g> </g>
<!-- pure --> <!-- pure -->
<g id="node4" class="node"> <g id="node4" class="node">
<title>pure</title> <title>pure</title>
<ellipse fill="#f3f3f3" stroke="#333333" cx="190.56" cy="-47.56" rx="37.17" ry="18"/> <ellipse fill="transparent" stroke="#a9b492" cx="199.33" cy="-49.33" rx="38.03" ry="18"/>
<text text-anchor="middle" x="190.56" y="-45.06" font-family="Inter" font-size="10.00">pure term</text> <text text-anchor="middle" x="199.33" y="-46.83" font-family="Inter" font-size="10.00" fill="#c9d1bb">pure term</text>
</g> </g>
<!-- start&#45;&gt;pure --> <!-- start&#45;&gt;pure -->
<g id="edge3" class="edge"> <g id="edge3" class="edge">
<title>start&#45;&gt;pure</title> <title>start&#45;&gt;pure</title>
<path fill="none" stroke="#333333" d="M161.51,-305.79C175.29,-279.58 201.13,-226.11 210.56,-177.12 217.31,-142.07 208.11,-101.31 200.07,-75.24"/> <path fill="none" stroke="#8f9780" d="M170.73,-309.39C185.22,-283.27 212.39,-229.91 222.33,-180.65 229.55,-144.87 218.94,-103.29 209.86,-76.9"/>
<polygon fill="#333333" stroke="#333333" points="203.39,-74.11 196.98,-65.68 196.73,-76.27 203.39,-74.11"/> <polygon fill="#8f9780" stroke="#8f9780" points="213.06,-75.46 206.37,-67.25 206.48,-77.84 213.06,-75.46"/>
<text text-anchor="middle" x="238.06" y="-197.92" font-family="Inter" font-size="9.00">BVar/FVar/Lam</text> <text text-anchor="middle" x="250.33" y="-201.45" font-family="Inter" font-size="9.00" fill="#c9d1bb">BVar/FVar/Lam</text>
</g> </g>
<!-- beta&#45;&gt;es --> <!-- beta&#45;&gt;es -->
<g id="edge4" class="edge"> <g id="edge4" class="edge">
<title>beta&#45;&gt;es</title> <title>beta&#45;&gt;es</title>
<path fill="none" stroke="#990000" d="M74.56,-222.76C74.56,-212.42 74.56,-199.06 74.56,-187.34"/> <path fill="none" stroke="#dfe7cc" d="M80.33,-226.3C80.33,-215.95 80.33,-202.6 80.33,-190.87"/>
<polygon fill="#990000" stroke="#990000" points="78.06,-187.17 74.56,-177.17 71.06,-187.17 78.06,-187.17"/> <polygon fill="#dfe7cc" stroke="#dfe7cc" points="83.83,-190.7 80.33,-180.7 76.83,-190.7 83.83,-190.7"/>
<text text-anchor="middle" x="78.06" y="-197.92" font-family="Inter" font-size="9.00">B</text> <text text-anchor="middle" x="83.83" y="-201.45" font-family="Inter" font-size="9.00" fill="#c9d1bb">B</text>
</g> </g>
<!-- es&#45;&gt;es --> <!-- es&#45;&gt;es -->
<g id="edge5" class="edge"> <g id="edge5" class="edge">
<title>es&#45;&gt;es</title> <title>es&#45;&gt;es</title>
<path fill="none" stroke="#674ea7" d="M101.8,-166.61C111.58,-166.78 119.56,-164.28 119.56,-159.12 119.56,-155.98 116.6,-153.83 112.07,-152.66"/> <path fill="none" stroke="#a9b492" d="M107.57,-170.15C117.35,-170.31 125.33,-167.81 125.33,-162.65 125.33,-159.51 122.37,-157.36 117.84,-156.19"/>
<polygon fill="#674ea7" stroke="#674ea7" points="112.1,-149.14 101.8,-151.63 111.4,-156.11 112.1,-149.14"/> <polygon fill="#a9b492" stroke="#a9b492" points="117.87,-152.68 107.57,-155.16 117.17,-159.64 117.87,-152.68"/>
<text text-anchor="middle" x="160.56" y="-156.92" font-family="Inter" font-size="9.00">R (one occurrence)</text> <text text-anchor="middle" x="169.33" y="-160.45" font-family="Inter" font-size="9.00" fill="#c9d1bb">R (one occurrence)</text>
</g> </g>
<!-- es&#45;&gt;pure --> <!-- es&#45;&gt;pure -->
<g id="edge6" class="edge"> <g id="edge6" class="edge">
<title>es&#45;&gt;pure</title> <title>es&#45;&gt;pure</title>
<path fill="none" stroke="#38761d" d="M101.76,-143.62C111.36,-137.88 121.9,-130.81 130.56,-123.12 147.08,-108.46 162.62,-88.93 173.74,-73.53"/> <path fill="none" stroke="#8fb071" d="M107.51,-146.64C116.77,-140.95 126.9,-134.04 135.33,-126.65 152.88,-111.26 169.72,-90.88 181.71,-75.05"/>
<polygon fill="#38761d" stroke="#38761d" points="176.85,-75.2 179.76,-65.01 171.13,-71.16 176.85,-75.2"/> <polygon fill="#8fb071" stroke="#8fb071" points="184.7,-76.9 187.85,-66.78 179.08,-72.72 184.7,-76.9"/>
<text text-anchor="middle" x="170.56" y="-115.92" font-family="Inter" font-size="9.00">Gc (x not in fv)</text> <text text-anchor="middle" x="178.83" y="-119.45" font-family="Inter" font-size="9.00" fill="#c9d1bb">Gc (x not in fv)</text>
</g> </g>
<!-- nf --> <!-- nf -->
<g id="node5" class="node"> <g id="node5" class="node">
<title>nf</title> <title>nf</title>
<ellipse fill="#d9ead3" stroke="#38761d" cx="47.56" cy="-47.56" rx="43.62" ry="43.62"/> <ellipse fill="#2a3a22" stroke="#8fb071" cx="49.33" cy="-49.33" rx="45.17" ry="45.17"/>
<ellipse fill="none" stroke="#38761d" cx="47.56" cy="-47.56" rx="47.62" ry="47.62"/> <ellipse fill="none" stroke="#8fb071" cx="49.33" cy="-49.33" rx="49.15" ry="49.15"/>
<text text-anchor="middle" x="47.56" y="-45.06" font-family="Inter" font-size="10.00">normal form</text> <text text-anchor="middle" x="49.33" y="-46.83" font-family="Inter" font-size="10.00" fill="#c9d1bb">normal form</text>
</g> </g>
<!-- es&#45;&gt;nf --> <!-- es&#45;&gt;nf -->
<g id="edge8" class="edge"> <g id="edge8" class="edge">
<title>es&#45;&gt;nf</title> <title>es&#45;&gt;nf</title>
<path fill="none" stroke="#674ea7" d="M58.42,-140.84C54.43,-135.54 50.7,-129.43 48.56,-123.12 46.65,-117.47 45.39,-111.43 44.62,-105.33"/> <path fill="none" stroke="#a9b492" d="M61.42,-144.37C56.94,-139.16 52.76,-133.09 50.33,-126.65 48.2,-121.01 46.8,-114.97 45.93,-108.84"/>
<polygon fill="#674ea7" stroke="#674ea7" points="48.08,-104.73 43.74,-95.06 41.1,-105.32 48.08,-104.73"/> <polygon fill="#a9b492" stroke="#a9b492" points="49.37,-108.13 44.93,-98.51 42.41,-108.79 49.37,-108.13"/>
<text text-anchor="middle" x="89.56" y="-115.92" font-family="Inter" font-size="9.00">R/Gc normalisation</text> <text text-anchor="middle" x="92.83" y="-119.45" font-family="Inter" font-size="9.00" fill="#c9d1bb">R/Gc normalisation</text>
</g> </g>
<!-- pure&#45;&gt;pure --> <!-- pure&#45;&gt;pure -->
<g id="edge7" class="edge"> <g id="edge7" class="edge">
<title>pure&#45;&gt;pure</title> <title>pure&#45;&gt;pure</title>
<path fill="none" stroke="#990000" d="M217.49,-60.1C232.18,-62.34 245.65,-58.16 245.65,-47.56 245.65,-39.53 237.92,-35.19 227.77,-34.53"/> <path fill="none" stroke="#dfe7cc" d="M226.25,-62.13C241.48,-64.64 255.59,-60.37 255.59,-49.33 255.59,-40.79 247.15,-36.3 236.28,-35.86"/>
<polygon fill="#990000" stroke="#990000" points="227.31,-31.04 217.49,-35.02 227.64,-38.04 227.31,-31.04"/> <polygon fill="#dfe7cc" stroke="#dfe7cc" points="236,-32.37 226.25,-36.52 236.45,-39.36 236,-32.37"/>
<text text-anchor="middle" x="279.65" y="-45.36" font-family="Inter" font-size="9.00">B under context</text> <text text-anchor="middle" x="292.59" y="-47.13" font-family="Inter" font-size="9.00" fill="#c9d1bb">B under context</text>
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

+766 -2
View File
@@ -12,9 +12,10 @@
"M1", "M1",
"M2", "M2",
"M3", "M3",
"M4" "M4",
"M5"
], ],
"current": "M4", "current": "M5",
"nodes": [ "nodes": [
{ {
"id": "fvs_lift", "id": "fvs_lift",
@@ -288,6 +289,217 @@
"steps_complete" "steps_complete"
] ]
}, },
{
"id": "of_trm_fvs",
"label": "of_trm_fvs",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": []
},
{
"id": "of_trm_lift",
"label": "of_trm_lift",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": []
},
{
"id": "of_trm_open",
"label": "of_trm_open",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": [
"of_trm_lift"
]
},
{
"id": "of_trm_close",
"label": "of_trm_close",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": []
},
{
"id": "of_trm_injective",
"label": "of_trm_injective",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": []
},
{
"id": "mfvs_lift_m",
"label": "mfvs_lift_m",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": []
},
{
"id": "mfvs_close_m",
"label": "mfvs_close_m",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": []
},
{
"id": "mfvs_open_m",
"label": "mfvs_open_m",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": [
"mfvs_lift_m"
]
},
{
"id": "of_trm_plug",
"label": "of_trm_plug",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": []
},
{
"id": "mred_of_red1",
"label": "mred_of_red1",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": []
},
{
"id": "mred_context",
"label": "mred_context",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": []
},
{
"id": "mred_term_context",
"label": "mred_term_context",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": [
"of_trm_plug"
]
},
{
"id": "of_trm_moccurs",
"label": "of_trm_moccurs",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": []
},
{
"id": "of_trm_moccurs0",
"label": "of_trm_moccurs0",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": [
"of_trm_moccurs"
]
},
{
"id": "mred_B_intro",
"label": "mred_B_intro",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": []
},
{
"id": "mred_gc_intro",
"label": "mred_gc_intro",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": []
},
{
"id": "mred_r_intro",
"label": "mred_r_intro",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": []
},
{
"id": "Plus_mred_of_Plus_red1",
"label": "Plus_mred_of_Plus_red1",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": []
},
{
"id": "mred_full_comp_pure",
"label": "mred_full_comp_pure",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": [
"Plus_mred_of_Plus_red1",
"lemma_2_2_full_comp"
]
},
{
"id": "mred_plus_one",
"label": "mred_plus_one",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/Metaterm.v",
"depends": []
},
{ {
"id": "Plus_red1_context", "id": "Plus_red1_context",
"label": "Plus_red1_context", "label": "Plus_red1_context",
@@ -497,6 +709,558 @@
"file": "theory/Metatheory.v", "file": "theory/Metatheory.v",
"depends": [] "depends": []
}, },
{
"id": "subred_intro",
"label": "subred_intro",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedEs.v",
"depends": []
},
{
"id": "subred_nred",
"label": "subred_nred",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedEs.v",
"depends": [
"subred_intro"
]
},
{
"id": "subred_Es_l",
"label": "subred_Es_l",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedEs.v",
"depends": [
"subred_intro"
]
},
{
"id": "subred_Es_r",
"label": "subred_Es_r",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedEs.v",
"depends": [
"subred_intro"
]
},
{
"id": "subred_Es_lr",
"label": "subred_Es_lr",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedEs.v",
"depends": [
"subred_Es_l",
"subred_Es_r"
]
},
{
"id": "subred_context",
"label": "subred_context",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedEs.v",
"depends": [
"subred_intro"
]
},
{
"id": "subred_context_rule",
"label": "subred_context_rule",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedEs.v",
"depends": [
"subred_context",
"subred_nred"
]
},
{
"id": "subred_of_Es_nred_Es",
"label": "subred_of_Es_nred_Es",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedEs.v",
"depends": [
"subred_intro"
]
},
{
"id": "nred_stable_source",
"label": "nred_stable_source",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedEs.v",
"depends": [
"subred_intro"
]
},
{
"id": "nred_stable_target",
"label": "nred_stable_target",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedEs.v",
"depends": [
"subred_intro"
]
},
{
"id": "StarN_trans",
"label": "StarN_trans",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedEs.v",
"depends": []
},
{
"id": "StarN_one_trans",
"label": "StarN_one_trans",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedEs.v",
"depends": []
},
{
"id": "PlusN_to_StarN",
"label": "PlusN_to_StarN",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedEs.v",
"depends": []
},
{
"id": "StarN_subred_context",
"label": "StarN_subred_context",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedEs.v",
"depends": [
"subred_context"
]
},
{
"id": "Mx_ge_0",
"label": "Mx_ge_0",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeasure.v",
"depends": []
},
{
"id": "head_has_pos",
"label": "head_has_pos",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeasure.v",
"depends": []
},
{
"id": "le_mul_of_one_le",
"label": "le_mul_of_one_le",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeasure.v",
"depends": []
},
{
"id": "nocc_le_Mx",
"label": "nocc_le_Mx",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeasure.v",
"depends": [
"head_has_pos",
"le_mul_of_one_le"
]
},
{
"id": "nfv_annot_bound_example",
"label": "nfv_annot_bound_example",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeasure.v",
"depends": []
},
{
"id": "Mx_fresh_fails",
"label": "Mx_fresh_fails",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeasure.v",
"depends": [
"nfv_annot_bound_example"
]
},
{
"id": "A1_C_related",
"label": "A1_C_related",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeasure.v",
"depends": []
},
{
"id": "A1_s_differ",
"label": "A1_s_differ",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeasure.v",
"depends": []
},
{
"id": "A1_Mx_differ",
"label": "A1_Mx_differ",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeasure.v",
"depends": []
},
{
"id": "A1_not_invariant",
"label": "A1_not_invariant",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeasure.v",
"depends": [
"A1_C_related",
"A1_s_differ"
]
},
{
"id": "Gc_special_nondecrease",
"label": "Gc_special_nondecrease",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeasure.v",
"depends": []
},
{
"id": "nred_Gc_special",
"label": "nred_Gc_special",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeasure.v",
"depends": []
},
{
"id": "s_metavar_empty",
"label": "s_metavar_empty",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeasure.v",
"depends": []
},
{
"id": "nred_R_selfloop",
"label": "nred_R_selfloop",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeasure.v",
"depends": []
},
{
"id": "current_sm_not_terminating",
"label": "current_sm_not_terminating",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeasure.v",
"depends": [
"nred_R_selfloop"
]
},
{
"id": "subred_selfloop",
"label": "subred_selfloop",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeasure.v",
"depends": [
"nred_R_selfloop",
"subred_nred"
]
},
{
"id": "current_subred_not_terminating",
"label": "current_subred_not_terminating",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeasure.v",
"depends": [
"subred_selfloop"
]
},
{
"id": "isubst_meta_in",
"label": "isubst_meta_in",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": []
},
{
"id": "isubst_meta_notin",
"label": "isubst_meta_notin",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": []
},
{
"id": "eqC_in_Es",
"label": "eqC_in_Es",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": []
},
{
"id": "Es_ctx_any",
"label": "Es_ctx_any",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": []
},
{
"id": "nred_R_intro",
"label": "nred_R_intro",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": []
},
{
"id": "Es_refl_any",
"label": "Es_refl_any",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": []
},
{
"id": "Es_sym_any",
"label": "Es_sym_any",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": []
},
{
"id": "Es_trans_any",
"label": "Es_trans_any",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": []
},
{
"id": "in_filter_neq",
"label": "in_filter_neq",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": []
},
{
"id": "filter_neq_in",
"label": "filter_neq_in",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": []
},
{
"id": "nplug_fv_mono",
"label": "nplug_fv_mono",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": [
"filter_neq_in",
"in_filter_neq"
]
},
{
"id": "nplug_fv_upper",
"label": "nplug_fv_upper",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": [
"filter_neq_in",
"in_filter_neq"
]
},
{
"id": "nred_core_fv",
"label": "nred_core_fv",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": [
"filter_neq_in",
"in_filter_neq",
"nplug_fv_mono",
"nplug_fv_upper"
]
},
{
"id": "nplug_esub_fv",
"label": "nplug_esub_fv",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": [
"filter_neq_in",
"in_filter_neq"
]
},
{
"id": "nred_fv",
"label": "nred_fv",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": [
"filter_neq_in",
"in_filter_neq",
"nplug_esub_fv",
"nplug_fv_mono",
"nplug_fv_upper"
]
},
{
"id": "in_filter_neq_iff",
"label": "in_filter_neq_iff",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": []
},
{
"id": "Es_fv_both",
"label": "Es_fv_both",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": [
"in_filter_neq_iff",
"nplug_fv_mono"
]
},
{
"id": "Es_fv",
"label": "Es_fv",
"kind": "infra",
"status": "proved",
"milestone": "M5",
"section": "",
"file": "theory/NamedMeta.v",
"depends": [
"Es_fv_both"
]
},
{ {
"id": "par_red1_iff", "id": "par_red1_iff",
"label": "par_red1_iff", "label": "par_red1_iff",
+1 -1
View File
@@ -35,7 +35,7 @@ done < <(find theory -name '*.v' -print0 2>/dev/null)
echo "== Print Assumptions ==" echo "== Print Assumptions =="
WORK="$(mktemp -d ./.audit-work.XXXXXX)" WORK="$(mktemp -d ./.audit-work.XXXXXX)"
cp theory/*.v "$WORK"/ cp theory/*.v "$WORK"/
for f in ExecReducer Binding Reduction Metatheory Closure Subsystem Substitution Parallel Metaterm Tests Random Enumerate; do for f in ExecReducer Binding Reduction Metatheory Closure Subsystem Substitution Parallel Metaterm NamedMeta NamedEs NamedMeasure Tests Random Enumerate; do
echo "-- $f" echo "-- $f"
out="$(rocq compile -Q "$WORK" LambdaSub "$WORK/$f.v" 2>&1 || true)" out="$(rocq compile -Q "$WORK" LambdaSub "$WORK/$f.v" 2>&1 || true)"
echo "$out" echo "$out"
+4
View File
@@ -25,6 +25,10 @@ MILESTONE = {
"Substitution": "M2", "Substitution": "M2",
"Subsystem": "M3", "Subsystem": "M3",
"Parallel": "M4", "Parallel": "M4",
"Metaterm": "M5",
"NamedMeta": "M5",
"NamedEs": "M5",
"NamedMeasure": "M5",
"Tests": "M2", "Tests": "M2",
"Random": "M2", "Random": "M2",
"Enumerate": "M2", "Enumerate": "M2",
+139 -102
View File
@@ -9,28 +9,18 @@ ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
GRAPH_DIR = os.path.join(ROOT, "graphs") GRAPH_DIR = os.path.join(ROOT, "graphs")
META = os.path.join(GRAPH_DIR, "theorems.json") META = os.path.join(GRAPH_DIR, "theorems.json")
STATUS_FILL = { # Dark sage palette, transparent so the diagrams sit on the page background.
"proved": "#d9ead3", INK = "#a9b492"
"stated": "#fff2cc", MUTED = "#8f9780"
"planned": "#f3f3f3", FONT = "#c9d1bb"
"blocked": "#f4cccc", FILL = "transparent"
} EXT_FILL = "transparent"
STATUS_PEN = { NF_FILL = "#2a3a22"
"proved": "#38761d",
"stated": "#b45f06", # Distinct sage tones for the rule sketches.
"planned": "#777777", RULE_B = "#dfe7cc"
"blocked": "#cc0000", RULE_R = "#a9b492"
} RULE_G = "#8fb071"
STATUS_STYLE = {
"proved": "filled",
"stated": "filled,dashed",
"planned": "dashed",
"blocked": "filled,bold",
}
INK = "#333333"
RULE_B = "#990000"
RULE_R = "#674ea7"
RULE_G = "#38761d"
def q(s): def q(s):
@@ -46,110 +36,146 @@ def esc_html(s):
return str(s).replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;") return str(s).replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
def dependency_dot(data): def node_line(n, external=False):
nodes = data["nodes"] if external:
by_id = {n["id"]: n for n in nodes} label = n["id"] + "\\n(" + n["milestone"] + ")"
title = data["paper"]["title"] + " - theorem dependency (" + data["current"] + ")" shape = "box"
legend = ( style = "rounded,dashed,filled"
"<B>" + esc_html(title) + "</B>" fill = EXT_FILL
"<BR/><FONT POINT-SIZE=\"9\">" color = MUTED
"<FONT COLOR=\"#38761d\">proved</FONT> " fontcolor = FONT
"<FONT COLOR=\"#b45f06\">stated</FONT> " pen = 0.9
"<FONT COLOR=\"#777777\">planned</FONT> " else:
"<FONT COLOR=\"#cc0000\">blocked</FONT>" label = n["id"]
"</FONT>" shape = "box" if n["kind"] == "paper" else "ellipse"
style = "rounded,filled" if n["kind"] == "paper" else "filled"
fill = FILL
color = INK
fontcolor = FONT
pen = 1.0
tip = n["id"]
if n.get("section"):
tip += " (section " + n["section"] + ")"
if n.get("file"):
tip += " " + n["file"]
tip += " " + n["status"]
return (
" %s [label=%s, shape=%s, style=%s, fillcolor=%s, color=%s, "
"penwidth=%.1f, fontcolor=%s, tooltip=%s];"
% (n["id"], q(label), shape, q(style), q(fill), q(color), pen, q(fontcolor), q(tip))
) )
lines = [
"digraph theorem_deps {",
def dep_header(title):
return [
"digraph deps {",
" rankdir=LR;", " rankdir=LR;",
' bgcolor="white";', ' bgcolor="transparent";',
" splines=spline;", " splines=polyline;",
" nodesep=0.22;", " concentrate=true;",
" ranksep=0.6;", " nodesep=0.2;",
' node [fontname=Inter, fontsize=9, fontcolor="#222222"];', " ranksep=0.9;",
' edge [fontname=Inter, fontsize=8, color="#9a9a9a", arrowsize=0.6, penwidth=0.8];', ' node [fontname=Inter, fontsize=9];',
" graph [fontname=Inter, fontsize=12, labelloc=t, label=<%s>];" % legend, ' edge [fontname=Inter, fontsize=8, color="%s", fontcolor="%s", arrowsize=0.6, penwidth=0.8];' % (MUTED, FONT),
' graph [fontname=Inter, fontsize=12, labelloc=t, fontcolor="%s", label=<<B>%s</B>>];' % (FONT, esc_html(title)),
] ]
for n in nodes:
fill = STATUS_FILL.get(n["status"], "#f3f3f3")
pen = STATUS_PEN.get(n["status"], "#777777") def dependency_overview_dot(data):
style = STATUS_STYLE.get(n["status"], "dashed") by_id = {n["id"]: n for n in data["nodes"]}
tip = n["id"] counts = {}
if n.get("section"): for n in data["nodes"]:
tip += " (section " + n["section"] + ")" counts[n["milestone"]] = counts.get(n["milestone"], 0) + 1
if n.get("file"): milestones = [m for m in data["milestones"] if counts.get(m)]
tip += " " + n["file"] edges = set()
tip += " " + data["paper"]["html"] for n in data["nodes"]:
if n["kind"] == "paper": for d in n["depends"]:
shape = "box"
style = "rounded," + style
else:
shape = "ellipse"
attrs = [
"label=%s" % q(n["label"]),
"color=%s" % q(pen),
"fillcolor=%s" % q(fill),
"style=%s" % q(style),
"fontcolor=%s" % q("#222222"),
"tooltip=%s" % q(tip),
"shape=%s" % shape,
]
lines.append(" %s [%s];" % (n["id"], ", ".join(attrs)))
for n in nodes:
for d in n.get("depends", []):
if d in by_id: if d in by_id:
a = by_id[d]["milestone"]
b = n["milestone"]
if a != b and a in counts and b in counts:
edges.add((a, b))
lines = dep_header("Theorem dependency by milestone")
for m in milestones:
label = "%s\\n%d results" % (m, counts[m])
lines.append(
' %s [label=%s, shape=box, style="rounded,filled", fillcolor=%s, '
"color=%s, fontcolor=%s];" % (m, q(label), q(FILL), q(INK), q(FONT))
)
for a, b in sorted(edges):
lines.append(" %s -> %s;" % (a, b))
lines.append("}")
return "\n".join(lines) + "\n"
def dependency_subset_dot(data, title, keep_ids):
by_id = {n["id"]: n for n in data["nodes"]}
inside = [n for n in data["nodes"] if n["id"] in keep_ids]
ids = {n["id"] for n in inside}
ext_ids = sorted(
{d for n in inside for d in n["depends"] if d not in ids and d in by_id}
)
lines = dep_header(title)
for d in ext_ids:
lines.append(node_line(by_id[d], external=True))
for n in sorted(inside, key=lambda x: (x["file"], x["id"])):
lines.append(node_line(n))
keep = ids | set(ext_ids)
for n in inside:
for d in n["depends"]:
if d in keep:
lines.append(" %s -> %s;" % (d, n["id"])) lines.append(" %s -> %s;" % (d, n["id"]))
lines.append("}") lines.append("}")
return "\n".join(lines) + "\n" return "\n".join(lines) + "\n"
def rules_dot(): def rules_dot():
box = 'shape=box, style="rounded,filled", fillcolor="#f5f5f5", color="%s", fontcolor="%s"' % (INK, INK) box = 'shape=box, style="rounded,filled", fillcolor="%s", color="%s", fontcolor="%s"' % (FILL, INK, FONT)
lines = [ lines = [
"digraph lambda_sub_cfg {", "digraph lambda_sub_cfg {",
" rankdir=TB;", " rankdir=TB;",
" bgcolor=\"white\";", ' bgcolor="transparent";',
" node [fontname=Inter, fontsize=10];", ' node [fontname=Inter, fontsize=10, fontcolor="%s"];' % FONT,
" edge [fontname=Inter, fontsize=9, color=\"%s\"];" % INK, ' edge [fontname=Inter, fontsize=9, color="%s", fontcolor="%s"];' % (MUTED, FONT),
" start [label=\"term\", shape=oval, style=filled, fillcolor=\"#f3f3f3\", color=\"%s\"];" % INK, ' start [label="term", shape=oval, style=filled, fillcolor="%s", color="%s"];' % (FILL, INK),
" beta [label=\"(lambda x. t) u\", %s];" % box, " beta [label=\"(lambda x. t) u\", %s];" % box,
" es [label=\"t[x/u]\", %s];" % box, " es [label=\"t[x/u]\", %s];" % box,
" pure [label=\"pure term\", shape=oval, style=filled, fillcolor=\"#f3f3f3\", color=\"%s\"];" % INK, ' pure [label="pure term", shape=oval, style=filled, fillcolor="%s", color="%s"];' % (FILL, INK),
" nf [label=\"normal form\", shape=doublecircle, style=filled, fillcolor=\"#d9ead3\", color=\"%s\"];" % RULE_G, ' nf [label="normal form", shape=doublecircle, style=filled, fillcolor="%s", color="%s"];' % (NF_FILL, RULE_G),
" start -> beta [label=\"App(Lam,_)\"];", ' start -> beta [label="App(Lam,_)"];',
" start -> es [label=\"ESub\"];", ' start -> es [label="ESub"];',
" start -> pure [label=\"BVar/FVar/Lam\"];", ' start -> pure [label="BVar/FVar/Lam"];',
" beta -> es [label=\"B\", color=\"%s\"];" % RULE_B, ' beta -> es [label="B", color="%s"];' % RULE_B,
" es -> es [label=\"R (one occurrence)\", color=\"%s\"];" % RULE_R, ' es -> es [label="R (one occurrence)", color="%s"];' % RULE_R,
" es -> pure [label=\"Gc (x not in fv)\", color=\"%s\"];" % RULE_G, ' es -> pure [label="Gc (x not in fv)", color="%s"];' % RULE_G,
" pure -> pure [label=\"B under context\", color=\"%s\"];" % RULE_B, ' pure -> pure [label="B under context", color="%s"];' % RULE_B,
" es -> nf [label=\"R/Gc normalisation\", color=\"%s\"];" % RULE_R, ' es -> nf [label="R/Gc normalisation", color="%s"];' % RULE_R,
"}", "}",
] ]
return "\n".join(lines) + "\n" return "\n".join(lines) + "\n"
def reduction_dot(): def reduction_dot():
box = 'shape=box, style="filled", fillcolor="#f5f5f5", color="%s", fontcolor="%s"' % (INK, INK) box = 'shape=box, style="filled", fillcolor="%s", color="%s", fontcolor="%s"' % (FILL, INK, FONT)
lines = [ lines = [
"digraph reduction_dup {", "digraph reduction_dup {",
" rankdir=LR;", " rankdir=LR;",
" bgcolor=\"white\";", ' bgcolor="transparent";',
" node [fontname=Inter, fontsize=10];", ' node [fontname=Inter, fontsize=10, fontcolor="%s"];' % FONT,
" edge [fontname=Inter, fontsize=9, color=\"%s\"];" % INK, ' edge [fontname=Inter, fontsize=9, color="%s", fontcolor="%s"];' % (MUTED, FONT),
" graph [labelloc=t, fontcolor=\"%s\", label=\"(lambda x. x x) y reduction graph\"];" % INK, ' graph [labelloc=t, fontcolor="%s", label="(lambda x. x x) y reduction graph"];' % FONT,
" n0 [label=\"(lambda x. x x) y\", %s];" % box, " n0 [label=\"(lambda x. x x) y\", %s];" % box,
" n1 [label=\"(x x)[x/y]\", %s];" % box, " n1 [label=\"(x x)[x/y]\", %s];" % box,
" n2 [label=\"(y x)[x/y]\", %s];" % box, " n2 [label=\"(y x)[x/y]\", %s];" % box,
" n2b [label=\"(x y)[x/y]\", %s];" % box, " n2b [label=\"(x y)[x/y]\", %s];" % box,
" n3 [label=\"(y y)[x/y]\", %s];" % box, " n3 [label=\"(y y)[x/y]\", %s];" % box,
" nf [label=\"y y (normal form)\", shape=doublecircle, style=filled, fillcolor=\"#d9ead3\", color=\"%s\", fontcolor=\"%s\"];" % (RULE_G, INK), ' nf [label="y y (normal form)", shape=doublecircle, style=filled, fillcolor="%s", color="%s", fontcolor="%s"];' % (NF_FILL, RULE_G, FONT),
" n0 -> n1 [label=\"B\", color=\"%s\"];" % RULE_B, ' n0 -> n1 [label="B", color="%s"];' % RULE_B,
" n1 -> n2 [label=\"R\", color=\"%s\"];" % RULE_R, ' n1 -> n2 [label="R", color="%s"];' % RULE_R,
" n1 -> n2b [label=\"R\", color=\"%s\"];" % RULE_R, ' n1 -> n2b [label="R", color="%s"];' % RULE_R,
" n2 -> n3 [label=\"R\", color=\"%s\"];" % RULE_R, ' n2 -> n3 [label="R", color="%s"];' % RULE_R,
" n2b -> n3 [label=\"R\", color=\"%s\"];" % RULE_R, ' n2b -> n3 [label="R", color="%s"];' % RULE_R,
" n3 -> nf [label=\"Gc\", color=\"%s\"];" % RULE_G, ' n3 -> nf [label="Gc", color="%s"];' % RULE_G,
" {rank=same; n2; n2b;}", " {rank=same; n2; n2b;}",
"}", "}",
] ]
@@ -192,11 +218,22 @@ def main():
print("wrote", os.path.relpath(args.meta, ROOT)) print("wrote", os.path.relpath(args.meta, ROOT))
else: else:
data = load(args.meta) data = load(args.meta)
outputs = {
"dependency.dot": dependency_dot(data), counts = {}
"rules.dot": rules_dot(), for n in data["nodes"]:
"reduction.dot": reduction_dot(), counts[n["milestone"]] = counts.get(n["milestone"], 0) + 1
}
outputs = {"dependency-overview.dot": dependency_overview_dot(data)}
for m in data["milestones"]:
if not counts.get(m):
continue
keep = {n["id"] for n in data["nodes"] if n["milestone"] == m}
title = "Theorem dependencies %s, %d results" % (m, counts[m])
outputs["dependency-%s.dot" % m] = dependency_subset_dot(data, title, keep)
outputs["rules.dot"] = rules_dot()
outputs["reduction.dot"] = reduction_dot()
ok = True ok = True
for name, text in outputs.items(): for name, text in outputs.items():
path = os.path.join(args.outdir, name) path = os.path.join(args.outdir, name)
+216 -1
View File
@@ -1,6 +1,6 @@
From Stdlib Require Import List Bool Arith Lia PeanoNat. From Stdlib Require Import List Bool Arith Lia PeanoNat.
Import ListNotations. Import ListNotations.
From LambdaSub Require Import ExecReducer Binding. From LambdaSub Require Import ExecReducer Binding Reduction Closure Metatheory.
Inductive mtrm : Type := Inductive mtrm : Type :=
| mBVar : nat -> mtrm | mBVar : nat -> mtrm
@@ -110,3 +110,218 @@ Print Assumptions of_trm_lift.
Print Assumptions of_trm_open. Print Assumptions of_trm_open.
Print Assumptions of_trm_close. Print Assumptions of_trm_close.
Print Assumptions of_trm_injective. Print Assumptions of_trm_injective.
Lemma mfvs_lift_m : forall t k, mfvs (lift_m k t) = mfvs t.
Proof.
induction t; intros k; simpl.
- destruct (Nat.ltb n k); reflexivity.
- reflexivity.
- reflexivity.
- rewrite IHt1, IHt2. reflexivity.
- rewrite IHt. reflexivity.
- rewrite IHt1, IHt2. reflexivity.
Qed.
Lemma mfvs_close_m : forall t x k y, In y (mfvs (close_rec_m x k t)) -> In y (mfvs t).
Proof.
induction t; intros x k y H; simpl in *.
- destruct H.
- destruct (Nat.eqb a x) eqn:E.
+ destruct H.
+ destruct H as [Hy | Hf]. subst y. simpl. left. reflexivity. destruct Hf.
- exact H.
- apply in_app_iff in H as [H|H]; apply in_app_iff.
+ left. apply (IHt1 x k y). exact H.
+ right. apply (IHt2 x k y). exact H.
- apply (IHt x (S k) y). exact H.
- apply in_app_iff in H as [H|H]; apply in_app_iff.
+ left. apply (IHt1 x (S k) y). exact H.
+ right. apply (IHt2 x k y). exact H.
Qed.
Lemma mfvs_open_m : forall t k u y,
In y (mfvs (open_rec_m k u t)) -> In y (mfvs u) \/ In y (mfvs t).
Proof.
induction t; intros k u y H; simpl in *.
- destruct (Nat.eqb n k) eqn:E.
+ apply Nat.eqb_eq in E. subst n. simpl in H.
left. rewrite <- (mfvs_lift_m u k). exact H.
+ simpl in H. destruct H.
- right. exact H.
- right. exact H.
- apply in_app_iff in H as [H|H].
+ destruct (IHt1 k u y H) as [Hl|Hr]. left; exact Hl. right; apply in_app_iff; left; exact Hr.
+ destruct (IHt2 k u y H) as [Hl|Hr]. left; exact Hl. right; apply in_app_iff; right; exact Hr.
- destruct (IHt (S k) u y H) as [Hl|Hr]. left; exact Hl. right; exact Hr.
- apply in_app_iff in H as [H|H].
+ destruct (IHt1 (S k) u y H) as [Hl|Hr]. left; exact Hl. right; apply in_app_iff; left; exact Hr.
+ destruct (IHt2 k u y H) as [Hl|Hr]. left; exact Hl. right; apply in_app_iff; right; exact Hr.
Qed.
Print Assumptions mfvs_lift_m.
Print Assumptions mfvs_close_m.
Print Assumptions mfvs_open_m.
Inductive mctx : Type :=
| mGHole : mctx
| mGAppL : mctx -> mtrm -> mctx
| mGAppR : mtrm -> mctx -> mctx
| mGLam : mctx -> mctx
| mGESubL : mctx -> mtrm -> mctx
| mGESubR : mtrm -> mctx -> mctx.
Fixpoint mplug (C : mctx) (t : mtrm) : mtrm :=
match C with
| mGHole => t
| mGAppL C1 u => mApp (mplug C1 t) u
| mGAppR u C1 => mApp u (mplug C1 t)
| mGLam C1 => mLam (mplug C1 t)
| mGESubL C1 u => mESub (mplug C1 t) u
| mGESubR t1 C1 => mESub t1 (mplug C1 t)
end.
Fixpoint mctx_of (C : ctx) : mctx :=
match C with
| GHole => mGHole
| GAppL C1 u => mGAppL (mctx_of C1) (of_trm u)
| GAppR u C1 => mGAppR (of_trm u) (mctx_of C1)
| GLam C1 => mGLam (mctx_of C1)
| GESubL C1 u => mGESubL (mctx_of C1) (of_trm u)
| GESubR t1 C1 => mGESubR (of_trm t1) (mctx_of C1)
end.
Lemma of_trm_plug : forall C t, of_trm (plug C t) = mplug (mctx_of C) (of_trm t).
Proof.
induction C; intros a; simpl; try reflexivity; rewrite IHC; reflexivity.
Qed.
Fixpoint moccurs (n : nat) (t : mtrm) : bool :=
match t with
| mBVar m => Nat.eqb m n
| mFVar _ => false
| mMVar _ _ => false
| mApp a b => moccurs n a || moccurs n b
| mLam a => moccurs (S n) a
| mESub a b => moccurs (S n) a || moccurs n b
end.
Definition moccurs0 (t : mtrm) : bool := moccurs 0 t.
Inductive mzctx : Type :=
| mZTop : mzctx
| mZAppL : mzctx -> mtrm -> mzctx
| mZAppR : mtrm -> mzctx -> mzctx
| mZLam : mzctx -> mzctx
| mZESubL : mzctx -> mtrm -> mzctx
| mZESubR : mtrm -> mzctx -> mzctx.
Fixpoint mzfill (C : mzctx) (k : nat) : mtrm :=
match C with
| mZTop => mBVar k
| mZAppL C1 u => mApp (mzfill C1 k) u
| mZAppR u C1 => mApp u (mzfill C1 k)
| mZLam C1 => mLam (mzfill C1 (S k))
| mZESubL C1 u => mESub (mzfill C1 (S k)) u
| mZESubR t1 C1 => mESub t1 (mzfill C1 k)
end.
Fixpoint mzplug_lift (C : mzctx) (k : nat) (t : mtrm) : mtrm :=
match C with
| mZTop => lift_m k t
| mZAppL C1 u => mApp (mzplug_lift C1 k t) u
| mZAppR u C1 => mApp u (mzplug_lift C1 k t)
| mZLam C1 => mLam (mzplug_lift C1 (S k) t)
| mZESubL C1 u => mESub (mzplug_lift C1 (S k) t) u
| mZESubR t1 C1 => mESub t1 (mzplug_lift C1 k t)
end.
Fixpoint mzdecs (t : mtrm) (k : nat) : list mzctx :=
match t with
| mBVar n => if Nat.eqb n k then [mZTop] else []
| mFVar _ => []
| mMVar _ _ => []
| mApp a b => map (fun C => mZAppL C b) (mzdecs a k) ++ map (fun C => mZAppR a C) (mzdecs b k)
| mLam a => map mZLam (mzdecs a (S k))
| mESub a b => map (fun C => mZESubL C b) (mzdecs a (S k)) ++ map (fun C => mZESubR a C) (mzdecs b k)
end.
Inductive mred : mtrm -> mtrm -> Prop :=
| mred_emb : forall t t', red1 t t' -> mred (of_trm t) (of_trm t')
| mred_ctx : forall C t t', mred t t' -> mred (mplug C t) (mplug C t')
| mred_B : forall body u, mred (mApp (mLam body) u) (mESub body u)
| mred_gc : forall body u, moccurs0 body = false -> mred (mESub body u) body
| mred_r : forall C body u, mzfill C 0 = body ->
mred (mESub body u) (mESub (mzplug_lift C 0 u) u).
Lemma mred_of_red1 : forall t t', red1 t t' -> mred (of_trm t) (of_trm t').
Proof. intros. apply mred_emb. exact H. Qed.
Lemma mred_context : forall C t t', mred t t' -> mred (mplug C t) (mplug C t').
Proof. intros. apply mred_ctx. exact H. Qed.
Lemma mred_term_context : forall C t t',
red1 t t' -> mred (of_trm (plug C t)) (of_trm (plug C t')).
Proof.
intros. rewrite of_trm_plug, of_trm_plug.
apply mred_ctx. apply mred_emb. exact H.
Qed.
Print Assumptions of_trm_plug.
Print Assumptions mred_of_red1.
Print Assumptions mred_context.
Print Assumptions mred_term_context.
Lemma of_trm_moccurs : forall t k, moccurs k (of_trm t) = occurs k t.
Proof.
induction t; intros k; simpl; try reflexivity.
- rewrite IHt1, IHt2. reflexivity.
- rewrite IHt. reflexivity.
- rewrite IHt1, IHt2. reflexivity.
Qed.
Lemma of_trm_moccurs0 : forall t, moccurs0 (of_trm t) = occurs0 t.
Proof. intros. apply of_trm_moccurs. Qed.
Lemma mred_B_intro : forall body u, mred (mApp (mLam body) u) (mESub body u).
Proof. intros. apply mred_B. Qed.
Lemma mred_gc_intro : forall body u, moccurs0 body = false -> mred (mESub body u) body.
Proof. intros. apply mred_gc. exact H. Qed.
Print Assumptions of_trm_moccurs.
Print Assumptions of_trm_moccurs0.
Lemma mred_r_intro : forall C body u, mzfill C 0 = body ->
mred (mESub body u) (mESub (mzplug_lift C 0 u) u).
Proof. intros. apply mred_r. exact H. Qed.
Print Assumptions mred_r_intro.
Inductive Plus_m (R : mtrm -> mtrm -> Prop) : mtrm -> mtrm -> Prop :=
| plusm1 : forall t u, R t u -> Plus_m R t u
| plusmS : forall t u v, R t u -> Plus_m R u v -> Plus_m R t v.
Lemma Plus_mred_of_Plus_red1 : forall a b,
Plus red1 a b -> Plus_m mred (of_trm a) (of_trm b).
Proof.
intros a b H. induction H as [a0 b0 HR | a0 b0 u0 HR HP IH].
- apply plusm1. apply mred_emb. exact HR.
- apply plusmS with (u := of_trm b0).
+ apply mred_emb. exact HR.
+ exact IH.
Qed.
Lemma mred_full_comp_pure : forall body u,
Plus_m mred (mESub (of_trm body) (of_trm u)) (of_trm (open_rec 0 u body)).
Proof.
intros body u.
change (Plus_m mred (of_trm (ESub body u)) (of_trm (open_rec 0 u body))).
apply Plus_mred_of_Plus_red1. apply lemma_2_2_full_comp.
Qed.
Lemma mred_plus_one : forall a b, red1 a b -> Plus_m mred (of_trm a) (of_trm b).
Proof. intros. apply plusm1. apply mred_emb. exact H. Qed.
Print Assumptions Plus_mred_of_Plus_red1.
Print Assumptions mred_full_comp_pure.
Print Assumptions mred_plus_one.
+173
View File
@@ -0,0 +1,173 @@
From Stdlib Require Import List Bool Arith Lia PeanoNat.
From Stdlib Require Import Setoid Morphisms.
Import ListNotations.
From LambdaSub Require Import NamedMeta.
(* A setoid rewriting layer for the C equivalence Es on named metaterms.
Es is the congruence generated by the equation C (together with the
implicit alpha convention of the paper, which the named core does not
quotient). We register Es as an equivalence and as a congruence for the
term constructors and for every context, so that setoid rewriting can
move along Es. We then define the reduction relation modulo Es (subred)
and prove that it is stable on both sides and under every context. *)
Instance Es_Equivalence : Equivalence Es.
Proof.
split.
- intro t. apply Es_refl.
- intros a b Hab. apply Es_sym. exact Hab.
- intros a b c Hab Hbc. apply Es_trans with (u := b); assumption.
Qed.
Instance Es_NVar_Proper : Proper (eq ==> Es) NVar.
Proof. intros a b Hab. subst b. apply Es_refl. Qed.
Instance Es_NMVar_Proper : Proper (eq ==> eq ==> Es) NMVar.
Proof. intros a b Hab c d Hcd. subst b d. apply Es_refl. Qed.
Instance Es_NApp_Proper : Proper (Es ==> Es ==> Es) NApp.
Proof.
intros a b Hab c d Hcd.
apply Es_trans with (u := NApp b c).
- apply Es_ctx with (C := nAppL nHole c). exact Hab.
- apply Es_ctx with (C := nAppR b nHole). exact Hcd.
Qed.
Instance Es_NLam_Proper (x : atom) : Proper (Es ==> Es) (NLam x).
Proof. intros a b Hab. apply Es_ctx with (C := nLam x nHole). exact Hab. Qed.
Instance Es_NESub_Proper : Proper (Es ==> eq ==> Es ==> Es) NESub.
Proof.
intros a b Hab x y Hxy c d Hcd. subst y.
apply Es_trans with (u := NESub b x c).
- apply Es_ctx with (C := nESubL nHole x c). exact Hab.
- apply Es_ctx with (C := nESubR b x nHole). exact Hcd.
Qed.
Instance Es_nplug_Proper (C : nctx) : Proper (Es ==> Es) (nplug C).
Proof. intros a b Hab. apply Es_ctx. exact Hab. Qed.
Instance Es_nfv_Proper (z : atom) : Proper (Es ==> iff) (fun t => In z (nfv t)).
Proof. intros a b Hab. apply (Es_fv a b Hab z). Qed.
(* The reduction relation modulo Es, as in the paper:
t ->sub t' iff there are s, s' with t =Es s ->sm s' =Es t'. *)
Definition subred (t t' : ntrm) : Prop :=
exists s, exists s', Es t s /\ nred s s' /\ Es s' t'.
Lemma subred_intro : forall t s s' t',
Es t s -> nred s s' -> Es s' t' -> subred t t'.
Proof. intros. unfold subred. exists s, s'. split; [| split]; assumption. Qed.
Lemma subred_nred : forall t u, nred t u -> subred t u.
Proof.
intros t u H. apply subred_intro with (s := t) (s' := u).
- apply Es_refl.
- exact H.
- apply Es_refl.
Qed.
Lemma subred_Es_l : forall t s u, Es t s -> subred s u -> subred t u.
Proof.
intros t s u Ht [a [b [Ha [Hn Hb]]]].
apply subred_intro with (s := a) (s' := b).
- apply Es_trans with (u := s); assumption.
- exact Hn.
- exact Hb.
Qed.
Lemma subred_Es_r : forall t u v, subred t u -> Es u v -> subred t v.
Proof.
intros t u v [a [b [Ha [Hn Hb]]]] Huv.
apply subred_intro with (s := a) (s' := b).
- exact Ha.
- exact Hn.
- apply Es_trans with (u := u); assumption.
Qed.
Lemma subred_Es_lr : forall t s s' t',
Es t s -> subred s s' -> Es s' t' -> subred t t'.
Proof.
intros t s s' t' Hts Hss' Hs't'.
apply subred_Es_r with (u := s').
- apply subred_Es_l with (s := s); assumption.
- exact Hs't'.
Qed.
Lemma subred_context : forall C t t', subred t t' -> subred (nplug C t) (nplug C t').
Proof.
intros C t t' [a [b [Ha [Hn Hb]]]].
apply subred_intro with (s := nplug C a) (s' := nplug C b).
- apply Es_ctx. exact Ha.
- apply nred_ctx. exact Hn.
- apply Es_ctx. exact Hb.
Qed.
Lemma subred_context_rule : forall C t t', nred t t' -> subred (nplug C t) (nplug C t').
Proof. intros. apply subred_context. apply subred_nred. exact H. Qed.
Lemma subred_of_Es_nred_Es : forall t s s' t',
Es t s -> nred s s' -> Es s' t' -> subred t t'.
Proof. intros. apply subred_intro with (s := s) (s' := s'); assumption. Qed.
(* The rules are stable modulo Es: rewriting the redex or the reduct by Es
gives a valid subred step. *)
Lemma nred_stable_source : forall t s u, Es t s -> nred s u -> subred t u.
Proof. intros. apply subred_intro with (s := s) (s' := u); [exact H | exact H0 | apply Es_refl]. Qed.
Lemma nred_stable_target : forall t u v, nred t u -> Es u v -> subred t v.
Proof. intros. apply subred_intro with (s := t) (s' := u); [apply Es_refl | exact H | exact H0]. Qed.
Print Assumptions Es_Equivalence.
Print Assumptions Es_NApp_Proper.
Print Assumptions Es_NLam_Proper.
Print Assumptions Es_NESub_Proper.
Print Assumptions Es_nplug_Proper.
Print Assumptions Es_nfv_Proper.
Print Assumptions subred_nred.
Print Assumptions subred_Es_l.
Print Assumptions subred_Es_r.
Print Assumptions subred_context.
Print Assumptions nred_stable_source.
Print Assumptions nred_stable_target.
Inductive StarN (R : ntrm -> ntrm -> Prop) : ntrm -> ntrm -> Prop :=
| starN_refl : forall t, StarN R t t
| starN_step : forall t u v, R t u -> StarN R u v -> StarN R t v.
Inductive PlusN (R : ntrm -> ntrm -> Prop) : ntrm -> ntrm -> Prop :=
| plusN1 : forall t u, R t u -> PlusN R t u
| plusNS : forall t u v, R t u -> PlusN R u v -> PlusN R t v.
Lemma StarN_trans : forall R a b c, StarN R a b -> StarN R b c -> StarN R a c.
Proof.
intros R a b c H. induction H; intros Hbc.
- exact Hbc.
- apply starN_step with (u := u). exact H. apply IHStarN. exact Hbc.
Qed.
Lemma StarN_one_trans : forall R a b c, R a b -> StarN R b c -> StarN R a c.
Proof. intros. apply starN_step with (u := b); assumption. Qed.
Lemma PlusN_to_StarN : forall R t u, PlusN R t u -> StarN R t u.
Proof.
intros R t u H. induction H.
- apply starN_step with (u := u); [exact H | apply starN_refl].
- apply starN_step with (u := u); [exact H | exact IHPlusN].
Qed.
Lemma StarN_subred_context : forall C t t',
StarN subred t t' -> StarN subred (nplug C t) (nplug C t').
Proof.
intros C t t' H. induction H.
- apply starN_refl.
- apply starN_step with (u := nplug C u).
+ apply subred_context. exact H.
+ exact IHStarN.
Qed.
Print Assumptions StarN_trans.
Print Assumptions StarN_one_trans.
Print Assumptions PlusN_to_StarN.
Print Assumptions StarN_subred_context.
+230
View File
@@ -0,0 +1,230 @@
From Stdlib Require Import List Bool Arith Lia PeanoNat.
From Stdlib Require Import Setoid Morphisms.
Import ListNotations.
From LambdaSub Require Import NamedMeta NamedEs.
(* The measure of Appendix A of the paper.
For a metaterm t the paper defines two functions:
Mx(t) an upper bound on the number of free occurrences of x that can
give rise to redexes in sub-reducts of t,
s(t) the size measure used to orient the rules R, RX and Gc.
Both discriminate on whether the body of a substitution is a chain
X_Delta[x1/u1]...[xn/un] ending in a metavariable and the substituted
variable belongs to the annotation Delta. We capture that shape with
mhead below. *)
Fixpoint mhead (t : ntrm) : option (list atom) :=
match t with
| NMVar _ d => Some d
| NESub a _ _ => mhead a
| _ => None
end.
Definition head_has (a : ntrm) (y : atom) : bool :=
match mhead a with
| Some d => existsb (Nat.eqb y) d
| None => false
end.
Fixpoint Mx (x : atom) (t : ntrm) : nat :=
match t with
| NVar y => if Nat.eqb y x then 1 else 0
| NApp a b => Mx x a + Mx x b
| NLam _ a => Mx x a
| NMVar _ d => if existsb (Nat.eqb x) d then 1 else 0
| NESub a y u =>
if head_has a y
then Mx x a + Mx y a * Mx x u
else Mx x a + Mx x u + Mx y a * Mx x u
end.
Fixpoint s (t : ntrm) : nat :=
match t with
| NVar _ => 1
| NApp a b => s a + s b
| NLam _ a => s a
| NMVar _ d => length d
| NESub a y u =>
if head_has a y
then s a - 1 + Mx y a * s u
else s a + s u + Mx y a * s u
end.
(* The counting invariant of the paper: Mx is an upper bound on the number
of free occurrences of x. We count free occurrences directly with nocc. *)
Fixpoint nocc (x : atom) (t : ntrm) : nat :=
match t with
| NVar y => if Nat.eqb y x then 1 else 0
| NApp a b => nocc x a + nocc x b
| NLam y a => if Nat.eqb y x then 0 else nocc x a
| NESub a y u => (if Nat.eqb y x then 0 else nocc x a) + nocc x u
| NMVar _ d => if existsb (Nat.eqb x) d then 1 else 0
end.
Lemma Mx_ge_0 : forall x t, 0 <= Mx x t.
Proof. intros x t. induction t; simpl; lia. Qed.
Lemma head_has_pos : forall a y, head_has a y = true -> 1 <= Mx y a.
Proof.
intros a. induction a as [z | a1 IHa1 a2 _ | z a IHa | a1 IHa1 z u _ | X d]; intros y H.
- simpl in H. discriminate H.
- simpl in H. discriminate H.
- simpl in H. discriminate H.
- simpl in H. simpl. destruct (head_has a1 z) eqn:E; pose proof (IHa1 y H); lia.
- simpl in H. simpl.
assert (Hex : existsb (Nat.eqb y) d = true).
{ unfold head_has, mhead in H. exact H. }
rewrite Hex. lia.
Qed.
Lemma le_mul_of_one_le : forall n m, 1 <= n -> m <= n * m.
Proof.
intros n m H. rewrite <- (Nat.mul_1_l m) at 1.
apply Nat.mul_le_mono_r. exact H.
Qed.
Lemma nocc_le_Mx : forall x t, nocc x t <= Mx x t.
Proof.
intros x t. induction t as [y | a IHa b IHb | y a IHa | a IHa y u IHu | X d].
- simpl. destruct (Nat.eqb y x); lia.
- simpl. lia.
- simpl. destruct (Nat.eqb y x); lia.
- simpl. destruct (head_has a y) eqn:E.
+ assert (Hpos : 1 <= Mx y a) by (apply head_has_pos; exact E).
assert (Hnl : Mx x u <= Mx y a * Mx x u) by (apply le_mul_of_one_le; exact Hpos).
destruct (Nat.eqb y x) eqn:Ey; lia.
+ destruct (Nat.eqb y x) eqn:Ey; lia.
- simpl. destruct (existsb (Nat.eqb x) d); lia.
Qed.
Print Assumptions Mx_ge_0.
Print Assumptions head_has_pos.
Print Assumptions le_mul_of_one_le.
Print Assumptions nocc_le_Mx.
(* ------------------------------------------------------------------ *)
(* The missing invariants.
The measure proof needs the reduction rules to preserve freeness, in the
sense that a variable that is not free in a term contributes nothing
to the measure. Concretely the paper uses
x notin fv(t) implies Mx(x,t) = 0
for the Gc case and, through Lemma A.2, for the R and RX cases. That
property is not true on the raw named syntax: a metavariable may carry
an annotation variable that an enclosing substitution binds. The
metaterm X_[x][x/y] below is the smallest witness. Its free variables
are {y}, it therefore has no free occurrence of x, yet Mx(x, .) = 1. *)
Lemma nfv_annot_bound_example :
nfv (NESub (NMVar 9 [0]) 0 (NVar 1)) = [1].
Proof. reflexivity. Qed.
Lemma Mx_fresh_fails :
~ (forall x t, ~ In x (nfv t) -> Mx x t = 0).
Proof.
intro H.
assert (Hn : ~ In 0 (nfv (NESub (NMVar 9 [0]) 0 (NVar 1)))).
{ rewrite nfv_annot_bound_example. intros [Hc|Hc]; [discriminate Hc | destruct Hc]. }
specialize (H 0 (NESub (NMVar 9 [0]) 0 (NVar 1)) Hn).
compute in H. discriminate H.
Qed.
(* Lemma A.1, invariance of Mx and s under the C equation, also needs the
invariant. The two terms below are related by C with x = 0, y = 1, y not
free in u and x not free in v, yet their sizes and Mx values differ: the
occurrences of 1 and 0 that sit inside the metavariable annotation but
below the substitutions are counted by the special clauses. *)
Definition A1_t : ntrm := NMVar 0 [0; 1].
Definition A1_u : ntrm :=
NApp (NESub (NMVar 8 [1]) 1 (NVar 3))
(NApp (NApp (NVar 5) (NVar 6)) (NVar 7)).
Definition A1_v : ntrm := NESub (NMVar 7 [0]) 0 (NVar 4).
Definition A1_lhs : ntrm := NESub (NESub A1_t 0 A1_u) 1 A1_v.
Definition A1_rhs : ntrm := NESub (NESub A1_t 1 A1_v) 0 A1_u.
Lemma A1_C_related : Es A1_lhs A1_rhs.
Proof.
apply Es_C with (x := 0) (y := 1).
- intro E. discriminate E.
- compute. intros [H|[H|[H|[H|H]]]]; try discriminate H; destruct H.
- compute. intros [H|H]; [discriminate H | destruct H].
Qed.
Lemma A1_s_differ : s A1_lhs <> s A1_rhs.
Proof. compute. discriminate. Qed.
Lemma A1_Mx_differ : Mx 0 A1_lhs <> Mx 0 A1_rhs.
Proof. compute. discriminate. Qed.
Lemma A1_not_invariant :
~ (forall t u, Es t u -> s t = s u /\ forall z, Mx z t = Mx z u).
Proof.
intro H. destruct (H A1_lhs A1_rhs A1_C_related) as [Hs _].
apply A1_s_differ. exact Hs.
Qed.
(* The corresponding Gc step is legal in the current rule system, but the
measure does not decrease: the redex has the same size as its reduct.
The body is X_[x][x/y] with x in the annotation, so the special clause
of s applies and the (bound) x in the annotation is counted by Mx,
cancelling the subtraction of one. *)
Lemma Gc_special_nondecrease :
s (NESub (NESub (NMVar 9 [0]) 0 (NVar 1)) 0 (NVar 2))
= s (NESub (NMVar 9 [0]) 0 (NVar 1)).
Proof. reflexivity. Qed.
Lemma nred_Gc_special :
nred (NESub (NESub (NMVar 9 [0]) 0 (NVar 1)) 0 (NVar 2))
(NESub (NMVar 9 [0]) 0 (NVar 1)).
Proof.
apply nred_Gc. simpl. intros [Hc|Hc]; [discriminate Hc | destruct Hc].
Qed.
(* A second, independent, gap: the paper states s(t) >= 1, but a
metavariable with empty annotation has size zero. Empty annotations are
not excluded by the raw syntax. *)
Lemma s_metavar_empty : s (NMVar 9 []) = 0.
Proof. reflexivity. Qed.
(* Rule R as currently stated has no freshness side condition on the
substituted term, so it creates a loop, which no terminating measure can
orient. The step below is derivable with the empty context. The paper
excludes it through the convention that no free and bound variable of a
term share a name: x[x/u] with x free in u is not an alpha-canonical
metaterm. *)
Lemma nred_R_selfloop : forall x,
nred (NESub (NVar x) x (NVar x)) (NESub (NVar x) x (NVar x)).
Proof.
intro x. apply nred_R with (C := nHole) (phi := [x]).
- simpl. left. reflexivity.
- intros y Hy. simpl in Hy. destruct Hy as [Hy|[]]. subst y. simpl. left. reflexivity.
- reflexivity.
Qed.
Theorem current_sm_not_terminating : exists t, nred t t.
Proof. exists (NESub (NVar 0) 0 (NVar 0)). apply nred_R_selfloop. Qed.
(* Consequence for Es: the modulo relation subred inherits the loop, so it
is not terminating either without the freshness invariant. *)
Lemma subred_selfloop : forall x,
subred (NESub (NVar x) x (NVar x)) (NESub (NVar x) x (NVar x)).
Proof. intro x. apply subred_nred. apply nred_R_selfloop. Qed.
Theorem current_subred_not_terminating : exists t, subred t t.
Proof. exists (NESub (NVar 0) 0 (NVar 0)). apply subred_selfloop. Qed.
Print Assumptions Mx_fresh_fails.
Print Assumptions A1_C_related.
Print Assumptions A1_s_differ.
Print Assumptions A1_Mx_differ.
Print Assumptions A1_not_invariant.
Print Assumptions Gc_special_nondecrease.
Print Assumptions nred_Gc_special.
Print Assumptions s_metavar_empty.
Print Assumptions nred_R_selfloop.
Print Assumptions current_sm_not_terminating.
Print Assumptions subred_selfloop.
Print Assumptions current_subred_not_terminating.
+357
View File
@@ -0,0 +1,357 @@
From Stdlib Require Import List Bool Arith Lia PeanoNat.
Import ListNotations.
Definition atom := nat.
Inductive ntrm : Type :=
| NVar : atom -> ntrm
| NApp : ntrm -> ntrm -> ntrm
| NLam : atom -> ntrm -> ntrm
| NESub : ntrm -> atom -> ntrm -> ntrm
| NMVar : atom -> list atom -> ntrm.
Fixpoint nfv (t : ntrm) : list atom :=
match t with
| NVar x => [x]
| NApp a b => nfv a ++ nfv b
| NLam x a => filter (fun y => negb (Nat.eqb y x)) (nfv a)
| NESub a x b => filter (fun y => negb (Nat.eqb y x)) (nfv a) ++ nfv b
| NMVar _ d => d
end.
Definition isubst_meta (X : atom) (d : list atom) (x : atom) (v : ntrm) : ntrm :=
if existsb (Nat.eqb x) d then NESub (NMVar X d) x v else NMVar X d.
Lemma isubst_meta_in : forall X d x v, In x d -> isubst_meta X d x v = NESub (NMVar X d) x v.
Proof.
intros X d x v H. unfold isubst_meta.
destruct (existsb (Nat.eqb x) d) eqn:E; [reflexivity |].
assert (Hex : existsb (Nat.eqb x) d = true)
by (apply existsb_exists; exists x; split; [exact H | apply Nat.eqb_refl]).
rewrite Hex in E. discriminate E.
Qed.
Lemma isubst_meta_notin : forall X d x v, ~ In x d -> isubst_meta X d x v = NMVar X d.
Proof.
intros X d x v H. unfold isubst_meta.
destruct (existsb (Nat.eqb x) d) eqn:E; [| reflexivity].
exfalso. apply existsb_exists in E. destruct E as [y [Hy HE]].
apply Nat.eqb_eq in HE. subst y. apply H. exact Hy.
Qed.
Inductive nctx : Type :=
| nHole : nctx
| nAppL : nctx -> ntrm -> nctx
| nAppR : ntrm -> nctx -> nctx
| nLam : atom -> nctx -> nctx
| nESubL : nctx -> atom -> ntrm -> nctx
| nESubR : ntrm -> atom -> nctx -> nctx.
Fixpoint nplug (C : nctx) (t : ntrm) : ntrm :=
match C with
| nHole => t
| nAppL C1 u => NApp (nplug C1 t) u
| nAppR u C1 => NApp u (nplug C1 t)
| nLam x C1 => NLam x (nplug C1 t)
| nESubL C1 x u => NESub (nplug C1 t) x u
| nESubR t1 x C1 => NESub t1 x (nplug C1 t)
end.
Fixpoint is_subst_chain (C : nctx) : bool :=
match C with
| nHole => true
| nESubL C1 _ _ => is_subst_chain C1
| _ => false
end.
Inductive Es : ntrm -> ntrm -> Prop :=
| Es_refl : forall t, Es t t
| Es_sym : forall t u, Es t u -> Es u t
| Es_trans : forall t u v, Es t u -> Es u v -> Es t v
| Es_C : forall t x u y v,
y <> x -> ~ In y (nfv u) -> ~ In x (nfv v) ->
Es (NESub (NESub t x u) y v) (NESub (NESub t y v) x u)
| Es_ctx : forall C t t', Es t t' -> Es (nplug C t) (nplug C t').
Fixpoint cbinders (C : nctx) : list atom :=
match C with
| nHole => []
| nAppL C1 _ => cbinders C1
| nAppR _ C1 => cbinders C1
| nLam x C1 => x :: cbinders C1
| nESubL C1 _ _ => cbinders C1
| nESubR _ _ C1 => cbinders C1
end.
Definition cavoid (C : nctx) (phi : list atom) : bool :=
forallb (fun y => negb (existsb (Nat.eqb y) phi)) (cbinders C).
Inductive nred : ntrm -> ntrm -> Prop :=
| nred_B : forall t x u, nred (NApp (NLam x t) u) (NESub t x u)
| nred_Gc : forall t x u, ~ In x (nfv t) -> nred (NESub t x u) t
| nred_RX : forall C X d x u phi,
In x d ->
In x phi ->
(forall y, In y (nfv u) -> In y phi) ->
is_subst_chain C = false ->
nred (NESub (nplug C (NMVar X d)) x u)
(NESub (nplug C (NESub (NMVar X d) x u)) x u)
| nred_R : forall C x u phi,
In x phi ->
(forall y, In y (nfv u) -> In y phi) ->
cavoid C phi = true ->
nred (NESub (nplug C (NVar x)) x u) (NESub (nplug C u) x u)
| nred_ctx : forall C t t', nred t t' -> nred (nplug C t) (nplug C t').
Lemma eqC_in_Es : forall t x u y v,
y <> x -> ~ In y (nfv u) -> ~ In x (nfv v) ->
Es (NESub (NESub t x u) y v) (NESub (NESub t y v) x u).
Proof. intros. apply Es_C; assumption. Qed.
Lemma Es_ctx_any : forall C t t', Es t t' -> Es (nplug C t) (nplug C t').
Proof. intros. apply Es_ctx. exact H. Qed.
Lemma nred_R_intro : forall C x u phi,
In x phi -> (forall y, In y (nfv u) -> In y phi) -> cavoid C phi = true ->
nred (NESub (nplug C (NVar x)) x u) (NESub (nplug C u) x u).
Proof.
intros C x u phi Hx Hu Hc.
apply nred_R with (phi := phi).
- exact Hx.
- exact Hu.
- exact Hc.
Qed.
Lemma Es_refl_any : forall t, Es t t.
Proof. intros. apply Es_refl. Qed.
Lemma Es_sym_any : forall t u, Es t u -> Es u t.
Proof. intros. apply Es_sym. exact H. Qed.
Lemma Es_trans_any : forall t u v, Es t u -> Es u v -> Es t v.
Proof. intros. apply Es_trans with (u := u); assumption. Qed.
Print Assumptions isubst_meta_in.
Print Assumptions isubst_meta_notin.
Print Assumptions Es_ctx_any.
Print Assumptions nred_R_intro.
Print Assumptions eqC_in_Es.
Print Assumptions Es_refl_any.
Print Assumptions Es_sym_any.
Print Assumptions Es_trans_any.
Lemma in_filter_neq : forall y x l,
In y (filter (fun z => negb (Nat.eqb z x)) l) -> In y l /\ y <> x.
Proof.
intros y x l H. apply filter_In in H. destruct H as [Hl Hp]. split; [exact Hl |].
apply Nat.eqb_neq. destruct (Nat.eqb y x) eqn:E; [| reflexivity].
simpl in Hp. discriminate Hp.
Qed.
Lemma filter_neq_in : forall y x l,
In y l -> y <> x -> In y (filter (fun z => negb (Nat.eqb z x)) l).
Proof.
intros y x l Hl Hne. apply filter_In. split; [exact Hl |].
apply Nat.eqb_neq in Hne. rewrite Hne. reflexivity.
Qed.
Lemma nplug_fv_mono : forall C t s,
incl (nfv t) (nfv s) -> incl (nfv (nplug C t)) (nfv (nplug C s)).
Proof.
induction C; intros t s Hincl; unfold incl in *; simpl in *.
- apply Hincl.
- intros y Hy. apply in_app_iff in Hy as [Hy|Hy].
+ apply in_app_iff. left. apply (IHC t s Hincl). exact Hy.
+ apply in_app_iff. right. exact Hy.
- intros y Hy. apply in_app_iff in Hy as [Hy|Hy].
+ apply in_app_iff. left. exact Hy.
+ apply in_app_iff. right. apply (IHC t s Hincl). exact Hy.
- intros y Hy. apply in_filter_neq in Hy as [Hy Hne].
apply filter_neq_in.
+ apply (IHC t s Hincl). exact Hy.
+ exact Hne.
- intros y Hy. apply in_app_iff in Hy as [Hy|Hy].
+ apply in_app_iff. left. apply in_filter_neq in Hy as [Hy Hne].
apply filter_neq_in.
* apply (IHC t s Hincl). exact Hy.
* exact Hne.
+ apply in_app_iff. right. exact Hy.
- intros y Hy. apply in_app_iff in Hy as [Hy|Hy].
+ apply in_app_iff. left. exact Hy.
+ apply in_app_iff. right. apply (IHC t s Hincl). exact Hy.
Qed.
Lemma nplug_fv_upper : forall C t s,
incl (nfv (nplug C t)) (nfv (nplug C s) ++ nfv t).
Proof.
induction C; intros t s; unfold incl in *; simpl in *.
- intros y Hy. apply in_app_iff. right. exact Hy.
- intros y Hy. apply in_app_iff in Hy as [Hy|Hy].
+ apply (IHC t s) in Hy. apply in_app_iff in Hy as [Hy|Hy].
* apply in_app_iff. left. apply in_app_iff. left. exact Hy.
* apply in_app_iff. right. exact Hy.
+ apply in_app_iff. left. apply in_app_iff. right. exact Hy.
- intros y Hy. apply in_app_iff in Hy as [Hy|Hy].
+ apply in_app_iff. left. apply in_app_iff. left. exact Hy.
+ apply (IHC t s) in Hy. apply in_app_iff in Hy as [Hy|Hy].
* apply in_app_iff. left. apply in_app_iff. right. exact Hy.
* apply in_app_iff. right. exact Hy.
- intros y Hy. apply in_filter_neq in Hy as [Hy Hne].
apply (IHC t s) in Hy. apply in_app_iff in Hy as [Hy|Hy].
+ apply in_app_iff. left. apply filter_neq_in; [exact Hy | exact Hne].
+ apply in_app_iff. right. exact Hy.
- intros y Hy. apply in_app_iff in Hy as [Hy|Hy].
+ apply in_filter_neq in Hy as [Hy Hne].
apply (IHC t s) in Hy. apply in_app_iff in Hy as [Hy|Hy].
* apply in_app_iff. left. apply in_app_iff. left. apply filter_neq_in; [exact Hy | exact Hne].
* apply in_app_iff. right. exact Hy.
+ apply in_app_iff. left. apply in_app_iff. right. exact Hy.
- intros y Hy. apply in_app_iff in Hy as [Hy|Hy].
+ apply in_app_iff. left. apply in_app_iff. left. exact Hy.
+ apply (IHC t s) in Hy. apply in_app_iff in Hy as [Hy|Hy].
* apply in_app_iff. left. apply in_app_iff. right. exact Hy.
* apply in_app_iff. right. exact Hy.
Qed.
Inductive nred_core : ntrm -> ntrm -> Prop :=
| ncore_B : forall t x u, nred_core (NApp (NLam x t) u) (NESub t x u)
| ncore_Gc : forall t x u, ~ In x (nfv t) -> nred_core (NESub t x u) t
| ncore_R : forall C x u phi,
In x phi -> (forall y, In y (nfv u) -> In y phi) -> cavoid C phi = true ->
nred_core (NESub (nplug C (NVar x)) x u) (NESub (nplug C u) x u)
| ncore_ctx : forall C t t', nred_core t t' -> nred_core (nplug C t) (nplug C t').
Lemma nred_core_fv : forall t t', nred_core t t' -> incl (nfv t') (nfv t).
Proof.
intros t t' H. induction H; simpl; unfold incl in *.
- intros y Hy. exact Hy.
- intros y Hy. apply in_app_iff. left.
apply filter_neq_in; [exact Hy | intro E; apply H; subst; exact Hy].
- intros y Hy. apply in_app_iff in Hy as [Hy|Hy].
+ apply in_filter_neq in Hy as [Hy Hne].
apply (nplug_fv_upper C u (NVar x)) in Hy. apply in_app_iff in Hy as [Hy|Hy].
* apply in_app_iff. left. apply filter_neq_in; [exact Hy | exact Hne].
* apply in_app_iff. right. exact Hy.
+ apply in_app_iff. right. exact Hy.
- apply nplug_fv_mono. exact IHnred_core.
Qed.
Print Assumptions nplug_fv_mono.
Print Assumptions nplug_fv_upper.
Print Assumptions nred_core_fv.
Lemma nplug_esub_fv : forall C X d x u y,
y <> x ->
In y (nfv (nplug C (NESub (NMVar X d) x u))) ->
In y (nfv (nplug C (NMVar X d))) \/ In y (nfv u).
Proof.
induction C; intros X d x u y Hne Hy; simpl in *.
- apply in_app_iff in Hy as [Hy|Hy].
+ left. apply in_filter_neq in Hy as [Hy _]. simpl. exact Hy.
+ right. exact Hy.
- apply in_app_iff in Hy as [Hy|Hy].
+ apply (IHC X d x u y Hne) in Hy. destruct Hy as [Hy|Hy].
* left. apply in_app_iff. left. exact Hy.
* right. exact Hy.
+ left. apply in_app_iff. right. exact Hy.
- apply in_app_iff in Hy as [Hy|Hy].
+ left. apply in_app_iff. left. exact Hy.
+ apply (IHC X d x u y Hne) in Hy. destruct Hy as [Hy|Hy].
* left. apply in_app_iff. right. exact Hy.
* right. exact Hy.
- apply in_filter_neq in Hy as [Hy Hz].
apply (IHC X d x u y Hne) in Hy. destruct Hy as [Hy|Hy].
+ left. apply filter_neq_in; [exact Hy | exact Hz].
+ right. exact Hy.
- apply in_app_iff in Hy as [Hy|Hy].
+ apply in_filter_neq in Hy as [Hy Hz].
apply (IHC X d x u y Hne) in Hy. destruct Hy as [Hy|Hy].
* left. apply in_app_iff. left. apply filter_neq_in; [exact Hy | exact Hz].
* right. exact Hy.
+ left. apply in_app_iff. right. exact Hy.
- apply in_app_iff in Hy as [Hy|Hy].
+ left. apply in_app_iff. left. exact Hy.
+ apply (IHC X d x u y Hne) in Hy. destruct Hy as [Hy|Hy].
* left. apply in_app_iff. right. exact Hy.
* right. exact Hy.
Qed.
Lemma nred_fv : forall t t', nred t t' -> incl (nfv t') (nfv t).
Proof.
intros t t' H. induction H; simpl; unfold incl in *.
- intros y Hy. exact Hy.
- intros y Hy. apply in_app_iff. left.
apply filter_neq_in; [exact Hy | intro E; apply H; subst; exact Hy].
- intros y Hy. apply in_app_iff in Hy as [Hy|Hy].
+ apply in_filter_neq in Hy as [Hy Hne].
apply (nplug_esub_fv C X d x u y Hne) in Hy. destruct Hy as [Hy|Hy].
* apply in_app_iff. left. apply filter_neq_in; [exact Hy | exact Hne].
* apply in_app_iff. right. exact Hy.
+ apply in_app_iff. right. exact Hy.
- intros y Hy. apply in_app_iff in Hy as [Hy|Hy].
+ apply in_filter_neq in Hy as [Hy Hne].
apply (nplug_fv_upper C u (NVar x)) in Hy. apply in_app_iff in Hy as [Hy|Hy].
* apply in_app_iff. left. apply filter_neq_in; [exact Hy | exact Hne].
* apply in_app_iff. right. exact Hy.
+ apply in_app_iff. right. exact Hy.
- apply nplug_fv_mono. exact IHnred.
Qed.
Print Assumptions nplug_esub_fv.
Print Assumptions nred_fv.
Lemma in_filter_neq_iff : forall z a l,
In z (filter (fun w => negb (Nat.eqb w a)) l) <-> In z l /\ z <> a.
Proof.
intros z a l. split.
- intro H. apply filter_In in H. destruct H as [Hl Hp]. split; [exact Hl |].
apply Nat.eqb_neq. destruct (Nat.eqb z a) eqn:E; [| reflexivity].
simpl in Hp. discriminate Hp.
- intros [Hl Hne]. apply filter_In. split; [exact Hl |].
apply Nat.eqb_neq in Hne. rewrite Hne. reflexivity.
Qed.
Lemma Es_fv_both : forall t u, Es t u ->
incl (nfv t) (nfv u) /\ incl (nfv u) (nfv t).
Proof.
apply Es_ind.
- intros t0. split; unfold incl; auto.
- intros t0 u0 H1 IH1. split.
+ apply (proj2 IH1).
+ apply (proj1 IH1).
- intros t0 u0 v0 H1 H2 IH1 IH2. split.
+ intros z Hz. apply (proj1 IH2). apply (proj1 H2). exact Hz.
+ intros z Hz. apply (proj2 H2). apply (proj2 IH2). exact Hz.
- intros t0 x0 u0 y0 v0 Hyx Hyu Hxv. split; unfold incl; intros z Hz; simpl in *;
apply in_app_iff in Hz as [Hz|Hz].
+ apply in_filter_neq_iff in Hz as [Hz Hy]. apply in_app_iff in Hz as [Hz|Hz].
* apply in_filter_neq_iff in Hz as [Hz Hx].
apply in_app_iff. left. apply in_filter_neq_iff. split; [| exact Hx].
apply in_app_iff. left. apply in_filter_neq_iff. split; [exact Hz | exact Hy].
* apply in_app_iff. right. exact Hz.
+ apply in_app_iff. left. apply in_filter_neq_iff. split; [| ].
* apply in_app_iff. right. exact Hz.
* intro E. apply Hxv. subst z. exact Hz.
+ apply in_filter_neq_iff in Hz as [Hz Hx]. apply in_app_iff in Hz as [Hz|Hz].
* apply in_filter_neq_iff in Hz as [Hz Hy].
apply in_app_iff. left. apply in_filter_neq_iff. split; [| exact Hy].
apply in_app_iff. left. apply in_filter_neq_iff. split; [exact Hz | exact Hx].
* apply in_app_iff. right. exact Hz.
+ apply in_app_iff. left. apply in_filter_neq_iff. split; [| ].
* apply in_app_iff. right. exact Hz.
* intro E. apply Hyu. subst z. exact Hz.
- intros C0 t0 t0' H1 IH1. split; apply nplug_fv_mono.
+ apply (proj1 IH1).
+ apply (proj2 IH1).
Qed.
Lemma Es_fv : forall t u, Es t u -> forall z, In z (nfv t) <-> In z (nfv u).
Proof.
intros t u H z. destruct (Es_fv_both t u H) as [Htu Hut]. split.
- apply Htu.
- apply Hut.
Qed.
Print Assumptions in_filter_neq_iff.
Print Assumptions Es_fv.